Search in sources :

Example 16 with Item

use of com.loohp.interactionvisualizer.entityholders.Item in project InteractionVisualizer by LOOHP.

the class CraftingTableDisplay method process.

@Override
public void process(Player player) {
    if (VanishUtils.isVanished(player)) {
        return;
    }
    if (!playermap.containsKey(player)) {
        if (player.getGameMode().equals(GameMode.SPECTATOR)) {
            return;
        }
        if (player.getOpenInventory().getTopInventory().getLocation() == null) {
            return;
        }
        if (player.getOpenInventory().getTopInventory().getLocation().getBlock() == null) {
            return;
        }
        if (!InteractionVisualizer.version.isLegacy()) {
            if (!InteractionVisualizer.version.equals(MCVersion.V1_13) && !InteractionVisualizer.version.equals(MCVersion.V1_13_1)) {
                if (!player.getOpenInventory().getTopInventory().getLocation().getBlock().getType().toString().equalsIgnoreCase("CRAFTING_TABLE")) {
                    return;
                }
            } else {
                if (!(player.getOpenInventory().getTopInventory() instanceof CraftingInventory)) {
                    return;
                }
                if (((CraftingInventory) player.getOpenInventory().getTopInventory()).getMatrix().length != 9) {
                    return;
                }
                if (!player.getTargetBlock(MaterialUtils.getNonSolidSet(), 7).getType().toString().equalsIgnoreCase("CRAFTING_TABLE")) {
                    return;
                }
            }
        } else {
            if (!(player.getOpenInventory().getTopInventory() instanceof CraftingInventory)) {
                return;
            }
            if (((CraftingInventory) player.getOpenInventory().getTopInventory()).getMatrix().length != 9) {
                return;
            }
            if (!player.getTargetBlock(MaterialUtils.getNonSolidSet(), 7).getType().toString().equalsIgnoreCase("WORKBENCH")) {
                return;
            }
        }
        Block block = null;
        InventoryView view = player.getOpenInventory();
        if (!InteractionVisualizer.version.isLegacy() && !InteractionVisualizer.version.equals(MCVersion.V1_13) && !InteractionVisualizer.version.equals(MCVersion.V1_13_1)) {
            block = view.getTopInventory().getLocation().getBlock();
        } else {
            block = player.getTargetBlock(MaterialUtils.getNonSolidSet(), 7);
        }
        playermap.put(player, block);
    }
    InventoryView view = player.getOpenInventory();
    Block block = playermap.get(player);
    Location loc = block.getLocation();
    if (!openedBenches.containsKey(block)) {
        Map<String, Object> map = new HashMap<>();
        map.put("Player", player);
        map.put("0", "N/A");
        map.putAll(spawnArmorStands(player, block));
        openedBenches.put(block, map);
    }
    Map<String, Object> map = openedBenches.get(block);
    if (!map.get("Player").equals(player)) {
        return;
    }
    ItemStack[] items = new ItemStack[] { view.getItem(1), view.getItem(2), view.getItem(3), view.getItem(4), view.getItem(5), view.getItem(6), view.getItem(7), view.getItem(8), view.getItem(9) };
    if (view.getItem(0) != null) {
        ItemStack itemstack = view.getItem(0);
        if (itemstack == null || itemstack.getType().equals(Material.AIR)) {
            itemstack = null;
        }
        Item item = null;
        if (map.get("0") instanceof String) {
            if (itemstack != null) {
                item = new Item(loc.clone().add(0.5, 1.2, 0.5));
                item.setItemStack(itemstack);
                item.setVelocity(new Vector(0, 0, 0));
                item.setPickupDelay(32767);
                item.setGravity(false);
                map.put("0", item);
                PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item);
                PacketManager.updateItem(item);
            } else {
                map.put("0", "N/A");
            }
        } else {
            item = (Item) map.get("0");
            if (itemstack != null) {
                if (!item.getItemStack().equals(itemstack)) {
                    item.setItemStack(itemstack);
                    PacketManager.updateItem(item);
                }
            } else {
                map.put("0", "N/A");
                PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
            }
        }
    }
    for (int i = 0; i < 9; i++) {
        ArmorStand stand = (ArmorStand) map.get(String.valueOf(i + 1));
        ItemStack item = items[i];
        if (item == null || item.getType().equals(Material.AIR)) {
            item = null;
        }
        if (item != null) {
            boolean changed = true;
            if (MaterialUtils.getMaterialType(item.getType()).equals(MaterialMode.BLOCK) && !standMode(stand).equals(MaterialMode.BLOCK)) {
                toggleStandMode(stand, "Block");
            } else if (MaterialUtils.getMaterialType(item.getType()).equals(MaterialMode.TOOL) && !standMode(stand).equals(MaterialMode.TOOL)) {
                toggleStandMode(stand, "Tool");
            } else if (MaterialUtils.getMaterialType(item.getType()).equals(MaterialMode.ITEM) && !standMode(stand).equals(MaterialMode.ITEM)) {
                toggleStandMode(stand, "Item");
            } else if (MaterialUtils.getMaterialType(item.getType()).equals(MaterialMode.STANDING) && !standMode(stand).equals(MaterialMode.STANDING)) {
                toggleStandMode(stand, "Standing");
            } else if (MaterialUtils.getMaterialType(item.getType()).equals(MaterialMode.LOWBLOCK) && !standMode(stand).equals(MaterialMode.LOWBLOCK)) {
                toggleStandMode(stand, "LowBlock");
            } else {
                changed = false;
            }
            if (!item.getType().equals(stand.getItemInMainHand().getType())) {
                changed = true;
                stand.setItemInMainHand(item);
            }
            if (changed) {
                PacketManager.updateArmorStand(stand);
            }
        } else {
            if (!stand.getItemInMainHand().getType().equals(Material.AIR)) {
                stand.setItemInMainHand(new ItemStack(Material.AIR));
                PacketManager.updateArmorStand(stand);
            }
        }
    }
    Location loc1 = ((ArmorStand) map.get("5")).getLocation();
    InteractionVisualizer.lightManager.deleteLight(loc1);
    int skylight = loc1.getBlock().getRelative(BlockFace.UP).getLightFromSky();
    int blocklight = loc1.getBlock().getRelative(BlockFace.UP).getLightFromBlocks() - 1;
    blocklight = Math.max(blocklight, 0);
    if (skylight > 0) {
        InteractionVisualizer.lightManager.createLight(loc1, skylight, LightType.SKY);
    }
    if (blocklight > 0) {
        InteractionVisualizer.lightManager.createLight(loc1, blocklight, LightType.BLOCK);
    }
}
Also used : CraftingInventory(org.bukkit.inventory.CraftingInventory) HashMap(java.util.HashMap) Item(com.loohp.interactionvisualizer.entityholders.Item) InventoryView(org.bukkit.inventory.InventoryView) ArmorStand(com.loohp.interactionvisualizer.entityholders.ArmorStand) Block(org.bukkit.block.Block) ItemStack(org.bukkit.inventory.ItemStack) Vector(org.bukkit.util.Vector) Location(org.bukkit.Location)

Example 17 with Item

use of com.loohp.interactionvisualizer.entityholders.Item in project InteractionVisualizer by LOOHP.

the class DispenserDisplay method onCloseDispenser.

@EventHandler
public void onCloseDispenser(InventoryCloseEvent event) {
    if (event.getView().getTopInventory() == null) {
        return;
    }
    try {
        if (event.getView().getTopInventory().getLocation() == null) {
            return;
        }
    } catch (Exception | AbstractMethodError e) {
        return;
    }
    if (event.getView().getTopInventory().getLocation().getBlock() == null) {
        return;
    }
    if (!link.containsKey((Player) event.getPlayer())) {
        return;
    }
    List<Item> list = link.get((Player) event.getPlayer());
    for (Item item : list) {
        PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
    }
    link.remove((Player) event.getPlayer());
}
Also used : Item(com.loohp.interactionvisualizer.entityholders.Item) Player(org.bukkit.entity.Player) EventHandler(org.bukkit.event.EventHandler)

Example 18 with Item

use of com.loohp.interactionvisualizer.entityholders.Item in project InteractionVisualizer by LOOHP.

the class DispenserDisplay method onUseDispenser.

@EventHandler(priority = EventPriority.MONITOR)
public void onUseDispenser(InventoryClickEvent event) {
    Player player = (Player) event.getWhoClicked();
    if (event.isCancelled()) {
        return;
    }
    if (VanishUtils.isVanished(player)) {
        return;
    }
    if (OpenInvUtils.isSlientChest(player)) {
        return;
    }
    if (event.getWhoClicked().getGameMode().equals(GameMode.SPECTATOR)) {
        return;
    }
    if (event.getView().getTopInventory() == null) {
        return;
    }
    if (!event.getView().getTopInventory().getType().equals(InventoryType.DISPENSER)) {
        return;
    }
    try {
        if (event.getView().getTopInventory().getLocation() == null) {
            return;
        }
    } catch (Exception | AbstractMethodError e) {
        return;
    }
    if (event.getView().getTopInventory().getLocation().getBlock() == null) {
        return;
    }
    if (!event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.DISPENSER)) {
        return;
    }
    if (event.getClick().equals(ClickType.MIDDLE) && !event.getWhoClicked().getGameMode().equals(GameMode.CREATIVE)) {
        return;
    }
    Inventory topInventory = event.getView().getTopInventory();
    Block block = topInventory.getLocation().getBlock();
    Location loc = block.getLocation();
    boolean isIn = true;
    boolean isMove = false;
    ItemStack itemstack = null;
    if (event.getRawSlot() >= 0 && event.getRawSlot() < topInventory.getSize()) {
        itemstack = event.getCurrentItem();
        if (itemstack != null) {
            if (itemstack.getType().equals(Material.AIR)) {
                itemstack = null;
            } else {
                isIn = false;
                isMove = true;
            }
        }
        if (itemstack == null) {
            itemstack = event.getCursor();
            if (itemstack != null) {
                if (itemstack.getType().equals(Material.AIR)) {
                    itemstack = null;
                } else {
                    isMove = true;
                }
            }
        } else {
            if (event.getCursor() != null) {
                if (event.getCursor().getType().equals(itemstack.getType())) {
                    isIn = true;
                }
            }
        }
        if (itemstack == null) {
            if (event.getAction().equals(InventoryAction.HOTBAR_MOVE_AND_READD) || event.getAction().equals(InventoryAction.HOTBAR_SWAP)) {
                itemstack = event.getWhoClicked().getInventory().getItem(event.getHotbarButton());
                if (itemstack != null) {
                    if (itemstack.getType().equals(Material.AIR)) {
                        itemstack = null;
                    } else {
                        isMove = true;
                    }
                }
            }
        }
    }
    if (itemstack == null) {
        if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) {
            itemstack = event.getCurrentItem();
            if (itemstack != null) {
                if (itemstack.getType().equals(Material.AIR)) {
                    itemstack = null;
                } else {
                    isMove = true;
                }
            }
        }
    }
    if (event.isShiftClick() && event.getView().getItem(event.getRawSlot()) != null) {
        if (isIn) {
            if (!InventoryUtils.stillHaveSpace(event.getView().getTopInventory(), event.getView().getItem(event.getRawSlot()).getType())) {
                return;
            }
        } else {
            if (!InventoryUtils.stillHaveSpace(event.getWhoClicked().getInventory(), event.getView().getItem(event.getRawSlot()).getType())) {
                return;
            }
        }
    }
    if (event.getCursor() != null) {
        if (!event.getCursor().getType().equals(Material.AIR)) {
            if (event.getCurrentItem() != null) {
                if (!event.getCurrentItem().getType().equals(Material.AIR)) {
                    if (event.getCurrentItem().getType().equals(event.getCursor().getType())) {
                        if (event.getCurrentItem().getAmount() >= event.getCurrentItem().getType().getMaxStackSize()) {
                            return;
                        }
                    }
                }
            }
        }
    }
    if (isMove) {
        PacketManager.sendHandMovement(InteractionVisualizerAPI.getPlayers(), player);
        if (itemstack != null) {
            Item item = new Item(loc.clone().add(0.5, 0.5, 0.5).add(event.getWhoClicked().getLocation().getDirection().multiply(-0.8)));
            Vector offset = new Vector(0.0, 0.15, 0.0);
            Vector vector = loc.clone().add(0.5, 0.5, 0.5).toVector().subtract(event.getWhoClicked().getEyeLocation().clone().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).add(0.0, -0.5, 0.0).toVector()).multiply(-0.13).add(offset);
            item.setVelocity(vector);
            if (isIn) {
                item.teleport(event.getWhoClicked().getEyeLocation().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0));
                vector = loc.clone().add(0.5, 0.5, 0.5).toVector().subtract(event.getWhoClicked().getEyeLocation().clone().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector()).multiply(0.13).add(offset);
                item.setVelocity(vector);
            }
            PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item);
            item.setItemStack(itemstack);
            item.setPickupDelay(32767);
            item.setGravity(true);
            PacketManager.updateItem(item);
            if (!link.containsKey(player)) {
                link.put(player, new ArrayList<Item>());
            }
            List<Item> list = link.get(player);
            list.add(item);
            boolean finalIsIn = isIn;
            Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                if (finalIsIn) {
                    item.teleport(loc.clone().add(0.5, 0.5, 0.5));
                } else {
                    item.teleport(event.getWhoClicked().getEyeLocation().add(0.0, -0.5, 0.0).add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0));
                }
                item.setVelocity(new Vector(0.0, 0.0, 0.0));
                item.setGravity(false);
                PacketManager.updateItem(item);
            }, 8);
            Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
                list.remove(item);
            }, 20);
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Item(com.loohp.interactionvisualizer.entityholders.Item) Block(org.bukkit.block.Block) ItemStack(org.bukkit.inventory.ItemStack) Vector(org.bukkit.util.Vector) Inventory(org.bukkit.inventory.Inventory) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 19 with Item

use of com.loohp.interactionvisualizer.entityholders.Item in project InteractionVisualizer by LOOHP.

the class DoubleChestDisplay method onDragDoubleChest.

@EventHandler(priority = EventPriority.MONITOR)
public void onDragDoubleChest(InventoryDragEvent event) {
    Player player = (Player) event.getWhoClicked();
    if (event.isCancelled()) {
        return;
    }
    if (event.getWhoClicked().getGameMode().equals(GameMode.SPECTATOR)) {
        return;
    }
    if (event.getView().getTopInventory() == null) {
        return;
    }
    try {
        if (event.getView().getTopInventory().getLocation() == null) {
            return;
        }
    } catch (Exception e) {
        return;
    }
    if (!LocationUtils.isLoaded(event.getView().getTopInventory().getLocation())) {
        return;
    }
    if (event.getView().getTopInventory().getLocation().getBlock() == null) {
        return;
    }
    if (!event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.CHEST) && !event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.TRAPPED_CHEST)) {
        return;
    }
    boolean ok = false;
    for (Entry<Integer, ItemStack> entry : event.getNewItems().entrySet()) {
        ItemStack item = event.getView().getItem(entry.getKey());
        if (item == null) {
            ok = true;
            break;
        }
        if (item.getType().equals(Material.AIR)) {
            ok = true;
            break;
        }
        if (!item.getType().equals(entry.getValue().getType())) {
            continue;
        }
        if (item.getAmount() < item.getType().getMaxStackSize()) {
            ok = true;
            break;
        }
    }
    if (!ok) {
        return;
    }
    Inventory topInventory = event.getView().getTopInventory();
    Block block = topInventory.getLocation().getBlock();
    Location loc = block.getLocation();
    Chest chest = (Chest) block.getState();
    InventoryHolder holder = chest.getInventory().getHolder();
    if (!(holder instanceof DoubleChest)) {
        return;
    }
    DoubleChest doublechest = (DoubleChest) holder;
    BlockFace facing = null;
    if (!InteractionVisualizer.version.isLegacy()) {
        BlockData blockData = chest.getBlockData();
        facing = ((Directional) blockData).getFacing();
    } else {
        facing = LegacyFacingUtils.getFacing(chest.getBlock());
    }
    if (facing.equals(BlockFace.EAST)) {
        block = doublechest.getLeftSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.0, 0.0, 0.5);
    } else if (facing.equals(BlockFace.SOUTH)) {
        block = doublechest.getRightSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.5, 0.0, 0.0);
    } else if (facing.equals(BlockFace.WEST)) {
        block = doublechest.getRightSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.0, 0.0, 0.5);
    } else if (facing.equals(BlockFace.NORTH)) {
        block = doublechest.getLeftSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.5, 0.0, 0.0);
    }
    for (int slot : event.getRawSlots()) {
        if (slot >= 0 && slot < topInventory.getSize()) {
            PacketManager.sendHandMovement(InteractionVisualizerAPI.getPlayers(), player);
            ItemStack itemstack = event.getOldCursor();
            if (itemstack != null) {
                if (itemstack.getType().equals(Material.AIR)) {
                    itemstack = null;
                }
            }
            if (itemstack != null) {
                Item item = new Item(event.getWhoClicked().getEyeLocation().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0));
                Vector offset = new Vector(0.0, 0.15, 0.0);
                Vector vector = loc.clone().add(0.5, 1, 0.5).toVector().subtract(event.getWhoClicked().getEyeLocation().clone().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector()).multiply(0.15).add(offset);
                item.setVelocity(vector);
                PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item);
                item.setItemStack(itemstack);
                item.setCustomName(System.currentTimeMillis() + "");
                item.setPickupDelay(32767);
                item.setGravity(true);
                PacketManager.updateItem(item);
                if (!link.containsKey(player)) {
                    link.put(player, new ArrayList<Item>());
                }
                List<Item> list = link.get(player);
                list.add(item);
                Location finalLoc = loc;
                Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                    item.teleport(finalLoc.clone().add(0.5, 1, 0.5));
                    item.setVelocity(new Vector(0.0, 0.0, 0.0));
                    item.setGravity(false);
                    PacketManager.updateItem(item);
                }, 8);
                Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                    PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
                    list.remove(item);
                }, 20);
            }
            break;
        }
    }
}
Also used : Chest(org.bukkit.block.Chest) DoubleChest(org.bukkit.block.DoubleChest) Player(org.bukkit.entity.Player) BlockFace(org.bukkit.block.BlockFace) Item(com.loohp.interactionvisualizer.entityholders.Item) Block(org.bukkit.block.Block) ItemStack(org.bukkit.inventory.ItemStack) DoubleChest(org.bukkit.block.DoubleChest) BlockData(org.bukkit.block.data.BlockData) InventoryHolder(org.bukkit.inventory.InventoryHolder) Vector(org.bukkit.util.Vector) Inventory(org.bukkit.inventory.Inventory) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 20 with Item

use of com.loohp.interactionvisualizer.entityholders.Item in project InteractionVisualizer by LOOHP.

the class DoubleChestDisplay method onUseDoubleChest.

@EventHandler(priority = EventPriority.MONITOR)
public void onUseDoubleChest(InventoryClickEvent event) {
    Player player = (Player) event.getWhoClicked();
    if (event.isCancelled()) {
        return;
    }
    if (VanishUtils.isVanished(player)) {
        return;
    }
    if (OpenInvUtils.isSlientChest(player)) {
        return;
    }
    if (event.getWhoClicked().getGameMode().equals(GameMode.SPECTATOR)) {
        return;
    }
    if (event.getView().getTopInventory() == null) {
        return;
    }
    if (!event.getView().getTopInventory().getType().equals(InventoryType.CHEST)) {
        return;
    }
    try {
        if (event.getView().getTopInventory().getLocation() == null) {
            return;
        }
    } catch (Exception e) {
        return;
    }
    if (!LocationUtils.isLoaded(event.getView().getTopInventory().getLocation())) {
        return;
    }
    if (event.getView().getTopInventory().getLocation().getBlock() == null) {
        return;
    }
    if (!event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.CHEST) && !event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.TRAPPED_CHEST)) {
        return;
    }
    if (event.getClick().equals(ClickType.MIDDLE) && !event.getWhoClicked().getGameMode().equals(GameMode.CREATIVE)) {
        return;
    }
    Inventory topInventory = event.getView().getTopInventory();
    Block block = topInventory.getLocation().getBlock();
    Location loc = block.getLocation();
    Chest chest = (Chest) block.getState();
    InventoryHolder holder = chest.getInventory().getHolder();
    if (!(holder instanceof DoubleChest)) {
        return;
    }
    DoubleChest doublechest = (DoubleChest) holder;
    BlockFace facing = null;
    if (!InteractionVisualizer.version.isLegacy()) {
        BlockData blockData = chest.getBlockData();
        facing = ((Directional) blockData).getFacing();
    } else {
        facing = LegacyFacingUtils.getFacing(chest.getBlock());
    }
    if (facing.equals(BlockFace.EAST)) {
        block = doublechest.getLeftSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.0, 0.0, 0.5);
    } else if (facing.equals(BlockFace.SOUTH)) {
        block = doublechest.getRightSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.5, 0.0, 0.0);
    } else if (facing.equals(BlockFace.WEST)) {
        block = doublechest.getRightSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.0, 0.0, 0.5);
    } else if (facing.equals(BlockFace.NORTH)) {
        block = doublechest.getLeftSide().getInventory().getLocation().getBlock();
        loc = block.getLocation().add(0.5, 0.0, 0.0);
    }
    boolean isIn = true;
    boolean isMove = false;
    ItemStack itemstack = null;
    if (event.getRawSlot() >= 0 && event.getRawSlot() < topInventory.getSize()) {
        itemstack = event.getCurrentItem();
        if (itemstack != null) {
            if (itemstack.getType().equals(Material.AIR)) {
                itemstack = null;
            } else {
                isIn = false;
                isMove = true;
            }
        }
        if (itemstack == null) {
            itemstack = event.getCursor();
            if (itemstack != null) {
                if (itemstack.getType().equals(Material.AIR)) {
                    itemstack = null;
                } else {
                    isMove = true;
                }
            }
        } else {
            if (event.getCursor() != null) {
                if (event.getCursor().getType().equals(itemstack.getType())) {
                    isIn = true;
                }
            }
        }
        if (itemstack == null) {
            if ((event.getAction().equals(InventoryAction.HOTBAR_MOVE_AND_READD) || event.getAction().equals(InventoryAction.HOTBAR_SWAP)) && event.getHotbarButton() >= 0) {
                itemstack = event.getWhoClicked().getInventory().getItem(event.getHotbarButton());
                if (itemstack != null) {
                    if (itemstack.getType().equals(Material.AIR)) {
                        itemstack = null;
                    } else {
                        isMove = true;
                    }
                }
            }
        }
    }
    if (itemstack == null) {
        if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) {
            itemstack = event.getCurrentItem();
            if (itemstack != null) {
                if (itemstack.getType().equals(Material.AIR)) {
                    itemstack = null;
                } else {
                    isMove = true;
                }
            }
        }
    }
    if (event.isShiftClick() && event.getView().getItem(event.getRawSlot()) != null) {
        if (isIn) {
            if (!InventoryUtils.stillHaveSpace(event.getView().getTopInventory(), event.getView().getItem(event.getRawSlot()).getType())) {
                return;
            }
        } else {
            if (!InventoryUtils.stillHaveSpace(event.getWhoClicked().getInventory(), event.getView().getItem(event.getRawSlot()).getType())) {
                return;
            }
        }
    }
    if (event.getCursor() != null) {
        if (!event.getCursor().getType().equals(Material.AIR)) {
            if (event.getCurrentItem() != null) {
                if (!event.getCurrentItem().getType().equals(Material.AIR)) {
                    if (event.getCurrentItem().getType().equals(event.getCursor().getType())) {
                        if (event.getCurrentItem().getAmount() >= event.getCurrentItem().getType().getMaxStackSize()) {
                            return;
                        }
                    }
                }
            }
        }
    }
    if (isMove) {
        PacketManager.sendHandMovement(InteractionVisualizerAPI.getPlayers(), player);
        if (itemstack != null) {
            Item item = new Item(loc.clone().add(0.5, 1, 0.5));
            Vector offset = new Vector(0.0, 0.15, 0.0);
            Vector vector = loc.clone().add(0.5, 1, 0.5).toVector().subtract(event.getWhoClicked().getEyeLocation().clone().add(0.0, -0.5, 0.0).add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector()).multiply(-0.15).add(offset);
            item.setVelocity(vector);
            if (isIn) {
                item.teleport(event.getWhoClicked().getEyeLocation().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0));
                vector = loc.clone().add(0.5, 1, 0.5).toVector().subtract(event.getWhoClicked().getEyeLocation().clone().add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector()).multiply(0.15).add(offset);
                item.setVelocity(vector);
            }
            PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item);
            item.setItemStack(itemstack);
            item.setPickupDelay(32767);
            item.setGravity(true);
            PacketManager.updateItem(item);
            if (!link.containsKey(player)) {
                link.put(player, new ArrayList<Item>());
            }
            List<Item> list = link.get(player);
            list.add(item);
            boolean finalIsIn = isIn;
            Location finalLoc = loc;
            Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                if (finalIsIn) {
                    item.teleport(finalLoc.clone().add(0.5, 1, 0.5));
                } else {
                    item.teleport(player.getEyeLocation().add(0.0, -0.5, 0.0).add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0));
                }
                item.setVelocity(new Vector(0.0, 0.0, 0.0));
                item.setGravity(false);
                PacketManager.updateItem(item);
            }, 8);
            Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
                list.remove(item);
            }, 20);
        }
    }
}
Also used : Chest(org.bukkit.block.Chest) DoubleChest(org.bukkit.block.DoubleChest) Player(org.bukkit.entity.Player) BlockFace(org.bukkit.block.BlockFace) Item(com.loohp.interactionvisualizer.entityholders.Item) Block(org.bukkit.block.Block) DoubleChest(org.bukkit.block.DoubleChest) BlockData(org.bukkit.block.data.BlockData) ItemStack(org.bukkit.inventory.ItemStack) InventoryHolder(org.bukkit.inventory.InventoryHolder) Vector(org.bukkit.util.Vector) Inventory(org.bukkit.inventory.Inventory) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Aggregations

Item (com.loohp.interactionvisualizer.entityholders.Item)59 Player (org.bukkit.entity.Player)45 EventHandler (org.bukkit.event.EventHandler)45 Block (org.bukkit.block.Block)43 Vector (org.bukkit.util.Vector)35 Location (org.bukkit.Location)32 ItemStack (org.bukkit.inventory.ItemStack)31 ArmorStand (com.loohp.interactionvisualizer.entityholders.ArmorStand)23 Inventory (org.bukkit.inventory.Inventory)22 HashMap (java.util.HashMap)7 InventoryView (org.bukkit.inventory.InventoryView)5 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)5 DynamicVisualizerEntity (com.loohp.interactionvisualizer.entityholders.DynamicVisualizerEntity)4 ItemFrame (com.loohp.interactionvisualizer.entityholders.ItemFrame)4 VisualizerEntity (com.loohp.interactionvisualizer.entityholders.VisualizerEntity)4 Collection (java.util.Collection)4 Chest (org.bukkit.block.Chest)4 DoubleChest (org.bukkit.block.DoubleChest)4 InventoryHolder (org.bukkit.inventory.InventoryHolder)4 HashSet (java.util.HashSet)3