Event (listener) geht nicht (Minecraft Plugin)?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du musst deine onEvent Methode mit @EventHandler annotieren. Also wie bei dem @Override


Erdbeeralien 
Beitragsersteller
 02.08.2024, 11:24

Da steht das es das Symbol nicht finden kann, aber ich kenns auch mit dem @EventHandler, hab garnicht bemerkt das es fehlt, Danke

Von Experte CaesarMC bestätigt

onEnable und onDisable gehören an den Anfang des Plugins.

Listener gehören in eine eigene Klasse.

Events gehören in eine eigene Klasse.

Woher ich das weiß:eigene Erfahrung

chriss1967  02.08.2024, 11:23

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.

Erdbeeralien 
Beitragsersteller
 02.08.2024, 09:46

Der Listener ist doch in einer eigenen Klasse, und ob onEnable und onDisable am Anfang oder Ende stehen hat auch kein unterschied gemacht

MCJava  02.08.2024, 10:55
@Erdbeeralien

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.

jo135  02.08.2024, 11:51
@MCJava

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.

jo135  02.08.2024, 11:54

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.