Advertisement
broken-arrow

Untitled

Nov 26th, 2021
1,046
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.52 KB | None | 0 0
  1. package org.brokenarrow.storage.menus.redone;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.Location;
  5. import org.bukkit.Material;
  6. import org.bukkit.World;
  7. import org.bukkit.entity.Player;
  8. import org.bukkit.event.inventory.InventoryClickEvent;
  9. import org.bukkit.inventory.ItemStack;
  10. import org.bukkit.inventory.meta.SkullMeta;
  11.  
  12. import java.util.ListIterator;
  13. import java.util.Set;
  14. import java.util.UUID;
  15.  
  16. public class MenuUtiliListener {
  17.     private final MenuCache menuCache = MenuCache.getInstance();
  18.     private static final MenuUtiliListener instance = new MenuUtiliListener();
  19.     private String playermetadata;
  20.  
  21.     public void onMenuClicking(InventoryClickEvent event) {
  22.         Player player = (Player) event.getWhoClicked();
  23.         Location location = null;
  24.         Object object = null;
  25.  
  26.         if (player.hasMetadata(playermetadata)) {
  27.             object = player.getMetadata(playermetadata);
  28.             if (object instanceof Location)
  29.                 location = (Location) object;
  30.         }
  31.         System.out.println("loc " + location);
  32.         MenuHolderTest menu = menuCache.getMenuInCache(checkMap(player, location, object));
  33.         System.out.println("menu " + menu.getMenu() + " " + event.getView().getTopInventory() + " " + event.getClickedInventory());
  34.         if (!event.getView().getTopInventory().equals(menu.getMenu())) return;
  35.  
  36.  
  37.         if (menu != null && !menu.getButtons().isEmpty()) {
  38.             ItemStack clickedItem = event.getCurrentItem();
  39.             int clickedSlot = event.getSlot();
  40.             int clickedPos = menu.getPageNumber() * menu.getMenu().getSize() + clickedSlot;
  41.             if (clickedItem == null || clickedItem.getType() == Material.AIR) return;
  42.             System.out.println("is not Material.PLAYER_HEAD " + clickedItem.getType());
  43.             if (menu.isSlotsYouCanAddItems()) {
  44.                 if (menu.getFillSpace().contains(clickedPos))
  45.                     return;
  46.                 else
  47.                     event.setCancelled(true);
  48.             }
  49.             if (menu.isStartLoadMenuButtons()) {
  50.                 event.setCancelled(true);
  51.                 return;
  52.             }
  53.  
  54.             for (ListIterator<MenuButton> menuButtons = menu.getButtons().listIterator(); menuButtons.hasNext(); ) {
  55.                 MenuButton menuButton = menuButtons.next();
  56.  
  57.  
  58.                 if (!(clickedItem.getType() == Material.PLAYER_HEAD) && menuButton.getItem() != null && menuButton.getItem().isSimilar(clickedItem)) {
  59.                     if (menu.getAddedButtons().containsKey(clickedPos) && menu.getAddedButtons().get(clickedPos).isSimilar(clickedItem)) {
  60.                         menuButton.onClickInsideMenu(player, menu.getMenu(), event.getClick());
  61.                         event.setCancelled(true);
  62.                         break;
  63.                     }
  64.                 }
  65.                 if (menu.getListOfFillItems() != null && clickedItem.getType() == Material.PLAYER_HEAD) {
  66.                     for (Object itemstack : menu.getListOfFillItems()) {
  67.                         if (itemstack instanceof UUID) {
  68.                             SkullMeta meta = (SkullMeta) clickedItem.getItemMeta();
  69.                             if (Bukkit.getOfflinePlayer((UUID) itemstack).equals(meta.getOwningPlayer()) && menu.getAddedButtons().containsKey(clickedPos) && menu.getAddedButtons().get(clickedPos).isSimilar(clickedItem)) {
  70.                                 menuButton.onClickInsideMenu(player, menu.getMenu(), event.getClick());
  71.                                 event.setCancelled(true);
  72.                                 break;
  73.                             }
  74.                         }
  75.                     }
  76.                 }
  77.  
  78.             }
  79.             if (!menu.isSlotsYouCanAddItems()) {
  80.                 event.setCancelled(true);
  81.             }
  82.         }
  83.     }
  84.  
  85.     private Object checkMap(Player player, Location location, Object unknownObject) {
  86.         Set<Object> obj = menuCache.getMenusCached().keySet();
  87.         Object object = null;
  88.         for (Object objectType : obj) {
  89.             if (objectType != null) {
  90.                 Object[] splitObjekt = objectType.toString().split("\\*__\\*");
  91.                 String firstObject = splitObjekt[0].toString();
  92.                 int lastIndexOf = firstObject.lastIndexOf("}");
  93.                 Player player1 = Bukkit.getPlayer(splitObjekt[0].toString().substring(17, lastIndexOf));
  94.                 if (splitObjekt.length > 1 && player1 != null) {
  95.                     if (player1 == player)
  96.                         object = splitObjekt[0] + "*__*" + splitObjekt[1];
  97.                 } else if (splitObjekt.length > 1 && isLocation(splitObjekt[0]) != null && location != null) {
  98.                     if (!isLocation(splitObjekt[0]).equals(location)) continue;
  99.                     object = splitObjekt[0] + "*__*" + splitObjekt[1];
  100.                 }
  101.  
  102.                 if (splitObjekt.length > 1 && splitObjekt[0].equals(unknownObject))
  103.                     object = splitObjekt[0] + "*__*" + splitObjekt[1];
  104.             }
  105.         }
  106.         return object;
  107.     }
  108.  
  109.     public void setPlayermetadata(String playermetadata) {
  110.         this.playermetadata = playermetadata;
  111.     }
  112.  
  113.     public static MenuUtiliListener getInstance() {
  114.         return instance;
  115.     }
  116.  
  117.     public static Location isLocation(Object raw) {
  118.         String[] parts = new String[0];
  119.         if (!raw.toString().contains(" ")) {
  120.             String rawText = raw.toString();
  121.             String[] rawTextSplit = rawText.split(",");
  122.             int lastIndexOf = rawTextSplit[0].lastIndexOf("}");
  123.             int firstIndexOf = rawTextSplit[0].lastIndexOf("{");
  124.  
  125.             parts = new String[]{rawTextSplit[0].substring(firstIndexOf + 6, lastIndexOf) + "", rawTextSplit[1].replace("x=", "").split("\\.")[0] + "", rawTextSplit[2].replace("y=", "").split("\\.")[0] + "", rawTextSplit[3].replace("z=", "").split("\\.")[0]};
  126.         }
  127.         int length;
  128.         if (raw.toString().contains(" "))
  129.             length = (parts = raw.toString().split(" ")).length;
  130.         else
  131.             length = parts.length;
  132.         if (length == 4) {
  133.             final String world = parts[0];
  134.             final World bukkitWorld = Bukkit.getWorld(world);
  135.             if (bukkitWorld == null)
  136.                 return null;
  137.             if (!parts[1].matches("[-+]?\\d+") && !parts[2].matches("[-+]?\\d+") && !parts[3].matches("[-+]?\\d+"))
  138.                 return null;
  139.             else {
  140.                 int x = Integer.parseInt(parts[1]), y = Integer.parseInt(parts[2]), z = Integer.parseInt(parts[3]);
  141.                 return new Location(bukkitWorld, x, y, z);
  142.             }
  143.         }
  144.  
  145.         return null;
  146.     }
  147. }
  148.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement