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

Помогите org.bukkit.event.EventException / Caused by: java.lang.StackOverflowError

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Помогите, пожалуйста. Ошибка в названии.

    Код, вызывающий ошибки, (исходя из stacktrace): https://pastebin.com/HZtckzmW
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Нельзя открывать игроку инвентарь при событиях InventoryOpenEvent и InventoryCloseEvent, используй Scheduler#runTask чтобы вызывать это сразу после обработки события.
     
  3. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Можно пример? Приблизительно понял, но не до конца, спасибо.)
     
  4. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Код:
    Bukkit.getScheduler().runTask(plugin, () -> {
        player.openInventory(inventory);
    });
     
  5. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Благодарю, сейчас поправлю. Если поможет, то закрою тему.
     
  6. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Откуда ты вызываешь openPINRegistration(Player player) ?
     
  7. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Из этого же класса.
     
  8. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Теперь ошибка plugin can't be null. Если что, переменная есть, и она нормально используется в других методах этого класса.
     
  9. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Скинь стак трейс ошибки
     
  10. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Сейчас.
     
  11. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Код:
    [18:06:12] [Server thread/ERROR]: Could not pass event InventoryCloseEvent to PINAuth v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.handleInventoryCloseEvent(CraftEventFactory.java:852) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1411) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInCloseWindow.a(PacketPlayInCloseWindow.java:18) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInCloseWindow.a(PacketPlayInCloseWindow.java:1) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [core.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_211]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_211]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [core.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
    Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
        at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.validate(CraftScheduler.java:397) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTaskTimer(CraftScheduler.java:123) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTaskLater(CraftScheduler.java:106) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTask(CraftScheduler.java:89) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at ru.sintezgames.pinauth.InventoryManager.onClose(InventoryManager.java:139) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[core.jar:git-Spigot-db6de12-18fbb24]
        ... 16 more
     
  12. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
    Ты должен туда кинуть свой плагин (обьект класса который наследует JavaPlugin)
     
  13. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Я это и сделал.
     
  14. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury

    Код:
    /*Bukkit.getScheduler().runTask(plugin, () -> { Строка с ошибкой (Она находится в классе InventoryManager.java)*/
    
    // MainClass.java
    private static MainClass instance;
    @Override
    public void onEnable() {
        instance = this;
    }
    
    public static MainClass getPlugin() {
        return plugin;
    }
    
    // InventoryManager.java
    
    private MainClass plugin = MainClass.getPlugin();
    
    
     
  15. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    И нахрена тебе две одинаковых переменных интсенс и плагин? Да и плагин у тебя будет инициализрован в нуль. Короче иди зубри порядок инициализации переменных в жаве
     
  16. Nikolai_Faint

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

    Баллы:
    96
    При чем тут это если он вызывает инстанс своего класса а не плуга?

    PHP:
    public static Plugin getPlugin() {
         return 
    plugin;
    }
     
  17. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Тут логика нарушена.
    Сначала создается MainClass обьект а потом вызывается onEnable(), потому сначала вызывается:
    MainClass plugin = MainClass.getPlugin();
    а потом уже:
    instance = this;

    И да, тебе нет смысла создавать две ссылки на свой плагин. Ты либо сделай один instance статический, который хоть через метод, хоть напрямую будешь брать, либо делай по человечески и передавай this во все зависимые классы еще на этапе onEnable()
     
  18. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Можно пример, пожалуйста? :3
     
    Последнее редактирование: 26 май 2019
  19. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Че за хрень ты написал?
     
  20. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Код:
    public class MyPlugin extends JavaPlugin {
        public void onEnable() {
            new Manager(this);
        }
    }
    Где:
    Код:
    public class Manager {
        private MyPlugin plugin;
    
        public Manager(MyPlugin plugin) {
            this.plugin = plugin;
            // this.plugin.getAnotherManager()...... - взаемодействие с другими "модулями" плагина
        }
    }
    Так везде в конструкторы передаешь и не используешь статики.
    Иногда статики нужны (лично для меня например), когда юзаю классы утилиты, тут уже делаю статик инст и использую только там где критически необходимо.
     
Статус темы:
Закрыта.

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