diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java index 80dd4f4c..83b841a8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_BlockListener.java @@ -62,8 +62,7 @@ public class TFM_BlockListener implements Listener if (out_of_range) { - playerdata.incrementFreecamDestroyCount(); - if (playerdata.getFreecamDestroyCount() > TotalFreedomMod.freecamTriggerCount) + if (playerdata.incrementAndGetFreecamDestroyCount() > TotalFreedomMod.freecamTriggerCount) { TFM_Util.bcastMsg(p.getName() + " has been flagged for possible freecam nuking.", ChatColor.RED); TFM_Util.autoEject(p, "Freecam (extended range) block breaking is not permitted on this server."); @@ -82,8 +81,7 @@ public class TFM_BlockListener implements Listener } else { - playerdata.incrementBlockDestroyCount(); - if (playerdata.getBlockDestroyCount() > TotalFreedomMod.nukeMonitorCountBreak) + if (playerdata.incrementAndGetBlockDestroyCount() > 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."); @@ -138,8 +136,7 @@ public class TFM_BlockListener implements Listener if (out_of_range) { - playerdata.incrementFreecamPlaceCount(); - if (playerdata.getFreecamPlaceCount() > TotalFreedomMod.freecamTriggerCount) + if (playerdata.incrementAndGetFreecamPlaceCount() > TotalFreedomMod.freecamTriggerCount) { TFM_Util.bcastMsg(p.getName() + " has been flagged for possible freecam building.", ChatColor.RED); TFM_Util.autoEject(p, "Freecam (extended range) block building is not permitted on this server."); @@ -158,8 +155,7 @@ public class TFM_BlockListener implements Listener } else { - playerdata.incrementBlockPlaceCount(); - if (playerdata.getBlockPlaceCount() > TotalFreedomMod.nukeMonitorCountPlace) + if (playerdata.incrementAndGetBlockPlaceCount() > TotalFreedomMod.nukeMonitorCountPlace) { TFM_Util.bcastMsg(p.getName() + " is placing blocks too fast!", ChatColor.RED); TFM_Util.autoEject(p, "You are placing blocks too fast."); diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 3bb7e315..c804401a 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -30,6 +30,7 @@ import org.bukkit.util.Vector; public class TFM_PlayerListener implements Listener { private static final List BLOCKED_MUTED_CMDS = Arrays.asList(StringUtils.split("say,me,msg,m,tell,r,reply,mail,email", ",")); + private static final int MSG_PER_HEARTBEAT = 10; @EventHandler(priority = EventPriority.HIGH) public void onPlayerInteract(PlayerInteractEvent event) @@ -395,18 +396,25 @@ public class TFM_PlayerListener implements Listener String message = event.getMessage().trim(); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); - playerdata.incrementMsgCount(); // Check for spam - if (playerdata.getMsgCount() > 10) + Long lastRan = TFM_Heartbeat.getLastRan(); + if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { - TFM_Util.bcastMsg(p.getName() + " was automatically kicked for spamming chat.", ChatColor.RED); - TFM_Util.autoEject(p, "Kicked for spamming chat."); + TFM_Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } + else + { + if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) + { + TFM_Util.bcastMsg(p.getName() + " was automatically kicked for spamming chat.", ChatColor.RED); + TFM_Util.autoEject(p, "Kicked for spamming chat."); - playerdata.resetMsgCount(); + playerdata.resetMsgCount(); - event.setCancelled(true); - return; + event.setCancelled(true); + return; + } } // Check for message repeat @@ -491,10 +499,9 @@ public class TFM_PlayerListener implements Listener Player p = event.getPlayer(); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); - playerdata.incrementMsgCount(); playerdata.setLastCommand(command); - if (playerdata.getMsgCount() > 10) + if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) { TFM_Util.bcastMsg(p.getName() + " was automatically kicked for spamming commands.", ChatColor.RED); TFM_Util.autoEject(p, "Kicked for spamming commands."); diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java index d63934d0..460adbea 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java @@ -219,24 +219,14 @@ public class TFM_PlayerData this.msg_count = 0; } - public void incrementMsgCount() + public int incrementAndGetMsgCount() { - this.msg_count++; + return this.msg_count++; } - public int getMsgCount() + public int incrementAndGetBlockDestroyCount() { - return msg_count; - } - - public void incrementBlockDestroyCount() - { - this.block_destroy_total++; - } - - public int getBlockDestroyCount() - { - return block_destroy_total; + return this.block_destroy_total++; } public void resetBlockDestroyCount() @@ -244,14 +234,9 @@ public class TFM_PlayerData this.block_destroy_total = 0; } - public void incrementBlockPlaceCount() + public int incrementAndGetBlockPlaceCount() { - this.block_place_total++; - } - - public int getBlockPlaceCount() - { - return block_place_total; + return this.block_place_total++; } public void resetBlockPlaceCount() @@ -259,14 +244,9 @@ public class TFM_PlayerData this.block_place_total = 0; } - public void incrementFreecamDestroyCount() + public int incrementAndGetFreecamDestroyCount() { - this.freecam_destroy_count++; - } - - public int getFreecamDestroyCount() - { - return freecam_destroy_count; + return this.freecam_destroy_count++; } public void resetFreecamDestroyCount() @@ -274,14 +254,9 @@ public class TFM_PlayerData this.freecam_destroy_count = 0; } - public void incrementFreecamPlaceCount() + public int incrementAndGetFreecamPlaceCount() { - this.freecam_place_count++; - } - - public int getFreecamPlaceCount() - { - return freecam_place_count; + return this.freecam_place_count++; } public void resetFreecamPlaceCount()