Search in sources :

Example 26 with Item

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

the class StonecutterDisplay 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() instanceof StonecutterInventory)) {
            return;
        }
        Block block = player.getTargetBlockExact(7, FluidCollisionMode.NEVER);
        if (block == null || !block.getType().equals(Material.STONECUTTER)) {
            return;
        }
        playermap.put(player, block);
    }
    InventoryView view = player.getOpenInventory();
    Block block = playermap.get(player);
    Location loc = block.getLocation();
    if (!openedStonecutter.containsKey(block)) {
        Map<String, Object> map = new HashMap<>();
        map.put("Player", player);
        map.put("Item", "N/A");
        openedStonecutter.put(block, map);
    }
    Map<String, Object> map = openedStonecutter.get(block);
    if (!map.get("Player").equals(player)) {
        return;
    }
    ItemStack input = view.getItem(0);
    if (input != null) {
        if (input.getType().equals(Material.AIR)) {
            input = null;
        }
    }
    ItemStack output = view.getItem(1);
    if (output != null) {
        if (output.getType().equals(Material.AIR)) {
            output = null;
        }
    }
    ItemStack itemstack = null;
    if (output == null) {
        if (input != null) {
            itemstack = input;
        }
    } else {
        itemstack = output;
    }
    if (itemstack != null) {
        ItemStack itempar = itemstack.clone();
        int taskid = new BukkitRunnable() {

            public void run() {
                player.getWorld().spawnParticle(Particle.ITEM_CRACK, loc.clone().add(0.5, 0.7, 0.5), 25, 0.1, 0.1, 0.1, 0.1, itempar);
            }
        }.runTaskTimer(InteractionVisualizer.plugin, 0, 1).getTaskId();
        new BukkitRunnable() {

            public void run() {
                Bukkit.getScheduler().cancelTask(taskid);
            }
        }.runTaskLater(InteractionVisualizer.plugin, 4);
    }
    Item item = null;
    if (map.get("Item") instanceof String) {
        if (itemstack != null) {
            item = new Item(loc.clone().add(0.5, 0.75, 0.5));
            item.setItemStack(itemstack);
            item.setVelocity(new Vector(0, 0, 0));
            item.setPickupDelay(32767);
            item.setGravity(false);
            map.put("Item", item);
            PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item);
            PacketManager.updateItem(item);
        } else {
            map.put("Item", "N/A");
        }
    } else {
        item = (Item) map.get("Item");
        if (itemstack != null) {
            if (!item.getItemStack().equals(itemstack)) {
                item.setItemStack(itemstack);
                PacketManager.updateItem(item);
            }
            item.setPickupDelay(32767);
            item.setGravity(false);
        } else {
            map.put("Item", "N/A");
            PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
        }
    }
}
Also used : HashMap(java.util.HashMap) StonecutterInventory(org.bukkit.inventory.StonecutterInventory) BukkitRunnable(org.bukkit.scheduler.BukkitRunnable) Item(com.loohp.interactionvisualizer.entityholders.Item) InventoryView(org.bukkit.inventory.InventoryView) Block(org.bukkit.block.Block) ItemStack(org.bukkit.inventory.ItemStack) Vector(org.bukkit.util.Vector) Location(org.bukkit.Location)

Example 27 with Item

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

the class PacketManager method update.

public static void update() {
    if (!plugin.isEnabled()) {
        return;
    }
    InteractionVisualizer.asyncExecutorManager.runTaskAsynchronously(() -> {
        for (Player player : Bukkit.getOnlinePlayers()) {
            try {
                Set<VisualizerEntity> activeList = playerStatus.get(player);
                if (activeList != null) {
                    Collection<Player> playerList = new HashSet<>();
                    playerList.add(player);
                    Location playerLocation = PlayerLocationManager.getPlayerLocation(player);
                    Location playerEyeLocation = PlayerLocationManager.getPlayerEyeLocation(player);
                    for (Entry<VisualizerEntity, Collection<Player>> entry : active.entrySet()) {
                        VisualizerEntity entity = entry.getKey();
                        int range = InteractionVisualizer.playerTrackingRange.getOrDefault(entity.getWorld(), 64);
                        range *= range;
                        boolean playerActive = activeList.contains(entity);
                        boolean sameWorld = entity.getWorld().equals(playerLocation.getWorld());
                        boolean inRange = sameWorld && (entity.getLocation().distanceSquared(playerLocation) <= range);
                        Boolean hasLineOfSight = InteractionVisualizer.hideIfObstructed ? null : true;
                        boolean isLoaded = loaded.getOrDefault(entity, false);
                        Location entityCenter = entity.getLocation();
                        entityCenter.setY(entityCenter.getY() + (entity instanceof Item ? (entity.getHeight() * 1.7) : (entity.getHeight() * 0.7)));
                        if (playerActive && (!sameWorld || !inRange || !(hasLineOfSight != null ? hasLineOfSight : (hasLineOfSight = LineOfSightUtils.hasLineOfSight(playerEyeLocation, entityCenter))))) {
                            if (entity instanceof ArmorStand) {
                                ArmorStand stand = (ArmorStand) entity;
                                removeArmorStand(playerList, stand, false, true);
                            } else if (entity instanceof Item) {
                                Item item = (Item) entity;
                                removeItem(playerList, item, false, true);
                            } else if (entity instanceof ItemFrame) {
                                ItemFrame frame = (ItemFrame) entity;
                                removeItemFrame(playerList, frame, false, true);
                            }
                        } else if (!playerActive && entry.getValue().contains(player) && isLoaded && sameWorld && inRange && (hasLineOfSight != null ? hasLineOfSight : (hasLineOfSight = LineOfSightUtils.hasLineOfSight(playerEyeLocation, entityCenter)))) {
                            if (entity instanceof ArmorStand) {
                                ArmorStand stand = (ArmorStand) entity;
                                sendArmorStandSpawn(playerList, stand);
                                updateArmorStand(playerList, stand);
                            } else if (entity instanceof Item) {
                                Item item = (Item) entity;
                                sendItemSpawn(playerList, item);
                                updateItem(playerList, item);
                            } else if (entity instanceof ItemFrame) {
                                ItemFrame frame = (ItemFrame) entity;
                                sendItemFrameSpawn(playerList, frame);
                                updateItemFrame(playerList, frame);
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            TimeUnit.MILLISECONDS.sleep(5);
        } catch (InterruptedException e) {
        }
        update();
    });
}
Also used : Player(org.bukkit.entity.Player) DynamicVisualizerEntity(com.loohp.interactionvisualizer.entityholders.DynamicVisualizerEntity) VisualizerEntity(com.loohp.interactionvisualizer.entityholders.VisualizerEntity) ItemFrame(com.loohp.interactionvisualizer.entityholders.ItemFrame) Item(com.loohp.interactionvisualizer.entityholders.Item) ArmorStand(com.loohp.interactionvisualizer.entityholders.ArmorStand) Collection(java.util.Collection) HashSet(java.util.HashSet) Location(org.bukkit.Location)

Example 28 with Item

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

the class EnchantmentTableAnimation method playEnchantAnimation.

@SuppressWarnings("deprecation")
private CompletableFuture<Integer> playEnchantAnimation(Map<Enchantment, Integer> enchantsToAdd, Integer expCost, ItemStack itemstack) {
    CompletableFuture<Integer> future = new CompletableFuture<>();
    if (item.isPresent() && item.get().isLocked()) {
        future.complete(PLAY_ENCHANTMENT);
        return future;
    }
    this.enchanting.set(true);
    if (!this.item.isPresent()) {
        this.item = Optional.of(new Item(location.clone().add(0.5, 1.3, 0.5)));
        PacketManager.sendItemSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY), item.get());
    }
    Item item = this.item.get();
    item.setItemStack(itemstack);
    item.setGravity(false);
    item.setLocked(true);
    item.setVelocity(new Vector(0.0, 0.05, 0.0));
    PacketManager.updateItem(item);
    for (Player each : InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY)) {
        each.spawnParticle(Particle.PORTAL, location.clone().add(0.5, 2.6, 0.5), 200);
    }
    Bukkit.getScheduler().runTaskLater(plugin, () -> {
        item.teleport(location.clone().add(0.5, 2.3, 0.5));
        item.setVelocity(new Vector(0, 0, 0));
        PacketManager.updateItem(item);
    }, 20);
    List<ArmorStand> stands = new LinkedList<>();
    Bukkit.getScheduler().runTaskLater(plugin, () -> {
        Location standloc = item.getLocation().add(0.0, 0.5, 0.0);
        for (Entry<Enchantment, Integer> entry : enchantsToAdd.entrySet()) {
            Enchantment ench = entry.getKey();
            int level = entry.getValue();
            String str = TranslationUtils.getEnchantment(ench);
            if (!EnchantmentTableDisplay.getTranslatableEnchantments().contains(str)) {
                str = null;
            }
            Component enchantmentName = (str == null || str.equals("")) ? ComponentFont.parseFont(LegacyComponentSerializer.legacySection().deserialize(CustomStringUtils.capitalize(ench.getName().toLowerCase().replace("_", " ")))) : Component.translatable(str);
            ArmorStand stand = new ArmorStand(standloc);
            if (ench.getMaxLevel() != 1 || level != 1) {
                enchantmentName = enchantmentName.append(ComponentFont.parseFont(LegacyComponentSerializer.legacySection().deserialize(" " + ChatColor.AQUA + RomanNumberUtils.toRoman(entry.getValue()))));
            }
            if (ench.isCursed()) {
                enchantmentName = enchantmentName.color(NamedTextColor.RED);
            } else {
                enchantmentName = enchantmentName.color(NamedTextColor.AQUA);
            }
            stand.setCustomName(enchantmentName);
            stand.setCustomNameVisible(true);
            setStand(stand);
            PacketManager.sendArmorStandSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.HOLOGRAM, KEY), stand);
            stands.add(stand);
            standloc.add(0.0, 0.3, 0.0);
        }
        ArmorStand stand = new ArmorStand(standloc);
        TranslatableComponent levelTrans = Component.translatable(TranslationUtils.getLevel(expCost));
        if (expCost != 1) {
            levelTrans = levelTrans.args(Component.text(expCost));
        }
        levelTrans = levelTrans.color(NamedTextColor.GREEN);
        stand.setCustomName(levelTrans);
        stand.setCustomNameVisible(true);
        setStand(stand);
        PacketManager.sendArmorStandSpawn(InteractionVisualizerAPI.getPlayerModuleList(Modules.HOLOGRAM, KEY), stand);
        stands.add(stand);
        PacketManager.updateItem(item);
    }, 50);
    Bukkit.getScheduler().runTaskLater(plugin, () -> {
        while (!stands.isEmpty()) {
            ArmorStand stand = stands.remove(0);
            PacketManager.removeArmorStand(InteractionVisualizerAPI.getPlayers(), stand);
        }
        item.setGravity(true);
        PacketManager.updateItem(item);
    }, 90);
    Bukkit.getScheduler().runTaskLater(plugin, () -> {
        item.teleport(location.clone().add(0.5, 1.3, 0.5));
        item.setGravity(false);
        PacketManager.updateItem(item);
        item.setLocked(false);
        future.complete(PLAY_ENCHANTMENT);
        this.enchanting.set(false);
    }, 98);
    return future;
}
Also used : Player(org.bukkit.entity.Player) LinkedList(java.util.LinkedList) Item(com.loohp.interactionvisualizer.entityholders.Item) CompletableFuture(java.util.concurrent.CompletableFuture) ArmorStand(com.loohp.interactionvisualizer.entityholders.ArmorStand) TranslatableComponent(net.kyori.adventure.text.TranslatableComponent) Enchantment(org.bukkit.enchantments.Enchantment) TranslatableComponent(net.kyori.adventure.text.TranslatableComponent) Component(net.kyori.adventure.text.Component) Vector(org.bukkit.util.Vector) Location(org.bukkit.Location)

Example 29 with Item

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

the class FurnaceDisplay method onFurnace.

@EventHandler(priority = EventPriority.MONITOR)
public void onFurnace(InventoryClickEvent event) {
    if (VanishUtils.isVanished((Player) event.getWhoClicked())) {
        return;
    }
    if (event.isCancelled()) {
        return;
    }
    if (event.getRawSlot() != 0 && event.getRawSlot() != 2) {
        return;
    }
    if (event.getCurrentItem() == null) {
        return;
    }
    if (event.getCurrentItem().getType().equals(Material.AIR)) {
        return;
    }
    if (event.getRawSlot() == 2) {
        if (event.getCursor() != null) {
            if (!event.getCursor().getType().equals(Material.AIR)) {
                if (event.getCursor().getAmount() >= event.getCursor().getType().getMaxStackSize()) {
                    return;
                }
            }
        }
    } else {
        if (event.getCursor() != null) {
            if (event.getCursor().getType().equals(event.getCurrentItem().getType())) {
                return;
            }
        }
    }
    if (event.isShiftClick()) {
        if (!InventoryUtils.stillHaveSpace(event.getWhoClicked().getInventory(), event.getView().getItem(event.getRawSlot()).getType())) {
            return;
        }
    }
    if (event.getAction().equals(InventoryAction.HOTBAR_MOVE_AND_READD)) {
        if (event.getWhoClicked().getInventory().getItem(event.getHotbarButton()) != null && !event.getWhoClicked().getInventory().getItem(event.getHotbarButton()).getType().equals(Material.AIR)) {
            return;
        }
    }
    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 (!isFurnace(event.getView().getTopInventory().getLocation().getBlock().getType())) {
        return;
    }
    Block block = event.getView().getTopInventory().getLocation().getBlock();
    if (!furnaceMap.containsKey(block)) {
        return;
    }
    Map<String, Object> map = furnaceMap.get(block);
    int slot = event.getRawSlot();
    ItemStack itemstack = event.getCurrentItem().clone();
    Location loc = block.getLocation();
    Player player = (Player) event.getWhoClicked();
    Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
        if (player.getOpenInventory().getItem(slot) == null || (itemstack.isSimilar(player.getOpenInventory().getItem(slot)) && itemstack.getAmount() == player.getOpenInventory().getItem(slot).getAmount())) {
            return;
        }
        if (map.get("Item") instanceof String) {
            map.put("Item", new Item(block.getLocation().clone().add(0.5, 1.2, 0.5)));
        }
        Item item = (Item) map.get("Item");
        map.put("Item", "N/A");
        item.setItemStack(itemstack);
        item.setLocked(true);
        Vector lift = new Vector(0.0, 0.15, 0.0);
        Vector pickup = player.getEyeLocation().add(0.0, -0.5, 0.0).add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector().subtract(loc.clone().add(0.5, 1.2, 0.5).toVector()).multiply(0.15).add(lift);
        item.setVelocity(pickup);
        item.setGravity(true);
        item.setPickupDelay(32767);
        PacketManager.updateItem(item);
        Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
            SoundManager.playItemPickup(item.getLocation(), InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY));
            PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
        }, 8);
    }, 1);
}
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) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 30 with Item

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

the class GrindstoneDisplay method onGrindstone.

@EventHandler(priority = EventPriority.MONITOR)
public void onGrindstone(InventoryClickEvent event) {
    if (VanishUtils.isVanished((Player) event.getWhoClicked())) {
        return;
    }
    if (event.isCancelled()) {
        return;
    }
    if (event.getRawSlot() != 2) {
        return;
    }
    if (event.getCurrentItem() == null) {
        return;
    }
    if (event.getCurrentItem().getType().equals(Material.AIR)) {
        return;
    }
    if (event.getCursor() != null) {
        if (!event.getCursor().getType().equals(Material.AIR)) {
            if (event.getCursor().getAmount() >= event.getCursor().getType().getMaxStackSize()) {
                return;
            }
        }
    }
    if (event.isShiftClick()) {
        if (!InventoryUtils.stillHaveSpace(event.getWhoClicked().getInventory(), event.getView().getItem(2).getType())) {
            return;
        }
    }
    if (event.getAction().equals(InventoryAction.HOTBAR_MOVE_AND_READD)) {
        if (event.getWhoClicked().getInventory().getItem(event.getHotbarButton()) != null && !event.getWhoClicked().getInventory().getItem(event.getHotbarButton()).getType().equals(Material.AIR)) {
            return;
        }
    }
    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 (!event.getView().getTopInventory().getLocation().getBlock().getType().equals(Material.GRINDSTONE)) {
        return;
    }
    Block block = event.getView().getTopInventory().getLocation().getBlock();
    if (!openedGrindstone.containsKey(block)) {
        return;
    }
    Map<String, Object> map = openedGrindstone.get(block);
    if (!map.get("Player").equals(event.getWhoClicked())) {
        return;
    }
    ItemStack itemstack = event.getCurrentItem().clone();
    Location loc = block.getLocation();
    Player player = (Player) event.getWhoClicked();
    ArmorStand slot0 = (ArmorStand) map.get("0");
    ArmorStand slot1 = (ArmorStand) map.get("1");
    if (map.get("2") instanceof String) {
        map.put("2", new Item(block.getLocation().clone().add(0.5, 1.2, 0.5)));
    }
    Item item = (Item) map.get("2");
    Inventory before = Bukkit.createInventory(null, 9);
    before.setItem(0, player.getOpenInventory().getItem(0).clone());
    before.setItem(1, player.getOpenInventory().getItem(1).clone());
    Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
        Inventory after = Bukkit.createInventory(null, 9);
        after.setItem(0, player.getOpenInventory().getItem(0).clone());
        after.setItem(1, player.getOpenInventory().getItem(1).clone());
        if (InventoryUtils.compareContents(before, after)) {
            return;
        }
        slot0.setLocked(true);
        slot1.setLocked(true);
        item.setLocked(true);
        openedGrindstone.remove(block);
        float yaw = getCardinalDirection(player);
        Vector vector = new Location(slot0.getWorld(), slot0.getLocation().getX(), slot0.getLocation().getY(), slot0.getLocation().getZ(), yaw, 0).getDirection().normalize();
        slot0.teleport(slot0.getLocation().add(rotateVectorAroundY(vector.clone(), 90).multiply(0.1)));
        slot1.teleport(slot1.getLocation().add(rotateVectorAroundY(vector.clone(), -90).multiply(0.1)));
        PacketManager.updateArmorStand(slot0);
        PacketManager.updateArmorStand(slot1);
        Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
            for (Player each : InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY)) {
                each.spawnParticle(Particle.CLOUD, loc.clone().add(0.5, 1.1, 0.5), 10, 0.05, 0.05, 0.05, 0.05);
            }
        }, 6);
        Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
            Vector lift = new Vector(0.0, 0.15, 0.0);
            Vector pickup = player.getEyeLocation().add(0.0, -0.5, 0.0).add(0.0, InteractionVisualizer.playerPickupYOffset, 0.0).toVector().subtract(loc.clone().add(0.5, 1.2, 0.5).toVector()).multiply(0.15).add(lift);
            item.setItemStack(itemstack);
            item.setVelocity(pickup);
            item.setGravity(true);
            item.setPickupDelay(32767);
            PacketManager.updateItem(item);
            Bukkit.getScheduler().runTaskLater(InteractionVisualizer.plugin, () -> {
                SoundManager.playItemPickup(item.getLocation(), InteractionVisualizerAPI.getPlayerModuleList(Modules.ITEMDROP, KEY));
                PacketManager.removeArmorStand(InteractionVisualizerAPI.getPlayers(), slot0);
                PacketManager.removeArmorStand(InteractionVisualizerAPI.getPlayers(), slot1);
                PacketManager.removeItem(InteractionVisualizerAPI.getPlayers(), item);
            }, 8);
        }, 10);
    }, 1);
}
Also used : Player(org.bukkit.entity.Player) Item(com.loohp.interactionvisualizer.entityholders.Item) ArmorStand(com.loohp.interactionvisualizer.entityholders.ArmorStand) 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)

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