Wie kann man abfragen ob ein Block von einem Spieler platziert wurde in Minecraft?

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.

Woher ich das weiß:eigene Erfahrung – Minecraft-Experte. Aktiver Spieler seit 2011.
Niemander 
Fragesteller
 25.06.2021, 20:19

Was ist wenn der Server reloadet wird, wird dann nicht die Liste gelöscht?

0
MrAmazing2  25.06.2021, 20:24
@Niemander

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.

0
Niemander 
Fragesteller
 26.06.2021, 09:39
@MrAmazing2

Hast du eine Idee wie man einen Schutz gegen Pistonverschiebungen einbauen kann? Und danke das mit der Liste hat funktioniert

0
MrAmazing2  26.06.2021, 12:03
@Niemander

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

0

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!

Woher ich das weiß:eigene Erfahrung