diff --git a/InvUI/src/main/java/de/studiocode/invui/InvUI.java b/InvUI/src/main/java/de/studiocode/invui/InvUI.java index 21b18f1..1b7c50a 100644 --- a/InvUI/src/main/java/de/studiocode/invui/InvUI.java +++ b/InvUI/src/main/java/de/studiocode/invui/InvUI.java @@ -6,6 +6,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,27 +18,40 @@ public class InvUI implements Listener { private static InvUI instance; private final List disableHandlers = new ArrayList<>(); - private final Plugin plugin; + private Plugin plugin; private InvUI() { - plugin = ReflectionUtils.getFieldValue(PLUGIN_CLASS_LOADER_PLUGIN_FIELD, getClass().getClassLoader()); - Bukkit.getPluginManager().registerEvents(this, plugin); } public static InvUI getInstance() { return instance == null ? instance = new InvUI() : instance; } + @NotNull public Plugin getPlugin() { + if (plugin == null) { + // get plugin from class loader if it wasn't set manually + plugin = ReflectionUtils.getFieldValue(PLUGIN_CLASS_LOADER_PLUGIN_FIELD, getClass().getClassLoader()); + Bukkit.getPluginManager().registerEvents(this, plugin); + } + return plugin; } - public void addDisableHandler(Runnable runnable) { + public void setPlugin(@NotNull Plugin plugin) { + if (this.plugin != null) + throw new IllegalStateException("Plugin is already set"); + + Bukkit.getPluginManager().registerEvents(this, plugin); + this.plugin = plugin; + } + + public void addDisableHandler(@NotNull Runnable runnable) { disableHandlers.add(runnable); } @EventHandler - public void handlePluginDisable(PluginDisableEvent event) { + private void handlePluginDisable(PluginDisableEvent event) { if (event.getPlugin().equals(plugin)) { disableHandlers.forEach(Runnable::run); }