package me.lethunderhawk.custom.item; import me.lethunderhawk.custom.block.registry.BlockRegistry; import me.lethunderhawk.custom.item.abstraction.definition.DefaultItemDefinitionValidator; import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinition; import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinitionLoader; import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinitionValidator; import me.lethunderhawk.custom.item.abstraction.registry.AbilityRegistry; import me.lethunderhawk.custom.item.abstraction.registry.CustomItemRegistry; import me.lethunderhawk.custom.item.abstraction.runtime.AbilityDispatchService; import me.lethunderhawk.custom.item.command.CustomItemCommand; import me.lethunderhawk.custom.item.concrete.ability.*; import me.lethunderhawk.custom.item.listener.CustomItemListener; import me.lethunderhawk.fluxapi.FluxService; import me.lethunderhawk.fluxapi.util.interfaces.FluxAPIModule; import me.lethunderhawk.main.BazaarFlux; import me.lethunderhawk.profile.data.sacks.SackType; import org.bukkit.command.CommandSender; import org.bukkit.event.HandlerList; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.util.Map; public class CustomItemModule extends FluxAPIModule { private CustomItemListener listener; public CustomItemModule(JavaPlugin plugin) { super(plugin); } private static void registerAbilities(AbilityRegistry abilityRegistry) { abilityRegistry.register("test_handler", new TestAbilityHandler()); abilityRegistry.register("rolling_dice", new RollingDiceAbility()); abilityRegistry.register("claim_tool", new ClaimToolAbility()); abilityRegistry.register("hyperion", new HyperionAbility()); abilityRegistry.register("regenerating_block", new RegeneratingBlockAbility()); abilityRegistry.register("mining_sack", new SackAbility(SackType.MINING)); abilityRegistry.register("foraging_sack", new SackAbility(SackType.FORAGING)); } @Override public String getPrefix() { return "[CustomItem]"; } @Override public void onEnable() { AbilityRegistry abilityRegistry = new AbilityRegistry(); registerAbilities(abilityRegistry); ItemDefinitionValidator validator = new DefaultItemDefinitionValidator(); ItemDefinitionLoader loader = new ItemDefinitionLoader(validator); BazaarFlux bazaarFlux = FluxService.get(BazaarFlux.class); File itemsDir = new File(bazaarFlux.getDataFolder(), "custom/items"); // --- Load definitions from disk --- Map definitions = loader.loadAll(itemsDir); CustomItemRegistry itemRegistry = new CustomItemRegistry() .fromRegistry(definitions); // --- Reload listener --- listener = new CustomItemListener( new AbilityDispatchService(itemRegistry, abilityRegistry) ); bazaarFlux.getServer().getPluginManager().registerEvents(listener, bazaarFlux); // --- FluxService --- FluxService.register(CustomItemRegistry.class, itemRegistry); FluxService.register(ItemDefinitionLoader.class, loader); FluxService.register(ItemDefinitionValidator.class, validator); FluxService.register(AbilityRegistry.class, abilityRegistry); BlockRegistry blockRegistry = new BlockRegistry(); bazaarFlux.getServer().getPluginManager().registerEvents(blockRegistry, bazaarFlux); FluxService.register(BlockRegistry.class, blockRegistry); registerCommands(); } private void registerCommands() { CustomItemCommand customItemCommand = new CustomItemCommand(this); FluxService.get(BazaarFlux.class).getCommand("customItems").setExecutor(customItemCommand); FluxService.get(BazaarFlux.class).getCommand("customItems").setTabCompleter(customItemCommand); } @Override public void onDisable() { if (listener != null) { HandlerList.unregisterAll(listener); } } public void reload(CommandSender sender, String[] strings) { if (sender.hasPermission("customItem.reload")) { onDisable(); onEnable(); } } }