@EventHandler(priority = EventPriority.NORMAL) @SuppressWarnings("UseSpecificCatch") public void onPlayerChat(AsyncPlayerChatEvent event) { try { final Player player = event.getPlayer(); String message = event.getMessage().trim(); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerDataSync(player); // Check for spam final Long lastRan = TFM_Heartbeat.getLastRan(); if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { // TFM_Log.warning("Heartbeat service timeout - can't check block place/break rates."); } else { if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) { TFM_Sync.bcastMsg( player.getName() + " was automatically kicked for spamming chat.", ChatColor.RED); TFM_Sync.autoEject(player, "Kicked for spamming chat."); playerdata.resetMsgCount(); event.setCancelled(true); return; } } // Check for message repeat if (playerdata.getLastMessage().equalsIgnoreCase(message)) { TFM_Sync.playerMsg(player, "Please do not repeat messages."); event.setCancelled(true); return; } playerdata.setLastMessage(message); // Check for muted if (playerdata.isMuted()) { if (!TFM_AdminList.isSuperAdminSync(player)) { TFM_Sync.playerMsg( player, ChatColor.RED + "You are muted, STFU! - You will be unmuted in 5 minutes."); event.setCancelled(true); return; } playerdata.setMuted(false); } // Strip color from messages message = ChatColor.stripColor(message); // Truncate messages that are too long - 100 characters is vanilla client max if (message.length() > 100) { message = message.substring(0, 100); TFM_Sync.playerMsg(player, "Message was shortened because it was too long to send."); } // Check for caps if (message.length() >= 6) { int caps = 0; for (char c : message.toCharArray()) { if (Character.isUpperCase(c)) { caps++; } } // Compute a ratio so that longer sentences can have more caps. if (((float) caps / (float) message.length()) > 0.65) { message = message.toLowerCase(); } } // Check for adminchat if (playerdata.inAdminChat()) { TFM_Sync.adminChatMessage(player, message, false); event.setCancelled(true); return; } if (playerdata.inTelnetAdminChat()) { FOPM_TFM_Util.TelnetAdminChatMessage(player, message, false); event.setCancelled(true); return; } if (playerdata.inDevChat()) { FOPM_TFM_Util.DevChatMessage(player, message, false); event.setCancelled(true); return; } if (playerdata.inSeniorAdminChat()) { FOPM_TFM_Util.SeniorAdminChatMessage(player, message, false); event.setCancelled(true); return; } // Finally, set message event.setMessage(message); // Set the tag if (playerdata.getTag() != null) { event.setFormat("<" + playerdata.getTag().replaceAll("%", "%%") + " %1$s> %2$s"); } } catch (Exception ex) { TFM_Log.severe(ex); } }