ServerPlugin InventoryClickEvent fehler (beim klick ausserhalb des Inventars)

Dieses Thema im Forum "Programmierung" wurde erstellt von Sprax2013, 23. September 2015.

  1. Sprax2013
    Offline

    Sprax2013

    Registriert seit:
    12. April 2014
    Beiträge:
    10
    Ort:
    127.0.0.1
    Minecraft:
    Sprax2013
    Hi Leute! Ich habe diese Frage bereits im Nitrado-Forum gestellt aber da konnte mir leider nicht geholfen werden:

    Ich code ein Plugin für Spigot 1.8.8. Dabei nutzte ich ein InventoryClickEvent. Nun bekomme ich einen Fehler in der Konsole, wenn ich ausserhalb des Inventars klicke. Das beeinträchtigt nicht das Plugin sieht aber nicht schön aus und nervt!

    Code (Java):
    1.  
    2.   @EventHandler
    3.    private void InventoryClick(InventoryClickEvent e) {
    4.      Player p = (Player)e.getWhoClicked();
    5.      
    6.      if(e.getClickedInventory().getName().equals("§eInv")) {
    7.        if(e.getClickedInventory().getItem(4).getType() == Material.RED_ROSE) {
    8.          e.setCancelled(true);
    9.          
    10.          if(e.getCurrentItem().hasItemMeta() && e.getCurrentItem().getItemMeta().hasDisplayName()) {
    11.            if(e.getCurrentItem().getItemMeta().getDisplayName() == "Lava") {
    12.              p.sendMessage("Lava Partikel");
    13.            }
    14.          }
    15.        }
    16.      }
    17.    }
    18.  

    Code (Text):
    1.  
    2. [17:48:21] [Server thread/ERROR]: Could not pass event InventoryClickEvent to CoinShop v1.0
    3. org.bukkit.event.EventException
    4.    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    5.    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    6.    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    7.    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    8.    at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1630) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    9.    at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    10.    at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    11.    at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    12.    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_51]
    13.    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_51]
    14.    at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    15.    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:714) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    16.    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    17.    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    18.    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    19.    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]
    20. Caused by: java.lang.NullPointerException
    21.    at me.sprax2013.coin_shop.Inventorys.Trails.InventoryClick(Trails.java:97) ~[?:?]
    22.    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_51]
    23.    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_51]
    24.    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_51]
    25.    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_51]
    26.    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-fdc1440-53fac9f]
    27.    ... 15 more
    28.  

    Ich hoffe einer weiß wie ich den Fehler beheben kann :)
     
    #1
  2. Victini151
    Online

    Victini151

    Auf den ersten Blick: Entweder das getClickedInventory oder das getCurrentItem ist null,
    wo liegt denn Zeile 97?

    Das das Nitradoforum nicht mit Kompetenz herhalten kann ist vielleicht nicht so verwunderlich, formulier dein Problem auf Englisch, und versuchs an "der Quelle des Übels", dem Spigot-Forum. Dort wirst du rauhe Antworten bekommen, aber am Ende ist das Problem mit einigen Rückschlägen für die Selbstachtung gelöst.
     
    #2
  3. Sprax2013
    Offline

    Sprax2013

    Registriert seit:
    12. April 2014
    Beiträge:
    10
    Ort:
    127.0.0.1
    Minecraft:
    Sprax2013
    Meine Zeile 97
    Code (Java):
    1.  
    2. if(e.getCurrentItem().hasItemMeta() && e.getCurrentItem().getItemMeta().hasDisplayName()) {
    3.  
     
    #3
  4. Victini151
    Online

    Victini151

    Mit ziemlicher Sicherheit ist bei der beschriebenen Vorgehensweise das "current Item" null, was du aber nicht überprüfst
     
    #4
  5. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Also wenn kein Inventar offen ist oder wenn du ein anderes Inventar offen hast?
    Wird nie true zurückgeben.

    Und ich denke victinis Antwort ist richtig.
     
    #5
  6. Victini151
    Online

    Victini151

    Exkurs: Dass es eine schlechte Praxis ist, ist unbestritten.
    Es kann aber durchaus true evaluieren, sofern beide Strings durch Literale besetzt sind, das ist sogar eine Vorraussetzung der Spezifikation der JVM, siehe http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.5

    TL;DR: Abändern auf equals() - wird einige potentielle Fehlerquellen ausmerzen.
     
    #6
  7. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Ich meinte ja auch, dass es nie true zurückgeben wird, wenn es so ist.
    Das es true zurück gibt, wenn auf beiden Seiten auf das gleiche Objekt verwiesen wird, ist mir durchaus bewusst.
     
    #7
  8. Sprax2013
    Offline

    Sprax2013

    Registriert seit:
    12. April 2014
    Beiträge:
    10
    Ort:
    127.0.0.1
    Minecraft:
    Sprax2013
    Danke für eure bisherige Hilfe aber das Problem ist nicht gelöst :/

    Das abfrage ob es null ist etc. habe ich bereits versucht aber hat nicht geholfen. Da ich keine Lust habe alles zu kopieren und die BB-Tags an das Forum anzupassen hägnge ich keinen Beitrag aus dem Nitrado-Forum an wo ich den Code/Fehler etc. gepostet habe ---> Mein Beitrag
     
    #8
  9. Victini151
    Online

    Victini151

    (Das nennt man Cross-Posten, an anderen Orten in unserem Internetz ist das sehr verpönt)

    In dem verlinkten Code sehe ich keine Überprüfung ob das CurrentInventory null ist.
     
    #9
  10. Sprax2013
    Offline

    Sprax2013

    Registriert seit:
    12. April 2014
    Beiträge:
    10
    Ort:
    127.0.0.1
    Minecraft:
    Sprax2013
    Ja da es nicht geholfen hat habe ich es wieder rasugenommen
     
    #10
  11. LukBukkit
    Offline

    LukBukkit

    Registriert seit:
    27. August 2013
    Beiträge:
    79
    Minecraft:
    LukBukkit
    Wenn du ein Inv offen hast und daneben klickst, ist das Inventar null, also (inv != null) als If-Abfrage.
     
    #11
  12. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Code (Text):
    1. if((e.getClickedInventory().getName() == "§eCoinShop §8| §bPets") && !(e.getClickedInventory() == null)) {
    Bitte vernünftig Java lernen...
    Wechsel beide seiten
    Und
    Code (Text):
    1. e.getClickedInventory().getName() == "§eCoinShop §8| §bPets")
    Statt == solltest du equals benutzen
     
    #12