[Problem] getWorld().getSign()

A big new update is now available, introducing biomes, caves and much more!
Latest hotfix: 0.7.0.3 (2024-02-21)
  • Hi @red51,


    habe ein Problem mit getWorld().event.getSign()!


    Ich folgendes versucht:

    Java
    public void onPlayerObjectInteraction(PlayerObjectInteractionEvent event) {
    Definitions.ObjectDefinition def = event.getObjectDefinition();
    if (def.isSign()) {
    try{
    sign = plugin.getWorld().getSign(event.getObjectInfoID());
    }catch (NullPointerException ex){
    player.sendTextMessage("Sign = null");
    }
    }
    }

    Dann habe ich ein Schild Aufgestellt und habe mit dem Schild interagiert!


    Es kommt immer NULL raus (obwohl ich ein neues Schild in der Welt (Singleplayer) platziert habe)

  • alles an Code?
    wo kommt def her?


    teste/ausgebe mal event.getObjectInfoID() einzeln


    ??Definitions.ObjectDefinition def = event.getObjectDefinition();??


    !!Always a good idea to check if sign isn't null...!!
    if(sign != null){...}

  • Definitions.ObjectDefinition def = event.getObjectDefinition();


    Hatte ich nur vergessen mit zu Koppieren! War bereits im Quelltext vorhanden.


    Bis zum if(sign != null){...} ist das Plugin gar nicht gekommen,
    da es bereits in der sign = getWorld().getSign() ein NULL-Fehler geschmissen hat.
    Deswegen hatte ich das try gemacht. Normal müssten beide Funktionieren!
    Beide Fragen eigentlich das Selbe ab.

  • Also wenn diese Zeile sign = plugin.getWorld().getSign(event.getObjectInfoID()); eine NPE wirft, dann wahrscheinlich weil die "plugin" Variable null ist. Wo genau wird sie gesetzt? Das Auslesen der Schilder (sowie die getWorld() Funktion) sollten eigentlich keine NPE verursachen. Auch event.getObjectInfoID() sollte niemals null zurückgeben, denn wenn keine InfoID gesetzt ist, würde -1 zurückgegeben.


    Es gibt aber wie ich festgestellt habe ein anderes Problem bei den Schildern, nämlich eine NPE die beim Aufruf von "getText()" geworfen wird - sofern noch kein Text für das Schild gesetzt wurde. Bei Schildern mit Text funktioniert es hingegen wie gewollt. Ich werde zu dem Problem in Kürze einen Hotfix rausbringen ;) Aber eigentlich sollte das mit deinem Problem nicht in Verbindung stehen 8|

  • Die Plugin Variable sollte eigendlich nicht null sein, da sie gleich am Anfang gesetzt wird! ?(
    Trotzdem schmeißt es mir in der Zeile 24 "NULL"!



    Es gibt aber wie ich festgestellt habe ein anderes Problem bei den Schildern, nämlich eine NPE die beim Aufruf von "getText()" geworfen wird - sofern noch kein Text für das Schild gesetzt wurde. Bei Schildern mit Text funktioniert es hingegen wie gewollt. Ich werde zu dem Problem in Kürze einen Hotfix rausbringen Aber eigentlich sollte das mit deinem Problem nicht in Verbindung stehen

    soll dass heißen, dass wenn jemanden in Zukunkft den Text schreibt und dann auf Erstellen gedrückt wird, dass man dann auch den Text auslesen kann? Weil mein Plugin sol ja so laufen, dass wenn man das Schild geschrieben hat und der Befehl ist richtig geschrieben, dann soll die erste Zeile grün werden! Wenn der Befehl falsch geschrieben ist, dann soll die Zeile rot werden! Geht halt erst, wenn der Text da steht.

  • soll dass heißen, dass wenn jemanden in Zukunkft den Text schreibt und dann auf Erstellen gedrückt wird, dass man dann auch den Text auslesen kann? Weil mein Plugin sol ja so laufen, dass wenn man das Schild geschrieben hat und der Befehl ist richtig geschrieben, dann soll die erste Zeile grün werden! Wenn der Befehl falsch geschrieben ist, dann soll die Zeile rot werden! Geht halt erst, wenn der Text da steht.

    Also den Text kann man ja jederzeit mit getText() auslesen (bzw. mit den jeweiligen line Funktionen). Aber wenn ein Schild ganz frisch platziert wurde (standardmäßig ja ohne Text), man dann aber die getText() Methode aufruft, wird momentan ungewollt eine NPE geworfen (da ja noch kein Text gesetzt ist). Das wird in Kürze behoben sodass diese NPE entfällt und stattdessen null zurückgegeben wird ;)

  • Hi @red51,
    Ich habe jetzt mal mit


    player.sendTextMessage("Line 1: " + sign.getLineText(0))
    player.sendTextMessage("Line 2: " + sign.getLineText(1))
    player.sendTextMessage("Line 3: " + sign.getLineText(2))
    player.sendTextMessage("Line 3: " + sign.getLineText(3))


    die Werte eine Schildes ausglesen!


    Schild:
    Zeile 1:[Heal]
    Zeile 2: 20
    Zeile 3: admin
    Zeile 4: (leer)


    Folgendes Habe ich im Chat erhalten:


    Zeile 1: [Heal]
    Zeile 2: 20
    Zeile 3: leer (IST FALSCH)
    Zeile 4: leer


    Aber der Zeile 3 wird nicht mehr erkannt. Ich habe es schon versucht in eine Variable zu tun. Kommt aber auch das gleiche Raus.
    Das Schild hat er erkannt. Nur ab Zeile 3 kommt nichts mehr!


    Habe das gleich mit Zeile 4 versucht! Kommt auch nicht!

  • Hmm... also das Problem scheint zu sein, dass sich das Schild nicht aktualisiert beim Auslesen, d.h. es wird immernoch der alte Text angezeigt. Wenn du die Welt neu lädst, müssten auch die restlichen Zeilen angezeigt werden...
    Aber das ist natürlich definitiv nicht gewollt, diese Probleme werden voraussichtlich morgen in einem Hotfix (zusammen mit den restlichen Problemen bei getText()) endgültig behoben :)

  • Hmm... also das Problem scheint zu sein, dass sich das Schild nicht aktualisiert beim Auslesen, d.h. es wird immernoch der alte Text angezeigt. Wenn du die Welt neu lädst, müssten auch die restlichen Zeilen angezeigt werden...
    Aber das ist natürlich definitiv nicht gewollt, diese Probleme werden voraussichtlich morgen in einem Hotfix (zusammen mit den restlichen Problemen bei getText()) endgültig behoben :)

    Super! :thumbup:

Participate now!

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