Spiele jetzt mit auf

Aktuelles

Skyblock Lösungsvorschlag für den Bug: Venditoren mit Kisten verbinden

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
upload_2019-7-27_16-2-29.png


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
 
Oben