Таймер или отложенное действие

Baroness's Dev

Разработчик
Пользователь
Сап, спигот, для плагина нужно отложить задачу, а RunTaskLater подводит и отказывается работать. Почитав документацию, я сделал такой код:
Java:
public class handler implements Listener {

    @EventHandler
    public void join(PlayerJoinEvent e) {
        Player p = e.get.Player();
        p.sendMessage("Это сообщение отправляется сразу.")
        new BukkitRunnable() {
           
            @Override
            public void run() {
                p.sendMessage("А это - через 20 секунд");
            }
           
        }.runTaskLater((Plugin) this, 400);
    }
}
И вроде всё выглядит замечательно, среда разработки радостно мигает зелёненьким, но, доходя до "new...", плагин выдаёт ошибку. Первое сообщение отправляется, а второе нет. Буду очень признателен за помощь.
 

BuseSo

Разработчик
Пользователь
offtop Покажите ошибку под BB-код. В первое сообщение (кнопка "Изменить").


Мне непонятно только это место: (Plugin) this. У тебя этот класс наследует JavaPlugin?
 

Baroness's Dev

Разработчик
Пользователь
BuseSo,
offtop Секунду, перезагружу сервер...

Нет, не наследует. (Plugin) добавил сам компилятор. Класс с таймером обязан иметь JavaPlugin?
 

BuseSo

Разработчик
Пользователь
Там в аргументе должен быть указан главный класс плагина.

Java:
static Plugin plugin;

@Override
public void onEnable() {
    plugin = this;
}
Дальше в таймере используй ГлавныйКласс.plugin
 

Baroness's Dev

Разработчик
Пользователь
Большое спасибо, заработало! Если можно, задам вопрос по теме: этот способ не создаёт лишнюю нагрузку на сервер? Например, если сделать так, чтобы каждому игроку каждый час игры что-то отправлялось. Неуверен в этом вопросе.
 

BuseSo

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

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

Верх Низ