我正在开发基于Movie InTime的Minecraft插件。当玩家杀死你时,你将失去25%的时间并以TimeCard(书籍)的形式丢弃。杀死你的玩家可以拿起TimeCard并使用它。
目前,该插件只是试图让玩家年数增加25%,然后发出命令从玩家手中移除25年。 (y告诉服务器需要几年而不是几天,几周,几小时)
以下是代码:
Integer time = itapi.getPlayerYears(player.getName());
Double remove = Integer.valueOf(time) * 0.25;
String minus = String.valueOf(remove) + 'y' ;
itapi.removeTime(player.getName(), itapi.getDeathTime());
ItemStack book = itapi.createTimeCard("Death of " + player.getName(), minus, 1);
itapi.removeTime(player.getName(), minus);
e.getDrops().add(book);
但是当玩家被杀时会抛出此错误:
Caused by: java.lang.NumberFormatException: For input string: "1.25"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.7.0]
at java.lang.Integer.parseInt(Integer.java:492) ~[?:1.7.0]
at java.lang.Integer.parseInt(Integer.java:527) ~[?:1.7.0]
at com.BlackMage.InTime2.InTime2API.removeTime(InTime2API.java:551) ~[?:?]
我对如何解决这些错误感到困惑,在尝试了几个不同的事情之后我正在寻找一些建议
答案 0 :(得分:3)
您的代码中某处正在解析String
到int
,并尝试1.25
而不是int
所以错误
Caused by: java.lang.NumberFormatException: For input string: "1.25"
答案 1 :(得分:1)
如果你在堆栈跟踪中看得更低,你会看到:
Caused by: java.lang.NumberFormatException: For input string: "1.25"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.7.0]
at java.lang.Integer.parseInt(Integer.java:492) ~[?:1.7.0]
at java.lang.Integer.parseInt(Integer.java:527) ~[?:1.7.0]
at com.BlackMage.InTime2.InTime2API.removeTime(InTime2API.java:551) ~[?:?]
at com.BlackMage.InTime2.DeathListener.onDeath(DeathListener.java:37) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0]
查看InTime2API中的removeTime方法(在第551行,或者只是找到尝试在该方法中调用parseInt
的行)。如果您希望解析成功,则需要parseFloat
而不是parseInt
并将结果存储在浮点变量中。