Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.xericker.mysteryboxes.menus.menus.sendgifts;
- import com.xericker.mysteryboxes.config.files.ConfigValue;
- import com.xericker.mysteryboxes.config.files.menus.SendGiftsMenuValue;
- import com.xericker.mysteryboxes.config.files.menus.ThemesMenuValue;
- import com.xericker.mysteryboxes.config.handlers.ConfigParser;
- import com.xericker.mysteryboxes.core.data.boxes.Box;
- import com.xericker.mysteryboxes.core.data.boxes.BoxManager;
- import com.xericker.mysteryboxes.core.items.BoxItemBuilder;
- import com.xericker.mysteryboxes.core.placeholders.GeneralPlaceholders;
- import com.xericker.mysteryboxes.core.placeholders.GiftPlaceholders;
- import com.xericker.mysteryboxes.libraries.itembuilder.ItemDisplay;
- import com.xericker.mysteryboxes.libraries.itembuilder.MenuItem;
- import com.xericker.mysteryboxes.libraries.itembuilder.MenuItemBuilder;
- import com.xericker.mysteryboxes.menus.Menu;
- import com.xericker.mysteryboxes.menus.MenuInterface;
- import com.xericker.mysteryboxes.menus.MenuTrigger;
- import com.xericker.mysteryboxes.menus.menus.openboxes.OpenBoxesTrigger;
- import com.xericker.mysteryboxes.playerdata.gifting.GiftingData;
- import com.xericker.mysteryboxes.playerdata.gifting.GiftingDataManager;
- import com.xericker.mysteryboxes.playerdata.menus.MenuData;
- import com.xericker.mysteryboxes.playerdata.menus.MenuDataManager;
- import com.xericker.mysteryboxes.playerdata.player.PlayerData;
- import com.xericker.mysteryboxes.playerdata.player.PlayerDataManager;
- import org.bukkit.Bukkit;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.entity.Player;
- import org.bukkit.event.Listener;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.InventoryView;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.TreeMap;
- public class MenuSendGifts implements MenuInterface, Listener {
- /*-----------------------------------------------------------------------------------------------------------------*/
- private Player player;
- private Inventory inventory;
- private List<Object> items;
- private int page = 1;
- /*-----------------------------------------------------------------------------------------------------------------*/
- private PlayerData playerData;
- private MenuData menuData;
- /*-----------------------------------------------------------------------------------------------------------------*/
- @Override
- public void open(Player player) {
- this.player = player;
- playerData = PlayerDataManager.getData(player);
- menuData = MenuDataManager.getData(player);
- items = new ArrayList<>();
- int rows = getRows();
- String title = getTitle();
- Menu previousMenu = menuData.getCurrentType();
- inventory = Bukkit.createInventory(null, rows * 9, title);
- player.openInventory(inventory);
- menuData = MenuDataManager.getData(player);
- menuData.setMenu(this);
- menuData.setKeepData(false);
- menuData.setPreviousType(previousMenu);
- menuData.setPreviousType(previousMenu);
- menuData.setCurrentType(Menu.SEND_GIFTS);
- if (previousMenu != Menu.SEND_GIFTS) {
- GiftingDataManager.removeData(player.getUniqueId());
- }
- update();
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- @Override
- public void update() {
- FileConfiguration menuFile = Menu.SEND_GIFTS.getConfig();
- if (menuFile == null) return;
- GiftingData giftingData = GiftingDataManager.getData(player);
- InventoryView invView = player.getOpenInventory();
- if (!invView.getTitle().equals(getTitle())) {
- menuData.setKeepData(true);
- open(player);
- }
- List<MenuItemBuilder> itemBuilders = Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory);
- List<Object> objectsDisplayed = new ArrayList<>();
- List<Integer> giftLayout = Menu.getLayout('X', ConfigParser.getStringList(SendGiftsMenuValue.LAYOUT_GIFT_LAYOUT));
- List<Integer> playerLayout = Menu.getLayout('X', ConfigParser.getStringList(SendGiftsMenuValue.LAYOUT_PLAYER_LAYOUT));
- boolean sortByPriority = ConfigParser.getBoolean(SendGiftsMenuValue.LAYOUT_SORT_GIFTS);
- boolean mergeByType = ConfigParser.getBoolean(SendGiftsMenuValue.LAYOUT_MERGE_GIFTS);
- boolean unlockGifts = ConfigParser.getBoolean(ConfigValue.UNLOCK_GIFTS);
- /*-----------------------------
- # CHOOSE GIFT
- -----------------------------*/
- if (giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT) {
- TreeMap<Integer, Box> gifts = new TreeMap<>();
- for (Box box : BoxManager.getBoxList()) {
- int giftsAvailable = playerData.getGifts(box);
- if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
- if (box.getBoxStatus() != Box.BoxStatus.ENABLED) continue;
- if (giftsAvailable == 0) continue;
- if (!sortByPriority) {
- gifts.put(gifts.lastKey() + 1, box);
- continue;
- }
- int priority = gifts.isEmpty() ? box.getBoxSettings().priority : gifts.lastKey() + box.getBoxSettings().priority;
- gifts.put(priority, box);
- }
- int giftIndex = -1;
- int giftLayoutIndex = -1;
- int skipIndex = giftLayout.size() * (page - 1);
- if (page > 1) skipIndex++;
- int totalGifts = 0;
- for (Box box : playerData.getBoxes().keySet()) {
- int giftsAvailable = playerData.getGifts(box);
- if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
- if (mergeByType) totalGifts++;
- else totalGifts += giftsAvailable;
- }
- for (Map.Entry<Integer, Box> boxSet : gifts.entrySet()) {
- Box box = boxSet.getValue();
- int giftsAvailable = playerData.getGifts(box);
- if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
- for (int i = 0; i < (!mergeByType ? giftsAvailable : 1); i++) {
- giftIndex++;
- if (giftIndex < skipIndex - 1) continue;
- giftLayoutIndex++;
- if (giftLayoutIndex >= giftLayout.size()) break;
- GiftPlaceholders.GiftPlaceholder giftPlaceholder = GiftPlaceholders.getPlaceholder(player, box);
- SendGiftsMenuValue boxStatusValue = null;
- switch (giftPlaceholder) {
- case CLICK_TO_GIFT -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_CLICK_TO_GIFT;
- case UNAVAILABLE -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_UNAVAILABLE;
- case NO_PERMISSION -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_NO_PERMISSION;
- }
- MenuItemBuilder boxInstance = null;
- for (MenuItemBuilder itemBuilder : Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory)) {
- if (!itemBuilder.equalsTrigger(OpenBoxesTrigger.BOX_INSTANCE)) continue;
- boxInstance = itemBuilder;
- }
- if (boxInstance != null) {
- ItemStack boxItem = BoxItemBuilder.getItem(player, box, true);
- ItemMeta boxMeta = boxItem.getItemMeta();
- if (boxMeta == null) continue;
- String instanceName = boxInstance.getItem().getName();
- instanceName = GeneralPlaceholders.translate(player, box, instanceName);
- List<String> instanceLore = new ArrayList<>();
- for (String loreLine : boxInstance.getItem().getLore()) {
- List<String> boxDescription = boxMeta.getLore();
- if (loreLine.contains("{BOX_DESCRIPTION") && boxDescription != null) {
- instanceLore.addAll(boxDescription);
- continue;
- }
- String boxStatusPlaceholder = ConfigParser.getString(boxStatusValue);
- if (boxStatusPlaceholder == null) boxStatusPlaceholder = "§c⚠ Placeholder is NULL";
- loreLine = loreLine.replace("{STATUS_PLACEHOLDER}", boxStatusPlaceholder);
- loreLine = GeneralPlaceholders.translate(player, box, loreLine);
- instanceLore.add(loreLine);
- }
- boxInstance.getItem().setName(instanceName);
- boxInstance.getItem().setLore(instanceLore);
- boxInstance.getItem().setType(boxItem.getType());
- boxInstance.getItem().setPlayerHead(box.getBoxSettings().playerHead);
- boxInstance.getItem().setCustomHead(box.getBoxSettings().customHead);
- boxInstance.addTag("boxId", box.getBoxId());
- boxInstance.setSlot(giftLayout.get(giftLayoutIndex));
- boxInstance.build();
- objectsDisplayed.add(boxInstance);
- }
- }
- }
- for (MenuItemBuilder itemBuilder : itemBuilders) {
- boolean equalsNoGifts = itemBuilder.equalsTrigger(SendGiftsTrigger.NO_GIFTS);
- if (equalsNoGifts && gifts.size() > 0) continue;
- boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
- if (equalsGoToPreviousPage && page <= 1) continue;
- boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
- if (equalsGoToNextPage && skipIndex >= totalGifts - giftLayout.size()) continue;
- if (!equalsNoGifts && !equalsGoToPreviousPage && !equalsGoToNextPage) continue;
- itemBuilder.build();
- objectsDisplayed.add(itemBuilder);
- }
- }
- /*-----------------------------
- # CHOOSE RECEIVER
- -----------------------------*/
- if (giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_RECEIVER) {
- List<Player> receivers = new ArrayList<>(Bukkit.getOnlinePlayers());
- receivers.remove(player);
- int playerIndex = -1;
- int playerLayoutIndex = -1;
- int skipIndex = playerLayout.size() * (page - 1);
- if (page > 1) skipIndex++;
- Box gift = giftingData.getChosenGift();
- for (Player receiver : receivers) {
- playerIndex++;
- if (playerIndex < skipIndex - 1) continue;
- playerLayoutIndex++;
- if (playerLayoutIndex == playerLayout.size()) break;
- MenuItemBuilder receiverInstance = null;
- for (MenuItemBuilder menuItemBuilder2 : Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory)) {
- if (!menuItemBuilder2.equalsTrigger(SendGiftsTrigger.RECEIVER)) continue;
- receiverInstance = menuItemBuilder2;
- }
- if (receiverInstance != null) {
- MenuItem menuItem = receiverInstance.getItem();
- menuItem.setName(GeneralPlaceholders.translate(receiver, gift, menuItem.getName()));
- menuItem.setName(menuItem.getName().replace("{RECEIVER}", receiver.getName()));
- List<String> lore = new ArrayList<>();
- for (String loreLine : menuItem.getLore()) {
- loreLine = loreLine.replace("{RECEIVER}", receiver.getName());
- loreLine = GeneralPlaceholders.translate(player, gift, loreLine);
- lore.add(loreLine);
- }
- menuItem.setLore(lore);
- receiverInstance.addTag("receiverId", receiver.getUniqueId().toString());
- receiverInstance.setSlot(giftLayout.get(playerLayoutIndex));
- receiverInstance.build();
- objectsDisplayed.add(receiverInstance);
- }
- }
- for (MenuItemBuilder itemBuilder : itemBuilders) {
- boolean equalsNoPlayers = itemBuilder.equalsTrigger(SendGiftsTrigger.NO_PLAYERS);
- if (equalsNoPlayers && receivers.size() > 0) continue;
- boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
- if (equalsGoToPreviousPage && page <= 1) continue;
- boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
- if (equalsGoToNextPage && skipIndex >= receivers.size() - playerLayout.size()) continue;
- if (!equalsNoPlayers && !equalsGoToPreviousPage && !equalsGoToNextPage) continue;
- itemBuilder.build();
- objectsDisplayed.add(itemBuilder);
- }
- }
- decorationItems:
- for (MenuItemBuilder itemBuilder : itemBuilders) {
- for (SendGiftsTrigger sendGiftsMenuTrigger : SendGiftsTrigger.values()) {
- if (itemBuilder.equalsTrigger(sendGiftsMenuTrigger)) continue decorationItems;
- boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
- boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
- if (equalsGoToPreviousPage || equalsGoToNextPage) continue decorationItems;
- }
- itemBuilder.build();
- objectsDisplayed.add(itemBuilder);
- }
- items.clear();
- items.addAll(objectsDisplayed);
- Menu.clear(inventory, objectsDisplayed);
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- public int getRows() {
- int rows = ConfigParser.getInt(SendGiftsMenuValue.MENU_ROWS);
- rows = Math.min(rows, 6);
- if (rows <= 0) rows = 6;
- return rows;
- }
- public String getTitle() {
- GiftingData giftingData = GiftingDataManager.getData(player);
- SendGiftsMenuValue titleValue = giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT
- ? SendGiftsMenuValue.TITLE_GIFT : SendGiftsMenuValue.TITLE_RECEIVER;
- if (page > 1) titleValue = giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT
- ? SendGiftsMenuValue.TITLE_WITH_PAGES_GIFT : SendGiftsMenuValue.TITLE_WITH_PAGES_RECEIVER;
- String title = ConfigParser.getString(titleValue);
- if (title != null) title = title.replace("{PAGE}", String.valueOf(page));
- if (title == null) title = "§c⚠ Title is NULL";
- return title;
- }
- @Override
- public int getPage() {
- return page;
- }
- @Override
- public void setPage(int page) {
- this.page = page;
- }
- @Override
- public List<Object> getItems() {
- return items;
- }
- /*-----------------------------------------------------------------------------------------------------------------*/
- }
Advertisement
Add Comment
Please, Sign In to add comment