Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.xericker.mysteryboxes.menu;
- import com.xericker.mysteryboxes.Main;
- import com.xericker.mysteryboxes.Plugin;
- import com.xericker.mysteryboxes.config.value.LanguageValue;
- import com.xericker.mysteryboxes.menu.builder.MenuBuilder;
- import com.xericker.mysteryboxes.menu.builder.MenuClickExecutor;
- import com.xericker.mysteryboxes.menu.menu.admin.MenuAdminTools;
- import com.xericker.mysteryboxes.menu.menu.admin.MenuEventAdminTools;
- import com.xericker.mysteryboxes.menu.menu.admin.alerts.MenuAlerts;
- import com.xericker.mysteryboxes.menu.menu.admin.alerts.MenuEventAlerts;
- import com.xericker.mysteryboxes.menu.menu.admin.songpack.MenuEventSongPack;
- import com.xericker.mysteryboxes.menu.menu.admin.songpack.MenuSongPack;
- import com.xericker.mysteryboxes.menu.menu.admin.vaultmanager.MenuEventVaultManager;
- import com.xericker.mysteryboxes.menu.menu.admin.vaultmanager.MenuVaultManager;
- import com.xericker.mysteryboxes.menu.menu.craftboxes.MenuCraftBoxes;
- import com.xericker.mysteryboxes.menu.menu.craftboxes.MenuEventCraftBoxes;
- import com.xericker.mysteryboxes.menu.menu.customizeopening.MenuCustomizeOpening;
- import com.xericker.mysteryboxes.menu.menu.customizeopening.MenuEventCustomizeOpening;
- import com.xericker.mysteryboxes.menu.menu.loothistory.MenuEventLootHistory;
- import com.xericker.mysteryboxes.menu.menu.loothistory.MenuLootHistory;
- import com.xericker.mysteryboxes.menu.menu.openboxes.MenuEventOpenBoxes;
- import com.xericker.mysteryboxes.menu.menu.openboxes.MenuOpenBoxes;
- import com.xericker.mysteryboxes.menu.menu.sendgifts.MenuEventSendGifts;
- import com.xericker.mysteryboxes.menu.menu.sendgifts.MenuSendGifts;
- import com.xericker.mysteryboxes.menu.menu.songs.MenuEventSongs;
- import com.xericker.mysteryboxes.menu.menu.songs.MenuSongs;
- import com.xericker.mysteryboxes.menu.menu.themes.MenuEventThemes;
- import com.xericker.mysteryboxes.menu.menu.themes.MenuThemes;
- import com.xericker.mysteryboxes.menu.menu.upgrades.MenuEventUpgrades;
- import com.xericker.mysteryboxes.menu.menu.upgrades.MenuUpgrades;
- import com.xericker.mysteryboxes.menu.menu.vault.MenuEventVault;
- import com.xericker.mysteryboxes.menu.menu.vault.MenuVault;
- import com.xericker.mysteryboxes.menu.menu.yourprofile.MenuEventYourProfile;
- import com.xericker.mysteryboxes.menu.menu.yourprofile.MenuYourProfile;
- import com.xericker.mysteryboxes.playerdata.instance.menu.MenuData;
- import com.xericker.mysteryboxes.playerdata.instance.menu.MenuDataManager;
- import com.xericker.mysteryboxes.plugin.PluginItem;
- import com.xericker.mysteryboxes.plugin.PluginPermission;
- import com.xericker.mysteryboxes.config.ConfigParser;
- import com.xericker.xerlib.file.config.Config;
- import com.xericker.xerlib.file.config.ConfigRegistration;
- import com.xericker.xerlib.file.config.contract.ConfigManager;
- import com.xericker.xerlib.item.ItemNBT;
- import org.bukkit.Material;
- import org.bukkit.configuration.InvalidConfigurationException;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.entity.Player;
- import org.bukkit.event.inventory.InventoryAction;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.InventoryView;
- import org.bukkit.inventory.ItemStack;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.logging.Level;
- public enum Menu {
- /*-----------------------------------------------------------------------------------------------------------------*/
- VAULT(MenuVault.class, MenuEventVault.class),
- YOUR_PROFILE(MenuYourProfile.class, MenuEventYourProfile.class),
- OPEN_BOXES(MenuOpenBoxes.class, MenuEventOpenBoxes.class),
- CRAFT_BOXES(MenuCraftBoxes.class, MenuEventCraftBoxes.class),
- SEND_GIFTS(MenuSendGifts.class, MenuEventSendGifts.class),
- CUSTOMIZE_OPENING(MenuCustomizeOpening.class, MenuEventCustomizeOpening.class),
- LOOT_HISTORY(MenuLootHistory.class, MenuEventLootHistory.class),
- THEMES(MenuThemes.class, MenuEventThemes.class),
- UPGRADES(MenuUpgrades.class, MenuEventUpgrades.class),
- SONGS(MenuSongs.class, MenuEventSongs.class),
- ADMIN_TOOLS(MenuAdminTools.class, MenuEventAdminTools.class),
- ALERTS(MenuAlerts.class, MenuEventAlerts.class),
- VAULT_MANAGER(MenuVaultManager.class, MenuEventVaultManager.class),
- SONG_PACK(MenuSongPack.class, MenuEventSongPack.class);
- /*-----------------------------------------------------------------------------------------------------------------*/
- private final Class<? extends MenuBuilder> builderClass;
- private final Class<? extends MenuClickExecutor> clickClass;
- private final Class<?> triggerClass;
- Menu(Class<? extends MenuBuilder> builderClass, Class<? extends MenuClickExecutor> clickClass) {
- this(builderClass, clickClass, null);
- }
- Menu(Class<? extends MenuBuilder> builderClass, Class<? extends MenuClickExecutor> clickClass, Class<?> triggerClass) {
- this.builderClass = builderClass;
- this.clickClass = clickClass;
- this.triggerClass = triggerClass;
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public String getId() {
- return this.name().toLowerCase().replace("_", "-");
- }
- public String getConfigId() {
- return "menu-" + this.getId();
- }
- public FileConfiguration getFileConfig() {
- ConfigManager configManager = Plugin.getConfigManager();
- return configManager.getConfig(getConfigId()).getFileConfig();
- }
- public static void register() throws IOException, InvalidConfigurationException {
- ConfigManager configManager = Plugin.getConfigManager();
- for (Menu menu : Menu.values()) {
- String configId = menu.getConfigId();
- Config config = configManager.registerConfig(new ConfigRegistration.Builder
- (configId, configId + ".yml", Main.getInstance().getDataFolder().getPath() + "/menus")
- .jarPath("menus/")
- .copyDefaults(true)
- .build()
- );
- config.load();
- }
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public void open(Player player) {
- if (!hasPermission(player)) {
- for (String message : ConfigParser.getStringList(LanguageValue.GENERAL_NO_PERMISSION)) {
- player.sendMessage(message);
- }
- return;
- }
- try {
- MenuBuilder menuBuilder = this.builderClass.getDeclaredConstructor(Menu.class, Player.class).newInstance(this, player);
- menuBuilder.open();
- } catch (Exception exception) {
- Plugin.log(Level.WARNING, "[MENU] Failed to open " + this.name() + " for: " + player.getName(), exception);
- }
- }
- public MenuClickExecutor getClickExecutor(Player player) {
- try {
- return this.clickClass.getDeclaredConstructor(Player.class).newInstance(player);
- } catch (Exception exception) {
- Plugin.log(Level.WARNING, "[MENU] Failed to get click executor of " + this.name() + " for: " + player.getName(), exception);
- }
- return null;
- }
- public Class<?> getTriggerClass() {
- return triggerClass;
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public String[] getPermissions() {
- String unlockPerm = PluginPermission.UNLOCK_MENUS.get();
- String commandPerm = unlockPerm.replace("*", this.name().toLowerCase());
- return new String[]{unlockPerm, commandPerm};
- }
- public boolean hasPermission(Object object) {
- if (!(object instanceof Player player)) return true;
- String[] permissions = getPermissions();
- return Arrays.stream(permissions).anyMatch(player::hasPermission);
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public boolean validateClick(InventoryClickEvent event) {
- InventoryAction[] actionsAllowed = {InventoryAction.PICKUP_ALL, InventoryAction.PICKUP_HALF};
- return validateClick(event, actionsAllowed);
- }
- public boolean validateClick(InventoryClickEvent event, InventoryAction[] actionsAllowed) {
- ItemStack clickedItem = event.getCurrentItem();
- if (clickedItem == null || clickedItem.getType() == Material.AIR) {
- return false;
- }
- Inventory clickedInventory = event.getClickedInventory();
- if (clickedInventory == null || clickedInventory != event.getInventory()) {
- return false;
- }
- return Arrays.asList(actionsAllowed).contains(event.getAction());
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public static void updateTitle(Player player, MenuBuilder menuBuilder) {
- MenuData menuData = MenuDataManager.getData(player);
- InventoryView view = player.getOpenInventory();
- String viewTitle = view.getTitle();
- String menuTitle = menuBuilder.getTitle();
- if (!viewTitle.equals(menuTitle)) {
- menuData.setWindowChange(true);
- menuBuilder.open();
- }
- }
- public void setTrigger(ItemStack itemStack) {
- ItemNBT.add(itemStack, "OPEN_" + this.name(), PluginItem.TRIGGER.name());
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement