Помогите Отменить команду если в ней есть русский текст!

slavik123123123

Старожил
Пользователь
Баллы
143
Имя в Minecraft
Leymooo
Как после того как получил всю команду, проверить её на русский текст, символы, или как проверить через регулярные выражения [А-Яа-я].

UPD.
Решение:

Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        command = command.replace(" ", "");
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
            if (!isAllowed(command)) {
                event.getPlayer().sendMessage("§c[§6FunTime§c] Пишите причину английскими символами, или цифрами из /rules.");
                event.setCancelled(true);
            }
        }
    }
   
    public boolean isAllowed(String str)
      {
        String allowedSymboles = "!.?@#$%^&*()_+-=№?,/|abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        for (int i = 0; i < str.length(); i++) {
          if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
            return false;
          }
        }
        return true;
      }
Спасибо @Bleach
 
Последнее редактирование:
Можно сделать строку с разрешенными символами, а потом проверять каждый символ из команды на нахождение в этой строке через луп.
 
Код:
String allowedSymboles = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

public boolean isAllowed(String str)
  {
    for (int i = 0; i < str.length(); i++) {
      if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
        return false;
      }
    }
    return true;
  }
 
Код:
String allowedSymboles = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

public boolean isAllowed(String str)
  {
    for (int i = 0; i < str.length(); i++) {
      if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
        return false;
      }
    }
    return true;
  }
Спасибо, а как тогда всю команду разбить на символы?
Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
         //тут типо проверку сообщения запилить.
        }
    }
 
Спасибо, а как тогда всю команду разбить на символы?
Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
         //тут типо проверку сообщения запилить.
        }
    }
isAllowed(command)
 
Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        event.getPlayer().sendMessage("a1");
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
            if (isAllowed(command)) {
                event.getPlayer().sendMessage("test");
                event.setCancelled(true);
            } else {
                event.getPlayer().sendMessage("test2");
            }
        }
    }
   
    public boolean isAllowed(String str)
      {
        String allowedSymboles = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        for (int i = 0; i < str.length(); i++) {
          if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
            return false;
          }
        }
        return true;
      }
Возвращает test2
f6319d43639313467d889783e5efad8a.png
 
Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        event.getPlayer().sendMessage("a1");
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
            if (isAllowed(command)) {
                event.getPlayer().sendMessage("test");
                event.setCancelled(true);
            } else {
                event.getPlayer().sendMessage("test2");
            }
        }
    }
  
    public boolean isAllowed(String str)
      {
        String allowedSymboles = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        for (int i = 0; i < str.length(); i++) {
          if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
            return false;
          }
        }
        return true;
      }
Возвращает test2
f6319d43639313467d889783e5efad8a.png
Значит, нужно отменять ивент там, где возвращает test2
 
Решение:

Java:
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPreprocess(PlayerCommandPreprocessEvent event)
    {
        String command = event.getMessage().toLowerCase();
        command = command.replace(" ", "");
        if (command.startsWith("/ban") || command.startsWith("/tempban") || command.startsWith("/mute") || command.startsWith("/tempmute") || command.startsWith("/banip")) {
            if (!isAllowed(command)) {
                event.getPlayer().sendMessage("§c[§6FunTime§c] Пишите причину английскими символами, или цифрами из /rules.");
                event.setCancelled(true);
            }
        }
    }
   
    public boolean isAllowed(String str)
      {
        String allowedSymboles = "!.?@#$%^&*()_+-=№?,/|abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        for (int i = 0; i < str.length(); i++) {
          if (!allowedSymboles.contains(String.valueOf(str.charAt(i)))) {
            return false;
          }
        }
        return true;
      }
Спасибо @Bleach
 
Свой кривой плагин банов лучше научи кодировку соединения с базой выставлять и не будет никаких проблем.
Это не мой плагин. Когда починит автор это, буду убирать этот костыль. А сейчас приходится так фиксить.
 
Похожий баг с banmanagement, так как он по дефолту создаёт таблицы в MySQL не в utf-8, решил эту проблему просто изменением свойств таблицы через phpmyadmin
 
Похожий баг с banmanagement, так как он по дефолту создаёт таблицы в MySQL не в utf-8, решил эту проблему просто изменением свойств таблицы через phpmyadmin
Как именно сменить? Я искал и не нашел.
 
Назад
Верх