Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Не работает this в таймере

Метки:
Теги Теги
plugin this timer
Статус
Закрыто для дальнейших ответов.

Wriller

Участник
Баллы
31
Имя в Minecraft
Wriller
Добрый вечер, есть проблема в том, что я делаю таймер в отдельном классе
код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
public void run() {
p.sendMessage("прошло 10 секунд");

}
}, 0L, 10L);

И из за того что я делаю это в отдельном классе строка "this" не работает, а мне нужно узакать в ней plugin. Как это сделать?
 

Вложения:

  • Screenshot_24.png
    Screenshot_24.png
    Размер файла
    5 КБ
    Просмотров
    24
Вы можете поместить this в ваш таймер используя лямду ("->"). Информацию о том, как это сделать можно найти в гугле.
 
Жестб, ну сломалось, с кем не бывает то? Советую написать свой компилятор который бы игнорил такую дичь)
 
Если в не главном классе то Main.class, лучше ламбу используй () -> (убери баккет рунабле)
 
Вот пример, если видос не помог.

Код:
public class Scheduler extends BukkitRunnable {
    private Player player;

    public Scheduler(Player player) {
        this.player = player;
    }

    @Override
    public void run() {
       //TODO
    }
}

Код:
public class EventListener implements Listener {
    private Plugin plugin;

    public EventListener(Plugin main) {
        this.plugin = main;
    }
    //TODO
}
Код:
this.getServer().getPluginManager().registerEvents(new EventListener(this), this);
Код:
new Scheduler(player).runTaskLater(this.plugin, 10*20);
 
Последнее редактирование:
Вот пример, если видос не помог.

Код:
public class Scheduler extends BukkitRunnable {
    private Player player;

    public Scheduler(Player player) {
        this.player = player;
    }

    @Override
    public void run() {
       //TODO
    }
}

Код:
public class EventListener implements Listener {
    private Plugin plugin;

    public EventListener(Plugin main) {
        this.plugin = main;
    }
    //TODO
}
Код:
this.getServer().getPluginManager().registerEvents(new EventListener(this), this);
Код:
new Scheduler(player).runTaskLater(this.plugin, 10*20);
Я думаю, что автору будет проще сделать с лямбдой.
 
Но, на самом деле, самым правильным решением проблемы будет
Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("Название плагина"), new BukkitRunnable() {
public void run() {
p.sendMessage("прошло 10 секунд");

}
}, 0L, 10L);
 
Но, на самом деле, самым правильным решением проблемы будет
Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("Название плагина"), new BukkitRunnable() {
public void run() {
p.sendMessage("прошло 10 секунд");

}
}, 0L, 10L);
В голос.
 
Причем ту лямда? Она сама найдет интерфейс Plugin?
Я не правильно прочитал его запрос, я думал он не может передать переменную в runable, но сейчас посмотрел его код и понял о чем он.
 
А теперь объясни.
Ну а что тут объяснять. Ты через метод сервера по названию зачем то получаешь ссылку на плагин, когда проще просто передать ссылку через конструктор, или сделать статичный метод который будет возвращать ссылку на плагин.
 
Ну а что тут объяснять. Ты через метод сервера по названию зачем то получаешь ссылку на плагин, когда проще просто передать ссылку через конструктор, или сделать статичный метод который будет возвращать ссылку на плагин.
Во первых, это никак не усложняет задачи, я не говорил что нельзя передать плагин из мейн класса. Я считаю что мое решение будет понятнее для TS.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх