package me.unurled.sacredrealms.sr.managers; import static me.unurled.sacredrealms.sr.utils.Logger.error; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.clientbuild.ClientBuildManager; import me.unurled.sacredrealms.sr.components.combat.CombatManager; import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.item.ItemManager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.treasure.TreasureManager; import me.unurled.sacredrealms.sr.data.DataManager; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class Managers { private final List managers; public Managers() { managers = new ArrayList<>(); // register managers here (like a new instance of them) register( List.of( DataManager.class, PlayerManager.class, CombatManager.class, ItemManager.class, EntityManager.class, ClientBuildManager.class, TreasureManager.class)); } private void register(@NotNull List> clazz) { int i = 0; for (Class c : clazz) { Bukkit.getScheduler() .runTaskLater( SR.getInstance(), () -> { try { c.getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { error("Failed to register manager: " + c.getSimpleName()); } }, 10L * i); i++; } } public void addManager(Manager manager) { managers.add(manager); } public void unload() { for (Manager manager : managers) { manager.unload(); } } @Nullable public Manager getManager(Class clazz) { for (Manager manager : managers) { if (manager.getClass().equals(clazz)) { return manager; } } return null; } }