Event (listener) geht nicht (Minecraft Plugin)?
Hallo, undzwar, ich hab so nen Plugin geschrieben mit einem Block Event, als ich es (auf einem LocalHost) getestet hab, hat alles funktioniert außer das Event, bei einem anderen Plugin das ich gemacht hab haben die Events auch nicht funktioniert. Vielleicht liegt es ja auch daran das es ein LocalHost Server ist?
2 Antworten
Du musst deine onEvent Methode mit @EventHandler annotieren. Also wie bei dem @Override
Schau Mal hier https://www.spigotmc.org/wiki/using-the-event-api/ das sollte eigentlich ganz gut erklären wie das aussehen sollte. Hast du auch EventHandler importiert? Sollte dir IntelliJ als lösung für das Problem auch selbst vorschlagen
onEnable und onDisable gehören an den Anfang des Plugins.
Listener gehören in eine eigene Klasse.
Events gehören in eine eigene Klasse.
onEnable steht in der Regel am Anfang, onDisable eher am Ende. Der Listener ist ein einer inneren Klasse. Das funktioniert genauso gut wie in einer extra Datei. Nach OOP Standard macht es hier natürlich mehr sinn in einer extra Klasse, ist aber nicht notwendig und behebt das Problem nicht.
Der Listener ist doch in einer eigenen Klasse, und ob onEnable und onDisable am Anfang oder Ende stehen hat auch kein unterschied gemacht
Alles ist in der „Feuerschwert.java“ Datei. Du hast zwar den Listener in eine “eigene“ Klasse gesetzt, aber damit eine Klasse funktioniert muss der Dateiname mit der Klasse über einstimmen:
GuteFrageErklärung.java:
Public class GuteFrageErklärung {
}
.
GuteFrageErkärungListener.java:
Public class GuteFrageErkärungListener {
}
Und das mit der onEnable und onDisable Funktion macht man einfach an den Anfang.
Die Reihenfolge der Methoden spielt überhaupt keine Rolle. Es ist völlig egal, ob die Methoden am Anfang oder am Ende stehen.
damit eine Klasse funktioniert muss der Dateiname mit der Klasse über einstimmen:
Natürlich können - wie im obigen Code - Klassen innerhalb von Klassen deklariert und verwendet werden. Es wäre hier auch gar keine Klasse nötig, ein Lambda würde genauso funktionieren.
Diese "von Experten bestätigte" Antwort ist schlicht falsch, wie man mit grundlegendem Java-Wissen eigentlich sofort sehen sollte.
Die Reihenfolge der Methoden in einer Klasse ist irrelevant. Ob etwas in einer freistehenden Klasse, einer inneren Klasse oder ggf. mit einem Lambda gelöst wird: funktional nötig ist einzig, dass der Typ (sprich, das Interface) korrekt ist. Wäre das nicht so, würde es nicht durch den Compiler kommen. Deswegen haben wir eine statisch typisierte Sprache.
Die Antwort von chriss1967 ist die richtige.
Da steht das es das Symbol nicht finden kann, aber ich kenns auch mit dem @EventHandler, hab garnicht bemerkt das es fehlt, Danke