我一直试图在java中制作一个给出三个变量的冷却系统,
我以前做过它但看起来很复杂,我想知道是否有更好的方法来做。
我的代码检查点击是否处于冷却状态:
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;
}
有比这更好或更简单的方法吗?
干杯。
答案 0 :(得分:4)
我建议使用存储播放器UUID和当前时间戳的HashMap。在该方法中,您可以检查地图是否包含玩家的密钥,如果是,则检查存储的值和所需的冷却时间是否小于/大于当前时间。
在评论中说明Craigr8806时,我建议您使用System.nanoTime()
作为时间戳。