尝试执行此命令时发生内部服务器错误。我的命令

时间:2015-07-29 22:09:58

标签: minecraft bukkit

我的命令有问题。

当我在游戏中运行它时,它表示在尝试执行此命令时发生了内部服务器错误。

在控制台中还有一些非常长的文本,我不会尝试输入,因为我会非常糟糕。

这也是我第一次使用参数,所以我可能没有正确地执行它们,但它看起来与我查看的教程完全相同。

package me.mcmatt.squidcp;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import com.sk89q.worldedit.bukkit.WorldEditPlugin;

public class Main extends JavaPlugin {


  public void onEnable() {
    Bukkit.getServer().getLogger().info("Squid CP booted up! Version: " + Bukkit.getPluginManager().getPlugin("SquidCarePackages").getDescription().getVersion());

  }
  public void onDisable() {
    Bukkit.getServer().getLogger().info("Squid CP shut down!");
  }

  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (commandLabel.equalsIgnoreCase("squid")) {
      if (!(sender instanceof Player)) {
        sender.sendMessage(ChatColor.RED + "You must be a player to run this command");
      } else {
        Player player = (Player) sender;
        if (!(args[1].toString().equalsIgnoreCase("set"))) {
          player.sendMessage("Gratz");

        }
      }
    }

    return true;

  }

  public WorldEditPlugin getWorldEdit() {
    Plugin p = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
    if (p instanceof WorldEditPlugin) return (WorldEditPlugin) p;
    else return null;

  }

}

1 个答案:

答案 0 :(得分:1)

最有可能发生内部错误,因为在执行ArrayIndexOutOfBoundsException命令时抛出squid而没有提供足够的参数。您的代码假定args数组的长度至少为2,因此第二个参数args[1]存在。 args[0]是数组中的第一个String。当只键入“/ squid”或甚至“/ squid set”而不指定任何其他参数时,抛出异常,因为args数组为空或不包含第二个元素。通过添加args甚至if (args.length == 2) {}等检查来检查if (args.length > 1) {}数组是否具有正确的长度。

我猜你只想访问String数组中的第一个args。将args[1]更改为args[0]将允许命令以您可能的方式工作。但是,最好仍然确保数组具有正确的长度,以避免在播放器通过提供太少或根本没有参数而错误地使用命令时导致该错误。