Wie kann ich das Zertrampeln von Ackerboden mit Spigot verhindern?
Ich habe schon im Internet nach der Lösung gesucht, aber nur Methoden mit dem PlayerInteractEvent gefunden, ich möchte aber vor allem das Zertrampeln durch Mobs verhindern. PS: Das EntityInterractEvent bietet keine getAction Methode, weshalb dies auch keine Lösung ist.
Lg
2 Antworten

Das Event, das du suchst, sollte das EntityBlockFormEvent (https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/block/EntityBlockFormEvent.html) sein. Leider bin ich mir auch nicht ganz sicher, aber es klingt so wie das, was du suchst.

Habe es jetzt mit dieser nicht so schönen, aber funktionierenden Alternative gelöst:
@EventHandler
public void onEntityInteract(EntityInteractEvent ev) {
if(ev.getBlock().getType() == Material.FARMLAND) {
ev.setCancelled(true);
}
}

und wider meiner Erwartungen können Villager immer noch Ackerbau betreiben.

Du solltest auf jeden Fall noch überprüfen, ob der Block nicht null ist, das InteractEvent wird sehr oft ausgeführt.
Wenn du Villager blockieren willst, solltest du vielleicht beim EntityChangeBlockEvent schauen oder im Pathfinding von den Villager rumfuschen.

Du suchst das PlayerInteractEvent es gibt eine Action die nennt sich Physical das (Bin mir grad net sicher ob es auch ein EntityInteractEvent gibt aber damit sollte es auch gehen) heißt es würde dann so aussehen:
@EventHandler
public void onInteract(PlayerInteractEvent event) {
if(event.getAction()==Action.Physical)event.setCancelled(true);
}
Habe ich mir zuerst auch gedacht, geht aber nicht.