Skip to content

Instantly share code, notes, and snippets.

@chyyran
Created September 25, 2012 21:02
Show Gist options
  • Save chyyran/3784409 to your computer and use it in GitHub Desktop.
Save chyyran/3784409 to your computer and use it in GitHub Desktop.
Per Player Censor
package net.mystia.MystiaUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.AuthorNagException;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredListener;
public class ChatListener implements Listener{
public static Field fieldRegisteredListenerDotPriority;
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(AsyncPlayerChatEvent e){
Player p = e.getPlayer();
e.setCancelled(true);
String censorMessage = e.getMessage();
String origMessage = e.getMessage();
String permission = "mystia.censor";
if (censorMessage.contains("fuck")){
censorMessage = censorMessage.replace("fuck","fawg");
}
if (censorMessage.contains("damn")){
censorMessage = censorMessage.replace("damn","dang");
}
if (censorMessage.contains("hell")){
censorMessage = censorMessage.replace("hell", "heck");
}
AsyncPlayerChatEvent monitorOnlyEvent = new AsyncPlayerChatEvent(false, p, origMessage, new HashSet<Player>(Arrays.asList(Bukkit.getOnlinePlayers())));
monitorOnlyEvent.setMessage(origMessage);
callEventAtMonitorOnly(monitorOnlyEvent);
Bukkit.getConsoleSender().sendMessage(String.format(monitorOnlyEvent.getFormat(), monitorOnlyEvent.getPlayer().getDisplayName(), monitorOnlyEvent.getMessage()));
for (Player to : e.getRecipients())
{
if(to.hasPermission(permission)){
to.sendMessage(censorMessage);
}else{
to.sendMessage(origMessage);
}
}
}
public static void callEventAtMonitorOnly(Event event)
{
synchronized(Bukkit.getPluginManager())
{
HandlerList handlers = event.getHandlers();
RegisteredListener[] listeners = handlers.getRegisteredListeners();
for (RegisteredListener registration : listeners)
{
try
{
EventPriority priority = (EventPriority) fieldRegisteredListenerDotPriority.get(registration);
if (priority != EventPriority.MONITOR) continue;
}
catch (Exception e)
{
e.printStackTrace();
continue;
}
// This rest is almost copy pasted from SimplePluginManager in Bukkit:
if (!registration.getPlugin().isEnabled()) {
continue;
}
try {
registration.callEvent(event);
} catch (AuthorNagException ex) {
Plugin plugin = registration.getPlugin();
if (plugin.isNaggable()) {
plugin.setNaggable(false);
String author = "<NoAuthorGiven>";
if (plugin.getDescription().getAuthors().size() > 0) {
author = plugin.getDescription().getAuthors().get(0);
}
Bukkit.getServer().getLogger().log(Level.SEVERE, String.format(
"Nag author: '%s' of '%s' about the following: %s",
author,
plugin.getDescription().getName(),
ex.getMessage()
));
}
} catch (Throwable ex) {
Bukkit.getServer().getLogger().log(Level.SEVERE, "Could not pass event " + event.getEventName() + " to " + registration.getPlugin().getDescription().getName(), ex);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment