1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Не выполняется команда, когда условия if выполнены

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

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

    KoT_B_MaMe Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    KoT_B_MaMKe
    Код:
    @EventHandler
        public void onChat(AsyncChatEvent e) {
            List<String> list = config.getStringList("settings.offensivewords");
            Player player = e.getPlayer();
            int listsize = list.size();
    
            if(e.message() instanceof TextComponent){
                TextComponent text = (TextComponent) e.message();
                for (int i = 0; i < listsize; i++){
                    if (text.content().toLowerCase().contains(list.get(i))){
                        e.getPlayer().sendMessage(ChatColor.RED + "Отправка сообщения предотвращенна системой ПДиР");
                        e.setCancelled(true);
                        player.sendMessage(String.valueOf(test));
                        test+=1;
                        if(test == 3){
                            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "kick" + player);
                                    //Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mute " + player + " 2h");
                            e.setCancelled(true);
                            test=0;
                        }
                    }
                }
            }
        }
    как видно по коду (
    Код:
                 if(test == 3){
                            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "kick" + player);
                                    //Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mute " + player + " 2h");
                            e.setCancelled(true);
                            test=0;
    ) то я пытаюсь выполнить команду kick + player,когда test становится 3, чтоб кикнуть себя. но это не получается и я не могу понять почему. ошибка в консоли -
    Could not pass event AsyncChatEvent to ChatFilter v0.1
    java.lang.IllegalStateException: Asynchronous command dispatch!​
     
  2. alexandrage

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

    Баллы:
    173
    Команды нельзя в асинхронном потоке, используй шедулер.
     
  3. Автор темы
    KoT_B_MaMe

    KoT_B_MaMe Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    KoT_B_MaMKe
    это на умном что-то, можно разъяснение что за шедулер?:3
     
  4. Namudos

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

    Баллы:
    66
    Имя в Minecraft:
    Uninstal
    Тебе нужно выполнять все в синхронном потоке, что тебе может предоставить шедулер (класс в апи баккита). Пример использования:
    Bukkit.getScheduler().runTask(() -> {
    // Тут твой код на ввод команды
    }
    Данный метод позволяет выполнить твой код синхронно относительно игрового мира.
     

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