diff --git a/src/main/java/net/citizensnpcs/api/ai/SimpleGoalController.java b/src/main/java/net/citizensnpcs/api/ai/SimpleGoalController.java index f66d43dc..84cb4da7 100644 --- a/src/main/java/net/citizensnpcs/api/ai/SimpleGoalController.java +++ b/src/main/java/net/citizensnpcs/api/ai/SimpleGoalController.java @@ -4,17 +4,17 @@ import java.util.Iterator; import java.util.List; -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.ai.tree.Behavior; -import net.citizensnpcs.api.ai.tree.BehaviorGoalAdapter; -import net.citizensnpcs.api.ai.tree.ForwardingBehaviorGoalAdapter; - import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.ai.tree.Behavior; +import net.citizensnpcs.api.ai.tree.BehaviorGoalAdapter; +import net.citizensnpcs.api.ai.tree.ForwardingBehaviorGoalAdapter; + public class SimpleGoalController implements GoalController { private final List executingGoals = Lists.newArrayList(); private int executingPriority = -1; @@ -45,8 +45,9 @@ public void addGoal(Goal goal, int priority) { } private void addGoalToExecution(Goal goal) { - if (CitizensAPI.hasImplementation()) + if (CitizensAPI.hasImplementation()) { Bukkit.getPluginManager().registerEvents(goal, CitizensAPI.getPlugin()); + } executingGoals.add(goal); goal.run(selector); } @@ -64,8 +65,8 @@ public int compareTo(GoalEntry o) { @Override public Behavior getBehavior() { return goal instanceof Behavior ? (Behavior) goal - : goal instanceof ForwardingBehaviorGoalAdapter ? ((ForwardingBehaviorGoalAdapter) goal) - .getWrapped() : null; + : goal instanceof ForwardingBehaviorGoalAdapter + ? ((ForwardingBehaviorGoalAdapter) goal).getWrapped() : null; } @Override @@ -255,8 +256,9 @@ public void finish() { public void finishAndRemove() { Goal toRemove = executingRootGoal; finish(); - if (toRemove != null) + if (toRemove != null) { removeGoal(toRemove); + } } @Override diff --git a/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java b/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java index f4686278..54d667d1 100644 --- a/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java +++ b/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java @@ -2,16 +2,16 @@ import java.util.Random; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; + import net.citizensnpcs.api.ai.event.NavigationCompleteEvent; import net.citizensnpcs.api.ai.tree.BehaviorGoalAdapter; import net.citizensnpcs.api.ai.tree.BehaviorStatus; import net.citizensnpcs.api.astar.pathfinder.MinecraftBlockExaminer; import net.citizensnpcs.api.npc.NPC; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; - public class WanderGoal extends BehaviorGoalAdapter { private boolean forceFinish; private final NPC npc; diff --git a/src/main/java/net/citizensnpcs/api/ai/tree/Composite.java b/src/main/java/net/citizensnpcs/api/ai/tree/Composite.java index 7b8007ce..bc90dbfb 100644 --- a/src/main/java/net/citizensnpcs/api/ai/tree/Composite.java +++ b/src/main/java/net/citizensnpcs/api/ai/tree/Composite.java @@ -41,13 +41,6 @@ public void addBehavior(Behavior behavior) { behaviors.add(behavior); } - private void tryAddParallel(Behavior behavior) { - if (behavior.shouldExecute() && !parallelExecuting.contains(behavior)) { - parallelExecuting.add(behavior); - prepareForExecution(behavior); - } - } - public List getBehaviors() { return behaviors; } @@ -66,7 +59,7 @@ public void removeBehavior(Behavior behavior) { public void reset() { if (parallelExecuting.size() > 0) { for (Behavior behavior : parallelExecuting) { - behavior.reset(); + stopExecution(behavior); } parallelExecuting.clear(); } @@ -105,4 +98,11 @@ protected void tickParallel() { } } } + + private void tryAddParallel(Behavior behavior) { + if (behavior.shouldExecute() && !parallelExecuting.contains(behavior)) { + parallelExecuting.add(behavior); + prepareForExecution(behavior); + } + } } diff --git a/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java b/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java index 9738c2ba..fadef371 100644 --- a/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java +++ b/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java @@ -150,6 +150,7 @@ public void destroy() { } traits.clear(); registry.deregister(this); + goalController.clear(); } @Override