Wie kann man abfragen ob ein Block von einem Spieler platziert wurde in Minecraft?
Hallo ich programmiere derzeit ein JobSystem und möchte abfragen wenn ein Spieler ein Block abbaut, ob dieser platziert wurde oder generiert wurde.
Danke schonmal im Voraus
2 Antworten
Dafür musst du beim onBlockPlaced-Event die Position des neu plazierten Blocks zu einer Liste hinzufügen.
Wenn ein Spieler dann einen Block abbaut (blockBreakEvent) schaust du, ob sich diese Position bereits in der Liste befindet.
Als Liste würde sich ein HashSet anbieten. Dann ist es egal wieviele Blöcke schon plaziert wurden, der Code läuft immer gleich schnell. Wenn du eine ArrayList nimmst leidet irgendwann die Server-Performance.
Und vergiss nicht, dass man Blöcke mit Pistons verschieben kann. Ggf. musst du auch hiergegegen einen Schutz einbauen.
Jo, das hast du richtig erkannt.
Das Set musst du natürlich abspeichern und beim Serverstart wieder einlesen.
Ob in eine Datenbank, Textdatei, oder irgendwas anderes, das liegt bei dir.
Hast du eine Idee wie man einen Schutz gegen Pistonverschiebungen einbauen kann? Und danke das mit der Liste hat funktioniert
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/block/BlockPistonExtendEvent.html
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/block/BlockPistonRetractEvent.html
Diese zwei Events brauchst du.
Mit getBlocks bekommst du eine Liste an Blöcken. Ich denke die Block-Positionen sind da noch die alten, also bevor gepusht wurde. Mit getdirection bekommst du die richtung des Pistons - jenachdem musst du 1 zu x,y oder z der Block-Positionen addieren/abziehen, um die neuen Block-Positionen zu erhalten, die du dann in dein set einfügst
Du kannst das ganze auch mit der YamlConfiguration abspeichern
Du kannst ein onBlockPlaced event benutzen (kannst du ja mal in der api documentation nachgucken) und dannden spieler mit .getPlayer() rausziehen. Hoffe es hilft dir!
Guck dir mal das an (blockBreakEvent) https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/block/BlockBreakEvent.html
Oder das (blockPlaceEvent) https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/block/BlockPlaceEvent.html
Und dann einfach das event aufrufen und mit .getPlayer() spieler entziehen.
Viel glück bei deinem projekt!
Was ist wenn der Server reloadet wird, wird dann nicht die Liste gelöscht?