diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java index a244663a..80dd4f4c 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.Listener; +import me.StevenLawson.TotalFreedomMod.TFM_Heartbeat; import me.StevenLawson.TotalFreedomMod.TFM_Log; import me.StevenLawson.TotalFreedomMod.TFM_PlayerData; import me.StevenLawson.TotalFreedomMod.TFM_ProtectedArea; @@ -74,16 +75,24 @@ public class TFM_BlockListener implements Listener } } - playerdata.incrementBlockDestroyCount(); - if (playerdata.getBlockDestroyCount() > TotalFreedomMod.nukeMonitorCountBreak) + Long lastRan = TFM_Heartbeat.getLastRan(); + if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { - TFM_Util.bcastMsg(p.getName() + " is breaking blocks too fast!", ChatColor.RED); - TFM_Util.autoEject(p, "You are breaking blocks too fast. Nukers are not permitted on this server."); + TFM_Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } + else + { + playerdata.incrementBlockDestroyCount(); + if (playerdata.getBlockDestroyCount() > TotalFreedomMod.nukeMonitorCountBreak) + { + TFM_Util.bcastMsg(p.getName() + " is breaking blocks too fast!", ChatColor.RED); + TFM_Util.autoEject(p, "You are breaking blocks too fast. Nukers are not permitted on this server."); - playerdata.resetBlockDestroyCount(); + playerdata.resetBlockDestroyCount(); - event.setCancelled(true); - return; + event.setCancelled(true); + return; + } } } @@ -142,16 +151,24 @@ public class TFM_BlockListener implements Listener } } - playerdata.incrementBlockPlaceCount(); - if (playerdata.getBlockPlaceCount() > TotalFreedomMod.nukeMonitorCountPlace) + Long lastRan = TFM_Heartbeat.getLastRan(); + if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { - TFM_Util.bcastMsg(p.getName() + " is placing blocks too fast!", ChatColor.RED); - TFM_Util.autoEject(p, "You are placing blocks too fast."); + TFM_Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } + else + { + playerdata.incrementBlockPlaceCount(); + if (playerdata.getBlockPlaceCount() > TotalFreedomMod.nukeMonitorCountPlace) + { + TFM_Util.bcastMsg(p.getName() + " is placing blocks too fast!", ChatColor.RED); + TFM_Util.autoEject(p, "You are placing blocks too fast."); - playerdata.resetBlockPlaceCount(); + playerdata.resetBlockPlaceCount(); - event.setCancelled(true); - return; + event.setCancelled(true); + return; + } } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java index e532d5cb..ed3a987b 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java @@ -9,6 +9,7 @@ public class TFM_Heartbeat extends BukkitRunnable { private final TotalFreedomMod plugin; private final Server server; + private static Long lastRan = null; public TFM_Heartbeat(TotalFreedomMod instance) { @@ -16,9 +17,16 @@ public class TFM_Heartbeat extends BukkitRunnable this.server = plugin.getServer(); } + public static Long getLastRan() + { + return lastRan; + } + @Override public void run() { + lastRan = System.currentTimeMillis(); + for (Player p : server.getOnlinePlayers()) { TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p);