给定三个变量,我一直试图在Java中创建一个冷却系统,
冷却时间,例如100秒,
点击时间戳(最后一次点击时)
当前时间戳。
我以前做过它,但是看起来很复杂,我想知道是否有更好的方法可以做到。
我的代码来检查点击是否处于冷却状态:
private boolean onCooldown(String playerUUID, int npcId, int cooldown) {
boolean toReturn = false;
try {
String timeStamp = new SimpleDateFormat("yyyy/MM/dd_HH:mm:ss").format(Calendar.getInstance().getTime());
DateFormat df = new SimpleDateFormat("yyyy/MM/dd_HH:mm:ss");
Date savedTime;
Date nowTime;
String savedString = database.getTime(playerUUID, npcId);
nowTime = df.parse(timeStamp);
savedTime = df.parse(savedString);
long diff = nowTime.getTime() - savedTime.getTime();
long savedSeconds = diff / 1000 % 60;
long savedMinutes = diff / (60 * 1000) % 60;
long nowSeconds = cooldown % 60;
long nowMinutes = cooldown / 60 % 60;
if (!((savedMinutes >= nowMinutes) && (savedSeconds >= nowSeconds))) {
toReturn = true;
}
} catch (Exception e) {
toReturn = false;
}
return toReturn;
}
有没有比这更好或更简单的方法了?
干杯。
最佳答案
我建议使用HashMap来存储播放器的UUID和当前时间戳。然后,在该方法内,您可以检查地图是否包含玩家的钥匙,如果是,则检查所存储的值以及所需的冷却时间是否小于/大于当前时间。
正如注释中的Craigr8806所述,我建议使用System.nanoTime()
作为时间戳。