Вопрос Как сделать ожидание события и цикл?

Cachat

Пользователь
Мне нужно, чтобы игрок вводил команду, после чего плагин начинал выполнения действий в цикле, и ожидал события p.isSneaking(), после чего прерывал исполнение старого кода из цикла, и исполнял последующий код.
Обычный while крашит сервер, в инете нашел какой-то способ через

Bukkit.getScheduler().runTaskTimerAsynchronously((Plugin)this, (Runnable)new Task(), 20L, 20L);

но не знаю, как прекратить его исполнение.
На счет ожидания события - все способы через while, который, как я уже говорил, крашит сервер.
 

Xezard

Модератор
Разработчик
Пользователь
Мне нужно, чтобы игрок вводил команду, после чего плагин начинал выполнения действий в цикле, и ожидал события p.isSneaking(), после чего прерывал исполнение старого кода из цикла, и исполнял последующий код.
Обычный while крашит сервер, в инете нашел какой-то способ через

Bukkit.getScheduler().runTaskTimerAsynchronously((Plugin)this, (Runnable)new Task(), 20L, 20L);

но не знаю, как прекратить его исполнение.
На счет ожидания события - все способы через while, который, как я уже говорил, крашит сервер.
Ну, можно решить твою проблему "в лоб".
Игрок ввёл команду - запускаешь шедулер и выполняешь в нём нужный тебе код.
Как только срабатывает PlayerToggleSneakEvent - останавливаешь свой шедулер.
Получить объект таска можно вот так, например:
Java:
BukkitTask task = Bukkit.getScheduler().blablabla...
Без понятия какой там код у тебя исполняется в шедулере, но, скорее всего, тебе придётся создавать отдельный на каждого игрока.
 
Последнее редактирование:

Cachat

Пользователь
Без понятия какой там код у тебя исполняется в шедулере, но, скорее всего, тебе придётся создавать отдельный на каждого игрока.
Начисление денег конкретному игроку (который ввел команду), так что да.

Для теста написал вот это:
Java:
    @EventHandler
    public void onSneak(PlayerToggleSneakEvent e) {
      if (!e.isSneaking()) return;
      e.getPlayer().sendMessage("Вы крадетесь.");
    }
При нажатии shift - 0 реакции, этот ивент как-то по другому работает?
 

GreenBoom

Пользователь
Создаешь один повторяющийся шедудлер, который запускается при включении сервера, так же создаешь лист x N где N то сколько процедур. В коде шедудлера проверяешь если лист не пустой то выполняешь код. По команде добавляешь игрока в лист. В слушателе эвента просто удаляешь из одного и добавляешь другой... PROFIT
 

Комнаты в чате

Верх Низ