Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.broken.cheststorage.eventsmenu;
- import lombok.Getter;
- import org.broken.cheststorage.Guimenus.MainGuiMenu;
- import org.broken.cheststorage.data.PreferenceSettingsRegistery;
- import org.broken.cheststorage.inventoryholders.InventoryHolder;
- import org.broken.cheststorage.util.CommandPromt;
- import org.broken.cheststorage.util.CreateItems;
- import org.broken.cheststorage.util.GuiTempletsYaml;
- import org.bukkit.Bukkit;
- import org.bukkit.Material;
- import org.bukkit.OfflinePlayer;
- import org.bukkit.entity.Player;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.inventory.InventoryType;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.mineacademy.fo.Common;
- import java.util.*;
- import java.util.stream.Collectors;
- public class MenuHolder<T> extends PagedMenuEvents {
- @Getter
- private static final MenuHolder<UUID> instance = new MenuHolder<>();
- private final Map<Integer, T> addedPlayersToParty = new HashMap<>();
- private int currentPage = 0;
- private static Inventory[] inventories;
- private int clickedSlot;
- public MenuHolder() {
- }
- public void generateInventories(List<T> ListOfObjectToAdd, String menuName) {
- GuiTempletsYaml guiTempletSettings = new GuiTempletsYaml();
- PreferenceSettingsRegistery preferenceRegistery = PreferenceSettingsRegistery.getInstance();
- CreateItems createItems = new CreateItems();
- int itemsPerPage = (guiTempletSettings.getGuiSize(menuName, menuName) - 9);
- int requiredPages = Math.max((int) Math.ceil((double) ListOfObjectToAdd.size() / itemsPerPage), 1);
- //We need more pages if statically positioned Players you add are placed at a higher page index an one page can hold.
- int fillSpace = (guiTempletSettings.getGuiSize(menuName, menuName) - 9);
- inventories = new Inventory[requiredPages];
- int recipeIndex = 0;
- for (int i = 0; i < requiredPages; i++) {
- inventories[i] = createInventory(guiTempletSettings.getGuiSize(menuName, menuName), guiTempletSettings.getGuiTitle(menuName, menuName));
- for (int spot = 0; spot < fillSpace; spot++) {
- if (recipeIndex >= preferenceRegistery.getPlayers().size()) break;
- recipeIndex++;
- ItemStack result = createItems.createItemStack(guiTempletSettings.getIcon("PartylistMenu", "PartylistMenu_Players_List", preferenceRegistery.getPlayers().get(recipeIndex - 1)));// SkullCreator.itemFromUuid(preferenceRegistery.getPlayers().get(recipeIndex - 1));
- OfflinePlayer player = Bukkit.getOfflinePlayer(preferenceRegistery.getPlayers().get(recipeIndex - 1));
- if (player.getName() != null)
- if (result == null || result.getType().equals(Material.AIR)) {
- result = createItems.createItemStack(new ItemStack(Material.ACACIA_SIGN), guiTempletSettings.getDisplayName(
- "PartylistMenu", "PartylistMenu_Players_List").replace("{0}", player.getName()),
- guiTempletSettings.getLoreColorize("PartylistMenu", "PartylistMenu_Players_List"), null, null);
- } else {
- result = createItems.createItemStack(result, guiTempletSettings.getDisplayName(
- "PartylistMenu", "PartylistMenu_Players_List").replace("{0}", player.getName()),
- guiTempletSettings.getLoreColorize("PartylistMenu", "PartylistMenu_Players_List"), null, null);
- }
- inventories[i].setItem(spot, result);
- this.addedPlayersToParty.put(i * inventories[i].getSize() + spot, ListOfObjectToAdd.get(recipeIndex - 1));
- }
- }
- //Check if current-page is not outside the bounds in case a player are removed.
- if (currentPage >= inventories.length) currentPage = inventories.length - 1;
- }
- public static Inventory createInventory(ItemStack[] invContent, String title, InventoryHolder holder) {
- if (invContent == null) return null;
- List<ItemStack> copiedItems = Arrays.stream(invContent).map(x -> x == null ? null : x.clone()).collect(Collectors.toList());
- if (copiedItems.size() != invContent.length)
- throw new IllegalStateException("Failed to copy inventory items.");
- Inventory copy = Bukkit.createInventory(null, invContent.length, title);
- for (int i = 0; i < copiedItems.size(); i++)
- copy.setItem(i, copiedItems.get(i));
- return copy;
- }
- public Inventory createInventoryConfirm(UUID players) {
- GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
- Player player = Bukkit.getPlayer(players);
- if (player == null) return null;
- String title = guiTemplets.getGuiTitle("Confirm_RemovePlayer", "Confirm_RemovePlayer").replace("{0}", player.getName());
- Inventory copy = Bukkit.createInventory(null, InventoryType.HOPPER, title);
- CreateItems createItems = new CreateItems();
- String displayName = guiTemplets.getDisplayName("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button").replace("{0}", player.getName());
- 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),
- displayName, guiTemplets.getLoreColorize("Confirm_RemovePlayer", "Confirm_RemovePlayer_RemovePlayer_button"), null, null));
- 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),
- guiTemplets.getDisplayName("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu"), guiTemplets.getLorePlaceholderColorize("Confirm_RemovePlayer", "Confirm_RemovePlayer_Previous_menu", player.getName()), null, null));
- return copy;
- }
- public static Inventory createInventory(int invSize, String title) {
- GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
- CreateItems createItems = new CreateItems();
- Inventory copy = Bukkit.createInventory(null, invSize, title);
- 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),
- createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Forward_button", null),
- guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Forward_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Forward_button"), null, null));
- 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),
- createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Previous_button", null),
- guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Previous_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Previous_button"), null, null));
- copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Back_button").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Back_button", null),
- guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Back_button"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Back_button"), null, null));
- copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Remove_Players").stream().findFirst().orElse(0), createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Remove_Players", null),
- guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Remove_Players"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Remove_Players"), null, null));
- copy.setItem(guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Add_Players").stream().findFirst().orElse(0),
- createItems.createItemStack(guiTemplets.getIcon("PartylistMenu", "PartylistMenu_Add_Players", null),
- guiTemplets.getDisplayName("PartylistMenu", "PartylistMenu_Add_Players"), guiTemplets.getLoreColorize("PartylistMenu", "PartylistMenu_Add_Players"), null, null));
- return copy;
- }
- @Override
- public void onMenuItemClickning(InventoryClickEvent event) {
- Player player = (Player) event.getWhoClicked();
- GuiTempletsYaml guiTemplets = new GuiTempletsYaml();
- int clickedSlot = event.getSlot();
- int clickedPos = currentPage * getInventories().getSize() + clickedSlot;
- if (addedPlayersToParty.containsKey(clickedPos)) {
- event.setCancelled(true);
- if (Bukkit.getPlayer((UUID) addedPlayersToParty.get(clickedPos)) == null)
- Common.tell(player, "&4Warn!! This player are " + Bukkit.getPlayer((UUID) addedPlayersToParty.get(clickedPos)) + " with UUID " + addedPlayersToParty.get(clickedPos) + " are not valid player");
- setClickedSlot(clickedPos);
- removeConfirmRemovePlayer(player);
- setConfirmRemovePlayer(player, createInventoryConfirm((UUID) addedPlayersToParty.get(clickedPos)));
- Common.runLater(5, () -> player.openInventory(getConfirmRemovePlayer(player)));
- }
- int direction = 0;
- if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Forward_button").stream().findFirst().orElse(0) == clickedPos)
- direction = 1;
- if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Previous_button").stream().findFirst().orElse(0) == clickedPos)
- direction = -1;
- currentPage += direction;
- if (currentPage < 0) currentPage = inventories.length - 1;
- else if (currentPage >= inventories.length) currentPage = 0;
- if (getOpenGUIs().containsKey(player.getUniqueId()))
- removePlayerGui(player);
- setPlayerGui(player, getInventories());
- player.openInventory(getPlayerGui(player));
- if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Back_button").stream().findFirst().orElse(0) == clickedPos) {
- new MainGuiMenu().displayTo(player);
- }
- if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Add_Players").stream().findFirst().orElse(0) == clickedPos) {
- player.closeInventory();
- new CommandPromt().start(player);
- }
- if (currentPage * getInventories().getSize() + guiTemplets.getSlot("PartylistMenu", "PartylistMenu_Remove_Players").stream().findFirst().orElse(0) == clickedPos) {
- player.closeInventory();
- new CommandPromt().setRemoveplayer(true);
- new CommandPromt().start(player);
- }
- }
- public Map<Integer, T> getAddedPlayersToParty() {
- return addedPlayersToParty;
- }
- public int getClickedSlot() {
- return clickedSlot;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public Inventory getInventories() {
- return inventories[currentPage];
- }
- public void setPage(int page) {
- if (page < 0) page = 0;
- currentPage = Math.min(page, inventories.length - 1);
- }
- public void setClickedSlot(int clickedSlot) {
- this.clickedSlot = clickedSlot;
- }
- @Override
- public String toString() {
- return getClass().getSimpleName() + "{}";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement