Java BUKKIT-MINECRAFT设置游戏模式问题

Java BUKKIT-MINECRAFT设置游戏模式问题,java,minecraft,bukkit,Java,Minecraft,Bukkit,我开始为我的服务器开发插件。我发出了main class和pleh命令,但当我开始使用gamemode命令时,所有命令都停止了。我的意思是它工作时没有错误,但没有输出。这可能是个简单的错误,但我找不到 这是我的密码: import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSe

我开始为我的服务器开发插件。我发出了main class和pleh命令,但当我开始使用
gamemode
命令时,所有命令都停止了。我的意思是它工作时没有错误,但没有输出。这可能是个简单的错误,但我找不到

这是我的密码:

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;
    }

}

实际上,唯一发生的事情是,当我在控制台中键入命令时,它会向我发送我的消息,而不是播放机消息,但播放机nope不工作。

这里的情况如下: “args”不是单个字符串,而是字符串数组。 也就是说,您无法检查字符串数组是否等于字符串

所以你必须做的是:

  • 检查args是否为空
  • 检查args[0].equals(“0”)或args[1].equals(“1”)是否
对于args[0],我们尝试访问命令位置0处的参数。大概是这样的:

/gm 1

  • GM是您命令的commandlabel

  • 1是命令的参数0

为此,我们可以采取以下措施:

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
    //......
}

那就应该成功了

你有个打字错误,我把它修好了。我完全同意你的帖子,但我想补充一点,在这种情况下,我会使用switch而不是if。根据您的java版本,您需要将args[0]转换为整数。原因仅仅是因为它更干净