【问题标题】:Minecraft Plugin external errorMinecraft 插件外部错误
【发布时间】:2016-10-31 14:53:46
【问题描述】:

尝试编写 Minecraft 插件,当我在游戏中运行 /fakeop 时出现外部错误。 /fakeop(玩家名)虽然有效

public class CortexTroll extends JavaPlugin {

     @Override
     public void onEnable() {}

     @Override
     public void onDisable() {}

     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("fakeop")) {
               Player player = (Player) sender;
               Player target = Bukkit.getServer().getPlayer(args[0]);
               if (args.length == 0) {
                    player.sendMessage("Specify a player to Op. /fakeop <target>");
                    return true;
               }
               player.sendMessage("Fake Opped " + args[0]);
               Bukkit.broadcastMessage(ChatColor.GRAY + "[" + player.getName() + ": Opped " + args[0] + "]");
               target.sendMessage(ChatColor.YELLOW + "You are now op!");
          }
          return true;
     }
 }

错误:

Illuminatiiiiii 发出服务器命令:/fakeop [21:33:10 ERROR]: null org.bukkit.command.CommandException:未处理的异常正在执行 插件 CortexTroll v1.0 中的命令“fakeop” 在 org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 org.bukkit.craftbukkit.v1_10_R1.CraftServer.dispatchCommand(CraftServer.java:646) ~[spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.PlayerConnection.handleCommand(PlayerConnection.java:1351) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1186) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_91] 在 java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_91] 在 net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:733) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:672) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:571) [spigot-1.10.2.jar:git-Spigot-5391d73-00359a1] 在 java.lang.Thread.run(Unknown Source) [?:1.8.0_91] 引起:java.lang.ArrayIndexOutOfBoundsException: 0 在 us.thecortex.cortextroll.CortexTroll.onCommand(CortexTroll.java:29) ~[?:?] 在 org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.10.2.jar:git-Spigot-5391d73-00359a1]

【问题讨论】:

  • 当我在游戏中运行 /fakeop 时出现外部错误。 什么错误?您在外部服务器上吗?
  • 不确定您所说的外部服务器是什么意思,但我将插件添加到我的 Minecraft 服务器文件和游戏中,当我运行命令时出现错误。代码中的某些东西显然被抬高了,但 IDK 是什么。

标签: java plugins minecraft


【解决方案1】:

因为我不允许评论 jet,您可以尝试以下方法:将下面的行移到检查 args.length 是否为 0 的 if 语句之后

public Class CortexTroll extends JavaPlugin{

     @Override
     public void onEnable() {}

     @Override
     public void onDisable() {}

     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          if (cmd.getName().equalsIgnoreCase("fakeop")) {
               Player player = (Player) sender;
               if (args.length == 0) {
                    player.sendMessage("Specify a player to Op. /fakeop <target>");
                    return true;
               }
               Player target = Bukkit.getServer().getPlayer(args[0]); // Is now below the if-statement
               player.sendMessage("Fake Opped " + args[0]);
               Bukkit.broadcastMessage(ChatColor.GRAY + "[" + player.getName() + ": Opped " + args[0] + "]");
               target.sendMessage(ChatColor.YELLOW + "You are now op!");
          }
          return true;
     }
 }

为什么要修复这个错误?

如果您不带任何参数执行/fakeop,则args 的长度为0。如果您尝试访问args[0],您会得到ArrayIndexOutOfBoundsException,因为它需要一个长度为1 的数组。

编辑:感谢您指出它不是 NullPointer。

【讨论】:

  • 正确修复,除了解释不正确。 Args 不是null;它的长度为 0(错误消息是关于访问超出范围的元素,而不是 null)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多