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

  • Автор темы Автор темы Dexel
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Dexel

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
SiRiuS_OSiRiuS
Добрый день.

cefc0080270248b09254b47d1292707b.png

Это мой шедулер. В нём, по идее, каждые 10 тактов должно происходить смещение предметов влево в средней строке инвентаря, состоящего из трёх строк. Тем не менее, когда я пытаюсь запустить этот шедулер, Minecraft отвечает "An internal error occurred while attempting to perform this command". В консоли, естественно, ошибка:
6a39eeeac48e40059797b2980ae41647.png

Более чем на сто процентов уверен, что ошибка находится именно в шедулере, так как без него всё выполняется. Подозреваю неверное указание Plugin в сигнатуре шедулера. Если так и есть, подскажите, пожалуйста, как правильно сослаться на главный метод.
 
Верно, писать new Main нельзя, так как ты иницализируешь плагин второй раз.Если шедулер находится в том же Main, то в шедулере вместо new Main пиши this.Если в другом классе, то передавай ссылку главного класса в конструктор, либо создавай геттер mainInstance(или, например, сделай эту ссылку public static).
 
Верно, писать new Main нельзя, так как ты иницализируешь плагин второй раз.Если шедулер находится в том же Main, то в шедулере вместо new Main пиши this.Если в другом классе, то передавай ссылку главного класса в конструктор, либо создавай геттер mainInstance(или, например, сделай эту ссылку public static).
Можно пример?
 
На https://github.com/alexandrage/Example Собстно this.plugin ссылка на главный класс плагина.
241cf2dbd82d4257bef5f5609375e7b9.png

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
 
241cf2dbd82d4257bef5f5609375e7b9.png

Посмотреть вложение 45673
Я что-то не уловил. Сделав всё так, как в том туториале, this у меня выделялся как ошибка - метод standard статичен.
Посмотреть вложение 45674
При исправлении (убираем пометку static с метода standard) - и теперь мы не можем вызвать метод standard из главного плагина.
Посмотреть вложение 45675
Почитай про static в Java
 
241cf2dbd82d4257bef5f5609375e7b9.png

Посмотреть вложение 45673
Я что-то не уловил. Сделав всё так, как в том туториале, this у меня выделялся как ошибка - метод standard статичен.
Посмотреть вложение 45674
При исправлении (убираем пометку static с метода standard) - и теперь мы не можем вызвать метод standard из главного плагина.
Посмотреть вложение 45675
Потому что ты дурачек.
 
Главный класс(Тот, который extends JavaPlugin):
Java:
public static Main plugin;
@Override
public void onEnable() {
    plugin = this;
}
Класс, в котором находится шедулер:
Java:
Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, new Runnable() {
    @Override
    public void run() {
        // TODO
    }
}, 0, 0);
 
Java:
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler  extends BukkitRunnable {
 
    Main plugin;
 
    Scheduler(Main plugin) {
        this.plugin = plugin;
    }
 
    @Override
    public void run() {
        //TODO
    }
}

Залил на гитхабе в пример.
https://github.com/alexandrage/Example
 
Последнее редактирование:
Java:
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler  extends BukkitRunnable {

    Main plugin;

    Scheduler(Main plugin) {
        this.plugin = plugin;
    }

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

Залил на гитхабе в пример.
https://github.com/alexandrage/Example
Спасибо.

Потому что ты дурачек.
Нельзя было обойтись без этого?
Теперь, когда эта часть работает нормально, мне кажется, что ошибка в самом коде внутри шедулера. Всем спасибо, тема закрыта.
Тем не менее, ошибка была всё же в сигнатуре.
Главный класс(Тот, который extends JavaPlugin):
Java:
public static Main plugin;
@Override
public void onEnable() {
    plugin = this;
}
Класс, в котором находится шедулер:
Java:
Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, new Runnable() {
    @Override
    public void run() {
        // TODO
    }
}, 0, 0);
Этот вариант мне помог. Спасибо.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх