Advertisement
broken-arrow

Untitled

May 27th, 2021
721
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.91 KB | None | 0 0
  1. import org.bukkit.Bukkit;
  2. import org.bukkit.Location;
  3. import org.bukkit.block.Block;
  4. import org.bukkit.block.Hopper;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.event.EventHandler;
  7. import org.bukkit.event.EventPriority;
  8. import org.bukkit.event.Listener;
  9. import org.bukkit.event.block.Action;
  10. import org.bukkit.event.block.BlockBreakEvent;
  11. import org.bukkit.event.inventory.*;
  12. import org.bukkit.event.player.PlayerInteractEvent;
  13. import org.bukkit.inventory.Inventory;
  14. import org.bukkit.inventory.ItemStack;
  15. import org.bukkit.metadata.FixedMetadataValue;
  16. import org.bukkit.scheduler.BukkitRunnable;
  17. import org.mineacademy.fo.PlayerUtil;
  18. import org.mineacademy.fo.SerializeUtil;
  19. import org.mineacademy.fo.plugin.SimplePlugin;
  20. import org.mineacademy.fo.remain.CompMetadata;
  21. import org.mineacademy.fo.remain.CompSound;
  22. import org.mineacademy.sharedinventory.InventoryHolder;
  23. import org.mineacademy.sharedinventory.InventoryRegistry;
  24. import org.mineacademy.sharedinventory.SharedInventoryPlugin;
  25.  
  26. import java.util.HashMap;
  27. import java.util.List;
  28.  
  29. public final class PlayerListener implements Listener {
  30.  
  31.  
  32.     @EventHandler
  33.     public void onBlockClick(PlayerInteractEvent event) {
  34.         Player player = event.getPlayer();
  35.         Block block = event.getClickedBlock();
  36.         Action action = event.getAction();
  37.  
  38.         if (action == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()) {
  39.             Location location = block.getLocation();
  40.             InventoryRegistry registry = InventoryRegistry.getInstance();
  41.  
  42.  
  43.             if (registry.isRegistered(block.getLocation())) {
  44.                 //Inventory inventory = registry.findAndLoadInventory(location);
  45.                 InventoryHolder inventoryHolder = InventoryHolder.getInstance();
  46. /*
  47.                 if (!registry.PlayerViwePageEmpty(player))
  48.                     registry.playerViwePage(player, 0);
  49.  
  50.                 int playerRegisted = registry.getPlayerViwePage(player);
  51.                 registry.playerViwePage(player, playerRegisted);*/
  52.  
  53.                 //System.out.println("playerRegisted" + playerRegisted);
  54.                 inventoryHolder.setPlayerViwePage(player, 0);
  55.                 Inventory inventory = inventoryHolder.findAndLoadInventor(location, player);
  56.                 //Inventory inventory = registry.findAndLoadInventor(location, player);
  57.                 player.openInventory(inventory);
  58.                 PlayerUtil.updateInventoryTitle(player, "Chest page: " + inventoryHolder.getPlayerViwePage(player));
  59.  
  60.                 player.setMetadata("SharedInventory", new FixedMetadataValue(SimplePlugin.getInstance(), SerializeUtil.serializeLoc(location)));
  61.  
  62.                 CompSound.SUCCESSFUL_HIT.play(player);
  63.                 event.setCancelled(true);
  64.             }
  65.         }
  66.     }
  67.  
  68.     @EventHandler
  69.     public void onBlockBreak(BlockBreakEvent event) {
  70.         InventoryRegistry.getInstance().handleBlockBreak(event.getBlock());
  71.     }
  72.  
  73.     @EventHandler
  74.     public void onInventoryClose(InventoryCloseEvent event) {
  75.         Player player = (Player) event.getPlayer();
  76.         Location chestLocation = SerializeUtil.deserializeLocation(CompMetadata.getMetadata(player, "SharedInventory"));
  77.  
  78.         if (CompMetadata.hasMetadata(player, "SharedInventory")) {
  79.             //InventoryRegistry.getInstance().handleInventoryClose(player);
  80.             InventoryHolder.getInstance().handleInventoryClose(player);
  81.             InventoryHolder.getInstance().getContents(chestLocation);
  82.             //InventoryRegistry.getInstance().getContents(chestLocation);
  83.             //player.removeMetadata("SharedInventory", SharedInventoryPlugin.getInstance());
  84.         }
  85.     }
  86.  
  87.     @EventHandler
  88.     public void onInteract(InventoryClickEvent event) {
  89.         if (event.getSlotType() != InventoryType.SlotType.OUTSIDE)
  90.             return;
  91.  
  92.         Player player = (Player) event.getWhoClicked();
  93.         InventoryRegistry registerGui = InventoryRegistry.getInstance();
  94.         Location chestLocation = SerializeUtil.deserializeLocation(CompMetadata.getMetadata(player, "SharedInventory"));
  95.  
  96.         if (registerGui.isRegistered(chestLocation)) {
  97.             InventoryHolder inventoryHolder = InventoryHolder.getInstance();
  98.  
  99.             int inputNumber = inventoryHolder.getPageIndex(event.getWhoClicked().getOpenInventory().getTopInventory(), chestLocation); //registerGui.getPageIndex(event.getWhoClicked().getOpenInventory().getTopInventory(), chestLocation);
  100.             System.out.println("inputNumber" + event.getClick());
  101.             if (event.getClick() == ClickType.LEFT) {
  102.                 System.out.println("inputNumber" + inputNumber);
  103.                 if (inputNumber != 0) {
  104.                     inputNumber--;
  105.  
  106.                     //registerGui.playerViwePage(player, inputNumber);
  107.                     //Inventory inventory = registerGui.findAndLoadInventor(chestLocation, player);
  108.                     inventoryHolder.playerViwesPage(player, inputNumber);
  109.                     Inventory inventory = inventoryHolder.findAndLoadInventor(chestLocation, player);
  110.  
  111.                     player.openInventory(inventory);
  112.                     PlayerUtil.updateInventoryTitle(player, "Chest page: " + inputNumber);
  113.  
  114.  
  115.                 }
  116.             } else if (event.getClick() == ClickType.RIGHT) {
  117.                 if (inputNumber + 1 < registerGui.getPageIndex) {
  118.                     inputNumber++;
  119.  
  120.                     //registerGui.playerViwePage(player, inputNumber);
  121.                     //Inventory inventory = registerGui.findAndLoadInventor(chestLocation, player);
  122.                     inventoryHolder.playerViwesPage(player, inputNumber);
  123.                     Inventory inventory = inventoryHolder.findAndLoadInventor(chestLocation, player);
  124.  
  125.                     player.openInventory(inventory);
  126.                     PlayerUtil.updateInventoryTitle(player, "Chest page: " + inputNumber);
  127.  
  128.                 }
  129.             }
  130.         }
  131.  
  132.     }
  133.  
  134.     @EventHandler(priority = EventPriority.HIGH)
  135.     public void onHopperMoveEvent(InventoryMoveItemEvent event) {
  136.         System.out.println("test");
  137.         if (event.getDestination().getHolder() instanceof Hopper) {
  138.             InventoryRegistry registry = InventoryRegistry.getInstance();
  139.             Location location = event.getSource().getLocation();
  140.             if (event.getDestination().getLocation() != null) {
  141.                 // If the event is cancelled
  142.                 if (event.isCancelled()) return;
  143.                 if (event.getDestination().getLocation().getBlock().isBlockPowered()) return;
  144.             }
  145.             //event.setCancelled(!HopperFilter.isInFilter(event.getDestination().getLocation().getBlock(),event.getItem()));
  146.             // Item shouldn't be moved/touched
  147.             if (event.isCancelled() && registry.isRegistered(location)/* && ServerType.getType() == ServerType.Type.PAPER*/) {
  148.                 int index = event.getSource().first(event.getItem());
  149.  
  150.                 ItemStack item;
  151.                 // Loop until next item is found, if no item found return.
  152.                 while ((item = event.getSource().getItem(++index)) == null) {
  153.                     if (index >= event.getSource().getSize() - 1)
  154.                         return;
  155.                 }
  156.  
  157.                 InventoryMoveItemEvent newEvent =
  158.                         new InventoryMoveItemEvent(event.getSource(), item, event.getDestination(), true);
  159.                 Bukkit.getPluginManager().callEvent(newEvent);
  160.  
  161.                 if (!newEvent.isCancelled()) {
  162.                     int hopperAmount = 1;
  163.                     hopperMoveItemFromToChest(event.getSource(), hopperAmount, event.getDestination(), item);
  164.                 }
  165.             }
  166.  
  167.         }
  168.     }
  169.  
  170.  
  171.     @EventHandler(priority = EventPriority.LOW)
  172.     public void fromHopperToContainer(InventoryMoveItemEvent event) {
  173.         if (event.getInitiator().getHolder() instanceof Hopper) {
  174.             InventoryRegistry registry = InventoryRegistry.getInstance();
  175.             Location location = event.getDestination().getLocation();
  176.  
  177.             boolean chestRegisted = registry.isRegistered(location);
  178.  
  179.             if (chestRegisted) {
  180. /*
  181.                 ArrayList<ItemStack[]> savedItems = registry.handleHopperMove(location);
  182.                 ItemStack item = event.getItem();*/
  183.  
  184.                 if (!event.isCancelled()) {
  185.                     event.setCancelled(true);
  186. /*
  187.                     for (int i = 0; i < savedItems.size(); i++) {
  188.                         ItemStack[] savedItem = savedItems.get(i);
  189.                         ItemStack itemsList = (ItemStack) Arrays.asList(savedItem);
  190.  
  191.  
  192.                         if (itemsList == null || (itemsList.getAmount() < itemsList.getMaxStackSize() && itemsList.getType() == item.getType())) {
  193.                             savedItems[i] = itemsList == null ? item : ItemCreator.of(itemsList).amount(itemsList.getAmount() + item.getAmount()).build().make();
  194.                             //System.out.println(Arrays.toString(savedItems));
  195.  
  196.                             registry.AddItemsToChestold(location, savedItems);
  197.                             break;
  198.                         }
  199.  
  200.                     }*/
  201.                     InventoryHolder inventoryHolder = InventoryHolder.getInstance();
  202.  
  203.                     int hopperAmount = 1;
  204.                     new BukkitRunnable() {
  205.                         @Override
  206.                         public void run() {
  207.                             if (location != null) {
  208.                                 if (!hopperMoveItemFromToChest(event.getSource(), hopperAmount, inventoryHolder.setPageHopper(location)/*registry.findAndLoadInventoryHopper(location)*/, location))
  209.                                     cancel();
  210.                                 System.out.println("Test");
  211.  
  212.                             }
  213.                         }
  214.                     }.runTaskLater(SharedInventoryPlugin.getInstance(), 1);
  215.                 }
  216.             }
  217.         }
  218.     }
  219.  
  220.  
  221.     public static ItemStack removeStackFromInventory(Inventory inventory, int amount, List filters) {
  222.         ItemStack RemoveItemsFromContainerBefore;
  223.         for (int i = 0; i < inventory.getContents().length; i++) {
  224.             ItemStack stack = inventory.getItem(i);
  225.             if ((stack != null)) {
  226.  
  227.                 RemoveItemsFromContainerBefore = stack.clone();
  228.                 RemoveItemsFromContainerBefore.setAmount(Math.min(stack.getAmount(), amount));
  229.                 stack.setAmount(stack.getAmount() - RemoveItemsFromContainerBefore.getAmount());
  230.  
  231.                 //System.out.println("stack.getAmount " + stack.getAmount());
  232.                 //System.out.println("Items before " + RemoveItemsFromContainerBefore);
  233.  
  234.                 return RemoveItemsFromContainerBefore;
  235.             }
  236.         }
  237.         return null;
  238.     }
  239.  
  240.     public static boolean hopperMoveItemFromToChest(Inventory from, int amount, Inventory to) {
  241.         ItemStack removed = removeStackFromInventory(from, amount, null);
  242.         if (removed != null) {
  243.             HashMap<Integer, ItemStack> leftOvers = to.addItem(removed);
  244.             for (ItemStack leftOver : leftOvers.values()) {
  245.                 from.addItem(leftOver);
  246.                 if (removed.equals(leftOver)) return false;
  247.             }
  248.             return true;
  249.         }
  250.         return false;
  251.     }
  252.  
  253.     public static boolean hopperMoveItemFromToChest(Inventory from, int amount, Inventory to, Location location, List filters) {
  254.         ItemStack removed = removeStackFromInventory(from, amount, null);
  255.         InventoryRegistry registry = InventoryRegistry.getInstance();
  256.         InventoryHolder inventoryHolder = InventoryHolder.getInstance();
  257.         if (removed != null) {
  258.             boolean inventoryHolder1 = inventoryHolder.checkIfChestFull(location, removed);
  259.             //boolean test = registry.AddItemsToChest(0, location, removed, from);
  260.             System.out.println("hoppermovefrom chest " + inventoryHolder1 + to);
  261.             return inventoryHolder1;
  262.         }
  263.         return false;
  264.     }
  265.  
  266.     public static boolean hopperMoveItemFromToChest(Inventory from, int amount, Inventory to, Location location) {
  267.         return hopperMoveItemFromToChest(from, amount, to, location, null);
  268.     }
  269.  
  270.     public static boolean hopperMoveItemFromToChest(Inventory from, int amount, Inventory to, ItemStack stack) {
  271.         if (stack != null) {
  272.             System.out.println("from chest to hopper");
  273.             ItemStack toRemoveFromHopper = stack.clone();
  274.             toRemoveFromHopper.setAmount(Math.min(stack.getAmount(), amount));
  275.             stack.setAmount(stack.getAmount() - toRemoveFromHopper.getAmount());
  276.  
  277.             HashMap<Integer, ItemStack> leftOvers = to.addItem(toRemoveFromHopper);
  278.             for (ItemStack leftOver : leftOvers.values()) {
  279.                 from.addItem(leftOver);
  280.                 if (toRemoveFromHopper.equals(leftOver))
  281.                     return false;
  282.             }
  283.             return true;
  284.         }
  285.         return false;
  286.     }
  287. }
  288.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement