Move calls elsewhere and rename some methods and remove old code.
This commit is contained in:
parent
e659875347
commit
15c2ee6305
@ -1,7 +1,5 @@
|
|||||||
package me.libraryaddict.disguise.DisguiseTypes;
|
package me.libraryaddict.disguise.DisguiseTypes;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -10,9 +8,7 @@ import java.util.Random;
|
|||||||
|
|
||||||
import me.libraryaddict.disguise.DisguiseAPI;
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
|
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.LivingWatcher;
|
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.ZombieWatcher;
|
import me.libraryaddict.disguise.DisguiseTypes.Watchers.ZombieWatcher;
|
||||||
import net.minecraft.server.v1_6_R2.DataWatcher;
|
|
||||||
import net.minecraft.server.v1_6_R2.Entity;
|
import net.minecraft.server.v1_6_R2.Entity;
|
||||||
import net.minecraft.server.v1_6_R2.EntityAgeable;
|
import net.minecraft.server.v1_6_R2.EntityAgeable;
|
||||||
import net.minecraft.server.v1_6_R2.EntityInsentient;
|
import net.minecraft.server.v1_6_R2.EntityInsentient;
|
||||||
@ -22,7 +18,6 @@ import net.minecraft.server.v1_6_R2.EntityTrackerEntry;
|
|||||||
import net.minecraft.server.v1_6_R2.ItemStack;
|
import net.minecraft.server.v1_6_R2.ItemStack;
|
||||||
import net.minecraft.server.v1_6_R2.MathHelper;
|
import net.minecraft.server.v1_6_R2.MathHelper;
|
||||||
import net.minecraft.server.v1_6_R2.EnumArt;
|
import net.minecraft.server.v1_6_R2.EnumArt;
|
||||||
import net.minecraft.server.v1_6_R2.WatchableObject;
|
|
||||||
import net.minecraft.server.v1_6_R2.WorldServer;
|
import net.minecraft.server.v1_6_R2.WorldServer;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -57,16 +52,16 @@ public class Disguise {
|
|||||||
return disguise;
|
return disguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketContainer[] constructPacket(org.bukkit.entity.Entity e) {
|
public PacketContainer[] constructPacket(org.bukkit.entity.Entity disguisedEntity) {
|
||||||
PacketContainer[] spawnPackets = new PacketContainer[2];
|
PacketContainer[] spawnPackets = new PacketContainer[2];
|
||||||
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
|
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
|
||||||
Entity entity = ((CraftEntity) e).getHandle();
|
Entity nmsEntity = ((CraftEntity) disguisedEntity).getHandle();
|
||||||
Location loc = e.getLocation();
|
Location loc = disguisedEntity.getLocation();
|
||||||
if (getType() == DisguiseType.EXPERIENCE_ORB) {
|
if (getType() == DisguiseType.EXPERIENCE_ORB) {
|
||||||
|
|
||||||
spawnPackets[0] = manager.createPacket(Packets.Server.ADD_EXP_ORB);
|
spawnPackets[0] = manager.createPacket(Packets.Server.ADD_EXP_ORB);
|
||||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (int) Math.floor(loc.getX() * 32));
|
mods.write(1, (int) Math.floor(loc.getX() * 32));
|
||||||
mods.write(2, (int) Math.floor(loc.getY() * 32) + 2);
|
mods.write(2, (int) Math.floor(loc.getY() * 32) + 2);
|
||||||
mods.write(3, (int) Math.floor(loc.getZ() * 32));
|
mods.write(3, (int) Math.floor(loc.getZ() * 32));
|
||||||
@ -75,7 +70,7 @@ public class Disguise {
|
|||||||
} else if (getType() == DisguiseType.PAINTING) {
|
} else if (getType() == DisguiseType.PAINTING) {
|
||||||
spawnPackets[0] = manager.createPacket(Packets.Server.ENTITY_PAINTING);
|
spawnPackets[0] = manager.createPacket(Packets.Server.ENTITY_PAINTING);
|
||||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, loc.getBlockX());
|
mods.write(1, loc.getBlockX());
|
||||||
mods.write(2, loc.getBlockY());
|
mods.write(2, loc.getBlockY());
|
||||||
mods.write(3, loc.getBlockZ());
|
mods.write(3, loc.getBlockZ());
|
||||||
@ -88,7 +83,7 @@ public class Disguise {
|
|||||||
// Make the teleport packet to make it visible..
|
// Make the teleport packet to make it visible..
|
||||||
spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_TELEPORT);
|
spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_TELEPORT);
|
||||||
mods = spawnPackets[1].getModifier();
|
mods = spawnPackets[1].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (int) Math.floor(loc.getX() * 32D));
|
mods.write(1, (int) Math.floor(loc.getX() * 32D));
|
||||||
mods.write(2, (int) Math.floor(loc.getY() * 32D));
|
mods.write(2, (int) Math.floor(loc.getY() * 32D));
|
||||||
mods.write(3, (int) Math.floor(loc.getZ() * 32D));
|
mods.write(3, (int) Math.floor(loc.getZ() * 32D));
|
||||||
@ -101,25 +96,25 @@ public class Disguise {
|
|||||||
|
|
||||||
spawnPackets[0] = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN);
|
spawnPackets[0] = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN);
|
||||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, ((PlayerDisguise) this).getName());
|
mods.write(1, ((PlayerDisguise) this).getName());
|
||||||
mods.write(2, (int) Math.floor(loc.getX() * 32));
|
mods.write(2, (int) Math.floor(loc.getX() * 32));
|
||||||
mods.write(3, (int) Math.floor(loc.getY() * 32));
|
mods.write(3, (int) Math.floor(loc.getY() * 32));
|
||||||
mods.write(4, (int) Math.floor(loc.getZ() * 32));
|
mods.write(4, (int) Math.floor(loc.getZ() * 32));
|
||||||
mods.write(5, (byte) (int) (entity.yaw * 256F / 360F));
|
mods.write(5, (byte) (int) (nmsEntity.yaw * 256F / 360F));
|
||||||
mods.write(6, (byte) (int) (entity.pitch * 256F / 360F));
|
mods.write(6, (byte) (int) (nmsEntity.pitch * 256F / 360F));
|
||||||
ItemStack item = null;
|
ItemStack item = null;
|
||||||
if (e instanceof Player && ((Player) e).getItemInHand() != null)
|
if (disguisedEntity instanceof Player && ((Player) disguisedEntity).getItemInHand() != null)
|
||||||
item = CraftItemStack.asNMSCopy(((Player) e).getItemInHand());
|
item = CraftItemStack.asNMSCopy(((Player) disguisedEntity).getItemInHand());
|
||||||
mods.write(7, (item == null ? 0 : item.id));
|
mods.write(7, (item == null ? 0 : item.id));
|
||||||
mods.write(8, entity.getDataWatcher());
|
mods.write(8, nmsEntity.getDataWatcher());
|
||||||
|
|
||||||
} else if (getType().isMob()) {
|
} else if (getType().isMob()) {
|
||||||
|
|
||||||
Vector vec = e.getVelocity();
|
Vector vec = disguisedEntity.getVelocity();
|
||||||
spawnPackets[0] = manager.createPacket(Packets.Server.MOB_SPAWN);
|
spawnPackets[0] = manager.createPacket(Packets.Server.MOB_SPAWN);
|
||||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (int) getType().getEntityType().getTypeId());
|
mods.write(1, (int) getType().getEntityType().getTypeId());
|
||||||
double d1 = 3.9D;
|
double d1 = 3.9D;
|
||||||
double d2 = vec.getX();
|
double d2 = vec.getX();
|
||||||
@ -137,32 +132,20 @@ public class Disguise {
|
|||||||
d3 = d1;
|
d3 = d1;
|
||||||
if (d4 > d1)
|
if (d4 > d1)
|
||||||
d4 = d1;
|
d4 = d1;
|
||||||
mods.write(2, entity.at.a(loc.getX()));
|
mods.write(2, nmsEntity.at.a(loc.getX()));
|
||||||
mods.write(3, (int) Math.floor(loc.getY() * 32D));
|
mods.write(3, (int) Math.floor(loc.getY() * 32D));
|
||||||
mods.write(4, entity.at.a(loc.getZ()));
|
mods.write(4, nmsEntity.at.a(loc.getZ()));
|
||||||
mods.write(5, (int) (d2 * 8000.0D));
|
mods.write(5, (int) (d2 * 8000.0D));
|
||||||
mods.write(6, (int) (d3 * 8000.0D));
|
mods.write(6, (int) (d3 * 8000.0D));
|
||||||
mods.write(7, (int) (d4 * 8000.0D));
|
mods.write(7, (int) (d4 * 8000.0D));
|
||||||
byte yawValue = (byte) (int) (entity.yaw * 256.0F / 360.0F);
|
byte yawValue = (byte) (int) (nmsEntity.yaw * 256.0F / 360.0F);
|
||||||
if (getType() == DisguiseType.ENDER_DRAGON)
|
if (getType() == DisguiseType.ENDER_DRAGON)
|
||||||
yawValue -= 128;
|
yawValue -= 128;
|
||||||
mods.write(8, yawValue);
|
mods.write(8, yawValue);
|
||||||
mods.write(9, (byte) (int) (entity.pitch * 256.0F / 360.0F));
|
mods.write(9, (byte) (int) (nmsEntity.pitch * 256.0F / 360.0F));
|
||||||
if (entity instanceof EntityLiving)
|
if (nmsEntity instanceof EntityLiving)
|
||||||
mods.write(10, (byte) (int) (((EntityLiving) entity).aA * 256.0F / 360.0F));
|
mods.write(10, (byte) (int) (((EntityLiving) nmsEntity).aA * 256.0F / 360.0F));
|
||||||
DataWatcher newWatcher = new DataWatcher();
|
mods.write(11, nmsEntity.getDataWatcher());
|
||||||
try {
|
|
||||||
Field map = newWatcher.getClass().getDeclaredField("c");
|
|
||||||
map.setAccessible(true);
|
|
||||||
HashMap c = (HashMap) map.get(newWatcher);
|
|
||||||
List<WatchableObject> list = entity.getDataWatcher().c();
|
|
||||||
int i = 0;
|
|
||||||
for (Object obj : watcher.convert(list))
|
|
||||||
c.put(i++, obj);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
mods.write(11, newWatcher);
|
|
||||||
// Theres a list sometimes written with this. But no problems have appeared!
|
// Theres a list sometimes written with this. But no problems have appeared!
|
||||||
// Probably just the metadata to be sent. But the next meta packet after fixes that anyways.
|
// Probably just the metadata to be sent. But the next meta packet after fixes that anyways.
|
||||||
|
|
||||||
@ -182,12 +165,12 @@ public class Disguise {
|
|||||||
data = (int) Math.abs(loc.getYaw() % 4);
|
data = (int) Math.abs(loc.getYaw() % 4);
|
||||||
spawnPackets[0] = manager.createPacket(Packets.Server.VEHICLE_SPAWN);
|
spawnPackets[0] = manager.createPacket(Packets.Server.VEHICLE_SPAWN);
|
||||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (int) Math.floor(loc.getX() * 32D));
|
mods.write(1, (int) Math.floor(loc.getX() * 32D));
|
||||||
mods.write(2, (int) Math.floor(loc.getY() * 32D));
|
mods.write(2, (int) Math.floor(loc.getY() * 32D));
|
||||||
mods.write(3, (int) Math.floor(loc.getZ() * 32D));
|
mods.write(3, (int) Math.floor(loc.getZ() * 32D));
|
||||||
if (data > 0) {
|
if (data > 0) {
|
||||||
Vector vec = e.getVelocity();
|
Vector vec = disguisedEntity.getVelocity();
|
||||||
double d1 = vec.getX();
|
double d1 = vec.getX();
|
||||||
double d2 = vec.getY();
|
double d2 = vec.getY();
|
||||||
double d3 = vec.getZ();
|
double d3 = vec.getZ();
|
||||||
@ -208,8 +191,8 @@ public class Disguise {
|
|||||||
mods.write(5, (int) (d2 * 8000.0D));
|
mods.write(5, (int) (d2 * 8000.0D));
|
||||||
mods.write(6, (int) (d3 * 8000.0D));
|
mods.write(6, (int) (d3 * 8000.0D));
|
||||||
}
|
}
|
||||||
mods.write(7, (int) MathHelper.floor(entity.pitch * 256.0F / 360.0F));
|
mods.write(7, (int) MathHelper.floor(nmsEntity.pitch * 256.0F / 360.0F));
|
||||||
mods.write(8, (int) MathHelper.floor(entity.yaw * 256.0F / 360.0F) - 64);
|
mods.write(8, (int) MathHelper.floor(nmsEntity.yaw * 256.0F / 360.0F) - 64);
|
||||||
mods.write(9, id);
|
mods.write(9, id);
|
||||||
mods.write(10, data);
|
mods.write(10, data);
|
||||||
|
|
||||||
@ -218,7 +201,7 @@ public class Disguise {
|
|||||||
// Make a packet to turn his head!
|
// Make a packet to turn his head!
|
||||||
spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_HEAD_ROTATION);
|
spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_HEAD_ROTATION);
|
||||||
StructureModifier<Object> mods = spawnPackets[1].getModifier();
|
StructureModifier<Object> mods = spawnPackets[1].getModifier();
|
||||||
mods.write(0, e.getEntityId());
|
mods.write(0, disguisedEntity.getEntityId());
|
||||||
mods.write(1, (byte) (int) Math.floor(loc.getYaw() * 256.0F / 360.0F));
|
mods.write(1, (byte) (int) Math.floor(loc.getYaw() * 256.0F / 360.0F));
|
||||||
}
|
}
|
||||||
return spawnPackets;
|
return spawnPackets;
|
||||||
@ -228,32 +211,11 @@ public class Disguise {
|
|||||||
if (this.entity != null)
|
if (this.entity != null)
|
||||||
throw new RuntimeException("This disguise is already in use! Try .clone()");
|
throw new RuntimeException("This disguise is already in use! Try .clone()");
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
FlagWatcher tempWatcher;
|
FlagWatcher tempWatcher = null;
|
||||||
try {
|
try {
|
||||||
String name;
|
tempWatcher = (FlagWatcher) getType().getWatcherClass().getConstructor(Disguise.class).newInstance(this);
|
||||||
if (getType() == DisguiseType.MINECART_FURNACE || getType() == DisguiseType.MINECART_HOPPER
|
|
||||||
|| getType() == DisguiseType.MINECART_MOB_SPAWNER || getType() == DisguiseType.MINECART_TNT
|
|
||||||
|| getType() == DisguiseType.MINECART_CHEST) {
|
|
||||||
name = "Minecart";
|
|
||||||
} else if (getType() == DisguiseType.DONKEY || getType() == DisguiseType.MULE
|
|
||||||
|| getType() == DisguiseType.UNDEAD_HORSE || getType() == DisguiseType.SKELETON_HORSE) {
|
|
||||||
name = "Horse";
|
|
||||||
} else if (getType() == DisguiseType.ZOMBIE_VILLAGER) {
|
|
||||||
name = "Zombie";
|
|
||||||
} else if (getType() == DisguiseType.WITHER_SKELETON) {
|
|
||||||
name = "Skeleton";
|
|
||||||
} else {
|
|
||||||
name = toReadable(getType().name());
|
|
||||||
}
|
|
||||||
Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher");
|
|
||||||
Constructor<?> contructor = watcherClass.getDeclaredConstructor(Disguise.class);
|
|
||||||
tempWatcher = (FlagWatcher) contructor.newInstance(this);
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
// There is no watcher for this entity, or a error was thrown.
|
ex.printStackTrace();
|
||||||
if (entity.getType().isAlive())
|
|
||||||
tempWatcher = new LivingWatcher(this);
|
|
||||||
else
|
|
||||||
tempWatcher = new FlagWatcher(this);
|
|
||||||
}
|
}
|
||||||
if (this instanceof MobDisguise && !((MobDisguise) this).isAdult()) {
|
if (this instanceof MobDisguise && !((MobDisguise) this).isAdult()) {
|
||||||
if (tempWatcher instanceof AgeableWatcher)
|
if (tempWatcher instanceof AgeableWatcher)
|
||||||
@ -523,12 +485,4 @@ public class Disguise {
|
|||||||
public void setWatcher(FlagWatcher newWatcher) {
|
public void setWatcher(FlagWatcher newWatcher) {
|
||||||
watcher = newWatcher;
|
watcher = newWatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String toReadable(String string) {
|
|
||||||
String[] strings = string.split("_");
|
|
||||||
string = "";
|
|
||||||
for (String s : strings)
|
|
||||||
string += s.substring(0, 1) + s.substring(1).toLowerCase();
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user