Advertisement
xeRicker

Untitled

Jan 5th, 2025
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.62 KB | None | 0 0
  1. package com.xericker.mysteryboxes.menu;
  2.  
  3. import com.xericker.mysteryboxes.Main;
  4. import com.xericker.mysteryboxes.Plugin;
  5. import com.xericker.mysteryboxes.config.value.LanguageValue;
  6. import com.xericker.mysteryboxes.menu.builder.MenuBuilder;
  7. import com.xericker.mysteryboxes.menu.builder.MenuClickExecutor;
  8. import com.xericker.mysteryboxes.menu.menu.admin.MenuAdminTools;
  9. import com.xericker.mysteryboxes.menu.menu.admin.MenuEventAdminTools;
  10. import com.xericker.mysteryboxes.menu.menu.admin.alerts.MenuAlerts;
  11. import com.xericker.mysteryboxes.menu.menu.admin.alerts.MenuEventAlerts;
  12. import com.xericker.mysteryboxes.menu.menu.admin.songpack.MenuEventSongPack;
  13. import com.xericker.mysteryboxes.menu.menu.admin.songpack.MenuSongPack;
  14. import com.xericker.mysteryboxes.menu.menu.admin.vaultmanager.MenuEventVaultManager;
  15. import com.xericker.mysteryboxes.menu.menu.admin.vaultmanager.MenuVaultManager;
  16. import com.xericker.mysteryboxes.menu.menu.craftboxes.MenuCraftBoxes;
  17. import com.xericker.mysteryboxes.menu.menu.craftboxes.MenuEventCraftBoxes;
  18. import com.xericker.mysteryboxes.menu.menu.customizeopening.MenuCustomizeOpening;
  19. import com.xericker.mysteryboxes.menu.menu.customizeopening.MenuEventCustomizeOpening;
  20. import com.xericker.mysteryboxes.menu.menu.loothistory.MenuEventLootHistory;
  21. import com.xericker.mysteryboxes.menu.menu.loothistory.MenuLootHistory;
  22. import com.xericker.mysteryboxes.menu.menu.openboxes.MenuEventOpenBoxes;
  23. import com.xericker.mysteryboxes.menu.menu.openboxes.MenuOpenBoxes;
  24. import com.xericker.mysteryboxes.menu.menu.sendgifts.MenuEventSendGifts;
  25. import com.xericker.mysteryboxes.menu.menu.sendgifts.MenuSendGifts;
  26. import com.xericker.mysteryboxes.menu.menu.songs.MenuEventSongs;
  27. import com.xericker.mysteryboxes.menu.menu.songs.MenuSongs;
  28. import com.xericker.mysteryboxes.menu.menu.themes.MenuEventThemes;
  29. import com.xericker.mysteryboxes.menu.menu.themes.MenuThemes;
  30. import com.xericker.mysteryboxes.menu.menu.upgrades.MenuEventUpgrades;
  31. import com.xericker.mysteryboxes.menu.menu.upgrades.MenuUpgrades;
  32. import com.xericker.mysteryboxes.menu.menu.vault.MenuEventVault;
  33. import com.xericker.mysteryboxes.menu.menu.vault.MenuVault;
  34. import com.xericker.mysteryboxes.menu.menu.yourprofile.MenuEventYourProfile;
  35. import com.xericker.mysteryboxes.menu.menu.yourprofile.MenuYourProfile;
  36. import com.xericker.mysteryboxes.playerdata.instance.menu.MenuData;
  37. import com.xericker.mysteryboxes.playerdata.instance.menu.MenuDataManager;
  38. import com.xericker.mysteryboxes.plugin.PluginItem;
  39. import com.xericker.mysteryboxes.plugin.PluginPermission;
  40. import com.xericker.mysteryboxes.config.ConfigParser;
  41. import com.xericker.xerlib.file.config.Config;
  42. import com.xericker.xerlib.file.config.ConfigRegistration;
  43. import com.xericker.xerlib.file.config.contract.ConfigManager;
  44. import com.xericker.xerlib.item.ItemNBT;
  45. import org.bukkit.Material;
  46. import org.bukkit.configuration.InvalidConfigurationException;
  47. import org.bukkit.configuration.file.FileConfiguration;
  48. import org.bukkit.entity.Player;
  49. import org.bukkit.event.inventory.InventoryAction;
  50. import org.bukkit.event.inventory.InventoryClickEvent;
  51. import org.bukkit.inventory.Inventory;
  52. import org.bukkit.inventory.InventoryView;
  53. import org.bukkit.inventory.ItemStack;
  54.  
  55. import java.io.IOException;
  56. import java.util.Arrays;
  57. import java.util.logging.Level;
  58.  
  59. public enum Menu {
  60. /*-----------------------------------------------------------------------------------------------------------------*/
  61.  
  62. VAULT(MenuVault.class, MenuEventVault.class),
  63. YOUR_PROFILE(MenuYourProfile.class, MenuEventYourProfile.class),
  64.  
  65. OPEN_BOXES(MenuOpenBoxes.class, MenuEventOpenBoxes.class),
  66. CRAFT_BOXES(MenuCraftBoxes.class, MenuEventCraftBoxes.class),
  67. SEND_GIFTS(MenuSendGifts.class, MenuEventSendGifts.class),
  68. CUSTOMIZE_OPENING(MenuCustomizeOpening.class, MenuEventCustomizeOpening.class),
  69. LOOT_HISTORY(MenuLootHistory.class, MenuEventLootHistory.class),
  70.  
  71. THEMES(MenuThemes.class, MenuEventThemes.class),
  72. UPGRADES(MenuUpgrades.class, MenuEventUpgrades.class),
  73. SONGS(MenuSongs.class, MenuEventSongs.class),
  74.  
  75. ADMIN_TOOLS(MenuAdminTools.class, MenuEventAdminTools.class),
  76. ALERTS(MenuAlerts.class, MenuEventAlerts.class),
  77. VAULT_MANAGER(MenuVaultManager.class, MenuEventVaultManager.class),
  78. SONG_PACK(MenuSongPack.class, MenuEventSongPack.class);
  79.  
  80. /*-----------------------------------------------------------------------------------------------------------------*/
  81.  
  82. private final Class<? extends MenuBuilder> builderClass;
  83. private final Class<? extends MenuClickExecutor> clickClass;
  84. private final Class<?> triggerClass;
  85.  
  86. Menu(Class<? extends MenuBuilder> builderClass, Class<? extends MenuClickExecutor> clickClass) {
  87. this(builderClass, clickClass, null);
  88. }
  89.  
  90. Menu(Class<? extends MenuBuilder> builderClass, Class<? extends MenuClickExecutor> clickClass, Class<?> triggerClass) {
  91. this.builderClass = builderClass;
  92. this.clickClass = clickClass;
  93. this.triggerClass = triggerClass;
  94. }
  95.  
  96. /*-----------------------------------------------------------------------------------------------------------------*/
  97.  
  98. public String getId() {
  99. return this.name().toLowerCase().replace("_", "-");
  100. }
  101.  
  102. public String getConfigId() {
  103. return "menu-" + this.getId();
  104. }
  105.  
  106. public FileConfiguration getFileConfig() {
  107. ConfigManager configManager = Plugin.getConfigManager();
  108. return configManager.getConfig(getConfigId()).getFileConfig();
  109. }
  110.  
  111. public static void register() throws IOException, InvalidConfigurationException {
  112. ConfigManager configManager = Plugin.getConfigManager();
  113. for (Menu menu : Menu.values()) {
  114. String configId = menu.getConfigId();
  115.  
  116. Config config = configManager.registerConfig(new ConfigRegistration.Builder
  117. (configId, configId + ".yml", Main.getInstance().getDataFolder().getPath() + "/menus")
  118. .jarPath("menus/")
  119. .copyDefaults(true)
  120. .build()
  121. );
  122. config.load();
  123. }
  124. }
  125.  
  126. /*-----------------------------------------------------------------------------------------------------------------*/
  127.  
  128. public void open(Player player) {
  129. if (!hasPermission(player)) {
  130. for (String message : ConfigParser.getStringList(LanguageValue.GENERAL_NO_PERMISSION)) {
  131. player.sendMessage(message);
  132. }
  133. return;
  134. }
  135. try {
  136. MenuBuilder menuBuilder = this.builderClass.getDeclaredConstructor(Menu.class, Player.class).newInstance(this, player);
  137. menuBuilder.open();
  138. } catch (Exception exception) {
  139. Plugin.log(Level.WARNING, "[MENU] Failed to open " + this.name() + " for: " + player.getName(), exception);
  140. }
  141. }
  142.  
  143. public MenuClickExecutor getClickExecutor(Player player) {
  144. try {
  145. return this.clickClass.getDeclaredConstructor(Player.class).newInstance(player);
  146. } catch (Exception exception) {
  147. Plugin.log(Level.WARNING, "[MENU] Failed to get click executor of " + this.name() + " for: " + player.getName(), exception);
  148. }
  149. return null;
  150. }
  151.  
  152. public Class<?> getTriggerClass() {
  153. return triggerClass;
  154. }
  155.  
  156. /*-----------------------------------------------------------------------------------------------------------------*/
  157.  
  158. public String[] getPermissions() {
  159. String unlockPerm = PluginPermission.UNLOCK_MENUS.get();
  160. String commandPerm = unlockPerm.replace("*", this.name().toLowerCase());
  161.  
  162. return new String[]{unlockPerm, commandPerm};
  163. }
  164.  
  165. public boolean hasPermission(Object object) {
  166. if (!(object instanceof Player player)) return true;
  167.  
  168. String[] permissions = getPermissions();
  169. return Arrays.stream(permissions).anyMatch(player::hasPermission);
  170. }
  171.  
  172. /*-----------------------------------------------------------------------------------------------------------------*/
  173.  
  174. public boolean validateClick(InventoryClickEvent event) {
  175. InventoryAction[] actionsAllowed = {InventoryAction.PICKUP_ALL, InventoryAction.PICKUP_HALF};
  176. return validateClick(event, actionsAllowed);
  177. }
  178.  
  179. public boolean validateClick(InventoryClickEvent event, InventoryAction[] actionsAllowed) {
  180. ItemStack clickedItem = event.getCurrentItem();
  181. if (clickedItem == null || clickedItem.getType() == Material.AIR) {
  182. return false;
  183. }
  184.  
  185. Inventory clickedInventory = event.getClickedInventory();
  186. if (clickedInventory == null || clickedInventory != event.getInventory()) {
  187. return false;
  188. }
  189. return Arrays.asList(actionsAllowed).contains(event.getAction());
  190. }
  191.  
  192. /*-----------------------------------------------------------------------------------------------------------------*/
  193.  
  194. public static void updateTitle(Player player, MenuBuilder menuBuilder) {
  195. MenuData menuData = MenuDataManager.getData(player);
  196. InventoryView view = player.getOpenInventory();
  197.  
  198. String viewTitle = view.getTitle();
  199. String menuTitle = menuBuilder.getTitle();
  200.  
  201. if (!viewTitle.equals(menuTitle)) {
  202. menuData.setWindowChange(true);
  203. menuBuilder.open();
  204. }
  205. }
  206.  
  207. public void setTrigger(ItemStack itemStack) {
  208. ItemNBT.add(itemStack, "OPEN_" + this.name(), PluginItem.TRIGGER.name());
  209. }
  210.  
  211. /*-----------------------------------------------------------------------------------------------------------------*/
  212. }
  213.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement