package me.lethunderhawk.minion; import me.lethunderhawk.bazaarflux.service.Services; import me.lethunderhawk.bazaarflux.util.interfaces.BazaarFluxModule; import me.lethunderhawk.main.Main; import me.lethunderhawk.minion.command.MinionCommand; import me.lethunderhawk.minion.enchantedVariant.item.EnchantedCobblestone; import me.lethunderhawk.minion.enchantedVariant.item.EnchantedRedstone; import me.lethunderhawk.minion.enchantedVariant.item.abstraction.DisableEnchantedItemPlacingListener; import me.lethunderhawk.minion.enchantedVariant.item.abstraction.EnchantedItem; import me.lethunderhawk.minion.enchantedVariant.item.abstraction.EnchantedItemRegistry; import me.lethunderhawk.minion.enchantedVariant.recipe.RecipeManager; import me.lethunderhawk.minion.factory.MinionFactory; import me.lethunderhawk.minion.impl.type.CobbleMinionType; import me.lethunderhawk.minion.impl.type.RedstoneMinionType; import me.lethunderhawk.minion.listener.MinionListener; import me.lethunderhawk.minion.manager.MinionManager; import me.lethunderhawk.minion.persistence.MinionStorage; import me.lethunderhawk.minion.registry.MinionRegistry; import me.lethunderhawk.minion.runtime.PlacedMinion; import org.bukkit.Material; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; public class MinionModule extends BazaarFluxModule { private List allMinions; private MinionListener minionListener; private MinionFactory factory; private MinionStorage storage; private RecipeManager recipeManager; public MinionModule() { super(Services.get(Main.class)); } @Override public String getPrefix() { return "[Minions]"; } @Override public void onEnable() { allMinions = new ArrayList<>(); customRecipes(); MinionCommand cmd = new MinionCommand(this); plugin.getServer().getPluginCommand("minion").setExecutor(cmd); plugin.getServer().getPluginCommand("minion").setTabCompleter(cmd); this.factory = new MinionFactory(); registerMinions(); loadAllMinions(); minionListener = new MinionListener(plugin, factory.getMinionItem()); plugin.getServer().getPluginManager().registerEvents(minionListener, plugin); } private void customRecipes() { this.recipeManager = new RecipeManager(Services.get(Main.class)); plugin.getServer().getPluginManager().registerEvents(new DisableEnchantedItemPlacingListener(), plugin); registerRecipes(); clearRecipes(); } private void registerRecipes() { EnchantedItem enchantedCobblestone = new EnchantedCobblestone(); recipeManager.registerRecipe( Material.COBBLESTONE, enchantedCobblestone.getItemStack() ); EnchantedItemRegistry.registerNoPlaceItem(enchantedCobblestone.getItemIdKey()); EnchantedItem enchantedRedstone = new EnchantedRedstone(); recipeManager.registerRecipe( Material.REDSTONE, enchantedRedstone.getItemStack() ); EnchantedItemRegistry.registerNoPlaceItem(enchantedRedstone.getItemIdKey()); } public void clearRecipes(){ } public void loadAllMinions(){ storage = new MinionStorage(plugin); List minions = storage.loadAll(); MinionManager.startAndRegisterAll(plugin, minions); } public List getAllMinions(){ return allMinions; } public void registerMinions(){ registerCobbleStoneMinions(); registerRedstoneMinions(); } private void registerRedstoneMinions() { MinionRegistry.register(new RedstoneMinionType()); List heads = factory.createItems("redstone"); allMinions.addAll(heads); } public void registerCobbleStoneMinions(){ MinionRegistry.register(new CobbleMinionType()); List heads = factory.createItems("cobblestone"); allMinions.addAll(heads); } public void reload(){ plugin.getLogger().info("Reloading Minions"); onDisable(); onEnable(); } @Override public void onDisable() { clearRecipes(); unregisterListeners(); saveAllMinions(); } private void saveAllMinions() { storage.saveAllMinionsToStorage(); } public void unregisterListeners() { HandlerList.unregisterAll(minionListener); minionListener = null; } }