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

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

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

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    Wriller

    Wriller Участник

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

    }
    }, 0L, 10L);

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

    Вложения:

  2. DeethzzCoder

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

    Баллы:
    76
    Боже мой...
     
  3. Автор темы
    Wriller

    Wriller Участник

    Баллы:
    31
    Имя в Minecraft:
    Wriller
    да да, знаю, просто скажи как сделать правильно или кинь ресурс где можно это узнать
     
  4. DeethzzCoder

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

    Баллы:
    76
    Это Java, учи ее, легче станет.
     
  5. Автор темы
    Wriller

    Wriller Участник

    Баллы:
    31
    Имя в Minecraft:
    Wriller
    Ну и с чего же мне начать учить в джаве, чтобы понять, что я сделал не так и как это исправить?
     
  6. DeethzzCoder

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

    Баллы:
    76
    Советую учить все, а так, ответ на твой вопрос это основы.
     
  7. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Вы можете поместить this в ваш таймер используя лямду ("->"). Информацию о том, как это сделать можно найти в гугле.
     
  8. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Жестб, ну сломалось, с кем не бывает то? Советую написать свой компилятор который бы игнорил такую дичь)
     
  9. alexandrage

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

    Баллы:
    173
  10. koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Если в не главном классе то Main.class, лучше ламбу используй () -> (убери баккет рунабле)
     
  11. alexandrage

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

    Баллы:
    173
    Вот пример, если видос не помог.

    Код:
    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);
     
    Последнее редактирование: 6 мар 2019
  12. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Зачем писать то, что уже написали?
     
  13. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Я думаю, что автору будет проще сделать с лямбдой.
     
  14. alexandrage

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

    Баллы:
    173
    Причем ту лямда? Она сама найдет интерфейс Plugin?
     
  15. BDMan

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

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

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

    Баллы:
    173
    В голос.
     
  17. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Я не правильно прочитал его запрос, я думал он не может передать переменную в runable, но сейчас посмотрел его код и понял о чем он.
     
  18. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    А теперь объясни.
     
  19. MurlikMurlik

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

    Баллы:
    96
    Ну а что тут объяснять. Ты через метод сервера по названию зачем то получаешь ссылку на плагин, когда проще просто передать ссылку через конструктор, или сделать статичный метод который будет возвращать ссылку на плагин.
     
  20. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Во первых, это никак не усложняет задачи, я не говорил что нельзя передать плагин из мейн класса. Я считаю что мое решение будет понятнее для TS.
     
Статус темы:
Закрыта.

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