This reverts the 2 reverted commits
This commit is contained in:
		| @@ -14,42 +14,20 @@ import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.Values; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | ||||
| import net.minecraft.server.v1_6_R3.ChatMessage; | ||||
| import net.minecraft.server.v1_6_R3.ChunkCoordinates; | ||||
| import net.minecraft.server.v1_6_R3.Entity; | ||||
| import net.minecraft.server.v1_6_R3.EntityHuman; | ||||
| import net.minecraft.server.v1_6_R3.EntityLiving; | ||||
| import net.minecraft.server.v1_6_R3.GenericAttributes; | ||||
| import net.minecraft.server.v1_6_R3.WatchableObject; | ||||
| import net.minecraft.server.v1_6_R3.World; | ||||
|  | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.configuration.file.FileConfiguration; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.CraftWorld; | ||||
| import org.bukkit.entity.Ageable; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.plugin.java.JavaPlugin; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.WrappedAttribute; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||
| import com.comphenix.protocol.wrappers.WrappedWatchableObject; | ||||
|  | ||||
| public class LibsDisguises extends JavaPlugin { | ||||
|     private class DisguiseHuman extends EntityHuman { | ||||
|  | ||||
|         public DisguiseHuman(World world) { | ||||
|             super(world, "LibsDisguises"); | ||||
|         } | ||||
|  | ||||
|         public boolean a(int arg0, String arg1) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         public ChunkCoordinates b() { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         public void sendMessage(ChatMessage arg0) { | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onEnable() { | ||||
| @@ -109,7 +87,6 @@ public class LibsDisguises extends JavaPlugin { | ||||
|     } | ||||
|  | ||||
|     private void registerValues() { | ||||
|         World world = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle(); | ||||
|         for (DisguiseType disguiseType : DisguiseType.values()) { | ||||
|             Class watcherClass = null; | ||||
|             try { | ||||
| @@ -196,30 +173,32 @@ public class LibsDisguises extends JavaPlugin { | ||||
|                 break; | ||||
|             } | ||||
|             try { | ||||
|                 net.minecraft.server.v1_6_R3.Entity entity = null; | ||||
|                 Class entityClass; | ||||
|                 if (disguiseType == DisguiseType.PLAYER) { | ||||
|                     entityClass = EntityHuman.class; | ||||
|                     entity = new DisguiseHuman(world); | ||||
|                 } else { | ||||
|                     entityClass = Class.forName(Entity.class.getName() + name); | ||||
|                     entity = (net.minecraft.server.v1_6_R3.Entity) entityClass.getConstructor(World.class).newInstance(world); | ||||
|                 Object entity = ReflectionManager.getEntityInstance(name); | ||||
|                 Entity bukkitEntity = (Entity) entity.getClass().getMethod("getBukkitEntity").invoke(entity); | ||||
|                 int size = 0; | ||||
|                 for (Field field : ReflectionManager.getNmsClass("Entity").getFields()) { | ||||
|                     if (field.getType().getName().equals("EnumEntitySize")) { | ||||
|                         Enum a = (Enum) field.get(entity); | ||||
|                         size = a.ordinal(); | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|                 Values value = new Values(disguiseType, entityClass, entity.at); | ||||
|                 List<WatchableObject> watchers = entity.getDataWatcher().c(); | ||||
|                 for (WatchableObject watch : watchers) | ||||
|                     value.setMetaValue(watch.a(), watch.b()); | ||||
|                 if (entity instanceof EntityLiving) { | ||||
|                     EntityLiving livingEntity = (EntityLiving) entity; | ||||
|                     value.setAttributesValue(GenericAttributes.d.a(), livingEntity.getAttributeInstance(GenericAttributes.d) | ||||
|                 Values value = new Values(disguiseType, entity.getClass(), size); | ||||
|                 WrappedDataWatcher dataWatcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity); | ||||
|                 List<WrappedWatchableObject> watchers = dataWatcher.getWatchableObjects(); | ||||
|                 for (WrappedWatchableObject watch : watchers) | ||||
|                     value.setMetaValue(watch.getTypeID(), watch.getValue()); | ||||
|                 WrappedAttribute s; | ||||
|                 if (bukkitEntity instanceof LivingEntity) { | ||||
|                     value.setAttributesValue("generic.movementSpeed", livingEntity.getAttributeInstance(GenericAttributes.d) | ||||
|                             .getValue()); | ||||
|                 } | ||||
|                 DisguiseSound sound = DisguiseSound.getType(disguiseType.name()); | ||||
|                 if (sound != null) { | ||||
|                     Method soundStrength = EntityLiving.class.getDeclaredMethod("ba"); | ||||
|                     // TODO Update this each update! | ||||
|                     soundStrength.setAccessible(true); | ||||
|                     sound.setDamageSoundVolume((Float) soundStrength.invoke(entity)); | ||||
|                     Float soundStrength = ReflectionManager.getSoundModifier(entity); | ||||
|                     if (soundStrength != null) { | ||||
|                         sound.setDamageSoundVolume((Float) soundStrength); | ||||
|                     } | ||||
|                 } | ||||
|             } catch (Exception e1) { | ||||
|                 System.out.print("[LibsDisguises] Trouble while making values for " + name + ": " + e1.getMessage()); | ||||
|   | ||||
| @@ -18,46 +18,17 @@ import me.libraryaddict.disguise.disguisetypes.MobDisguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.Values; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseSound.SoundType; | ||||
| import net.minecraft.server.v1_6_R3.AttributeMapServer; | ||||
| import net.minecraft.server.v1_6_R3.AttributeSnapshot; | ||||
| import net.minecraft.server.v1_6_R3.Block; | ||||
| import net.minecraft.server.v1_6_R3.DataWatcher; | ||||
| import net.minecraft.server.v1_6_R3.EntityHuman; | ||||
| import net.minecraft.server.v1_6_R3.EntityInsentient; | ||||
| import net.minecraft.server.v1_6_R3.EntityLiving; | ||||
| import net.minecraft.server.v1_6_R3.EntityPlayer; | ||||
| import net.minecraft.server.v1_6_R3.EntityTrackerEntry; | ||||
| import net.minecraft.server.v1_6_R3.EnumArt; | ||||
| import net.minecraft.server.v1_6_R3.EnumEntitySize; | ||||
| import net.minecraft.server.v1_6_R3.ItemStack; | ||||
| import net.minecraft.server.v1_6_R3.MathHelper; | ||||
| import net.minecraft.server.v1_6_R3.MobEffect; | ||||
| import net.minecraft.server.v1_6_R3.Packet17EntityLocationAction; | ||||
| import net.minecraft.server.v1_6_R3.Packet20NamedEntitySpawn; | ||||
| import net.minecraft.server.v1_6_R3.Packet28EntityVelocity; | ||||
| import net.minecraft.server.v1_6_R3.Packet35EntityHeadRotation; | ||||
| import net.minecraft.server.v1_6_R3.Packet39AttachEntity; | ||||
| import net.minecraft.server.v1_6_R3.Packet40EntityMetadata; | ||||
| import net.minecraft.server.v1_6_R3.Packet41MobEffect; | ||||
| import net.minecraft.server.v1_6_R3.Packet44UpdateAttributes; | ||||
| import net.minecraft.server.v1_6_R3.Packet5EntityEquipment; | ||||
| import net.minecraft.server.v1_6_R3.WatchableObject; | ||||
| import net.minecraft.server.v1_6_R3.World; | ||||
| import net.minecraft.server.v1_6_R3.WorldServer; | ||||
|  | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Location; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.entity.CraftLivingEntity; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftItemStack; | ||||
| import org.bukkit.entity.Arrow; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.ExperienceOrb; | ||||
| import org.bukkit.entity.Item; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.plugin.java.JavaPlugin; | ||||
| import org.bukkit.util.Vector; | ||||
|  | ||||
| @@ -167,7 +138,7 @@ public class PacketsManager { | ||||
|                     StructureModifier<Object> mods = packet.getModifier(); | ||||
|                     mods.write(0, disguisedEntity.getEntityId()); | ||||
|                     mods.write(1, i); | ||||
|                     mods.write(2, CraftItemStack.asNMSCopy(itemstack)); | ||||
|                     mods.write(2, ReflectionManager.getNmsItem(itemstack)); | ||||
|                     packets.add(packet); | ||||
|                 } | ||||
|             } | ||||
| @@ -179,7 +150,6 @@ public class PacketsManager { | ||||
|         Location loc = disguisedEntity.getLocation().clone().add(0, getYModifier(disguisedEntity, disguise.getType()), 0); | ||||
|         byte yaw = getYaw(disguise.getType(), DisguiseType.getType(disguise.getEntity().getType()), | ||||
|                 (byte) (int) (loc.getYaw() * 256.0F / 360.0F)); | ||||
|         EnumEntitySize entitySize = Values.getValues(disguise.getType()).getEntitySize(); | ||||
|  | ||||
|         if (disguise.getType() == DisguiseType.EXPERIENCE_ORB) { | ||||
|  | ||||
| @@ -220,22 +190,24 @@ public class PacketsManager { | ||||
|             StructureModifier<Object> mods = spawnPackets[0].getModifier(); | ||||
|             mods.write(0, disguisedEntity.getEntityId()); | ||||
|             mods.write(1, ((PlayerDisguise) disguise).getName()); | ||||
|             mods.write(2, (int) Math.floor(loc.getX() * 32)); | ||||
|             mods.write(3, (int) Math.floor(loc.getY() * 32)); | ||||
|             mods.write(4, (int) Math.floor(loc.getZ() * 32)); | ||||
|             mods.write(5, yaw); | ||||
|             mods.write(6, (byte) (int) (loc.getPitch() * 256F / 360F)); | ||||
|             mods.write(2, ((PlayerDisguise) disguise).getName()); | ||||
|             mods.write(3, (int) Math.floor(loc.getX() * 32)); | ||||
|             mods.write(4, (int) Math.floor(loc.getY() * 32)); | ||||
|             mods.write(5, (int) Math.floor(loc.getZ() * 32)); | ||||
|             mods.write(6, yaw); | ||||
|             mods.write(7, (byte) (int) (loc.getPitch() * 256F / 360F)); | ||||
|             ItemStack item = null; | ||||
|             if (disguisedEntity instanceof Player && ((Player) disguisedEntity).getItemInHand() != null) { | ||||
|                 item = CraftItemStack.asNMSCopy(((Player) disguisedEntity).getItemInHand()); | ||||
|                 item = ((Player) disguisedEntity).getItemInHand(); | ||||
|             } else if (disguisedEntity instanceof LivingEntity) { | ||||
|                 item = CraftItemStack.asNMSCopy(((CraftLivingEntity) disguisedEntity).getEquipment().getItemInHand()); | ||||
|                 item = ((LivingEntity) disguisedEntity).getEquipment().getItemInHand(); | ||||
|             } | ||||
|             mods.write(7, (item == null ? 0 : item.id)); | ||||
|             mods.write(8, createDataWatcher(nmsEntity.getDataWatcher(), disguise.getWatcher())); | ||||
|             mods.write(8, (item == null || item.getType() == Material.AIR ? 0 : item.getTypeId()); | ||||
|             mods.write(9, createDataWatcher(nmsEntity.getDataWatcher(), disguise.getWatcher())); | ||||
|  | ||||
|         } else if (disguise.getType().isMob()) { | ||||
|  | ||||
|             Values values = Values.getValues(disguise.getType()); | ||||
|             Vector vec = disguisedEntity.getVelocity(); | ||||
|             spawnPackets[0] = new PacketContainer(Packets.Server.MOB_SPAWN); | ||||
|             StructureModifier<Object> mods = spawnPackets[0].getModifier(); | ||||
| @@ -257,9 +229,9 @@ public class PacketsManager { | ||||
|                 d3 = d1; | ||||
|             if (d4 > d1) | ||||
|                 d4 = d1; | ||||
|             mods.write(2, entitySize.a(loc.getX())); | ||||
|             mods.write(2, values.getEntitySize(loc.getX())); | ||||
|             mods.write(3, (int) Math.floor(loc.getY() * 32D)); | ||||
|             mods.write(4, entitySize.a(loc.getZ())); | ||||
|             mods.write(4, values.getEntitySize(loc.getZ())); | ||||
|             mods.write(5, (int) (d2 * 8000.0D)); | ||||
|             mods.write(6, (int) (d3 * 8000.0D)); | ||||
|             mods.write(7, (int) (d4 * 8000.0D)); | ||||
| @@ -318,7 +290,7 @@ public class PacketsManager { | ||||
|                 mods.write(5, (int) (d2 * 8000.0D)); | ||||
|                 mods.write(6, (int) (d3 * 8000.0D)); | ||||
|             } | ||||
|             mods.write(7, (int) MathHelper.floor(loc.getPitch() * 256.0F / 360.0F)); | ||||
|             mods.write(7, (int) Math.floor(loc.getPitch() * 256.0F / 360.0F)); | ||||
|             mods.write(8, yaw); | ||||
|             mods.write(9, id); | ||||
|             mods.write(10, data); | ||||
| @@ -552,7 +524,7 @@ public class PacketsManager { | ||||
|                         } | ||||
|                     } | ||||
|                 } else if (event.getPacketID() == Packets.Server.ENTITY_STATUS) { | ||||
|                     if ((Byte) mods.read(1) == 2) { | ||||
|                     if ((Byte) mods.read(1) == 1) { | ||||
|                         // It made a damage animation | ||||
|                         Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0); | ||||
|                         Disguise disguise = DisguiseAPI.getDisguise(entity); | ||||
| @@ -616,7 +588,7 @@ public class PacketsManager { | ||||
|                 Packets.Server.REL_ENTITY_MOVE_LOOK, Packets.Server.ENTITY_LOOK, Packets.Server.ENTITY_TELEPORT, | ||||
|                 Packets.Server.ENTITY_HEAD_ROTATION, Packets.Server.ENTITY_METADATA, Packets.Server.ENTITY_EQUIPMENT, | ||||
|                 Packets.Server.ARM_ANIMATION, Packets.Server.ENTITY_LOCATION_ACTION, Packets.Server.MOB_EFFECT, | ||||
|                 Packets.Server.ENTITY_STATUS, Packets.Server.ENTITY_VELOCITY, Packets.Server.UPDATE_ATTRIBUTES) { | ||||
|                 /*     Packets.Server.ENTITY_STATUS, */Packets.Server.ENTITY_VELOCITY, Packets.Server.UPDATE_ATTRIBUTES) { | ||||
|             @Override | ||||
|             public void onPacketSending(PacketEvent event) { | ||||
|                 StructureModifier<Entity> entityModifer = event.getPacket().getEntityModifier(event.getPlayer().getWorld()); | ||||
| @@ -681,12 +653,12 @@ public class PacketsManager { | ||||
|                                 event.setCancelled(true); | ||||
|                                 break; | ||||
|  | ||||
|                             case Packets.Server.ENTITY_STATUS: | ||||
|                                 if (DisguiseAPI.getDisguise(entity).canHearSelfDisguise() | ||||
|                                         && (Byte) event.getPacket().getModifier().read(1) == 2) { | ||||
|                                     event.setCancelled(true); | ||||
|                                 } | ||||
|                                 break; | ||||
|                             /*     case Packets.Server.ENTITY_STATUS: | ||||
|                                      if (DisguiseAPI.getDisguise(entity).canHearSelfDisguise() | ||||
|                                              && (Byte) event.getPacket().getModifier().read(1) == 1) { | ||||
|                                          event.setCancelled(true); | ||||
|                                      } | ||||
|                                      break;*/ | ||||
|                             default: | ||||
|                                 break; | ||||
|                             } | ||||
| @@ -726,7 +698,7 @@ public class PacketsManager { | ||||
|                                     if (item != null && item.getType() != Material.AIR) { | ||||
|                                         event.setPacket(event.getPacket().shallowClone()); | ||||
|                                         event.getPacket().getModifier() | ||||
|                                                 .write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                                 .write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                     } | ||||
|                                 } | ||||
|                                 // Else if its a hotbar slot | ||||
| @@ -739,7 +711,7 @@ public class PacketsManager { | ||||
|                                         if (item != null && item.getType() != Material.AIR) { | ||||
|                                             event.setPacket(event.getPacket().shallowClone()); | ||||
|                                             event.getPacket().getModifier() | ||||
|                                                     .write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                                     .write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
| @@ -760,7 +732,7 @@ public class PacketsManager { | ||||
|                                         int armorSlot = Math.abs((slot - 5) - 3); | ||||
|                                         org.bukkit.inventory.ItemStack item = event.getPlayer().getInventory().getArmorContents()[armorSlot]; | ||||
|                                         if (item != null && item.getType() != Material.AIR) { | ||||
|                                             items[slot] = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0)); | ||||
|                                             items[slot] = ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)); | ||||
|                                         } | ||||
|                                     } | ||||
|                                     // Else if its a hotbar slot | ||||
| @@ -771,7 +743,7 @@ public class PacketsManager { | ||||
|                                         if (slot == currentSlot + 36) { | ||||
|                                             org.bukkit.inventory.ItemStack item = event.getPlayer().getItemInHand(); | ||||
|                                             if (item != null && item.getType() != Material.AIR) { | ||||
|                                                 items[slot] = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0)); | ||||
|                                                 items[slot] = ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0)); | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
| @@ -808,7 +780,7 @@ public class PacketsManager { | ||||
|                                         StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                         mods.write(0, 0); | ||||
|                                         mods.write(1, slot); | ||||
|                                         mods.write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                         mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                         try { | ||||
|                                             ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, | ||||
|                                                     false); | ||||
| @@ -827,7 +799,7 @@ public class PacketsManager { | ||||
|                                             StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                             mods.write(0, 0); | ||||
|                                             mods.write(1, slot); | ||||
|                                             mods.write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                             mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                             try { | ||||
|                                                 ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, | ||||
|                                                         false); | ||||
| @@ -854,7 +826,7 @@ public class PacketsManager { | ||||
|                                     StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                     mods.write(0, 0); | ||||
|                                     mods.write(1, event.getPlayer().getInventory().getHeldItemSlot() + 36); | ||||
|                                     mods.write(2, CraftItemStack.asNMSCopy(currentlyHeld)); | ||||
|                                     mods.write(2, ReflectionManager.getNmsItem(currentlyHeld)); | ||||
|                                     try { | ||||
|                                         ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false); | ||||
|                                     } catch (InvocationTargetException e) { | ||||
| @@ -869,7 +841,7 @@ public class PacketsManager { | ||||
|                                     StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                     mods.write(0, 0); | ||||
|                                     mods.write(1, event.getPacket().getIntegers().read(0) + 36); | ||||
|                                     mods.write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                     mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                     try { | ||||
|                                         ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false); | ||||
|                                     } catch (InvocationTargetException e) { | ||||
| @@ -912,7 +884,7 @@ public class PacketsManager { | ||||
|                                         StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                         mods.write(0, 0); | ||||
|                                         mods.write(1, slot); | ||||
|                                         mods.write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                         mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                         try { | ||||
|                                             ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, | ||||
|                                                     false); | ||||
| @@ -930,7 +902,7 @@ public class PacketsManager { | ||||
|                                             StructureModifier<Object> mods = packet.getModifier(); | ||||
|                                             mods.write(0, 0); | ||||
|                                             mods.write(1, slot); | ||||
|                                             mods.write(2, CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                             mods.write(2, ReflectionManager.getNmsItem(new org.bukkit.inventory.ItemStack(0))); | ||||
|                                             try { | ||||
|                                                 ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, | ||||
|                                                         false); | ||||
| @@ -1238,7 +1210,7 @@ public class PacketsManager { | ||||
|                     if (itemstack != null) { | ||||
|                         packets[0] = packets[0].shallowClone(); | ||||
|                         packets[0].getModifier().write(2, | ||||
|                                 (itemstack.getTypeId() == 0 ? null : CraftItemStack.asNMSCopy(itemstack))); | ||||
|                                 (itemstack.getTypeId() == 0 ? null : ReflectionManager.getNmsItem(itemstack))); | ||||
|                     } | ||||
|                     break; | ||||
|                 } | ||||
|   | ||||
							
								
								
									
										86
									
								
								src/me/libraryaddict/disguise/ReflectionManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/me/libraryaddict/disguise/ReflectionManager.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| package me.libraryaddict.disguise; | ||||
|  | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
|  | ||||
| import net.minecraft.server.v1_6_R3.World; | ||||
|  | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftItemStack; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| public class ReflectionManager { | ||||
|     private static String bukkitVersion = Bukkit.getServer().getClass().getName().split("\\.")[3]; | ||||
|     private static Class itemClass; | ||||
|     static { | ||||
|         try { | ||||
|             itemClass = Class.forName("org.bukkit.craftbukkit." + bukkitVersion + ".inventory.CraftItemStack"); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static Object getEntityInstance(String entityName) { | ||||
|         try { | ||||
|             Class entityClass = getNmsClass("Entity" + entityName); | ||||
|             Object entityObject; | ||||
|             Object world = getWorld(); | ||||
|             if (entityName.equals("Human")) { | ||||
|                 entityObject = entityClass.getConstructor(world.getClass(), String.class).newInstance(world, "LibsDisguises"); | ||||
|             } else { | ||||
|                 entityObject = entityClass.getConstructor(world.getClass()).newInstance(world); | ||||
|             } | ||||
|             return entityObject; | ||||
|         } catch (Exception e) { | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Class getNmsClass(String className) { | ||||
|         try { | ||||
|             return Class.forName("net.minecraft.server." + bukkitVersion + "." + className); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Float getSoundModifier(Object entity) { | ||||
|         try { | ||||
|             Method soundStrength = getNmsClass("EntityLiving").getDeclaredMethod("ba"); | ||||
|             // TODO Update this each update! | ||||
|             soundStrength.setAccessible(true); | ||||
|             return (Float) soundStrength.invoke(entity); | ||||
|         } catch (Exception ex) { | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private static Object getWorld() { | ||||
|         try { | ||||
|             return World.class.getMethod("getHandle").invoke(Bukkit.getWorlds().get(0)); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object getNmsItem(ItemStack itemstack) { | ||||
|         try { | ||||
|             return itemClass.getMethod("asNMSCopy", getNmsClass("ItemStack")).invoke(null, itemstack); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static ItemStack getBukkitItem(Object nmsItem) { | ||||
|         try { | ||||
|             return (ItemStack) itemClass.getMethod("asBukkitCopy", ItemStack.class).invoke(null, nmsItem); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -20,6 +20,7 @@ import com.comphenix.protocol.reflect.StructureModifier; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.PacketsManager; | ||||
| import me.libraryaddict.disguise.ReflectionManager; | ||||
| import net.minecraft.server.v1_6_R3.ChunkCoordinates; | ||||
| import net.minecraft.server.v1_6_R3.EntityPlayer; | ||||
| import net.minecraft.server.v1_6_R3.ItemStack; | ||||
| @@ -278,7 +279,7 @@ public class FlagWatcher { | ||||
|  | ||||
|         ItemStack itemToSend = null; | ||||
|         if (itemStack != null && itemStack.getTypeId() != 0) | ||||
|             itemToSend = CraftItemStack.asNMSCopy(itemStack); | ||||
|             itemToSend = ReflectionManager.getNmsItem(itemStack); | ||||
|         items[slot] = itemStack; | ||||
|         if (DisguiseAPI.getDisguise(disguise.getEntity()) != disguise) | ||||
|             return; | ||||
|   | ||||
| @@ -50,11 +50,11 @@ public class Values { | ||||
|     private HashMap<String, Double> attributesValues = new HashMap<String, Double>(); | ||||
|  | ||||
|     private Class declared; | ||||
|     private EnumEntitySize enumEntitySize; | ||||
|     private int enumEntitySize; | ||||
|  | ||||
|     private HashMap<Integer, Object> metaValues = new HashMap<Integer, Object>(); | ||||
|  | ||||
|     public Values(DisguiseType type, Class classType, EnumEntitySize entitySize) { | ||||
|     public Values(DisguiseType type, Class classType, int entitySize) { | ||||
|         values.put(type, this); | ||||
|         enumEntitySize = entitySize; | ||||
|         declared = classType; | ||||
| @@ -68,8 +68,47 @@ public class Values { | ||||
|         return declared; | ||||
|     } | ||||
|  | ||||
|     public EnumEntitySize getEntitySize() { | ||||
|         return enumEntitySize; | ||||
|     public int getEntitySize(double paramDouble) { | ||||
|         double d = paramDouble - (((int) Math.floor(paramDouble)) + 0.5D); | ||||
|  | ||||
|         switch (enumEntitySize) { | ||||
|         case 1: | ||||
|             if (d < 0.0D ? d < -0.3125D : d < 0.3125D) { | ||||
|                 return (int) Math.ceil(paramDouble * 32.0D); | ||||
|             } | ||||
|  | ||||
|             return (int) Math.floor(paramDouble * 32.0D); | ||||
|         case 2: | ||||
|             if (d < 0.0D ? d < -0.3125D : d < 0.3125D) { | ||||
|                 return (int) Math.floor(paramDouble * 32.0D); | ||||
|             } | ||||
|  | ||||
|             return (int) Math.ceil(paramDouble * 32.0D); | ||||
|         case 3: | ||||
|             if (d > 0.0D) { | ||||
|                 return (int) Math.floor(paramDouble * 32.0D); | ||||
|             } | ||||
|  | ||||
|             return (int) Math.ceil(paramDouble * 32.0D); | ||||
|         case 4: | ||||
|             if (d < 0.0D ? d < -0.1875D : d < 0.1875D) { | ||||
|                 return (int) Math.ceil(paramDouble * 32.0D); | ||||
|             } | ||||
|  | ||||
|             return (int) Math.floor(paramDouble * 32.0D); | ||||
|         case 5: | ||||
|             if (d < 0.0D ? d < -0.1875D : d < 0.1875D) { | ||||
|                 return (int) Math.floor(paramDouble * 32.0D); | ||||
|             } | ||||
|  | ||||
|             return (int) Math.ceil(paramDouble * 32.0D); | ||||
|         case 6: | ||||
|         } | ||||
|         if (d > 0.0D) { | ||||
|             return (int) Math.ceil(paramDouble * 32.0D); | ||||
|         } | ||||
|  | ||||
|         return (int) Math.floor(paramDouble * 32.0D); | ||||
|     } | ||||
|  | ||||
|     public HashMap<Integer, Object> getMetaValues() { | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.ReflectionManager; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||
|  | ||||
| @@ -14,11 +15,11 @@ public class DroppedItemWatcher extends FlagWatcher { | ||||
|  | ||||
|     public ItemStack getItemStack() { | ||||
|         return CraftItemStack.asBukkitCopy((net.minecraft.server.v1_6_R3.ItemStack) getValue(10, | ||||
|                 CraftItemStack.asNMSCopy(new ItemStack(1)))); | ||||
|                 ReflectionManager.getNmsItem(new ItemStack(1)))); | ||||
|     } | ||||
|  | ||||
|     public void setItemStack(ItemStack item) { | ||||
|         setValue(10, CraftItemStack.asNMSCopy(item)); | ||||
|         setValue(10, ReflectionManager.getNmsItem(item)); | ||||
|         sendData(10); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.ReflectionManager; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||
|  | ||||
| @@ -30,7 +31,7 @@ public class ItemFrameWatcher extends FlagWatcher { | ||||
|     public void setItemStack(ItemStack newItem) { | ||||
|         newItem = newItem.clone(); | ||||
|         newItem.setAmount(1); | ||||
|         setValue(2, CraftItemStack.asNMSCopy(newItem)); | ||||
|         setValue(2, ReflectionManager.getNmsItem(newItem)); | ||||
|         sendData(2); | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user