public class GeneralChatHandler extends AbstractPacketHandler {
public static String[] swearWords = {
"f.*?u.*?k",
"s.*?h.*?t",
"bi.*?h",
"bas.*?d",
"m.*?f.*?",
"c.*?nt",
"as.*?s",
"s.*?ck",
"w.*?nk",
"co.*?on",
"wo.*?g",
"ni.*?g.*?r",
"c.*?c.*?k",
"penis",
"vagina",
"c.*?um",
"p.*?i.*?s",
"p.*?orn",
"ar.*?se",
"nexon",
"ho.*?r.*?ny",
"dil.*?do",
"doggystyle",
"cl.*?it",
"fann.*?y",
"ho.*?re.*?",
"kn.*?ob",
"mastur.*?",
"nazi",
"hitler",
"n.*?uts",
"sob.*?",
"shag.*?",
"sl.*?ut.*?",
"testi.*?",
"t.*?wa.*?t",
"viagr.*?a",
"wil.*?ly",
"wil.*?lie",
"jism",
"dog.*?gy",
"donkeyri.*?b",
"breas.*?t",
"bl.*?wjo.*?b",
"b.*?b",
"beastiality",
"an.*?al",
"cawk",
"pus.*?s.*?",
"rim.*?m",
"ejaculate",
"ejakulate",
"er.*?ct",
"horni",
"horna",
"se.*?x",
"se.*?ck",
"ga.*?y",
"fk",
"we*?nis"
};
@Override public void handlePacket(SeekableLittleEndianAccessor slea, RenoriaClient c) {
String text = slea.readRenoriaAsciiString();
if (!CommandProcessor.executeCommand(c, c.getMessageCallback(), text.split(" "))) {
c.getPlayer().getMap().broadcastMessage(PacketCreator.getChatBubble(c.getPlayer(), filter(text), c.getPlayer().isGM()));
}
}
public static String filter(String in) {
for (String swearWord : swearWords) {
String stars;
Pattern pat = Pattern.compile(swearWord, Pattern.CASE_INSENSITIVE);
Matcher mat = pat.matcher(in);
while (mat.find()) {
char[] haha = new char[mat.end() - mat.start()];
for (int i = 0; i < mat.end() - mat.start(); i++) {
haha[i] = '*';
}
stars = new String(haha);
in = mat.replaceFirst(stars);
}
}
return in;
}
}
I’m using RegEXP to make the swear filter, but now I have 2 problems:
-
Ass is a swear word, but saying Assassin is blocked out too.
-
If I want to say “fuck”, I can just say “fucl(”.
any way around these problems?

