ServerPlugin NullPointerException bei OfflinePlayer

Dieses Thema im Forum "Programmierung" wurde erstellt von Keksi1996, 12. September 2015.

  1. Keksi1996
    Offline

    Keksi1996

    Registriert seit:
    25. März 2012
    Beiträge:
    11
    Ort:
    Herdecke
    Minecraft:
    Derakar
    Heyho,
    ich habe da mal eine Frage und zwar Warum bekomme ich immer einen Internal Error (NullPointerException) wenn ich einen Befehl habe und einen OfflinePlayer angebe. Sprich meine Befehl ist jetzt /tpa <Spieler>. Wenn ich jetzt /tpa Derakar eingebe (Ich selbst) funktioniert es und wenn ich dann /tpa ABCD eingebe bekomme ich einen Error und nicht die Message das der Spieler nicht Online ist.

    EDIT: Und dann möchte ich noch, dass man /tpa annehmen und /tpa ablehnen machen kann und das Funktioniert ebenfals nicht (Test unten im Code)

    Hier mein Code:
    Code (Text):
    1.  
    2. public class COMMAND_TPA implements CommandExecutor{
    3.  
    4.     private Plugin plugin;
    5.  
    6.     public COMMAND_TPA(Plugin plugin) {
    7.         this.plugin = plugin;
    8.     }
    9.  
    10.     HashMap<Player, Player> teleport = new HashMap<Player, Player>();
    11.  
    12.     @Override
    13.     public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
    14.         Player p = (Player)s;
    15.         if(cmd.getName().equalsIgnoreCase("tpa")){
    16.             if(p instanceof Player){
    17.                 if(args.length == 0){
    18.                     p.sendMessage("§cDu musst einen Spieler eingeben. §6/tpa <Spieler>");
    19.                     return true;
    20.                 } else if(args.length == 1){
    21.                     Player op = Bukkit.getPlayer(args[0]);
    22.                     if(op.isOnline()){
    23.                         if(!teleport.containsValue(p)){
    24.                             teleport.put(op, p);
    25.                             p.sendMessage("§7Die Anfrage wurde versendet.");
    26.                             op.sendMessage("§6" + p.getName() + "§7 hat dir eine Teleport Anfrage gesendet.");
    27.                             op.sendMessage("§7Annehmen: §6/tpa annehmen §7| Ablehnen: §6/tpa ablehnen");
    28.                          
    29.                             Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
    30.                              
    31.                                 @Override
    32.                                 public void run() {
    33.                                     if(teleport.containsValue(p)){
    34.                                         teleport.remove(op);
    35.                                         p.sendMessage("§6" + op.getName() + "§7 hat deine Anfrage ignoriert.");
    36.                                         op.sendMessage("§7Die Anfrage von §6" + p.getName() + "§7 ist abgelaufen.");
    37.                                     }
    38.                                  
    39.                                 }
    40.                             }, 20*30);
    41.                         } else {
    42.                             p.sendMessage("§cDu hast bereits eine offene Anfrage.");
    43.                         }
    44.                     } else {
    45.                         p.sendMessage("§cDer Spieler ist nicht Online.");
    46.                     }
    47.                  
    48.                     if(args[0].equalsIgnoreCase("annehmen")){
    49.                         p.sendMessage("Test");
    50.                     }
    51.                 }
    52.             } else {
    53.                 ConsoleCommandSender cs = (ConsoleCommandSender)s;
    54.                 cs.sendMessage("§cDieser Befehl kann nur von Spielern ausgeführt werden.");
    55.             }
    56.             return true;
    57.         }
    58.      
    59.         return false;
    60.     }
    61.  
    62. }
    63.  
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    1: lern Java
    2: Fehlercode würde weiterhelfen
    3: p und op sind nicht final
     
    #2
  3. Victini151
    Offline

    Victini151

    Sofern der Spieler nicht online ist, kann Bukkit#getPlayer() gut und gerne null zurück geben. Somit wäre es in voller Länge: if op != null && op.isOnline()
     
    #3
  4. Keksi1996
    Offline

    Keksi1996

    Registriert seit:
    25. März 2012
    Beiträge:
    11
    Ort:
    Herdecke
    Minecraft:
    Derakar
    Alles klar sofern kapiert nur jetzt noch zu dem annehmen und ablehnen, weil dort kommt ja jetzt die MSG ("Test") und es wird ja abgefragt ob der Spieler annehmen Online ist.
     
    #4
  5. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Stell dir vor du bist der PC, der das Plugin ausführen soll. Als command wird /tpa annehmen eingegeben. Jetzt geh einfach mal den Code lang und guck wo er hinführt....
     
    #5
  6. Keksi1996
    Offline

    Keksi1996

    Registriert seit:
    25. März 2012
    Beiträge:
    11
    Ort:
    Herdecke
    Minecraft:
    Derakar
    Jaa das ist mir ja schon bewusst, dass der "dumme" PC nur den Code liest von oben nach unten (ggf. unterbrochen wird von return oder continue) deswegen frage ich ja welche Möglichkeit besteht, damit man das umgehen kann.
    Und ich möchte auch keine Fertigen Code sondern eine Hilfestellung wie man das machen kann. (weil meine Lehrerin mir mal gesagt hat, dass es mehrere gibt ein Programm zu schreiben)
     
    #6
  7. Lapura
    Offline

    Lapura

    Registriert seit:
    28. Dezember 2014
    Beiträge:
    59
    #Derakar, ich empfehle dir mal das Buch "Java ist auch eine Insel" dann wirst du mal Plan haben.
    LG, #Lukas aka. Lukas_no1_2000 aka. Lapura aka. Quantumix_
     
    #7