我的命令有问题。
当我在游戏中运行它时,它说在尝试执行此命令时发生了内部服务器错误。
在控制台中还有一些很长的文本,我不会尝试键入,因为我会弄得非常糟糕。
这也是我第一次使用参数,所以我可能做得不对,但它看起来和我看过的教程完全一样。
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;
}
}
很可能发生内部错误,因为在执行squid
命令时没有提供足够的参数而抛出ArrayIndexOutOfBoundsException
。您的代码假设args
数组的长度至少为2,因此存在第二个参数args[1]
。args[0]
是数组中的第一个String
。当只输入"/squid"或甚至"/squid set"而不指定任何进一步的参数时,会抛出异常,因为args
数组为空或不包含第二个元素。通过添加if (args.length == 2) {}
甚至if (args.length > 1) {}
检查args
数组的长度是否正确
我猜你只打算访问args
数组中的第一个String
。将args[1]
更改为args[0]
将允许命令以您可能希望的方式工作。但是,最好还是确保数组具有正确的长度,以避免当玩家通过提供太少或根本没有参数而错误地使用命令时导致错误。