mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-07 19:31:37 +01:00
Fix changing an NPC's speed mid-path
This commit is contained in:
parent
c8053f9d68
commit
27eb290eb3
@ -1,5 +1,7 @@
|
|||||||
package net.citizensnpcs.commands;
|
package net.citizensnpcs.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import net.citizensnpcs.Citizens;
|
import net.citizensnpcs.Citizens;
|
||||||
import net.citizensnpcs.api.command.Command;
|
import net.citizensnpcs.api.command.Command;
|
||||||
import net.citizensnpcs.api.command.CommandContext;
|
import net.citizensnpcs.api.command.CommandContext;
|
||||||
@ -11,8 +13,6 @@ import net.citizensnpcs.api.util.Messaging;
|
|||||||
import net.citizensnpcs.util.Messages;
|
import net.citizensnpcs.util.Messages;
|
||||||
import net.citizensnpcs.util.StringHelper;
|
import net.citizensnpcs.util.StringHelper;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
@Requirements
|
@Requirements
|
||||||
public class AdminCommands {
|
public class AdminCommands {
|
||||||
private final Citizens plugin;
|
private final Citizens plugin;
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package net.citizensnpcs.npc.ai;
|
package net.citizensnpcs.npc.ai;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLivingEntity;
|
||||||
|
|
||||||
import net.citizensnpcs.api.ai.NavigatorParameters;
|
import net.citizensnpcs.api.ai.NavigatorParameters;
|
||||||
import net.citizensnpcs.api.ai.TargetType;
|
import net.citizensnpcs.api.ai.TargetType;
|
||||||
import net.citizensnpcs.api.ai.event.CancelReason;
|
import net.citizensnpcs.api.ai.event.CancelReason;
|
||||||
@ -8,19 +11,18 @@ import net.citizensnpcs.util.NMS;
|
|||||||
import net.minecraft.server.v1_8_R3.EntityLiving;
|
import net.minecraft.server.v1_8_R3.EntityLiving;
|
||||||
import net.minecraft.server.v1_8_R3.NavigationAbstract;
|
import net.minecraft.server.v1_8_R3.NavigationAbstract;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLivingEntity;
|
|
||||||
|
|
||||||
public class MCNavigationStrategy extends AbstractPathStrategy {
|
public class MCNavigationStrategy extends AbstractPathStrategy {
|
||||||
|
private final EntityLiving handle;
|
||||||
|
private float lastSpeed;
|
||||||
private final NavigationAbstract navigation;
|
private final NavigationAbstract navigation;
|
||||||
private final NavigatorParameters parameters;
|
private final NavigatorParameters parameters;
|
||||||
private final Location target;
|
private final Location target;
|
||||||
private final EntityLiving handle;
|
|
||||||
|
|
||||||
MCNavigationStrategy(final NPC npc, Location dest, NavigatorParameters params) {
|
MCNavigationStrategy(final NPC npc, Location dest, NavigatorParameters params) {
|
||||||
super(TargetType.LOCATION);
|
super(TargetType.LOCATION);
|
||||||
this.target = dest;
|
this.target = dest;
|
||||||
this.parameters = params;
|
this.parameters = params;
|
||||||
|
this.lastSpeed = parameters.speed();
|
||||||
handle = ((CraftLivingEntity) npc.getEntity()).getHandle();
|
handle = ((CraftLivingEntity) npc.getEntity()).getHandle();
|
||||||
handle.onGround = true;
|
handle.onGround = true;
|
||||||
// not sure of a better way around this - if onGround is false, then
|
// not sure of a better way around this - if onGround is false, then
|
||||||
@ -33,6 +35,10 @@ public class MCNavigationStrategy extends AbstractPathStrategy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double distanceSquared() {
|
||||||
|
return handle.getBukkitEntity().getLocation(HANDLE_LOCATION).distanceSquared(target);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Location getTargetAsLocation() {
|
public Location getTargetAsLocation() {
|
||||||
return target;
|
return target;
|
||||||
@ -57,7 +63,10 @@ public class MCNavigationStrategy extends AbstractPathStrategy {
|
|||||||
public boolean update() {
|
public boolean update() {
|
||||||
if (getCancelReason() != null)
|
if (getCancelReason() != null)
|
||||||
return true;
|
return true;
|
||||||
navigation.a(parameters.speed());
|
if (parameters.speed() != lastSpeed) {
|
||||||
|
navigation.a(target.getX(), target.getY(), target.getZ(), parameters.speed());
|
||||||
|
lastSpeed = parameters.speed();
|
||||||
|
}
|
||||||
parameters.run();
|
parameters.run();
|
||||||
if (distanceSquared() < parameters.distanceMargin()) {
|
if (distanceSquared() < parameters.distanceMargin()) {
|
||||||
stop();
|
stop();
|
||||||
@ -66,9 +75,5 @@ public class MCNavigationStrategy extends AbstractPathStrategy {
|
|||||||
return NMS.isNavigationFinished(navigation);
|
return NMS.isNavigationFinished(navigation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private double distanceSquared() {
|
|
||||||
return handle.getBukkitEntity().getLocation(HANDLE_LOCATION).distanceSquared(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Location HANDLE_LOCATION = new Location(null, 0, 0, 0);
|
private static final Location HANDLE_LOCATION = new Location(null, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user