From 947f4301f3dcb2c14ee6d8d1a1b4e2be06ce581a Mon Sep 17 00:00:00 2001 From: fullwall Date: Sat, 28 Mar 2020 01:14:11 +0800 Subject: [PATCH] Set head yaw when teleporting NPCs --- .../java/net/citizensnpcs/npc/CitizensNPC.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 52e0c789d..a52a9b27b 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -12,6 +12,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scoreboard.Team; @@ -132,7 +133,7 @@ public class CitizensNPC extends AbstractNPC { @Override public Location getStoredLocation() { - return isSpawned() ? getEntity().getLocation() : getTrait(CurrentLocation.class).getLocation(); + return isSpawned() ? getEntity().getLocation(CACHE_LOCATION) : getTrait(CurrentLocation.class).getLocation(); } @Override @@ -194,7 +195,7 @@ public class CitizensNPC extends AbstractNPC { boolean wasSpawned = isSpawned(); Location prev = null; if (wasSpawned) { - prev = getEntity().getLocation(); + prev = getEntity().getLocation(CACHE_LOCATION); despawn(DespawnReason.PENDING_RESPAWN); } entityController = newController; @@ -309,6 +310,14 @@ public class CitizensNPC extends AbstractNPC { return true; } + @Override + public void teleport(Location location, TeleportCause reason) { + super.teleport(location, reason); + if (isSpawned() && getEntity().getLocation(CACHE_LOCATION).distanceSquared(location) < 1) { + NMS.setHeadYaw(getEntity(), location.getYaw()); + } + } + @Override public void update() { try { @@ -413,6 +422,8 @@ public class CitizensNPC extends AbstractNPC { } } + private static final Location CACHE_LOCATION = null; + private static final SetMultimap CHUNK_LOADERS = HashMultimap.create(); private static final String NPC_METADATA_MARKER = "NPC"; private static boolean SUPPORT_GLOWING = true;