Я делаю плагин для сервера Bukkit Minecraft с версией 1.6.4. Предполагается, что плагин не позволит игрокам рассылать спам, а также подвергать цензуре нецензурные слова, но разрешать определенные слова, в которые встроены нецензурные слова (например, HELLo, molASSes). Я создал два массива строк. Один содержит все нецензурные слова, а второй содержит «разрешенные» слова.
String[] curse = {"Swear1", "Swear2", "etc..."};
String[] allowed = {"Allowed1", "Allowed2", "etc..."};
Я пытаюсь сделать так, чтобы всякий раз, когда игрок говорит в чате, плагин проверял сообщение на наличие ругательств, игнорируя при этом пробелы и специальные символы.
Вот что у меня есть на данный момент (извините, если немного сумбурно):
public int seconds1 = 0;
public int seconds2 = 0;
public int spam = 0;
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event){
Player player = event.getPlayer();
String name = player.getName();
seconds2 = seconds1;
seconds1 = ((int) (System.currentTimeMillis()));
if (seconds1 - seconds2 <= 2500){
spam++;
switch (spam){
case 3: player.damage(1);
player.sendMessage(ChatColor.GOLD + "Spam Warning: " + ChatColor.RED + "Do not spam! Spamming reduces your health.");
break;
case 4: player.damage(3);
break;
case 6: player.damage(5);
player.sendMessage(ChatColor.GOLD + "Spam Warning: " + ChatColor.RED + "I'm warning you.");
break;
case 7: player.damage(6);
break;
case 8: player.damage(10);
player.kickPlayer("What did I tell you about spamming?");
for(Player p : Bukkit.getOnlinePlayers()){
p.sendMessage(ChatColor.BLUE + name + ChatColor.RED + " has been kicked for spamming!");
}
spam = 0;
break;
}
}else if(seconds1 - seconds2 > 2000){
spam = 0;
}
String message = event.getMessage().toLowerCase().replace("-", "").replace(" ", "").replace(",", "")
.replace(".", "").replace("~", "").replace("!", "").replace("@", "").replace("#", "")
.replace("$", "").replace("%", "").replace("^", "").replace("&", "").replace("*", "")
.replace("(", "").replace(")", "").replace("_", "").replace("+", "").replace("=", "")
.replace("{", "").replace("}", "").replace("[", "").replace("]", "").replace("|", "")
.replace("'", "").replace("<", "").replace(">", "").replace("/", "").replace("?", "")
.replace("`", "").replace("¸", "").replace("^", "").replace("@", "a");
String[] curse = {"All", "Curse", "Words"};
//I won't list the swears in this post.
String[] allowed = {"All", "Allowed", "Words"};
for(String blacklist : curse){
if(message.contains(blacklist)){
for (int i = 0; i < allowed.length; i++){
if(allowed[i].contains(blacklist)){
event.setCancelled(true);
}else{
event.setCancelled(true);
player.chat(message.replaceAll(blacklist, "*bleep*"));
player.damage(5);
return;
}
}
}
}
}
Единственное, что не работает, — это попытки найти ругательства среди разрешенных слов. Все, что у меня сейчас есть в моем коде, не работает.