diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerHeadRotation.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerHeadRotation.java index 9145dc64..67411bfd 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerHeadRotation.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerHeadRotation.java @@ -4,6 +4,7 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.reflect.StructureModifier; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.packets.IPacketHandler; import me.libraryaddict.disguise.utilities.packets.LibsPackets; @@ -11,6 +12,7 @@ import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.ShulkerBullet; /** * Created by libraryaddict on 3/01/2019. @@ -30,9 +32,51 @@ public class PacketHandlerHeadRotation implements IPacketHandler { Location loc = entity.getLocation(); - byte pitch = DisguiseUtilities - .getPitch(disguise.getType(), entity.getType(), (byte) (int) (loc.getPitch() * 256.0F / 360.0F)); - byte yaw = DisguiseUtilities.getYaw(disguise.getType(), entity.getType(), sentPacket.getBytes().read(0)); + DisguiseType entityType = DisguiseType.getType(entity); + + byte pitch; + byte yaw; + + switch (entityType) { + case LLAMA_SPIT: + case FIREBALL: + case SMALL_FIREBALL: + case DRAGON_FIREBALL: + case FIREWORK: + case SHULKER_BULLET: + case ARROW: + case TIPPED_ARROW: + case SPECTRAL_ARROW: + case EGG: + case TRIDENT: + case THROWN_EXP_BOTTLE: + case EXPERIENCE_ORB: + case SPLASH_POTION: + case ENDER_CRYSTAL: + case FALLING_BLOCK: + case ITEM_FRAME: + case ENDER_SIGNAL: + case ENDER_PEARL: + case DROPPED_ITEM: + case EVOKER_FANGS: + case SNOWBALL: + case PAINTING: + case PRIMED_TNT: + if (sentPacket.getBytes().read(0) == 0 && entity.getVelocity().lengthSquared() > 0) { + loc.setDirection(entity.getVelocity()); + pitch = DisguiseUtilities.getPitch(disguise.getType(), DisguiseType.PLAYER, + (byte) (int) (loc.getPitch() * 256.0F / 360.0F)); + yaw = DisguiseUtilities.getYaw(disguise.getType(), DisguiseType.PLAYER, + (byte) (int) (loc.getYaw() * 256.0F / 360.0F)); + break; + } + default: + pitch = DisguiseUtilities.getPitch(disguise.getType(), entity.getType(), + (byte) (int) (loc.getPitch() * 256.0F / 360.0F)); + yaw = DisguiseUtilities + .getYaw(disguise.getType(), entity.getType(), (byte) (int) (loc.getYaw() * 256.0F / 360.0F)); + break; + } PacketContainer rotation = new PacketContainer(PacketType.Play.Server.ENTITY_HEAD_ROTATION);