2017-12-04 2 views
0

Ich habe versucht, nicht auf das Posting in den Foren zurückgreifen, aber alles, was ich getan habe, wird dies nicht funktionieren. Was ich versuche zu tun ist, wenn eine ArrayList keinen Spielernamen enthält, dann fügt sie sie der ArrayList hinzu, aber sie überspringt das und entfernt sie nur aus der Liste, zu der sie nie hinzugefügt wurden. Das ultimative Ziel aus diesem Plugin ist, wenn sie im Gott-Modus sind, können sie nicht verletzt werden. Befehlsklasse:If-Anweisung wird nicht durch meine Array-Liste überprüfen

public static List<String> playerList = new ArrayList<String>(); 

    @Override 
    public boolean onCommand(CommandSender sender, Command cmd, String str, String[] args) { 
     Player player = (Player) sender; 
     String p = player.getName(); 
     List<String> isGod = new ArrayList<String>(); 

     if (cmd.getName().equalsIgnoreCase("god") && sender instanceof Player) { 
      if (!isGod.contains(p)) { 
       isGod.add(p); 
       playerList.add(p); 
       player.sendMessage(ChatColor.GREEN + "Godmode is enabled"); 
       return true; 
      } else { 
       isGod.remove(p); 
       playerList.remove(p); 
       player.sendMessage(ChatColor.GREEN + "Godmode is disabled"); 
       return true; 
      } 
     } 
     return true; 
    } 
} 

Listener Klasse:

@EventHandler 
    public void isDamaged(EntityDamageEvent e) { 
     String player = e.getEntity().getName(); 
     if (playerList.contains(player)) { 
      e.setCancelled(true); 
     } 
    } 
} 
+1

Die Überprüfung auf 'isGod' Einträge kann in Ihrem Fall niemals wahr sein. Sie erstellen bei jedem Aufruf der Methode eine neue Liste, sodass diese immer leer ist. Probiere stattdessen 'playerList.contains (p)'. Warum hast du überhaupt die isGod-Liste? Benutzt du es auch woanders? – dly

Antwort

0

Als tgl sagte ja, jedes Mal Befehl neue leere Liste erstellen wird ausgeführt. Sie müssen Ihre Liste als globale statische Klasse in Ihrer Klasse initialisieren, um sicherzustellen, dass dies nur eine Liste für alle Operationen ist.

public static List<String> isGod = new ArrayList<>();    // <== HERE 
public static List<String> playerList = new ArrayList<String>(); 

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String str, String[] args) { 
    Player player = (Player) sender; 
    String p = player.getName(); 

    if (cmd.getName().equalsIgnoreCase("god") && sender instanceof Player) { 
     if (!isGod.contains(p)) { 
      isGod.add(p); 
      playerList.add(p); 
      player.sendMessage(ChatColor.GREEN + "Godmode is enabled"); 
      return true; 
     } else { 
      isGod.remove(p); 
      playerList.remove(p); 
      player.sendMessage(ChatColor.GREEN + "Godmode is disabled"); 
      return true; 
     } 
    } 
    return true; 
} 
Verwandte Themen