Kdender
Premium
Dieser Bug ist meines Erachtens bereits länger bekannt und da ich etwas Ahnung vom Programmieren habe würde ich hier gerne einen Lösungsvorschlag nennen, der mir eingefallen ist:
BlockPlaceEvent:
public class OnBlockPlaceListener implements Listener {
@EventHandler
public void onBlockPlace(BlockPlaceEvent e) {
Block block = e.getBlock();
if (block.getType() == Material.CHEST) { //feststellen, dass eine Kiste platziert wurde
Block checkBlock;
Chest chest;
for (int i = -1; i <= 1; i += 2) {
checkBlock = block.getWorld().getBlockAt(block.getLocation().add(i, 0, 0)); //Block neben der platzierten Kiste getten
if (checkBlock instanceof Chest) { //ist auch eine Kiste?
chest = (Chest) checkBlock.getState();
Container container = (Container) chest.getInventory().getHolder(); //Inventarnamen der Kiste getten
if (container != null && container.getCustomName() != null &&
container.getCustomName().contains("Venditor")) { //Inventarname beeinhaltet "Ventitor"
e.setCancelled(true); //Block kann nicht platziert werden
e.getPlayer().sendMessage("§cDu kannst hier keine Kiste platzieren"); //Spieler wird eine Errornachricht gesendet
}
}
checkBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 0, i)); //das Ganze nochmal für die andere Koordinaten-Achse
if (checkBlock instanceof Chest) {
chest = (Chest) checkBlock.getState();
Container container = (Container) chest.getInventory().getHolder();
if (container != null && container.getCustomName() != null &&
container.getCustomName().contains("Venditor")) {
e.setCancelled(true);
e.getPlayer().sendMessage("§cDu kannst hier keine Kiste platzieren");
}
}
}
}
}
}
Hier noch ein viel schönerer intelliJ-Screenshot :3
Ich habe das ganze leider NICHT TESTEN können, da ich derzeit keinen Server zur Verfügung habe, es sollte so allerdings funktionieren ^^
Falls es dies nicht tut, bitte gerne kommentieren, warum und was man ausbessern müsste, da ich eher noch in der Lernphase bin und gerne dazulerne
LG Kdender | Chris
BlockPlaceEvent:
public class OnBlockPlaceListener implements Listener {
@EventHandler
public void onBlockPlace(BlockPlaceEvent e) {
Block block = e.getBlock();
if (block.getType() == Material.CHEST) { //feststellen, dass eine Kiste platziert wurde
Block checkBlock;
Chest chest;
for (int i = -1; i <= 1; i += 2) {
checkBlock = block.getWorld().getBlockAt(block.getLocation().add(i, 0, 0)); //Block neben der platzierten Kiste getten
if (checkBlock instanceof Chest) { //ist auch eine Kiste?
chest = (Chest) checkBlock.getState();
Container container = (Container) chest.getInventory().getHolder(); //Inventarnamen der Kiste getten
if (container != null && container.getCustomName() != null &&
container.getCustomName().contains("Venditor")) { //Inventarname beeinhaltet "Ventitor"
e.setCancelled(true); //Block kann nicht platziert werden
e.getPlayer().sendMessage("§cDu kannst hier keine Kiste platzieren"); //Spieler wird eine Errornachricht gesendet
}
}
checkBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 0, i)); //das Ganze nochmal für die andere Koordinaten-Achse
if (checkBlock instanceof Chest) {
chest = (Chest) checkBlock.getState();
Container container = (Container) chest.getInventory().getHolder();
if (container != null && container.getCustomName() != null &&
container.getCustomName().contains("Venditor")) {
e.setCancelled(true);
e.getPlayer().sendMessage("§cDu kannst hier keine Kiste platzieren");
}
}
}
}
}
}
Hier noch ein viel schönerer intelliJ-Screenshot :3
Ich habe das ganze leider NICHT TESTEN können, da ich derzeit keinen Server zur Verfügung habe, es sollte so allerdings funktionieren ^^
Falls es dies nicht tut, bitte gerne kommentieren, warum und was man ausbessern müsste, da ich eher noch in der Lernphase bin und gerne dazulerne
LG Kdender | Chris