ServerPlugin Problem mit /ci (/clearinventory)

Dieses Thema im Forum "Programmierung" wurde erstellt von Assassins88, 19. März 2015.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Assassins88
    Offline

    Assassins88

    Registriert seit:
    21. August 2011
    Beiträge:
    3
    Heyho,

    ich hab ein Problem mit meinem Code für einen /clearinventory Befehl.

    Rein weg von der Logik her, sollte er funktionieren aber das tut er nicht und ich kann den Fehler nicht finden. Vllt könnt ihr mir helfen.

    Code (Text):
    1.  
    2.  
    3.         if(cmd.getName().equalsIgnoreCase("clearinventory")){
    4.             Player tP = getServer().getPlayerExact(args[0]);
    5.             if(p.hasPermission("cce.ci.other")){
    6.                 if(args.length == 1){
    7.                     if(tP.isOnline()){
    8.                         tP.getInventory().clear();
    9.                         tP.sendMessage(ChatColor.GOLD + name + ChatColor.GREEN + " Dein Inventar wurde von " + ChatColor.DARK_RED + p.getDisplayName() + ChatColor.GREEN + " gelöscht.");
    10.                         return true;
    11.                     } else {
    12.                         p.sendMessage(ChatColor.GOLD + name + ChatColor.RED + "Der Spieler " + ChatColor.GOLD + tP.getDisplayName() + ChatColor.RED + " ist nicht online!");
    13.                     }
    14.                 } else {
    15.                     if(p.hasPermission("cce.ci.other")){
    16.                         if(args.length == 0){
    17.                             p.getInventory().clear();
    18.                             p.sendMessage(ChatColor.GOLD + name + ChatColor.GREEN + " Dein Inventar wurde gelöscht.");
    19.                         }
    20.                     } else {
    21.                         p.sendMessage(ChatColor.GOLD + name + ChatColor.RED + " Dir fehlen die Rechte wür diesen Befehl!");
    22.                     }
    23.                 }
    24.             } else {
    25.                 p.sendMessage(ChatColor.GOLD + name + ChatColor.RED + " Dir fehlen die Rechte wür diesen Befehl!");
    26.             }
    27.         }
    28.  
    Fehler vom Server:

    Code (Text):
    1.  
    2.  
    3. [12:01:36] [Server thread/INFO]: Assassins88 issued server command: /ci
    4. [12:01:36] [Server thread/ERROR]: null
    5. org.bukkit.command.CommandException: Unhandled exception executing command 'ci' in plugin CCEssentials v1.0 alpha
    6.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    7.     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    8.     at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    9.     at net.minecraft.server.v1_7_R4.PlayerConnection.handleCommand(PlayerConnection.java:957) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    10.     at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:818) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    11.     at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    12.     at net.minecraft.server.v1_7_R4.PacketPlayInChat.handle(PacketPlayInChat.java:47) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    13.     at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    14.     at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    15.     at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    16.     at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    17.     at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    18.     at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    19.     at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    20. Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    21.     at de.cc.assassins88.CCEssentials.CCEssentials.onCommand(CCEssentials.java:359) ~[?:?]
    22.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    23.     ... 13 more
    24.  
    25.  
    Wenn ich den Befehl /ci <player> eingebe und der Spieler online ist funktioniert er. Bei /ci oder dem Fall, dass der Spieler nicht online ist kommt der Fehler.

    Was ist falsch?

    greez Assassins88
     
    #1
  2. SilberRegen
    Offline

    SilberRegen

    Registriert seit:
    23. März 2012
    Beiträge:
    572
    Minecraft:
    SilberRegen
    Ich habe keine Ahnung von programmieren, aber mein Developer hat mir mal irgendwann nebenbei erklärt, dass der Zugriff auf Inventare von Offlinespielern nicht geht (oder nur schlecht und er war zu faul das zu machen, wer weiß :p).
    Die Plugins, die bei uns mit Spielerinventaren rumhantieren, funktionieren auf jeden Fall alle nur mit Onlineplayern.
     
    #2
  3. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Mach mal statt "if(tP.isOnline()) {" , "if(tP != null) {", dass sollte passen.

    mfg YellowPhoenix18
     
    #3
    Assassins88 gefällt das.
  4. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    663
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Bevor du das machst:
    Code (Text):
    1. Player tP = getServer().getPlayerExact(args[0]);
    solltest du erstmal abfragen ob diese Argumente existieren.
    Der fehler ist nämlich das etwas null ist. und genau daran könnte es liegen
     
    #4
  5. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Hmm,ja es ist ein Fehler in Zeile 359,die brauchen wir.
    @JTK222: Da kann nichts aus diesem Code null sein,ausser das tP.isOnline()
     
    #5
  6. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    663
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    @Yellowphoenix18
    Doch kann es er benutzt eine Variable die vielleicht nicht existiert um eine andere zu deklarieren.
     
    #6
  7. Assassins88
    Offline

    Assassins88

    Registriert seit:
    21. August 2011
    Beiträge:
    3
    Hallo,

    danke für eure schnellen und vielen Antworten.

    @Yellowphoenix18 Das ist Zeile 359: Player tP = getServer().getPlayerExact(args[0]);
     
    #7
  8. pasce1998
    Offline

    pasce1998

    Registriert seit:
    20. April 2014
    Beiträge:
    21
    Ort:
    Hessen
    Minecraft:
    pasce1998
    Bevor du aus dem ersten Argument einen Spieler machst musst du abfragen, ob es das Argument überhaupt gibt.
    Fakt ist: Du fragst zwar ab, ob die Argumentenlänge 1 ist, benutzt das erste Argument aber schon vor der Abfrage => Es wird ein Fehler geworfen.
    Du musst lediglich die Methode, den Spieler zu bekommem, nach der Abfrage von der Argumentenlänge aufrufen.

    P.S. Du hast da einen Fehler in deinen Ausgabetexten: Es heißt "für" und nicht "wür".
     
    #8
    Assassins88 und MrPyro13 gefällt das.
  9. Assassins88
    Offline

    Assassins88

    Registriert seit:
    21. August 2011
    Beiträge:
    3
    @pasce1998 Danke dir jetzt geht /ci jetzt.

    @Yellowphoenix18 Das mit tP != null hat funktioniert...

    Und danke für den Hinweis. Da hat der eine Finger geschlafen und ein anderer hat übernommen. :p

    Thema kann geschlossen werden. Danke an alle.

    greez

    Assassins88
     
    #9
Status des Themas:
Es sind keine weiteren Antworten möglich.