我正在创造一些魔法咒语,显然我希望每次使用之间都有延迟。
现在According to google,一秒钟就有1000000000纳秒。
然而,魔法法术会在不到两秒钟后重新充电。
@EventHandler
public void onInteract(PlayerInteractEvent e){
Player p = e.getPlayer();
if (p.getItemInHand().getType().equals(Material.BLAZE_ROD)){
{
{
if (!kam.containsKey(p.getName())) kam.put(p.getName(), (long) 0);
if (kam.get(p.getName()) < System.nanoTime()){
kam.remove(p.getName());
kam.put(p.getName(), System.nanoTime() + (1000000000 * 30));
//Do magic spell attack here.
}
}
}else{
p.sendMessage(ChatColor.AQUA + "Skill recharging!");
}
}
显然我的代码试图添加System.nanoTime()
加上30秒,然后检查当前系统nanoTime
是否大于我放入hashmap的系统,如果是,请执行拼写。
答案 0 :(得分:5)
我建议您打印出值1000000000 * 30
并进行检查。你会发现它已经被包裹了,因为它太大而无法容纳整数。
换句话说,以下程序:
public class Test
{
public static void main(String args[])
{
System.out.println(1000000000 * 30);
System.out.println(1000000000L * 30);
}
}
打印出来:
-64771072
30000000000
因此,如果您使用long
变体,它将正常工作。
答案 1 :(得分:5)
Java中的简单数字文字被视为int
s,因此您的计算被视为overflows。解决此问题的一种方法是使用long
文字执行计算,方法是在文字后添加L
:
kam.put(p.getName(), System.nanoTime() + (1000000000L * 30L));