InvUI#setPlugin

This commit is contained in:
NichtStudioCode 2022-08-27 02:14:35 +02:00
parent 4e5b16d027
commit 26b0dd1ff0

@ -6,6 +6,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -17,27 +18,40 @@ public class InvUI implements Listener {
private static InvUI instance; private static InvUI instance;
private final List<Runnable> disableHandlers = new ArrayList<>(); private final List<Runnable> disableHandlers = new ArrayList<>();
private final Plugin plugin; private Plugin plugin;
private InvUI() { private InvUI() {
plugin = ReflectionUtils.getFieldValue(PLUGIN_CLASS_LOADER_PLUGIN_FIELD, getClass().getClassLoader());
Bukkit.getPluginManager().registerEvents(this, plugin);
} }
public static InvUI getInstance() { public static InvUI getInstance() {
return instance == null ? instance = new InvUI() : instance; return instance == null ? instance = new InvUI() : instance;
} }
@NotNull
public Plugin getPlugin() { 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; 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); disableHandlers.add(runnable);
} }
@EventHandler @EventHandler
public void handlePluginDisable(PluginDisableEvent event) { private void handlePluginDisable(PluginDisableEvent event) {
if (event.getPlugin().equals(plugin)) { if (event.getPlugin().equals(plugin)) {
disableHandlers.forEach(Runnable::run); disableHandlers.forEach(Runnable::run);
} }