Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем slavik123123123, 12 апр 2016.

  1. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

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

    UPD.
    Решение:

    Код:
        @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
     
    Последнее редактирование: 13 апр 2016
  2. Хостинг MineCraft
    <
  3. Bleach

    Bleach Активный участник Пользователь

    Баллы:
    68
    Можно сделать строку с разрешенными символами, а потом проверять каждый символ из команды на нахождение в этой строке через луп.
     
  4. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Знать бы как(
     
  5. Bleach

    Bleach Активный участник Пользователь

    Баллы:
    68
    Код:
    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;
      }
     
  6. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Спасибо, а как тогда всю команду разбить на символы?
    Код:
        @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")) {
             //тут типо проверку сообщения запилить.
            }
        }
     
  7. Bleach

    Bleach Активный участник Пользователь

    Баллы:
    68
    isAllowed(command)
     
  8. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @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
    [​IMG]
     
  9. Bleach

    Bleach Активный участник Пользователь

    Баллы:
    68
    Значит, нужно отменять ивент там, где возвращает test2
     
  10. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Так он и на полностью английский текст выдает test2
     
  11. Bleach

    Bleach Активный участник Пользователь

    Баллы:
    68
    Не знаю, попробуйте добавить пробел в строку разрешенных символов, если у вас там есть пробелы в event.getMessage()
     
  12. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Решение:

    Код:
        @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
     
  13. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    Свой кривой плагин банов лучше научи кодировку соединения с базой выставлять и не будет никаких проблем.
     
  14. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Это не мой плагин. Когда починит автор это, буду убирать этот костыль. А сейчас приходится так фиксить.
     
  15. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    А какой плагин?
     
  16. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
  17. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    В плагине всё вроде бы ОК. На сайте кракозябры или в таблицах?
     
  18. Автор темы
    slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    ошибка в консоль.http://pastebin.com/DfbuaWCx
     
  19. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    Тип поля reason должен быть varchar и кодировку выставить - utf8 & utf8_general_ci
     
  20. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Symbols.
     
  21. Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Похожий баг с banmanagement, так как он по дефолту создаёт таблицы в MySQL не в utf-8, решил эту проблему просто изменением свойств таблицы через phpmyadmin
     

Поделиться этой страницей