CustomItemModule.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package me.lethunderhawk.custom.item;
  2. import me.lethunderhawk.custom.block.registry.BlockRegistry;
  3. import me.lethunderhawk.custom.item.abstraction.definition.DefaultItemDefinitionValidator;
  4. import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinition;
  5. import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinitionLoader;
  6. import me.lethunderhawk.custom.item.abstraction.definition.ItemDefinitionValidator;
  7. import me.lethunderhawk.custom.item.abstraction.registry.AbilityRegistry;
  8. import me.lethunderhawk.custom.item.abstraction.registry.CustomItemRegistry;
  9. import me.lethunderhawk.custom.item.abstraction.runtime.AbilityDispatchService;
  10. import me.lethunderhawk.custom.item.command.CustomItemCommand;
  11. import me.lethunderhawk.custom.item.concrete.ability.*;
  12. import me.lethunderhawk.custom.item.listener.CustomItemListener;
  13. import me.lethunderhawk.fluxapi.FluxService;
  14. import me.lethunderhawk.fluxapi.util.interfaces.FluxAPIModule;
  15. import me.lethunderhawk.main.BazaarFlux;
  16. import me.lethunderhawk.profile.data.sacks.SackType;
  17. import org.bukkit.command.CommandSender;
  18. import org.bukkit.event.HandlerList;
  19. import org.bukkit.plugin.java.JavaPlugin;
  20. import java.io.File;
  21. import java.util.Map;
  22. public class CustomItemModule extends FluxAPIModule {
  23. private CustomItemListener listener;
  24. public CustomItemModule(JavaPlugin plugin) {
  25. super(plugin);
  26. }
  27. private static void registerAbilities(AbilityRegistry abilityRegistry) {
  28. abilityRegistry.register("test_handler", new TestAbilityHandler());
  29. abilityRegistry.register("rolling_dice", new RollingDiceAbility());
  30. abilityRegistry.register("claim_tool", new ClaimToolAbility());
  31. abilityRegistry.register("hyperion", new HyperionAbility());
  32. abilityRegistry.register("regenerating_block", new RegeneratingBlockAbility());
  33. abilityRegistry.register("mining_sack", new SackAbility(SackType.MINING));
  34. abilityRegistry.register("foraging_sack", new SackAbility(SackType.FORAGING));
  35. }
  36. @Override
  37. public String getPrefix() {
  38. return "[CustomItem]";
  39. }
  40. @Override
  41. public void onEnable() {
  42. AbilityRegistry abilityRegistry = new AbilityRegistry();
  43. registerAbilities(abilityRegistry);
  44. ItemDefinitionValidator validator = new DefaultItemDefinitionValidator();
  45. ItemDefinitionLoader loader = new ItemDefinitionLoader(validator);
  46. BazaarFlux bazaarFlux = FluxService.get(BazaarFlux.class);
  47. File itemsDir = new File(bazaarFlux.getDataFolder(), "custom/items");
  48. // --- Load definitions from disk ---
  49. Map<String, ItemDefinition> definitions = loader.loadAll(itemsDir);
  50. CustomItemRegistry itemRegistry = new CustomItemRegistry()
  51. .fromRegistry(definitions);
  52. // --- Reload listener ---
  53. listener = new CustomItemListener(
  54. new AbilityDispatchService(itemRegistry, abilityRegistry)
  55. );
  56. bazaarFlux.getServer().getPluginManager().registerEvents(listener, bazaarFlux);
  57. // --- FluxService ---
  58. FluxService.register(CustomItemRegistry.class, itemRegistry);
  59. FluxService.register(ItemDefinitionLoader.class, loader);
  60. FluxService.register(ItemDefinitionValidator.class, validator);
  61. FluxService.register(AbilityRegistry.class, abilityRegistry);
  62. BlockRegistry blockRegistry = new BlockRegistry();
  63. bazaarFlux.getServer().getPluginManager().registerEvents(blockRegistry, bazaarFlux);
  64. FluxService.register(BlockRegistry.class, blockRegistry);
  65. registerCommands();
  66. }
  67. private void registerCommands() {
  68. CustomItemCommand customItemCommand = new CustomItemCommand(this);
  69. FluxService.get(BazaarFlux.class).getCommand("customItems").setExecutor(customItemCommand);
  70. FluxService.get(BazaarFlux.class).getCommand("customItems").setTabCompleter(customItemCommand);
  71. }
  72. @Override
  73. public void onDisable() {
  74. if (listener != null) {
  75. HandlerList.unregisterAll(listener);
  76. }
  77. }
  78. public void reload(CommandSender sender, String[] strings) {
  79. if (sender.hasPermission("customItem.reload")) {
  80. onDisable();
  81. onEnable();
  82. }
  83. }
  84. }