From ddc02035db6d0b433bfe35ef8c7e3bb671820310 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Mon, 8 Aug 2016 02:40:26 -0700 Subject: [PATCH] Add lookat to walk command --- .../commands/BukkitCommandRegistry.java | 4 ++-- .../scripts/commands/entity/WalkCommand.java | 24 +++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java index 01ab41f54e..1954992a91 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java @@ -3876,7 +3876,7 @@ public void registerCoreMembers() { // <--[command] // @Name Walk - // @Syntax walk (|...) [/stop] (speed:<#.#>) (auto_range) (radius:<#.#>) + // @Syntax walk (|...) [/stop] (speed:<#.#>) (auto_range) (radius:<#.#>) (lookat:) // @Required 1 // @Stable stable // @Short Causes an entity or list of entities to walk to another location. @@ -3896,7 +3896,7 @@ public void registerCoreMembers() { // TODO: Document Command Details // --> registerCoreMember(WalkCommand.class, - "WALK, WALKTO", "walk (|...) [/stop] (speed:<#>) (auto_range) (radius:<#.#>)", 1); + "WALK, WALKTO", "walk (|...) [/stop] (speed:<#>) (auto_range) (radius:<#.#>) (lookat:)", 1); // <--[command] // @Name Weather diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/WalkCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/WalkCommand.java index 15f02887af..f54c3397ab 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/WalkCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/WalkCommand.java @@ -1,5 +1,6 @@ package net.aufdemrand.denizen.scripts.commands.entity; +import com.google.common.base.Function; import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizen.objects.dEntity; import net.aufdemrand.denizen.objects.dLocation; @@ -16,6 +17,8 @@ import net.aufdemrand.denizencore.scripts.ScriptEntry; import net.aufdemrand.denizencore.scripts.commands.AbstractCommand; import net.aufdemrand.denizencore.scripts.commands.Holdable; +import net.citizensnpcs.api.ai.Navigator; +import org.bukkit.Location; import java.util.ArrayList; import java.util.Arrays; @@ -34,9 +37,10 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { - if (!scriptEntry.hasObject("location") + if (!scriptEntry.hasObject("lookat") + && arg.matchesPrefix("lookat") && arg.matchesArgumentType(dLocation.class)) { - scriptEntry.addObject("location", arg.asType(dLocation.class)); + scriptEntry.addObject("lookat", arg.asType(dLocation.class)); } else if (!scriptEntry.hasObject("speed") @@ -61,6 +65,11 @@ else if (!scriptEntry.hasObject("stop") scriptEntry.addObject("stop", new Element(true)); } + else if (!scriptEntry.hasObject("location") + && arg.matchesArgumentType(dLocation.class)) { + scriptEntry.addObject("location", arg.asType(dLocation.class)); + } + else if (!scriptEntry.hasObject("entities") && arg.matchesArgumentList(dEntity.class)) { scriptEntry.addObject("entities", arg.asType(dList.class).filter(dEntity.class)); @@ -105,6 +114,7 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { Element radius = scriptEntry.getElement("radius"); Element stop = scriptEntry.getElement("stop"); List entities = (List) scriptEntry.getObject("entities"); + final dLocation lookat = scriptEntry.getdObject("lookat"); // Debug the execution @@ -113,6 +123,7 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { + (speed != null ? speed.debug() : "") + (auto_range != null ? auto_range.debug() : "") + (radius != null ? radius.debug() : "") + + (lookat != null ? lookat.debug() : "") + stop.debug() + (aH.debugObj("entities", entities))); @@ -146,6 +157,15 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { npc.getNavigator().setTarget(loc); + if (lookat != null) { + npc.getNavigator().getLocalParameters().lookAtFunction(new Function() { + @Override + public Location apply(Navigator nav) { + return lookat; + } + }); + } + if (speed != null) { npc.getNavigator().getLocalParameters().speedModifier(speed.asFloat()); }