Read desc
Now send a look packet for Wither skull to prevent it looking up. Send the velocity packets if this criteria is meet (Send when on ground)
This commit is contained in:
parent
1b93903bbd
commit
505f996b46
@ -6,6 +6,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.libraryaddict.disguise.DisguiseAPI;
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
|
import me.libraryaddict.disguise.PacketsManager;
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
|
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.HorseWatcher;
|
import me.libraryaddict.disguise.DisguiseTypes.Watchers.HorseWatcher;
|
||||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.ZombieWatcher;
|
import me.libraryaddict.disguise.DisguiseTypes.Watchers.ZombieWatcher;
|
||||||
@ -16,6 +17,7 @@ import net.minecraft.server.v1_6_R2.EntityPlayer;
|
|||||||
import net.minecraft.server.v1_6_R2.EntityTrackerEntry;
|
import net.minecraft.server.v1_6_R2.EntityTrackerEntry;
|
||||||
import net.minecraft.server.v1_6_R2.WorldServer;
|
import net.minecraft.server.v1_6_R2.WorldServer;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity;
|
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity;
|
||||||
import org.bukkit.entity.Horse.Variant;
|
import org.bukkit.entity.Horse.Variant;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -75,9 +77,41 @@ public class Disguise {
|
|||||||
}
|
}
|
||||||
double fallSpeed = 0.0050;
|
double fallSpeed = 0.0050;
|
||||||
boolean movement = false;
|
boolean movement = false;
|
||||||
|
boolean alwaysSend = false;
|
||||||
switch (getType()) {
|
switch (getType()) {
|
||||||
case ARROW:
|
case EGG:
|
||||||
|
case ENDER_PEARL:
|
||||||
case BAT:
|
case BAT:
|
||||||
|
case EXPERIENCE_ORB:
|
||||||
|
case FIREBALL:
|
||||||
|
case SMALL_FIREBALL:
|
||||||
|
case SNOWBALL:
|
||||||
|
case SPLASH_POTION:
|
||||||
|
case THROWN_EXP_BOTTLE:
|
||||||
|
case WITHER_SKULL:
|
||||||
|
alwaysSend = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (getType()) {
|
||||||
|
case FIREWORK:
|
||||||
|
fallSpeed = -0.040;
|
||||||
|
break;
|
||||||
|
case EGG:
|
||||||
|
case ENDER_PEARL:
|
||||||
|
case ENDER_SIGNAL:
|
||||||
|
case FIREBALL:
|
||||||
|
case SMALL_FIREBALL:
|
||||||
|
case SNOWBALL:
|
||||||
|
case SPLASH_POTION:
|
||||||
|
case THROWN_EXP_BOTTLE:
|
||||||
|
fallSpeed = 0.0005;
|
||||||
|
break;
|
||||||
|
case WITHER_SKULL:
|
||||||
|
fallSpeed = 0.000001D;
|
||||||
|
break;
|
||||||
|
case ARROW:
|
||||||
case BOAT:
|
case BOAT:
|
||||||
case ENDER_CRYSTAL:
|
case ENDER_CRYSTAL:
|
||||||
case ENDER_DRAGON:
|
case ENDER_DRAGON:
|
||||||
@ -109,25 +143,13 @@ public class Disguise {
|
|||||||
case CAVE_SPIDER:
|
case CAVE_SPIDER:
|
||||||
fallSpeed = 0.0040;
|
fallSpeed = 0.0040;
|
||||||
break;
|
break;
|
||||||
case EGG:
|
|
||||||
case ENDER_PEARL:
|
|
||||||
case ENDER_SIGNAL:
|
|
||||||
case FIREBALL:
|
|
||||||
case SMALL_FIREBALL:
|
|
||||||
case SNOWBALL:
|
|
||||||
case SPLASH_POTION:
|
|
||||||
case THROWN_EXP_BOTTLE:
|
|
||||||
case WITHER_SKULL:
|
|
||||||
fallSpeed = 0.0005;
|
|
||||||
break;
|
|
||||||
case FIREWORK:
|
|
||||||
fallSpeed = -0.040;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
final boolean sendMovementPacket = movement;
|
final boolean sendMovementPacket = movement;
|
||||||
final double vectorY = fallSpeed;
|
final double vectorY = fallSpeed;
|
||||||
|
final boolean alwaysSendVelocity = alwaysSend;
|
||||||
// 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;
|
||||||
@ -150,17 +172,40 @@ public class Disguise {
|
|||||||
}
|
}
|
||||||
// If the vectorY isn't 0. Cos if it is. Then it doesn't want to send any vectors.
|
// If the vectorY isn't 0. Cos if it is. Then it doesn't want to send any vectors.
|
||||||
// If this disguise has velocity sending enabled and the entity is flying.
|
// If this disguise has velocity sending enabled and the entity is flying.
|
||||||
if (vectorY != 0 && isVelocitySent() && !entity.isOnGround()) {
|
if (vectorY != 0 && isVelocitySent() && (alwaysSendVelocity || !entity.isOnGround())) {
|
||||||
Vector vector = entity.getVelocity();
|
Vector vector = entity.getVelocity();
|
||||||
// If the entity doesn't have velocity changes already
|
// If the entity doesn't have velocity changes already
|
||||||
if (vector.getY() != 0)
|
if (vector.getY() != 0 && !(vector.getY() < 0 && alwaysSendVelocity && entity.isOnGround())) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
PacketContainer lookPacket = null;
|
||||||
|
PacketContainer selfLookPacket = null;
|
||||||
|
if (getType() == DisguiseType.WITHER_SKULL) {
|
||||||
|
lookPacket = new PacketContainer(Packets.Server.ENTITY_LOOK);
|
||||||
|
StructureModifier<Object> mods = lookPacket.getModifier();
|
||||||
|
mods.write(0, entity.getEntityId());
|
||||||
|
Location loc = entity.getLocation();
|
||||||
|
mods.write(
|
||||||
|
4,
|
||||||
|
PacketsManager.getYaw(getType(), DisguiseType.getType(entity.getType()),
|
||||||
|
(byte) Math.floor(loc.getYaw() * 256.0F / 360.0F)));
|
||||||
|
mods.write(5, (byte) Math.floor(loc.getPitch() * 256.0F / 360.0F));
|
||||||
|
selfLookPacket = lookPacket.shallowClone();
|
||||||
|
}
|
||||||
for (EntityPlayer player : getPerverts()) {
|
for (EntityPlayer player : getPerverts()) {
|
||||||
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_VELOCITY);
|
PacketContainer packet = new PacketContainer(Packets.Server.ENTITY_VELOCITY);
|
||||||
StructureModifier<Object> mods = packet.getModifier();
|
StructureModifier<Object> mods = packet.getModifier();
|
||||||
if (entity == player.getBukkitEntity()) {
|
if (entity == player.getBukkitEntity()) {
|
||||||
if (!viewSelfDisguise())
|
if (!viewSelfDisguise())
|
||||||
continue;
|
continue;
|
||||||
|
if (selfLookPacket != null) {
|
||||||
|
try {
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(),
|
||||||
|
selfLookPacket, false);
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
mods.write(0, DisguiseAPI.getFakeDisguise(entity.getEntityId()));
|
mods.write(0, DisguiseAPI.getFakeDisguise(entity.getEntityId()));
|
||||||
} else
|
} else
|
||||||
mods.write(0, entity.getEntityId());
|
mods.write(0, entity.getEntityId());
|
||||||
@ -168,6 +213,9 @@ public class Disguise {
|
|||||||
mods.write(2, (int) (8000 * (vectorY * (double) player.ping * 0.069)));
|
mods.write(2, (int) (8000 * (vectorY * (double) player.ping * 0.069)));
|
||||||
mods.write(3, (int) (vector.getZ() * 8000));
|
mods.write(3, (int) (vector.getZ() * 8000));
|
||||||
try {
|
try {
|
||||||
|
if (lookPacket != null)
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), lookPacket,
|
||||||
|
false);
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), packet, false);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player.getBukkitEntity(), packet, false);
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Loading…
Reference in New Issue
Block a user