Event isCancelled() in Untiy

  • Hallo red51 ,


    ich versuche gerade ein eignes Event zu schreiben, das man auch Abbrechen kann.

    Nun weiß ich aber nicht, wo man nun abfragt, das das Event Abgebrochen ist, da du ja mal gesagt hast, dass Event, sobald sie abgearbeitet worden sind, verschwinden.


    Ich bin gerade dabei iConomy für Untiy neu zu schreiben.

    Mit folgender Methode soll einem Spieler das Cash geändert werden und dabei ein benutzerdefiniertes Event ausgeführt werden:


    Das ist das Event:

  • ich versuche gerade ein eignes Event zu schreiben, das man auch Abbrechen kann.

    Nun weiß ich aber nicht, wo man nun abfragt, das das Event Abgebrochen ist, da du ja mal gesagt hast, dass Event, sobald sie abgearbeitet worden sind, verschwinden.

    Das kannst du grundsätzlich so machen ;) Auch in der neuen Version dürfte das Konzept von eigenen Events weiterhin funktionieren. Zwar hat die "Event" Klasse dort noch ein paar zusätzliche Funktionen und Variablen, die in dem Fall aber irrelevant sind.


    Das "Verschwinden" bzw. "Ungültigwerden" von Events betrifft aber in der neuen Version nur Events, die vom Spiel ausgelöst werden (da existiert nämlich auf nativer Gegenseite auch das Event mit den entsprechenden Daten, wird aber nach Abarbeiten des Event-Aufrufs gelöscht, wodurch dann das Java-Event ungültig wird). Eigene selbstgeschriebene Events sind davon aber nicht betroffen (da diese nur auf Java Seite bestehen), d.h. die kannst du in der neuen Version genauso verwenden wie in der Java Version.


    Mit dem "Abbrechen" (also "Cancellable" Events) hängt das aber nicht zusammen: Die Events, die abgebrochen werden (durch einen Aufruf von "setCancelled(true)"), werden auf nativer Seite nicht weiter bearbeitet. Wenn zB das "PlayerDamageEvent" ausgelöst wird und mit einem Aufruf von "setCancelled(true)" abgebrochen wird, dann wird der Spieler auch keinen Schaden bekommen (also dann wird auf Spielseite so getan, als wäre das Event nie ausgelöst worden).


    Bei selbstgeschriebenen Events ist das mit dem Abbrechen nur für einen selber relevant. Wie gesagt, das Spiel selbst weiß quasi nichts von selbstgeschriebenen Events (da sie auf nativer bzw. Spielseite nicht existieren), d.h. wenn du es mit "setCancelled(true)" abbrichst, dann ist das nur relevant, wenn du das selber irgendwo prüfst (also via "isCancelled()"). Du hast hier volle Kontrolle ^^


    if (!evt.isCancelled()){ //<---- Ist das so richtig? Oder kommt bei "evt" NULL raus?

    Das ist so korrekt. Wenn irgendein Plugin bzw. Listener, welches auf dieses Event lauscht, den Aufruf abgebrochen hat (mit "setCancelled(true)"), dann wirst du das an der Stelle prüfen können (also isCancelled()" wird in dem Fall true zurückgeben).


    In diesem Beispiel ist "evt" übrigens niemals null, da du es ja kurz vorher zugewiesen hast (immer, wenn du eine Variable mit "new" zuweist, dann wird sie grundsätzlich niemals null sein danach - es sei denn, du weist irgendwann explizit "null" zu).

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!