1.8.8 NMS Armorstands

Discussion in 'Spigot Plugin Development' started by IronMan59, Mar 5, 2020.

  1. So I'm looking to make something like this video:

    I need to know how to manipulate armorstands and remove the packet. My current code is
    Code (Text):
     @SuppressWarnings("deprecation")
        @EventHandler
        public void onThrow(PlayerDropItemEvent e) {
         //   if (e.getItemDrop().getType().name().contains("PICK")) {
                // System.out.println("DEBUG: The dropped item type contains the name PICK");
                Location loc = e.getItemDrop().getLocation();
                Cuboid wormholeRegion = RegionManager.getRegion("wormhole").getRegion();
                ItemStack item = e.getItemDrop().getItemStack();

                assert wormholeRegion != null;
                if (wormholeRegion.contains(e.getPlayer().getLocation().getBlockX(), e.getPlayer().getLocation().getBlockY(), e.getPlayer().getLocation().getBlockZ())) {
                    System.out.println("DEBUG: worholeRegion contains the Player");
                    if (e.getItemDrop().getItemStack().getType().name().contains("SWORD")) {

                        if (wormholeRegion.contains(loc)) {
                            System.out.println("DEBUG: wormholeRegion contains the item dropped");
                            if (vulcanPrisons.energyMethods.isArmorFull(item)) {
                                System.out.println("DEBUG: The item is full of static charge");

                                Player p = e.getPlayer();
                                p.openInventory(Enchanter.menu(item));
                                p.getInventory().remove(item);

                                /* Below is example of how wormhole method should work. */

                                WorldServer s = ((CraftWorld) loc.getWorld()).getHandle();
                                EntityArmorStand stand = new EntityArmorStand(s);
                                stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0);
                                // StringBuilder name = new StringBuilder();
                                // for(String str : item.getItemMeta().getLore()) { name.append(System.getProperty("line.separator")).append(str); }
                                stand.setCustomName(item.getItemMeta().getDisplayName());
                                stand.setCustomNameVisible(true);
                                stand.setGravity(false);
                                stand.setArms(true);
                                stand.setInvisible(true);
                                PacketPlayOutSpawnEntityLiving spawnP = new PacketPlayOutSpawnEntityLiving(stand);
                                PacketPlayOutEntityEquipment EquipP = new PacketPlayOutEntityEquipment(stand.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP);
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP);

                                DataWatcher dataWatcher = stand.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata = new PacketPlayOutEntityMetadata(stand.getId(), dataWatcher, false);

                                new BukkitRunnable() {
                                    double rad = 0;
                                    int i = 0;

                                    @Override
                                    public void run() {
                                        if (i <= 300) {
                                            i++;
                                            if (rad < Math.toRadians(360)) {
                                                dataWatcher.watch(14, new Vector3f(-100, (float) Math.toDegrees(rad),0));
                                                rad += 0.3; //increase to have head rotate faster.
                                            } else {
                                                dataWatcher.watch(14, new Vector3f(-100, (float) Math.toDegrees(rad),0));
                                                rad = 0;
                                            }
                                            ((CraftPlayer) p).getHandle().playerConnection.sendPacket(metadata);
                                        }
                                    }
                                }.runTaskTimer(vulcanPrisons, 0L, 1L);


                            } else e.setCancelled(true);
                        }
                    } else if (e.getItemDrop().getItemStack().getType().name().contains("PICK")) {
                        if (wormholeRegion.contains(loc)) {
                            if (vulcanPrisons.energyMethods.isFull(item)) {
                                Player p = e.getPlayer();

                                WorldServer s = ((CraftWorld) loc.getWorld()).getHandle();
                                EntityArmorStand middleStand = new EntityArmorStand(s);
                                middleStand.setLocation(-28.5, 31, -29.5, 0, 0);
                                middleStand.setCustomName(item.getItemMeta().getDisplayName());
                                middleStand.setCustomNameVisible(true);
                                middleStand.setGravity(false);
                                middleStand.setArms(true);
                                middleStand.setRightArmPose(new Vector3f(-90, 0, 0));
                                middleStand.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP = new PacketPlayOutSpawnEntityLiving(middleStand);
                                PacketPlayOutEntityEquipment EquipP = new PacketPlayOutEntityEquipment(middleStand.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP);
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP);

                                DataWatcher dataWatcher = middleStand.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata = new PacketPlayOutEntityMetadata(middleStand.getId(), dataWatcher, false);

                                EntityArmorStand eS1 = new EntityArmorStand(s);
                                eS1.setLocation(-31.5, 33, -24.5, 0, 0);
                                // eS1.setCustomName(item.getItemMeta().getDisplayName());
                                eS1.setCustomNameVisible(true);
                                eS1.setGravity(false);
                                eS1.setArms(true);
                                eS1.setInvisible(false);
                             
                                PacketPlayOutSpawnEntityLiving spawnP1 = new PacketPlayOutSpawnEntityLiving(eS1);
                                //PacketPlayOutEntityEquipment EquipP1 = new PacketPlayOutEntityEquipment(eS1.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP1);
                                //((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP1);

                                DataWatcher dataWatcher1 = eS1.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata1 = new PacketPlayOutEntityMetadata(eS1.getId(), dataWatcher1, false);

                                EntityArmorStand eS2 = new EntityArmorStand(s);
                                eS2.setLocation(-25.5, 33, -24.5, 0, 0);
                                //eS2.setCustomName(item.getItemMeta().getDisplayName());
                                eS2.setCustomNameVisible(true);
                                eS2.setGravity(false);
                                eS2.setArms(true);
                                eS2.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP2 = new PacketPlayOutSpawnEntityLiving(eS2);
                                //PacketPlayOutEntityEquipment EquipP2 = new PacketPlayOutEntityEquipment(eS2.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP2);
                               // ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP2);

                                DataWatcher dataWatcher2 = eS2.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata2 = new PacketPlayOutEntityMetadata(eS2.getId(), dataWatcher2, false);

                                EntityArmorStand eS3 = new EntityArmorStand(s);
                                eS3.setLocation(-23.5, 33, -29.5, 0, 0);
                                //eS3.setCustomName(item.getItemMeta().getDisplayName());
                                eS3.setCustomNameVisible(true);
                                eS3.setGravity(false);
                                eS3.setArms(true);
                                eS3.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP3 = new PacketPlayOutSpawnEntityLiving(eS3);
                               // PacketPlayOutEntityEquipment EquipP3 = new PacketPlayOutEntityEquipment(eS3.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP3);
                                //((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP3);

                                DataWatcher dataWatcher3 = eS3.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata3 = new PacketPlayOutEntityMetadata(eS3.getId(), dataWatcher3, false);

                                EntityArmorStand eS4 = new EntityArmorStand(s);
                                eS4.setLocation(-25.5, 33, -34.5, 0, 0);
                                //eS4.setCustomName(item.getItemMeta().getDisplayName());
                                eS4.setCustomNameVisible(true);
                                eS4.setGravity(false);
                                eS4.setArms(true);
                                eS4.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP4 = new PacketPlayOutSpawnEntityLiving(eS4);
                                //PacketPlayOutEntityEquipment EquipP4 = new PacketPlayOutEntityEquipment(eS4.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP4);
                                //((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP4);

                                DataWatcher dataWatcher4 = eS4.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata4 = new PacketPlayOutEntityMetadata(eS4.getId(), dataWatcher4, false);

                                EntityArmorStand eS5 = new EntityArmorStand(s);
                                eS5.setLocation(-30.5, 33, -34.5, 0, 0);
                                //eS5.setCustomName(item.getItemMeta().getDisplayName());
                                eS5.setCustomNameVisible(true);
                                eS5.setGravity(false);
                                eS5.setArms(true);
                                eS5.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP5 = new PacketPlayOutSpawnEntityLiving(eS5);
                                //PacketPlayOutEntityEquipment EquipP5 = new PacketPlayOutEntityEquipment(eS5.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP5);
                                //((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP5);

                                DataWatcher dataWatcher5 = eS5.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata5 = new PacketPlayOutEntityMetadata(eS5.getId(), dataWatcher5, false);

                                EntityArmorStand eS6 = new EntityArmorStand(s);
                                eS6.setLocation(-33.5, 33, -29.5, 0, 0);
                                //eS6.setCustomName(item.getItemMeta().getDisplayName());
                                eS6.setCustomNameVisible(true);
                                eS6.setGravity(false);
                                eS6.setArms(true);
                                eS6.setInvisible(false);
                                PacketPlayOutSpawnEntityLiving spawnP6 = new PacketPlayOutSpawnEntityLiving(eS6);
                               // PacketPlayOutEntityEquipment EquipP6 = new PacketPlayOutEntityEquipment(eS6.getId(), 0, CraftItemStack.asNMSCopy(item));
                                ((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(spawnP6);
                                //((CraftPlayer) e.getPlayer()).getHandle().playerConnection.sendPacket(EquipP6);

                                DataWatcher dataWatcher6 = eS6.getDataWatcher();
                                PacketPlayOutEntityMetadata metadata6 = new PacketPlayOutEntityMetadata(eS6.getId(), dataWatcher6, false);

                                new BukkitRunnable() {
                                    double rad = 0;
                                    int i = 0;

                                    @Override
                                    public void run() {
                                        if (i <= 300) {
                                            i++;
                                            if (rad < Math.toRadians(360)) {
                                                //dataWatcher.watch(10, new Vector3f(-100, (float) Math.toDegrees(rad),0));
                                                rad += 0.3; //increase to have head rotate faster.
                                            } else {
                                                //dataWatcher.watch(10, new Vector3f(-100, (float) Math.toDegrees(rad),0));
                                                rad = 0;
                                            }
                                            ((CraftPlayer) p).getHandle().playerConnection.sendPacket(metadata);
                                        }
                                    }
                                }.runTaskTimer(vulcanPrisons, 0L, 1L);
                                //p.openInventory(Enchanter.menu(item));
                                //p.getInventory().remove(item);
                            } else e.setCancelled(true);
                        }
                    }  else if (e.getItemDrop().getItemStack().getType().name().contains("HELMET")) {
                        if (wormholeRegion.contains(loc)) {
                            System.out.println("DEBUG: wormholeRegion contains the item dropped");
                            if (vulcanPrisons.energyMethods.isArmorFull(item)) {
                                System.out.println("DEBUG: The item is full of static charge");
                                Player p = e.getPlayer();
                                p.openInventory(Enchanter.menu(item));
                                p.getInventory().remove(item);
                            }
                        }
                    }  else if (e.getItemDrop().getItemStack().getType().name().contains("CHESTPLATE")) {
                        if (wormholeRegion.contains(loc)) {
                            System.out.println("DEBUG: wormholeRegion contains the item dropped");
                            if (vulcanPrisons.energyMethods.isArmorFull(item)) {
                                System.out.println("DEBUG: The item is full of static charge");
                                Player p = e.getPlayer();
                                p.openInventory(Enchanter.menu(item));
                                p.getInventory().remove(item);
                            }
                        }
                    }  else if (e.getItemDrop().getItemStack().getType().name().contains("LEGGINGS")) {
                        if (wormholeRegion.contains(loc)) {
                            System.out.println("DEBUG: wormholeRegion contains the item dropped");
                            if (vulcanPrisons.energyMethods.isArmorFull(item)) {
                                System.out.println("DEBUG: The item is full of static charge");
                                Player p = e.getPlayer();
                               // p.openInventory(Enchanter.menu(item));
                               // p.getInventory().remove(item);
                            }
                        }
                    }  else if (e.getItemDrop().getItemStack().getType().name().contains("BOOTS")) {
                        if (wormholeRegion.contains(loc)) {
                            System.out.println("DEBUG: wormholeRegion contains the item dropped");
                            if (vulcanPrisons.energyMethods.isArmorFull(item)) {
                                System.out.println("DEBUG: The item is full of static charge");
                                Player p = e.getPlayer();
                                p.openInventory(Enchanter.menu(item));
                                p.getInventory().remove(item);
                            }
                        }
                    } else e.setCancelled(true);
                }
        }
     
     
  2. Still looking for a solution. Any sort of help would be appreciated.