Makes sure NPC movements are the same
All checks were successful
KnarCraft/BlacksmithVisuals/pipeline/head This commit looks good

This commit is contained in:
Kristian Knarvik 2024-12-15 14:17:15 +01:00
parent b094d34c62
commit f4fa9e99a5

View File

@ -172,10 +172,7 @@ public class BlacksmithListener implements Listener {
BlacksmithVisuals.debug("Restored LookCLose range");
}
BlacksmithVisuals.debug("Scheduling movement back to idle location");
Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () ->
entity.teleport(targetLocation), getWalkTime(entity.getLocation(), targetLocation));
npc.getNavigator().setTarget(targetLocation);
moveNPC(npc, entity, targetLocation);
}
/**
@ -212,19 +209,30 @@ public class BlacksmithListener implements Listener {
npc.getName() + " is unreachable!");
return 0;
}
Location finalTargetLocation = targetLocation;
return moveNPC(npc, entity, targetLocation);
}
/**
* Moves an NPC to a different location
*
* @param npc <p>The NPC to be moved</p>
* @param entity <p>The NPC's entity</p>
* @param finalTargetLocation <p>The location the NPC should be moved to</p>
* @return <p>The assumed time it will take the NPC to get to the position</p>
*/
private long moveNPC(@NotNull NPC npc, @NotNull Entity entity, @NotNull Location finalTargetLocation) {
// Move NPC using Citizens path-finding
Location current = entity.getLocation().clone();
BlacksmithVisuals.debug("Preparing rotation and walk to working location");
npc.teleport(current.clone().setDirection(targetLocation.toVector().subtract(current.clone().toVector())), PlayerTeleportEvent.TeleportCause.PLUGIN);
Location current = entity.getLocation().clone();
npc.teleport(current.setDirection(finalTargetLocation.toVector().subtract(current.toVector())), PlayerTeleportEvent.TeleportCause.PLUGIN);
Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () -> npc.getNavigator().setTarget(finalTargetLocation), 2);
// Teleport the NPC tp get it in the exact final location
long walkTime = getWalkTime(entity.getLocation(), targetLocation);
long walkTime = getWalkTime(entity.getLocation(), finalTargetLocation);
BlacksmithVisuals.debug("Queuing teleportation to working position");
Bukkit.getScheduler().scheduleSyncDelayedTask(BlacksmithVisuals.getInstance(), () ->
entity.teleport(finalTargetLocation), walkTime);
entity.teleport(finalTargetLocation, PlayerTeleportEvent.TeleportCause.PLUGIN), walkTime);
return walkTime;
}