getplayer()抛出一个数字格式异常

qcuzuvrc  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(426)

我对minecraft插件开发相当陌生,我正在尝试制作自己的精简版的软件包插件。我试着做一个命令,让我可以设置我的飞行速度以及其他人的飞行速度。设定速度效果很好,但是,瞄准其他玩家似乎是我无法管理的事情。当我执行命令时,它会出现在日志中:

  1. [23:55:50 INFO]: swalloich issued server command: /flyspeed swalloich 2
  2. [23:55:50 INFO]: swalloichtargeted swalloich with the flySpeed command.
  3. [23:55:50 ERROR]: null
  4. org.bukkit.command.CommandException: Unhandled exception executing command 'flyspeed' in plugin EssentialsLite v0.2
  5. at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  6. at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:148) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  7. at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:735) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  8. at net.minecraft.server.v1_16_R2.PlayerConnection.handleCommand(PlayerConnection.java:1647) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  9. at net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1504) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  10. at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(SourceFile:36) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  11. at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(SourceFile:9) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  12. at net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  13. at net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  14. at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(SourceFile:144) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  15. at net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  16. at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(SourceFile:118) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  17. at net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:899) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  18. at net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:892) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  19. at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(SourceFile:127) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  20. at net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:876) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  21. at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:815) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  22. at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:155) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  23. at java.lang.Thread.run(Thread.java:832) [?:?]
  24. Caused by: java.lang.NumberFormatException: For input string: "swalloich"
  25. at java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) ~[?:?]
  26. at java.lang.Integer.parseInt(Integer.java:652) ~[?:?]
  27. at java.lang.Integer.parseInt(Integer.java:770) ~[?:?]
  28. at me.swall.essentialsLite.commands.FlySpeed.onCommand(FlySpeed.java:62) ~[?:?]
  29. at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
  30. ... 18 more

我几乎可以肯定的是,我的代码中有这样一部分:

  1. float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);
  2. Bukkit.getLogger().info(player.getDisplayName() + " targeted " + args[0] + " with the flySpeed command.");
  3. if (Integer.parseInt(args[0]) > 10 || Integer.parseInt(args[0]) < 0)
  4. {
  5. sender.sendMessage("The speed argument must be a whole number between 0 and 10.");
  6. }
  7. else
  8. {
  9. //set the target player's fly speed to the value provided as the second argument
  10. Player targetPlayer = Bukkit.getPlayerExact(args[0]);
  11. Bukkit.getLogger().info("targetPlayer was initialized.");
  12. if (targetPlayer != null && player.isOnline())
  13. {
  14. targetPlayer.setFlySpeed(flySpeed);
  15. Bukkit.getLogger().info("The fly speed for user " + player.getDisplayName()
  16. + " has been set to" + args[0]);
  17. }
  18. else
  19. {
  20. sender.sendMessage("That player was not found.");
  21. }
  22. }

我做错什么了?

of1yzvn4

of1yzvn41#

在代码的第1行,您将字符串(args[1])除以float(10.0)。

  1. float flySpeed = (float)(Integer.parseInt(args[1] / 10.0));

应改为:

  1. float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);

+如果要在代码中多次使用已解析的整数,我建议为此创建整数变量。
如果是这样,代码将如下所示:

  1. int flySpeedArg = Integer.parseInt(args[1]);
  2. float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);
  3. Bukkit.getLogger().info(player.getDisplayName() + " targeted " + args[0] + " with the flySpeed command.");
  4. if (flySpeedArg > 10 || flySpeedArg < 0)
  5. {
  6. sender.sendMessage("The speed argument must be a whole number between 0 and 10.");
  7. }
  8. else
  9. {
  10. //set the target player's fly speed to the value provided as the second argument
  11. Player targetPlayer = Bukkit.getPlayerExact(args[0]);
  12. Bukkit.getLogger().info("targetPlayer was initialized.");
  13. if (targetPlayer != null && player.isOnline())
  14. {
  15. targetPlayer.setFlySpeed(flySpeed);
  16. Bukkit.getLogger().info("The fly speed for user " + player.getDisplayName()
  17. + " has been set to" + args[0]);
  18. }
  19. else
  20. {
  21. sender.sendMessage("That player was not found.");
  22. }
  23. }
展开查看全部

相关问题