Advertisement
broken-arrow

Untitled

Jul 13th, 2021
801
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.02 KB | None | 0 0
  1. package org.broken.cheststorage.eventsmenu;
  2.  
  3. import lombok.Getter;
  4. import org.broken.cheststorage.Guimenus.MainGuiMenu;
  5. import org.broken.cheststorage.data.PreferenceSettingsRegistery;
  6. import org.broken.cheststorage.inventoryholders.InventoryHolder;
  7. import org.broken.cheststorage.util.CommandPromt;
  8. import org.broken.cheststorage.util.CreateItems;
  9. import org.broken.cheststorage.util.GuiTempletsYaml;
  10. import org.bukkit.Bukkit;
  11. import org.bukkit.Material;
  12. import org.bukkit.OfflinePlayer;
  13. import org.bukkit.entity.Player;
  14. import org.bukkit.event.inventory.InventoryClickEvent;
  15. import org.bukkit.event.inventory.InventoryType;
  16. import org.bukkit.inventory.Inventory;
  17. import org.bukkit.inventory.ItemStack;
  18. import org.mineacademy.fo.Common;
  19.  
  20. import java.util.*;
  21. import java.util.stream.Collectors;
  22.  
  23. public class MenuHolder<T> extends PagedMenuEvents {
  24.  
  25.     @Getter
  26.     private static final MenuHolder<UUID> instance = new MenuHolder<>();
  27.  
  28.  
  29.     private final Map<Integer, T> addedPlayersToParty = new HashMap<>();
  30.     private int currentPage = 0;
  31.     private static Inventory[] inventories;
  32.     private int clickedSlot;
  33.  
  34.     public MenuHolder() {
  35.     }
  36.  
  37.     public void generateInventories(List<T> ListOfObjectToAdd, String menuName) {
  38.         GuiTempletsYaml guiTempletSettings = new GuiTempletsYaml();
  39.         PreferenceSettingsRegistery preferenceRegistery = PreferenceSettingsRegistery.getInstance();
  40.         CreateItems createItems = new CreateItems();
  41.  
  42.         int itemsPerPage = (guiTempletSettings.getGuiSize(menuName, menuName) - 9);
  43.         int requiredPages = Math.max((int) Math.ceil((double) ListOfObjectToAdd.size() / itemsPerPage), 1);
  44.         //We need more pages if statically positioned Players you add are placed at a higher page index an one page can hold.
  45.  
  46.         int fillSpace = (guiTempletSettings.getGuiSize(menuName, menuName) - 9);
  47.  
  48.         inventories = new Inventory[requiredPages];
  49.  
  50.         int recipeIndex = 0;
  51.  
  52.         for (int i = 0; i < requiredPages; i++) {
  53.             inventories[i] = createInventory(guiTempletSettings.getGuiSize(menuName, menuName), guiTempletSettings.getGuiTitle(menuName, menuName));
  54.             for (int spot = 0; spot < fillSpace; spot++) {
  55.                 if (recipeIndex >= preferenceRegistery.getPlayers().size()) break;
  56.  
  57.                 recipeIndex++;
  58.                 ItemStack result = createItems.createItemStack(guiTempletSettings.getIcon("PartylistMenu", "PartylistMenu_Players_List", preferenceRegistery.getPlayers().get(recipeIndex - 1)));// SkullCreator.itemFromUuid(preferenceRegistery.getPlayers().get(recipeIndex - 1));
  59.                 OfflinePlayer player = Bukkit.getOfflinePlayer(preferenceRegistery.getPlayers().get(recipeIndex - 1));
  60.  
  61.                 if (player.getName() != null)
  62.                     if (result == null || result.getType().equals(Material.AIR)) {
  63.                         result = createItems.createItemStack(new ItemStack(Material.ACACIA_SIGN), guiTempletSettings.getDisplayName(
  64.                                 "PartylistMenu", "PartylistMenu_Players_List").replace("{0}", player.getName()),
  65.                                 guiTempletSettings.getLoreColorize("PartylistMenu", "PartylistMenu_Players_List"), null, null);
  66.                     } else {
  67.                         result = createItems.createItemStack(result, guiTempletSettings.getDisplayName(
  68.                                 "PartylistMenu", "PartylistMenu_Players_List").replace("{0}", player.getName()),
  69.                                 guiTempletSettings.getLoreColorize("PartylistMenu", "PartylistMenu_Players_List"), null, null);
  70.                     }
  71.                 inventories[i].setItem(spot, result);
  72.                 this.addedPlayersToParty.put(i * inventories[i].getSize() + spot, ListOfObjectToAdd.get(recipeIndex - 1));
  73.             }
  74.         }
  75.  
  76.         //Check if current-page is not outside the bounds in case a player are removed.
  77.         if (currentPage >= inventories.length) currentPage = inventories.length - 1;
  78.     }
  79.  
  80.  
  81.     public static Inventory createInventory(ItemStack[] invContent, String title, InventoryHolder holder) {
  82.         if (invContent == null) return null;
  83.         List<ItemStack> copiedItems = Arrays.stream(invContent).map(x -> x == null ? null : x.clone()).collect(Collectors.toList());
  84.         if (copiedItems.size() != invContent.length)
  85.             throw new IllegalStateException("Failed to copy inventory items.");
  86.         Inventory copy = Bukkit.createInventory(null, invContent.length, title);
  87.         for (int i = 0; i < copiedItems.size(); i++)
  88.             copy.setItem(i, copiedItems.get(i));
  89.         return copy;
  90.     }
  91.  
  92.     public Inventory createInventoryConfirm(UUID players) {
  93.         GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
  94.  
  95.         Player player = Bukkit.getPlayer(players);
  96.         if (player == null) return null;
  97.  
  98.         String title = guiTemplets.getGuiTitle("Confirm_RemovePlayer", "Confirm_RemovePlayer").replace("{0}", player.getName());
  99.         Inventory copy = Bukkit.createInventory(null, InventoryType.HOPPER, title);
  100.         CreateItems createItems = new CreateItems();
  101.  
  102.         String displayName = guiTemplets.getDisplayName("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button").replace("{0}", player.getName());
  103.         copy.setItem(guiTemplets.getSlot("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button", null),
  104.                 displayName, guiTemplets.getLoreColorize("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button"), null, null));
  105.  
  106.         copy.setItem(guiTemplets.getSlot("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu", null),
  107.                 guiTemplets.getDisplayName("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu"), guiTemplets.getLorePlaceholderColorize("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu", player.getName()), null, null));
  108.  
  109.         return copy;
  110.     }
  111.  
  112.     public static Inventory createInventory(int invSize, String title) {
  113.         GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
  114.         CreateItems createItems = new CreateItems();
  115.         Inventory copy = Bukkit.createInventory(null, invSize, title);
  116.  
  117.         copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Forward_button").stream().findFirst().orElse(0) >= copy.getSize() ? copy.getSize() - 3 : guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Forward_button").stream().findFirst().orElse(0),
  118.                 createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Forward_button", null),
  119.                         guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Forward_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Forward_button"), null, null));
  120.  
  121.         copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Previous_button").stream().findFirst().orElse(0) >= copy.getSize() ? copy.getSize() - 6 : guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Previous_button").stream().findFirst().orElse(0),
  122.                 createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Previous_button", null),
  123.                         guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Previous_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Previous_button"), null, null));
  124.  
  125.         copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Back_button").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Back_button", null),
  126.                 guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Back_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Back_button"), null, null));
  127.  
  128.         copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Remove_Players").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Remove_Players", null),
  129.                 guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Remove_Players"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Remove_Players"), null, null));
  130.  
  131.         copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Add_Players").stream().findFirst().orElse(0),
  132.                 createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Add_Players", null),
  133.                         guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Add_Players"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Add_Players"), null, null));
  134.  
  135.         return copy;
  136.     }
  137.  
  138.  
  139.     @Override
  140.     public void onMenuItemClickning(InventoryClickEvent event) {
  141.         Player player = (Player) event.getWhoClicked();
  142.         GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
  143.  
  144.         int clickedSlot = event.getSlot();
  145.         int clickedPos = currentPage * getInventories().getSize() + clickedSlot;
  146.  
  147.  
  148.         if (addedPlayersToParty.containsKey(clickedPos)) {
  149.             event.setCancelled(true);
  150.             if (Bukkit.getPlayer((UUID) addedPlayersToParty.get(clickedPos)) == null)
  151.                 Common.tell(player, "&4Warn!! This player are " + Bukkit.getPlayer((UUID) addedPlayersToParty.get(clickedPos)) + " with UUID " + addedPlayersToParty.get(clickedPos) + " are not valid player");
  152.  
  153.             setClickedSlot(clickedPos);
  154.             removeConfirmRemovePlayer(player);
  155.             setConfirmRemovePlayer(player, createInventoryConfirm((UUID) addedPlayersToParty.get(clickedPos)));
  156.  
  157.             Common.runLater(5, () -> player.openInventory(getConfirmRemovePlayer(player)));
  158.         }
  159.         int direction = 0;
  160.  
  161.         if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Forward_button").stream().findFirst().orElse(0) == clickedPos)
  162.             direction = 1;
  163.         if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Previous_button").stream().findFirst().orElse(0) == clickedPos)
  164.             direction = -1;
  165.  
  166.         currentPage += direction;
  167.         if (currentPage < 0) currentPage = inventories.length - 1;
  168.         else if (currentPage >= inventories.length) currentPage = 0;
  169.  
  170.         if (getOpenGUIs().containsKey(player.getUniqueId()))
  171.             removePlayerGui(player);
  172.  
  173.         setPlayerGui(player, getInventories());
  174.         player.openInventory(getPlayerGui(player));
  175.  
  176.         if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Back_button").stream().findFirst().orElse(0) == clickedPos) {
  177.             new MainGuiMenu().displayTo(player);
  178.         }
  179.         if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Add_Players").stream().findFirst().orElse(0) == clickedPos) {
  180.             player.closeInventory();
  181.             new CommandPromt().start(player);
  182.         }
  183.         if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Remove_Players").stream().findFirst().orElse(0) == clickedPos) {
  184.             player.closeInventory();
  185.             new CommandPromt().setRemoveplayer(true);
  186.             new CommandPromt().start(player);
  187.         }
  188.  
  189.     }
  190.  
  191.     public Map<Integer, T> getAddedPlayersToParty() {
  192.         return addedPlayersToParty;
  193.     }
  194.  
  195.     public int getClickedSlot() {
  196.         return clickedSlot;
  197.     }
  198.  
  199.     public int getCurrentPage() {
  200.         return currentPage;
  201.     }
  202.  
  203.     public Inventory getInventories() {
  204.         return inventories[currentPage];
  205.     }
  206.  
  207.     public void setPage(int page) {
  208.         if (page < 0) page = 0;
  209.         currentPage = Math.min(page, inventories.length - 1);
  210.     }
  211.  
  212.  
  213.     public void setClickedSlot(int clickedSlot) {
  214.         this.clickedSlot = clickedSlot;
  215.     }
  216.  
  217.     @Override
  218.     public String toString() {
  219.         return getClass().getSimpleName() + "{}";
  220.     }
  221. }
  222.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement