2016-08-12 3 views
-1

Ich begann mit der Entwicklung von Plugin für meinen Server. Ich machte Hauptklassen- und Pleh-Befehle, aber alle stoppten, als ich mit dem Befehl gamemode anfing. Ich meine, es funktioniert ohne Fehler, gibt aber keine Ausgabe. Es könnte ein einfacher Fehler sein, aber ich kann es nicht finden.BUKKIT - MINECRAFT Einstellung Gamemode Ausgabe

Hier ist mein Code:

import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Gamemode implements CommandExecutor { 

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 

     if (!(sender instanceof Player)) { 
      sender.sendMessage(ChatColor.RED + "Haha nice try not happening today."); 
      return true; 
     } 
     Player p = (Player) sender; 
     if (cmd.getName().equalsIgnoreCase("gm")) { 
      if ((!p.hasPermission("sutils.*")) && 
        (!p.hasPermission("sutils.gamemode"))) { 
       p.sendMessage(ChatColor.RED + "Sorry no permission."); 
       return true; 
      } 
      if (args.equals("0")) { 
       p.setGameMode(GameMode.SURVIVAL); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Survival"); 
      } 

      if (args.equals("1")) { 
       p.setGameMode(GameMode.CREATIVE); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Creative"); 
      } 

      if (args.equals("2")) { 
       p.setGameMode(GameMode.ADVENTURE); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Adventure"); 
      } 

      if (args.equals("3")) { 
       p.setGameMode(GameMode.SPECTATOR); 
       p.sendMessage(ChatColor.RED + "Gamemode set to Spectator"); 
      } 
      return true; 

     } 
     return true; 
    } 

} 

Eigentlich ist das einzige, was passiert, ist, wenn ich das Kommando in der Konsole geben Sie es mir nicht einen Spieler msg sendet aber als Spieler Nö funktioniert nicht.

Antwort

0

Die Situation, die Sie hier haben, ist die folgende: 'Args' ist keine einzelne Zeichenfolge, sondern ein Array von Zeichenfolgen. Das heißt, Sie können nicht überprüfen, ob ein Array von Zeichenfolgen gleich einer Zeichenfolge ist.

Also, was Sie tun müssen, ist:

  • Überprüfen Sie, ob args nicht null
  • Überprüfen Sie, ob args [0] .equals ("0") oder wenn args [1] .equals (“ 1 ") ...

Mit args [0] versuchen wir, auf das Argument an Position 0 des Befehls zuzugreifen. Etwas wie folgt aus:

/gm 1

  • GM ist die commandlabel Ihrer Befehl

  • 1 Argument 0 von Ihren Befehl

Dafür können wir tun, die folgenden:

if (args == null) { 
    p.sendMessage(ChatColor.RED + "You must use an arg!"); 
    return false; 
} 

if (args[0].equals("0") { 
    p.setGameMode(GameMode.SURVIVAL); 
    p.sendMessage(ChatColor.RED + "Gamemode set to survival"); 
    return true; 
} else if (args[0].equals("1") { 
    //Setgamemode to creative 
    //...... 
} 

Das sollte es tun!

+1

Sie hatten einen Tippfehler dort, ich reparierte es tho. Ich stimme deinem Beitrag vollkommen zu, aber ich möchte hinzufügen, dass ich in diesem Fall switch anstelle von verwenden würde. Abhängig von Ihrer Java-Version müssen Sie args [0] in Integer umwandeln. Der Grund warum ist nur, weil es sauberer imo –