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

Статус
Закрыто для дальнейших ответов.

SintezGames

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

Код, вызывающий ошибки, (исходя из stacktrace): https://pastebin.com/HZtckzmW
 
Нельзя открывать игроку инвентарь при событиях InventoryOpenEvent и InventoryCloseEvent, используй Scheduler#runTask чтобы вызывать это сразу после обработки события.
 
Нельзя открывать игроку инвентарь при событиях InventoryOpenEvent и InventoryCloseEvent, используй Scheduler#runTask чтобы вызывать это сразу после обработки события.
Можно пример? Приблизительно понял, но не до конца, спасибо.)
 
Скинь стак трейс ошибки

Код:
[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
 
Код:
[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
Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
Ты должен туда кинуть свой плагин (обьект класса который наследует JavaPlugin)
 
Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
Ты должен туда кинуть свой плагин (обьект класса который наследует JavaPlugin)


Код:
/*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();
 
Код:
/*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();
И нахрена тебе две одинаковых переменных интсенс и плагин? Да и плагин у тебя будет инициализрован в нуль. Короче иди зубри порядок инициализации переменных в жаве
 
И нахрена тебе две одинаковых переменных интсенс и плагин? Да и плагин у тебя будет инициализрован в нуль. Короче иди зубри порядок инициализации переменных в жаве
При чем тут это если он вызывает инстанс своего класса а не плуга?

PHP:
public static Plugin getPlugin() {
     return plugin;
}
 
Код:
/*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();
Тут логика нарушена.
Сначала создается MainClass обьект а потом вызывается onEnable(), потому сначала вызывается:
MainClass plugin = MainClass.getPlugin();
а потом уже:
instance = this;

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

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

Можно пример, пожалуйста? :3
 
Последнее редактирование:
Можно пример, пожалуйста? :3
Код:
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()...... - взаемодействие с другими "модулями" плагина
    }
}

Так везде в конструкторы передаешь и не используешь статики.
Иногда статики нужны (лично для меня например), когда юзаю классы утилиты, тут уже делаю статик инст и использую только там где критически необходимо.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх