给定三个变量,我一直试图在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()作为时间戳。

10-06 09:16