Skip to content
This repository was archived by the owner on Aug 26, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/dev/imabad/mceventsuite/spigot/EventSpigot.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import dev.imabad.mceventsuite.core.modules.scavenger.ScavengerModule;
import dev.imabad.mceventsuite.core.modules.servers.ServersModule;
import dev.imabad.mceventsuite.core.modules.servers.objects.Server;
import dev.imabad.mceventsuite.core.util.BadWords;
import dev.imabad.mceventsuite.spigot.commands.*;
import dev.imabad.mceventsuite.spigot.impl.EventPermissible;
import dev.imabad.mceventsuite.spigot.impl.EventPermission;
import dev.imabad.mceventsuite.spigot.impl.SpigotActionExecutor;
import dev.imabad.mceventsuite.spigot.listeners.BuildListener;
import dev.imabad.mceventsuite.spigot.listeners.ChatListener;
import dev.imabad.mceventsuite.spigot.listeners.EventListener;
import dev.imabad.mceventsuite.spigot.listeners.PlayerListener;
import dev.imabad.mceventsuite.spigot.modules.bedrock.BedrockModule;
Expand Down Expand Up @@ -156,6 +158,8 @@ public void onEnable() {
});
getServer().getPluginManager().registerEvents(new PlayerListener(), this);
getServer().getPluginManager().registerEvents(new BuildListener(), this);
getServer().getPluginManager().registerEvents(new ChatListener(), this);
BadWords.loadConfigs();
if(getServer().getPluginManager().isPluginEnabled("Vault")){
System.out.println("Vault is enabled, registering permission handler");
getServer().getServicesManager().register(Permission.class, new EventPermission(), this, ServicePriority.Highest);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package dev.imabad.mceventsuite.spigot.listeners;

import dev.imabad.mceventsuite.core.EventCore;
import dev.imabad.mceventsuite.core.modules.redis.RedisModule;
import dev.imabad.mceventsuite.core.util.BadWords;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerQuitEvent;

import javax.naming.Name;
import java.util.HashMap;
import java.util.UUID;

public class ChatListener implements Listener {

private static final Component FILTERED_MESSAGE = Component.text("Your message was filtered").color(NamedTextColor.YELLOW);
private static final Component SPAM_MESSAGE = Component.text("Please don't spam!").color(NamedTextColor.YELLOW);
private static final Component MUTED_MESSAGE = Component.text("You have been muted!").color(NamedTextColor.RED)
.append(Component.text("\nThink this was in error? Appeal to ").color(NamedTextColor.GRAY))
.append(Component.text("support@cubedcon.com").color(NamedTextColor.BLUE));


static class LastMessage {
public String message;
public long time;

public LastMessage(String message, long time) {
this.message = message;
this.time = time;
}
}

private HashMap<UUID, LastMessage> messages = new HashMap<>();

@EventHandler
public void onLeave(PlayerQuitEvent event) {
messages.remove(event.getPlayer().getUniqueId());
}

@EventHandler
public void onPlayerChat(AsyncChatEvent event) {
Player sender = event.getPlayer();
String messageAsString = LegacyComponentSerializer.legacyAmpersand().serialize(event.originalMessage());
if (!messageAsString.startsWith("/")) {
if (EventCore.getInstance().getModuleRegistry().getModule(RedisModule.class).getMutedPlayersManager().isMuted(sender.getUniqueId().toString())) {
long expiry = EventCore.getInstance().getModuleRegistry().getModule(RedisModule.class).getMutedPlayersManager().getMuteExpiry(sender.getUniqueId().toString());
if (expiry > System.currentTimeMillis()) {
event.setCancelled(true);
event.getPlayer().sendMessage(MUTED_MESSAGE);
return;
} else {
EventCore.getInstance().getModuleRegistry().getModule(RedisModule.class).getMutedPlayersManager().removePlayer(sender.getUniqueId().toString());
}
}

EventCore.getInstance().getEventPlayerManager().getPlayer(sender.getUniqueId()).ifPresent(player -> {
// Check message for profanity.
if (BadWords.badWordsFound(messageAsString).size() > 0) {
sender.sendMessage(FILTERED_MESSAGE);
event.setCancelled(true);
return;
}
if (messages.containsKey(sender.getUniqueId()) && !player.hasPermission("eventsuite.staffchat")) {
LastMessage lastMessage = messages.get(sender.getUniqueId());
long timeSince = System.currentTimeMillis() - lastMessage.time;
if (lastMessage.message.equalsIgnoreCase(messageAsString) && timeSince < 5000) {
sender.sendMessage(SPAM_MESSAGE);
event.setCancelled(true);
return;
} else if (timeSince < 2000) {
sender.sendMessage(SPAM_MESSAGE);
event.setCancelled(true);
return;
}
}
messages.put(player.getUUID(), new LastMessage(messageAsString, System.currentTimeMillis()));
});
}
}
}