Search code examples
javainitializationminecraftbukkitspigot

Why does a local test server initialize my plugin twice?


I am developing a minecraft bukkit plugin. Whenever I want to test the plugin by starting a server, the following error appears:

[11:05:09 ERROR]: Error occurred while enabling JizzpowerpluginByAndysepp v0.1.1-indev (Is it up to date?)
java.lang.IllegalArgumentException: Plugin already initialized!
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:281) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.PluginClassLoader.init(PluginClassLoader.java:153) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:57) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at jizzpowerpluginbyandysepp-0.1.1-indev.jar/ch.ksrminecraft.jizzpowerpluginByAndysepp.listeners.SilenceWarden.<init>(SilenceWarden.java:18) ~[jizzpowerpluginbyandysepp-0.1.1-indev.jar:?]
        at jizzpowerpluginbyandysepp-0.1.1-indev.jar/ch.ksrminecraft.jizzpowerpluginByAndysepp.JizzpowerpluginByAndysepp.registerListeners(JizzpowerpluginByAndysepp.java:34) ~[jizzpowerpluginbyandysepp-0.1.1-indev.jar:?]
        at jizzpowerpluginbyandysepp-0.1.1-indev.jar/ch.ksrminecraft.jizzpowerpluginByAndysepp.JizzpowerpluginByAndysepp.onEnable(JizzpowerpluginByAndysepp.java:18) ~[jizzpowerpluginbyandysepp-0.1.1-indev.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:284) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:202) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:109) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:520) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:657) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:606) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:743) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:488) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:322) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1163) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalStateException: Initial initialization
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:284) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.PluginClassLoader.init(PluginClassLoader.java:153) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:57) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at jizzpowerpluginbyandysepp-0.1.1-indev.jar/ch.ksrminecraft.jizzpowerpluginByAndysepp.JizzpowerpluginByAndysepp.<init>(JizzpowerpluginByAndysepp.java:12) ~[jizzpowerpluginbyandysepp-0.1.1-indev.jar:?]
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:98) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.provider.type.spigot.SpigotPluginProvider.createInstance(SpigotPluginProvider.java:125) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at io.papermc.paper.plugin.provider.type.spigot.SpigotPluginProvider.createInstance(SpigotPluginProvider.java:35) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at io.papermc.paper.plugin.entrypoint.strategy.modern.ModernPluginLoadingStrategy.loadProviders(ModernPluginLoadingStrategy.java:116) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:38) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.enter(LaunchEntryPointHandler.java:39) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:563) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:277) ~[paper-1.21.4.jar:1.21.4-164-8eb8e44]
        ... 3 more

This means that my plugin is getting initialized twice, for whatever reason.

I tried with both plugins which were packaged by maven (original-jizzpowerpluginbyandysepp-0.1.1-indev.jar and jizzpowerpluginbyandysepp-0.1.1-indev.jar) one at a time and made sure there were no duplicate plugins inside the plugin folder. Still, the problem persisted.

I googled the problem and saw that someone had shown how to see where the problem occurred. The error caused by my plugin is like so:

java.lang.IllegalArgumentException: Plugin already initialized!

...

Caused by: java.lang.IllegalStateException: Initial initialization

...

at jizzpowerpluginbyandysepp-0.1.1-indev.jar/ch.ksrminecraft.jizzpowerpluginByAndysepp.JizzpowerpluginByAndysepp.<init>(JizzpowerpluginByAndysepp.java:12) ~[jizzpowerpluginbyandysepp-0.1.1-indev.jar:?]

This means that the error comes from line 12 of my main class (JizzpowerpluginByAndysepp) My main class looks like this:

package ch.ksrminecraft.jizzpowerpluginByAndysepp;

import org.bukkit.plugin.java.JavaPlugin;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.commands.GUICommand;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.commands.PlayerTroll;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.listeners.SilenceWarden;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.listeners.InventoryListener;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.utils.TrollTabCompleter;
import ch.ksrminecraft.jizzpowerpluginByAndysepp.utils.ItemBuilder;


public final class JizzpowerpluginByAndysepp extends JavaPlugin { // <-- line 12
    @Override
    public void onEnable() {
        // Plugin startup logic
        registerCommands();
        registerListeners();

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }

    private void registerCommands() { // registerCommands() is called in onEnable() to register the commands
        getCommand("troll").setExecutor(new PlayerTroll(this));
        getCommand("troll").setTabCompleter(new TrollTabCompleter(this));
        getCommand("trollgui").setExecutor(new GUICommand(this));
    }

    private void registerListeners( ) { // registerListeners() is called in onEnable() to register the listeners
        getServer().getPluginManager().registerEvents(new SilenceWarden(this), this);
        getServer().getPluginManager().registerEvents(new InventoryListener(this), this);
    }
}

My interpretation is that something is wrong with the main class, but I can't see what.


Solution

  • As @Jannis mentioned, the problem lies in the SilenceWarden class. When digging into the problem, I realized that something was wrong with the constructor. So I tried the plugin without said constructor to no avail. Then I realized that SilenceWarden extended JavaPlugin for some reason, something that only the main class may do. So I deleted that extension and presto! I don't know how that happened, maybe ChatGPT didn't know what it was doing. Thanks for your help!