From b1fcf5e34851250d14aab88449f63097065dff0e Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Wed, 20 Apr 2022 19:46:06 -0500 Subject: [PATCH] adds anti spam likely needs tweaking --- .../plex/listener/impl/AntiSpamListener.java | 41 +++++++++++++++++++ .../dev/plex/services/ServiceManager.java | 2 + .../dev/plex/services/impl/TimingService.java | 28 +++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/main/java/dev/plex/listener/impl/AntiSpamListener.java create mode 100644 src/main/java/dev/plex/services/impl/TimingService.java diff --git a/src/main/java/dev/plex/listener/impl/AntiSpamListener.java b/src/main/java/dev/plex/listener/impl/AntiSpamListener.java new file mode 100644 index 0000000..be2d761 --- /dev/null +++ b/src/main/java/dev/plex/listener/impl/AntiSpamListener.java @@ -0,0 +1,41 @@ +package dev.plex.listener.impl; + +import dev.plex.listener.PlexListener; +import dev.plex.services.impl.TimingService; +import io.papermc.paper.event.player.AsyncChatEvent; +import java.util.UUID; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +public class AntiSpamListener extends PlexListener +{ + @EventHandler + public void onChat(AsyncChatEvent event) + { + TimingService.cooldowns.merge(event.getPlayer().getUniqueId(), 1L, Long::sum); + if (getCount(event.getPlayer().getUniqueId()) > 8L) + { + event.getPlayer().sendMessage(Component.text("Please refrain from spamming messages.").color(NamedTextColor.GRAY)); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) + { + TimingService.cooldowns.merge(event.getPlayer().getUniqueId(), 1L, Long::sum); + if (getCount(event.getPlayer().getUniqueId()) > 8L) + { + event.getPlayer().sendMessage(Component.text("Please refrain from spamming commands.").color(NamedTextColor.GRAY)); + event.setCancelled(true); + } + } + + public long getCount(UUID uuid) + { + return TimingService.cooldowns.getOrDefault(uuid, 1L); + } +} diff --git a/src/main/java/dev/plex/services/ServiceManager.java b/src/main/java/dev/plex/services/ServiceManager.java index 4164f09..d4acf79 100644 --- a/src/main/java/dev/plex/services/ServiceManager.java +++ b/src/main/java/dev/plex/services/ServiceManager.java @@ -6,6 +6,7 @@ import dev.plex.services.impl.AutoWipeService; import dev.plex.services.impl.BanService; import dev.plex.services.impl.CommandBlockerService; import dev.plex.services.impl.GameRuleService; +import dev.plex.services.impl.TimingService; import dev.plex.services.impl.UpdateCheckerService; import java.util.List; import org.bukkit.Bukkit; @@ -21,6 +22,7 @@ public class ServiceManager registerService(new BanService()); registerService(new CommandBlockerService()); registerService(new GameRuleService()); + registerService(new TimingService()); registerService(new UpdateCheckerService()); } diff --git a/src/main/java/dev/plex/services/impl/TimingService.java b/src/main/java/dev/plex/services/impl/TimingService.java new file mode 100644 index 0000000..3728d77 --- /dev/null +++ b/src/main/java/dev/plex/services/impl/TimingService.java @@ -0,0 +1,28 @@ +package dev.plex.services.impl; + +import dev.plex.services.AbstractService; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class TimingService extends AbstractService +{ + public static final Map cooldowns = new HashMap<>(); + + public TimingService() + { + super(true, true); + } + + @Override + public void run() + { + cooldowns.clear(); + } + + @Override + public int repeatInSeconds() + { + return 5; + } +}