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);
}
}
}
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();
});
}
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;
}
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);
}
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);
}
Aggregations