[Java] (Minecraft Plugin) Wie kann ich alle 2 Sekunden die Eigenschaften eines bestimmten Blockes abfragen?

2 Antworten

Du kannst den Scheduler von Spigot verwenden, dir alle zwei sekunden den Block holen und überprüfen.

Suberer wäre es jedoch auf ein entsprechendes Event zu horchen, v.a. da das ressourcenschonender wäre (Wo es doch schon das schöne SignChangeEvent gibt).


Felix193 
Fragesteller
 25.01.2016, 14:52

Hi, das SignChangeEvent kann ich nicht nutzen, da das Schild von einem anderen Plugin editiert wird und es dies nicht erkennt.... Das hatte ich bereits versucht.

Die Option mit dem Scheduler habe ich gewählt. Leider funktioniert da etwas nicht. Wäre Nett, wenn Du mir helfen könntest:

http://pastebin.com/UZJ6hyc2

0
johdl  25.01.2016, 15:55
@Felix193

1. Überprüfe vorher, ob der Block wirklich ein Schild ist und speicher es in eine Variable ab, sonst kann das böse Fehler geben.

2. Einfach nach dem ändern des Texts noch ein sign.update() hinterherhauen, dann sollte es funktionieren.

0
johdl  25.01.2016, 18:47
@Felix193

1. update() wird klein geschrieben

2. speicher den block als sign ab, nicht als block

0

Erstelle doch in der onEnable Methode einen Scheduler, der dann alle 2 sek wiederholt wird.

LG Atomsi


Felix193 
Fragesteller
 25.01.2016, 14:49

Hallo, vielen Dank für deinen Lösungsansatz. Durch eine Rechereche konnte ich etwas finden und eine mittelmäßige Dokumentation. Leider funktioniert die Abfrage immer noch nicht, wäre gut, wenn Du mal drüberschaust. Das Plugin wird erfolgreich geladen und der Befehl unten geht auch! ;)

Hier der Link zum Quellcode:

http://pastebin.com/UZJ6hyc2

0
Atomtoasty  25.01.2016, 19:47

Ja... Das Problem könnte dadurch ausgelöst werden, dass während das Plugin diese Anfrage durchführt, für den Server noch gar keine Welt existiert, da diese ziemlich am Schluss geladen wird... Eine Lösung wäre den Scheduler an ein anderes Event zu knüpfen, zB. Das PlayerJoinEvent. Das kann man dann so modifizieren, dass trotzdem der Scheduler nur einmal läuft, aber dann halt erst gestartet wird, sobald ein Spieler joint. (headless Client?)

Hoffe ich konnte helfen.
Wenn du noch Fragen hast, können wir auch gerne mal über Skype oder TS labern.

LG Atomsi

0