Added .equals and fixed up velocitys to look better for worse pings

This commit is contained in:
Andrew 2013-07-23 01:32:29 +12:00
parent 890e17ba36
commit efede32c9b

View File

@ -59,6 +59,16 @@ public class Disguise {
return disguise; return disguise;
} }
public boolean equals(Disguise disguise) {
if (getType() != disguise.getType())
return false;
if (replaceSounds() != disguise.replaceSounds())
return false;
if (!getWatcher().equals(disguise.getWatcher()))
return false;
return true;
}
public PacketContainer[] constructPacket(org.bukkit.entity.Entity e) { public PacketContainer[] constructPacket(org.bukkit.entity.Entity e) {
PacketContainer[] spawnPackets = new PacketContainer[2]; PacketContainer[] spawnPackets = new PacketContainer[2];
ProtocolManager manager = ProtocolLibrary.getProtocolManager(); ProtocolManager manager = ProtocolLibrary.getProtocolManager();
@ -277,8 +287,8 @@ public class Disguise {
name = toReadable(getType().name()); name = toReadable(getType().name());
} }
Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher"); Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher");
Constructor<?> contructor = watcherClass.getDeclaredConstructor(int.class); Constructor<?> contructor = watcherClass.getDeclaredConstructor(Disguise.class);
tempWatcher = (FlagWatcher) contructor.newInstance(entity); tempWatcher = (FlagWatcher) contructor.newInstance(this);
} catch (Exception ex) { } catch (Exception ex) {
// There is no watcher for this entity, or a error was thrown. // There is no watcher for this entity, or a error was thrown.
if (entity.getType().isAlive()) if (entity.getType().isAlive())
@ -359,11 +369,14 @@ public class Disguise {
case 8: case 8:
case 9: case 9:
owningData = EntityLiving.class; owningData = EntityLiving.class;
break;
case 10: case 10:
case 11: case 11:
owningData = EntityInsentient.class; owningData = EntityInsentient.class;
break;
case 16: case 16:
owningData = EntityAgeable.class; owningData = EntityAgeable.class;
break;
default: default:
break; break;
} }
@ -375,7 +388,7 @@ public class Disguise {
tempWatcher.setValue(dataNo, disguiseValues.get(dataNo)); tempWatcher.setValue(dataNo, disguiseValues.get(dataNo));
} }
watcher = tempWatcher; watcher = tempWatcher;
double fallSpeed = 0.0051; double fallSpeed = 0.0050;
boolean doesntMove = false; boolean doesntMove = false;
boolean movement = false; boolean movement = false;
switch (getType()) { switch (getType()) {
@ -396,18 +409,22 @@ public class Disguise {
case PLAYER: case PLAYER:
case SQUID: case SQUID:
doesntMove = true; doesntMove = true;
break;
case DROPPED_ITEM: case DROPPED_ITEM:
case EXPERIENCE_ORB: case EXPERIENCE_ORB:
case MAGMA_CUBE: case MAGMA_CUBE:
case PRIMED_TNT: case PRIMED_TNT:
fallSpeed = 0.2; fallSpeed = 0.2;
movement = true; movement = true;
break;
case WITHER: case WITHER:
case FALLING_BLOCK: case FALLING_BLOCK:
fallSpeed = 0.04; fallSpeed = 0.04;
break;
case SPIDER: case SPIDER:
case CAVE_SPIDER: case CAVE_SPIDER:
fallSpeed = 0.0041; fallSpeed = 0.0040;
break;
case EGG: case EGG:
case ENDER_PEARL: case ENDER_PEARL:
case ENDER_SIGNAL: case ENDER_SIGNAL:
@ -418,14 +435,16 @@ public class Disguise {
case THROWN_EXP_BOTTLE: case THROWN_EXP_BOTTLE:
case WITHER_SKULL: case WITHER_SKULL:
fallSpeed = 0.0005; fallSpeed = 0.0005;
break;
case FIREWORK: case FIREWORK:
fallSpeed = -0.041; fallSpeed = -0.040;
break;
default: default:
break; break;
} }
final boolean sendMovementPacket = movement; final boolean sendMovementPacket = movement;
final boolean sendVector = !doesntMove; final boolean sendVector = !doesntMove;
final int vectorY = (int) (fallSpeed * 8000); final double vectorY = fallSpeed;
// A scheduler to clean up any unused disguises. // A scheduler to clean up any unused disguises.
runnable = new BukkitRunnable() { runnable = new BukkitRunnable() {
private int i = 0; private int i = 0;
@ -447,29 +466,32 @@ public class Disguise {
Vector vector = entity.getVelocity(); Vector vector = entity.getVelocity();
if (vector.getY() != 0) if (vector.getY() != 0)
return; return;
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_VELOCITY);
StructureModifier<Object> mods = packet.getModifier();
mods.write(0, entity.getEntityId());
mods.write(1, (int) (vector.getX() * 8000));
mods.write(2, vectorY);
mods.write(3, (int) (vector.getZ() * 8000));
for (EntityPlayer player : getPerverts()) { for (EntityPlayer player : getPerverts()) {
if (entity != player) { if (entity != player) {
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_VELOCITY);
StructureModifier<Object> mods = packet.getModifier();
mods.write(0, entity.getEntityId());
mods.write(1, (int) (vector.getX() * 8000));
mods.write(2, (int) (8000 * (vectorY * (double) player.ping * 0.069)));
mods.write(3, (int) (vector.getZ() * 8000));
try { try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), packet); ProtocolLibrary.getProtocolManager()
.sendServerPacket(player.getBukkitEntity(), packet, false);
} catch (InvocationTargetException e) { } catch (InvocationTargetException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
if (sendMovementPacket) { if (sendMovementPacket) {
packet = new PacketContainer(Packets.Server.REL_ENTITY_MOVE); PacketContainer packet = new PacketContainer(Packets.Server.REL_ENTITY_MOVE);
mods = packet.getModifier(); StructureModifier<Object> mods = packet.getModifier();
mods.write(0, entity.getEntityId()); mods.write(0, entity.getEntityId());
for (EntityPlayer player : getPerverts()) { for (EntityPlayer player : getPerverts()) {
if (entity != player) { if (entity != player) {
try { try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), packet); ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), packet,
false);
} catch (InvocationTargetException e) { } catch (InvocationTargetException e) {
e.printStackTrace(); e.printStackTrace();
} }