/** Setup it so he can see himself when disguised */
 public static void setupFakeDisguise(final Disguise disguise) {
   Entity e = disguise.getEntity();
   // If the disguises entity is null, or the disguised entity isn't a player return
   if (e == null
       || !(e instanceof Player)
       || !getDisguises().containsKey(e.getUniqueId())
       || !getDisguises().get(e.getUniqueId()).contains(disguise)) {
     return;
   }
   Player player = (Player) e;
   // Check if he can even see this..
   if (!((TargetedDisguise) disguise).canSee(player)) {
     return;
   }
   // Remove the old disguise, else we have weird disguises around the place
   DisguiseUtilities.removeSelfDisguise(player);
   // If the disguised player can't see himself. Return
   if (!disguise.isSelfDisguiseVisible()
       || !PacketsManager.isViewDisguisesListenerEnabled()
       || player.getVehicle() != null) {
     return;
   }
   selfDisguised.add(player.getUniqueId());
   sendSelfDisguise(player, (TargetedDisguise) disguise);
   if (disguise.isHidingArmorFromSelf() || disguise.isHidingHeldItemFromSelf()) {
     if (PacketsManager.isInventoryListenerEnabled()) {
       player.updateInventory();
     }
   }
 }
 /** Method to send a packet to the self disguise, translate his entity ID to the fake id. */
 private static void sendSelfPacket(Player player, PacketContainer packet) {
   PacketContainer[] packets = PacketsManager.transformPacket(packet, player, player);
   try {
     if (packets == null) {
       packets = new PacketContainer[] {packet};
     }
     for (PacketContainer p : packets) {
       p = p.deepClone();
       p.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
       ProtocolLibrary.getProtocolManager().sendServerPacket(player, p, false);
     }
   } catch (InvocationTargetException e) {
     e.printStackTrace();
   }
 }