Java冷却系统

时间:2017-07-07 12:40:57

标签: java

我一直试图在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;
}

有比这更好或更简单的方法吗?

干杯。

1 个答案:

答案 0 :(得分:4)

我建议使用存储播放器UUID和当前时间戳的HashMap。在该方法中,您可以检查地图是否包含玩家的密钥,如果是,则检查存储的值和所需的冷却时间是否小于/大于当前时间。

在评论中说明Craigr8806时,我建议您使用System.nanoTime()作为时间戳。