From 03b91d2fdb55ce7d6a75455180195c44647fa17f Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Tue, 3 Mar 2020 16:13:39 +0100 Subject: [PATCH] Don't allow sending messages too fast The player needs to wait the configured amount of milliseconds between messages #115 --- .../java/buttondevteam/chat/ChatPlayer.java | 10 +++---- .../components/formatter/ChatProcessing.java | 29 ++++++++++++------- .../formatter/FormatterComponent.java | 7 +++++ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/java/buttondevteam/chat/ChatPlayer.java b/src/main/java/buttondevteam/chat/ChatPlayer.java index f3ee87b..9301bb6 100644 --- a/src/main/java/buttondevteam/chat/ChatPlayer.java +++ b/src/main/java/buttondevteam/chat/ChatPlayer.java @@ -51,6 +51,7 @@ public class ChatPlayer extends TBMCPlayerBase { public boolean RainbowPresserColorMode = false; public Color OtherColorMode = null; public boolean ChatOnly = false; + public long LastMessageTime = 0L; public static final int FlairTimeNonPresser = -1; public static final int FlairTimeCantPress = -2; @@ -58,9 +59,8 @@ public class ChatPlayer extends TBMCPlayerBase { /** * Gets the player's flair, optionally formatting for Minecraft. - * - * @param noformats - * The MC formatting codes will be only applied if false + * + * @param noformats The MC formatting codes will be only applied if false * @return The flair */ public String GetFormattedFlair(boolean noformats) { @@ -76,7 +76,7 @@ public class ChatPlayer extends TBMCPlayerBase { /** * Gets the player's flair, formatted for Minecraft. - * + * * @return The flair */ public String GetFormattedFlair() { @@ -100,7 +100,7 @@ public class ChatPlayer extends TBMCPlayerBase { // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() Player p = Bukkit.getPlayer(uuid); if (p != null) - p.setPlayerListName(String.format("%s%s", p.getDisplayName(), GetFormattedFlair())); + p.setPlayerListName(String.format("%s%s", p.getDisplayName(), GetFormattedFlair())); } public short GetFlairColor() { diff --git a/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java b/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java index f83933d..4e48b8f 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java @@ -134,20 +134,29 @@ public class ChatProcessing { return true; } - doFunStuff(sender, e, message); - - final String channelidentifier = getChannelID(channel, e.getOrigin()); - PluginMain.Instance.getServer().getConsoleSender() - .sendMessage(String.format("%s <%s§r> %s", channelidentifier, getSenderName(sender, player), message)); - - if (Bukkit.getOnlinePlayers().size() == 0) return false; //Don't try to send to nobody (errors on 1.14) - ChatPlayer mp; if (player != null) mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class); else //Due to the online player map, getPlayer() can be more efficient than getAs() mp = e.getUser().getAs(ChatPlayer.class); //May be null + if (mp != null) { + if (System.nanoTime() - mp.LastMessageTime < 1000 * component.minTimeBetweenMessages().get()) { //0.1s by default + sender.sendMessage("§cYou are sending messages too fast!"); + return true; + } + mp.LastMessageTime = System.nanoTime(); + } + + doFunStuff(sender, e, message); + + final String channelidentifier = getChannelID(channel, e.getOrigin()); + + PluginMain.Instance.getServer().getConsoleSender() + .sendMessage(String.format("%s <%s§r> %s", channelidentifier, getSenderName(sender, player), message)); + + if (Bukkit.getOnlinePlayers().size() == 0) return false; //Don't try to send to nobody (errors on 1.14) + Color colormode = channel.Color().get(); if (mp != null && mp.OtherColorMode != null) colormode = mp.OtherColorMode; @@ -226,8 +235,8 @@ public class ChatProcessing { } static TellrawPart createTellraw(CommandSender sender, String message, @Nullable Player player, - @Nullable ChatPlayer mp, @Nullable ChromaGamerBase cg, final String channelidentifier, - String origin) { + @Nullable ChatPlayer mp, @Nullable ChromaGamerBase cg, final String channelidentifier, + String origin) { TellrawPart json = new TellrawPart(""); ChatOnlyComponent.tellrawCreate(mp, json); //TODO: Make nice API json.addExtra( diff --git a/src/main/java/buttondevteam/chat/components/formatter/FormatterComponent.java b/src/main/java/buttondevteam/chat/components/formatter/FormatterComponent.java index 2f9ec20..49dfded 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/FormatterComponent.java +++ b/src/main/java/buttondevteam/chat/components/formatter/FormatterComponent.java @@ -34,6 +34,13 @@ public class FormatterComponent extends Component { return getConfig().getData("notificationPitch", 1.0f); } + /** + * The minimum time between messages in milliseconds. + */ + public ConfigData minTimeBetweenMessages() { + return getConfig().getData("minTimeBetweenMessages", 100); + } + @Override protected void enable() {