所以我正在尝试使System.currentTimeMillis();一个常数。这很难解释。代码应该执行的操作是向System.currentTimeMillis();添加一个值。并等待代码返回true,然后执行操作。所以基本上,我正在尝试建立一个“临时禁令”系统。因为System.currentTimeMillis不是常数,所以这将返回false。我想知道如何使该代码成为真实
long timeleft = StaticMaps.muteMap.get(uuid).getTime() * 1000; //seconds to miliseconds
if (System.currentTimeMillis() >= timeleft + System.currentTimeMillis()) {
plugin.mutemanager.destructPlayerMute(uuid, "Expired", "Removed by Console, Expired!");
} else {
KTools.notify("debug");
e.setCancelled(true);
}
解决方案我使用了
使用System.currentTimeMillis();将值存储为“Long”。
所以您要做的是。
Map<UUID, Long> temp = new HashMap<>();
Long time = 3 * 1000; //3 * 1000 = 3 Seconds
temp.put(Identifier, System.currentTimeMillis() + timetoadd)
添加时间需要很长。
然后检查System.currentTimeMillis()是否> =哈希图中的值。
long HOUR = 3600000;
long DAY = 86400000;
long dayformula = Long.parseLong(parts[0]) * DAY;
long hourformula = Long.parseLong(parts[1]) * HOUR;
long totalmiliseconds = dayformula + hourformula;
最佳答案
您不想将其变成常量。您想在给定的时间内存储其值,然后使用该值对照当前系统时间进行检查。
这样很容易实现:
long timeleft = StaticMaps.muteMap.get(uuid).getTime() * 1000; //seconds to miliseconds
long lastCheckedTime = System.currentTimeMillis();
if (System.currentTimeMillis() >= timeleft + lastCheckedTime) {
plugin.mutemanager.destructPlayerMute(uuid, "Expired", "Removed by Console, Expired!");
} else {
KTools.notify("debug");
e.setCancelled(true);
}
...虽然很公平,但除非
false
处于微秒级别,否则几乎可以保证该语句为timeLeft
。