MinionModule.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package me.lethunderhawk.minion;
  2. import me.lethunderhawk.fluxapi.FluxService;
  3. import me.lethunderhawk.fluxapi.util.interfaces.BazaarFluxModule;
  4. import me.lethunderhawk.main.Main;
  5. import me.lethunderhawk.minion.command.MinionCommand;
  6. import me.lethunderhawk.minion.enchantedVariant.item.EnchantedCobblestone;
  7. import me.lethunderhawk.minion.enchantedVariant.item.EnchantedRedstone;
  8. import me.lethunderhawk.minion.enchantedVariant.item.abstraction.DisableEnchantedItemPlacingListener;
  9. import me.lethunderhawk.minion.enchantedVariant.item.abstraction.EnchantedItem;
  10. import me.lethunderhawk.minion.enchantedVariant.item.abstraction.EnchantedItemRegistry;
  11. import me.lethunderhawk.minion.enchantedVariant.recipe.RecipeManager;
  12. import me.lethunderhawk.minion.factory.MinionFactory;
  13. import me.lethunderhawk.minion.impl.type.CobbleMinionType;
  14. import me.lethunderhawk.minion.impl.type.RedstoneMinionType;
  15. import me.lethunderhawk.minion.listener.MinionListener;
  16. import me.lethunderhawk.minion.manager.MinionManager;
  17. import me.lethunderhawk.minion.persistence.MinionStorage;
  18. import me.lethunderhawk.minion.registry.MinionRegistry;
  19. import me.lethunderhawk.minion.runtime.PlacedMinion;
  20. import org.bukkit.Material;
  21. import org.bukkit.event.HandlerList;
  22. import org.bukkit.inventory.ItemStack;
  23. import org.bukkit.plugin.java.JavaPlugin;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. public class MinionModule extends BazaarFluxModule {
  27. private List<ItemStack> allMinions;
  28. private MinionListener minionListener;
  29. private MinionFactory factory;
  30. private MinionStorage storage;
  31. private RecipeManager recipeManager;
  32. public MinionModule(JavaPlugin plugin) {
  33. super(plugin);
  34. }
  35. @Override
  36. public String getPrefix() {
  37. return "[Minions]";
  38. }
  39. @Override
  40. public void onEnable() {
  41. allMinions = new ArrayList<>();
  42. customRecipes();
  43. MinionCommand cmd = new MinionCommand(this);
  44. plugin.getServer().getPluginCommand("minion").setExecutor(cmd);
  45. plugin.getServer().getPluginCommand("minion").setTabCompleter(cmd);
  46. this.factory = new MinionFactory();
  47. registerMinions();
  48. loadAllMinions();
  49. minionListener = new MinionListener(plugin, factory.getMinionItem());
  50. plugin.getServer().getPluginManager().registerEvents(minionListener, plugin);
  51. }
  52. private void customRecipes() {
  53. this.recipeManager = new RecipeManager(FluxService.get(Main.class));
  54. plugin.getServer().getPluginManager().registerEvents(new DisableEnchantedItemPlacingListener(), plugin);
  55. registerRecipes();
  56. clearRecipes();
  57. }
  58. private void registerRecipes() {
  59. EnchantedItem enchantedCobblestone = new EnchantedCobblestone();
  60. recipeManager.registerRecipe(
  61. Material.COBBLESTONE,
  62. enchantedCobblestone.getItemStack()
  63. );
  64. EnchantedItemRegistry.registerNoPlaceItem(enchantedCobblestone.getItemIdKey());
  65. EnchantedItem enchantedRedstone = new EnchantedRedstone();
  66. recipeManager.registerRecipe(
  67. Material.REDSTONE,
  68. enchantedRedstone.getItemStack()
  69. );
  70. EnchantedItemRegistry.registerNoPlaceItem(enchantedRedstone.getItemIdKey());
  71. }
  72. public void clearRecipes(){
  73. }
  74. public void loadAllMinions(){
  75. storage = new MinionStorage(plugin);
  76. List<PlacedMinion> minions = storage.loadAll();
  77. MinionManager.startAndRegisterAll(plugin, minions);
  78. }
  79. public List<ItemStack> getAllMinions(){
  80. return allMinions;
  81. }
  82. public void registerMinions(){
  83. registerCobbleStoneMinions();
  84. registerRedstoneMinions();
  85. }
  86. private void registerRedstoneMinions() {
  87. MinionRegistry.register(new RedstoneMinionType());
  88. List<ItemStack> heads = factory.createItems("redstone");
  89. allMinions.addAll(heads);
  90. }
  91. public void registerCobbleStoneMinions(){
  92. MinionRegistry.register(new CobbleMinionType());
  93. List<ItemStack> heads = factory.createItems("cobblestone");
  94. allMinions.addAll(heads);
  95. }
  96. public void reload(){
  97. plugin.getLogger().info("Reloading Minions");
  98. onDisable();
  99. onEnable();
  100. }
  101. @Override
  102. public void onDisable() {
  103. clearRecipes();
  104. unregisterListeners();
  105. saveAllMinions();
  106. }
  107. private void saveAllMinions() {
  108. storage.saveAllMinionsToStorage();
  109. }
  110. public void unregisterListeners() {
  111. HandlerList.unregisterAll(minionListener);
  112. minionListener = null;
  113. }
  114. }