MinionModule.java 4.4 KB

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