Код отправки плохого сообщения в плагин на майнкрафт - PullRequest
0 голосов
/ 07 марта 2020

я работаю над плагином, но когда игрок выполняет команду в игре, "отправитель" делает четыре одинаковых сообщения ...

image

      @EventHandler
  public void oncmd(PlayerCommandPreprocessEvent e) {

      List<String> block = Arrays.asList(":");

      block.forEach(all -> {

         if(e.getMessage().toLowerCase().contains(all.toLowerCase())) {
             e.getPlayer().sendMessage("§8[§aSystem§8] §cYou can't use this command!");
             e.setCancelled(true);
         }
      });

  }

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Используйте для каждого l oop вместо вызова функции forEach. Это позволит вам добавить оператор break, который завершит l oop после того, как найдет первый плохой символ:

      @EventHandler
  public void oncmd(PlayerCommandPreprocessEvent e) {

      List<String> block = Arrays.asList(":");

      for(String all : block) {

         if(e.getMessage().toLowerCase().contains(all.toLowerCase())) {
             e.getPlayer().sendMessage("§8[§aSystem§8] §cYou can't use this command!");
             e.setCancelled(true);
             break;
         }
      }

  }

В качестве альтернативы, если вы хотите остаться с более функциональным подходом, вы можно использовать anyMatch:

      @EventHandler
  public void oncmd(PlayerCommandPreprocessEvent e) {

      List<String> block = Arrays.asList(":");

      if(block.stream().anyMatch(all -> e.getMessage().toLowerCase().contains(all.toLowerCase()))) {

         e.getPlayer().sendMessage("§8[§aSystem§8] §cYou can't use this command!");
         e.setCancelled(true);
      }

  }
0 голосов
/ 08 марта 2020

Вы можете создать массив символов с недопустимыми символами. После этого вы можете использовать простой для l oop, чтобы перебрать все элементы. Внутри этого l oop теперь вы можете проверить, содержит ли команда этот символ.

...