如何解决Bukkit.getPlayer引发数字格式异常
我对Minecraft插件开发很陌生,我正在尝试制作自己的精简版Essentials插件。我正在尝试创建一个命令,该命令将允许我设置飞行速度以及其他飞行速度。设置速度就可以了,但是,瞄准其他玩家是我似乎无法管理的事情。当我执行命令时,它会出现在日志中:
[23:55:50 INFO]: swalloich issued server command: /flyspeed swalloich 2
[23:55:50 INFO]: swalloichtargeted swalloich with the flySpeed command.
[23:55:50 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'flyspeed' in plugin EssentialsLite v0.2
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:148) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:735) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.PlayerConnection.handleCommand(PlayerConnection.java:1647) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1504) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(SourceFile:36) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(SourceFile:9) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(SourceFile:144) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(SourceFile:118) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:899) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:892) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(SourceFile:127) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:876) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:815) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:155) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.NumberFormatException: For input string: "swalloich"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) ~[?:?]
at java.lang.Integer.parseInt(Integer.java:652) ~[?:?]
at java.lang.Integer.parseInt(Integer.java:770) ~[?:?]
at me.swall.essentialsLite.commands.FlySpeed.onCommand(FlySpeed.java:62) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[craftbukkit-1.16.2.jar:git-Bukkit-43c7ff9]
... 18 more
我几乎可以肯定的代码部分是:
float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);
Bukkit.getLogger().info(player.getDisplayName() + " targeted " + args[0] + " with the flySpeed command.");
if (Integer.parseInt(args[0]) > 10 || Integer.parseInt(args[0]) < 0)
{
sender.sendMessage("The speed argument must be a whole number between 0 and 10.");
}
else
{
//set the target player's fly speed to the value provided as the second argument
Player targetPlayer = Bukkit.getPlayerExact(args[0]);
Bukkit.getLogger().info("targetPlayer was initialized.");
if (targetPlayer != null && player.isOnline())
{
targetPlayer.setFlySpeed(flySpeed);
Bukkit.getLogger().info("The fly speed for user " + player.getDisplayName()
+ " has been set to" + args[0]);
}
else
{
sender.sendMessage("That player was not found.");
}
}
我在做什么错了?
解决方法
在代码的第1行, 您正在将String(args [1])除以float(10.0)。
float flySpeed = (float)(Integer.parseInt(args[1] / 10.0));
应更改为:
float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);
+如果要在代码中多次使用解析后的整数, 我建议为此创建整数变量。
如果这样,代码将如下所示:
int flySpeedArg = Integer.parseInt(args[1]);
float flySpeed = (float)(Integer.parseInt(args[1]) / 10.0);
Bukkit.getLogger().info(player.getDisplayName() + " targeted " + args[0] + " with the flySpeed command.");
if (flySpeedArg > 10 || flySpeedArg < 0)
{
sender.sendMessage("The speed argument must be a whole number between 0 and 10.");
}
else
{
//set the target player's fly speed to the value provided as the second argument
Player targetPlayer = Bukkit.getPlayerExact(args[0]);
Bukkit.getLogger().info("targetPlayer was initialized.");
if (targetPlayer != null && player.isOnline())
{
targetPlayer.setFlySpeed(flySpeed);
Bukkit.getLogger().info("The fly speed for user " + player.getDisplayName()
+ " has been set to" + args[0]);
}
else
{
sender.sendMessage("That player was not found.");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。