Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помощь по шедулерам

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

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

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

    Баллы:
    76
    Skype:
    the_osirius
    Добрый день.

    [​IMG]
    Это мой шедулер. В нём, по идее, каждые 10 тактов должно происходить смещение предметов влево в средней строке инвентаря, состоящего из трёх строк. Тем не менее, когда я пытаюсь запустить этот шедулер, Minecraft отвечает "An internal error occurred while attempting to perform this command". В консоли, естественно, ошибка:
    [​IMG]
    Более чем на сто процентов уверен, что ошибка находится именно в шедулере, так как без него всё выполняется. Подозреваю неверное указание Plugin в сигнатуре шедулера. Если так и есть, подскажите, пожалуйста, как правильно сослаться на главный метод.
     
  2. Хостинг MineCraft
    <
  3. AtomicInteger

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

    Баллы:
    46
    Верно, писать new Main нельзя, так как ты иницализируешь плагин второй раз.Если шедулер находится в том же Main, то в шедулере вместо new Main пиши this.Если в другом классе, то передавай ссылку главного класса в конструктор, либо создавай геттер mainInstance(или, например, сделай эту ссылку public static).
     
  4. Автор темы
    Dexel

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

    Баллы:
    76
    Skype:
    the_osirius
    Можно пример?
     
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    На https://github.com/alexandrage/Example Собстно this.plugin ссылка на главный класс плагина.
     
  6. Автор темы
    Dexel

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

    Баллы:
    76
    Skype:
    the_osirius
    [​IMG]
    upload_2017-3-24_12-1-22.png
    Я что-то не уловил. Сделав всё так, как в том туториале, this у меня выделялся как ошибка - метод standard статичен.
    upload_2017-3-24_12-3-37.png
    При исправлении (убираем пометку static с метода standard) - и теперь мы не можем вызвать метод standard из главного плагина.
    upload_2017-3-24_12-5-16.png
     
  7. Dymeth

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

    Баллы:
    76
    Почитай про static в Java
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Потому что ты дурачек.
     
  9. AtomicInteger

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

    Баллы:
    46
    Главный класс(Тот, который extends JavaPlugin):
    Код:
    public static Main plugin;
    @Override
    public void onEnable() {
        plugin = this;
    }
    Класс, в котором находится шедулер:
    Код:
    Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, new Runnable() {
        @Override
        public void run() {
            // TODO
        }
    }, 0, 0);
     
  10. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Код:
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Scheduler  extends BukkitRunnable {
     
        Main plugin;
     
        Scheduler(Main plugin) {
            this.plugin = plugin;
        }
     
        @Override
        public void run() {
            //TODO
        }
    }
    [DOUBLEPOST=1490347985,1490347441][/DOUBLEPOST]Залил на гитхабе в пример.
    https://github.com/alexandrage/Example
     
    Последнее редактирование: 24 мар 2017
  11. Автор темы
    Dexel

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

    Баллы:
    76
    Skype:
    the_osirius
    Спасибо.

    Нельзя было обойтись без этого?[DOUBLEPOST=1490351742][/DOUBLEPOST]Теперь, когда эта часть работает нормально, мне кажется, что ошибка в самом коде внутри шедулера. Всем спасибо, тема закрыта.[DOUBLEPOST=1490352142][/DOUBLEPOST]Тем не менее, ошибка была всё же в сигнатуре.
    Этот вариант мне помог. Спасибо.
     
Статус темы:
Закрыта.

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