Resend self disguise armor, clean spawn armor, don't cancel armor but wipe it to air
This commit is contained in:
		| @@ -1594,7 +1594,7 @@ public class DisguiseUtilities { | ||||
|                                 .createPacket(0, player.getPassenger(), player)); | ||||
|             } | ||||
|  | ||||
|             /*sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, | ||||
|             sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_EQUIPMENT, 0, | ||||
|                     ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), | ||||
|                     ReflectionManager.getNmsItem(new ItemStack(Material.STONE))) | ||||
|                     .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), | ||||
| @@ -1623,7 +1623,7 @@ public class DisguiseUtilities { | ||||
|                     ReflectionManager.createEnumItemSlot(EquipmentSlot.HEAD), | ||||
|                     ReflectionManager.getNmsItem(new ItemStack(Material.STONE))) | ||||
|                     .createPacket(player.getEntityId(), ReflectionManager.createEnumItemSlot(EquipmentSlot.OFF_HAND), | ||||
|                             ReflectionManager.getNmsItem(player.getInventory().getItemInOffHand())));*/ | ||||
|                             ReflectionManager.getNmsItem(player.getInventory().getItemInOffHand()))); | ||||
|  | ||||
|             Location loc = player.getLocation(); | ||||
|  | ||||
|   | ||||
| @@ -40,7 +40,12 @@ public class PacketHandlerEquipment implements IPacketHandler { | ||||
|     public void handle(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer, | ||||
|             Entity entity) { | ||||
|         if (packetsHandler.isCancelMeta(disguise, observer)) { | ||||
|             packets.clear(); | ||||
|             PacketContainer equipPacket = sentPacket.shallowClone(); | ||||
|  | ||||
|             packets.addPacket(equipPacket); | ||||
|  | ||||
|             equipPacket.getModifier() | ||||
|                     .write(2, ReflectionManager.getNmsItem(new ItemStack(Material.AIR))); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -378,29 +378,33 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|             packets.addPacket(newPacket); | ||||
|         } | ||||
|  | ||||
|         boolean requiresArmor = | ||||
|         // If armor must be sent because its currently not displayed and would've been sent normally | ||||
|         boolean delayedArmor = | ||||
|                 (disguise.isPlayerDisguise() && disguisedEntity != observer) && disguisedEntity instanceof LivingEntity; | ||||
|         // This sends the armor packets so that the player isn't naked. | ||||
|         if (DisguiseConfig.isEquipmentPacketsEnabled() || requiresArmor) { | ||||
|         if (DisguiseConfig.isEquipmentPacketsEnabled() || delayedArmor) { | ||||
|             for (EquipmentSlot slot : EquipmentSlot.values()) { | ||||
|                 ItemStack itemstack = disguise.getWatcher().getItemStack(slot); | ||||
|                 ItemStack entityItem; | ||||
|                 // Get what the disguise wants to show for its armor | ||||
|                 ItemStack itemToSend = disguise.getWatcher().getItemStack(slot); | ||||
|  | ||||
|                 if (itemstack == null || itemstack.getType() == Material.AIR) { | ||||
|                     if (requiresArmor) { | ||||
|                         itemstack = ReflectionManager.getEquipment(slot, disguisedEntity); | ||||
|                 // If the disguise armor isn't visible | ||||
|                 if (itemToSend == null || itemToSend.getType() == Material.AIR) { | ||||
|                     // If we need to send the natural armor if possible | ||||
|                     if (delayedArmor) { | ||||
|                         itemToSend = ReflectionManager.getEquipment(slot, disguisedEntity); | ||||
|  | ||||
|                         if (itemstack == null || itemstack.getType() == Material.AIR) { | ||||
|                         // If natural armor isn't sent either | ||||
|                         if (itemToSend == null || itemToSend.getType() == Material.AIR) { | ||||
|                             continue; | ||||
|                         } | ||||
|                     } else { | ||||
|                         // We don't need to send natural armor and disguise armor isn't visible | ||||
|                         continue; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 if (!requiresArmor && disguisedEntity instanceof LivingEntity) { | ||||
|                 } else if (!delayedArmor && disguisedEntity instanceof LivingEntity) { | ||||
|                     ItemStack item = ReflectionManager.getEquipment(slot, disguisedEntity); | ||||
|  | ||||
|                     // If the item was going to be sent anyways | ||||
|                     if (item != null && item.getType() != Material.AIR) { | ||||
|                         continue; | ||||
|                     } | ||||
| @@ -412,9 +416,9 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|  | ||||
|                 mods.write(0, disguisedEntity.getEntityId()); | ||||
|                 mods.write(1, ReflectionManager.createEnumItemSlot(slot)); | ||||
|                 mods.write(2, ReflectionManager.getNmsItem(itemstack)); | ||||
|                 mods.write(2, ReflectionManager.getNmsItem(itemToSend)); | ||||
|  | ||||
|                 if (requiresArmor) { | ||||
|                 if (delayedArmor) { | ||||
|                     packets.addDelayedPacket(packet, 7); | ||||
|                 } else { | ||||
|                     packets.addDelayedPacket(packet); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user