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 45781b3abc..a6d01e73bf 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java @@ -492,7 +492,7 @@ public void registerCoreMembers() { // <--[command] // @Name Compass - // @Syntax compass [] + // @Syntax compass [/reset] // @Required 1 // @Stable stable // @Short Redirects the player's compass to target the given location. @@ -506,7 +506,7 @@ public void registerCoreMembers() { // TODO: Document Command Details // --> registerCoreMember(CompassCommand.class, - "COMPASS", "compass []", 1); + "COMPASS", "compass [/reset]", 1); // <--[command] diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/player/CompassCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/player/CompassCommand.java index 212c554c90..d487e7e6ca 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/player/CompassCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/player/CompassCommand.java @@ -3,11 +3,13 @@ import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizencore.exceptions.CommandExecutionException; import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException; +import net.aufdemrand.denizencore.objects.Element; import net.aufdemrand.denizencore.objects.aH; import net.aufdemrand.denizen.objects.dLocation; import net.aufdemrand.denizencore.scripts.ScriptEntry; import net.aufdemrand.denizencore.scripts.commands.AbstractCommand; import net.aufdemrand.denizen.utilities.debugging.dB; +import org.bukkit.Location; import org.bukkit.entity.Player; public class CompassCommand extends AbstractCommand { @@ -21,16 +23,22 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { if (!scriptEntry.hasObject("location") - && arg.matchesArgumentType(dLocation.class)) + && arg.matchesArgumentType(dLocation.class)) scriptEntry.addObject("location", arg.asType(dLocation.class)); + else if (!scriptEntry.hasObject("reset") + && arg.matches("reset")) + scriptEntry.addObject("reset", new Element(true)); + else arg.reportUnhandled(); } // Check for required information - if (!scriptEntry.hasObject("location")) + if (!scriptEntry.hasObject("location") && !scriptEntry.hasObject("reset")) throw new InvalidArgumentsException("Missing location argument!"); + + scriptEntry.defaultObject("reset", new Element(false)); } @@ -39,16 +47,22 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { // Fetch required objects - dLocation location = (dLocation) scriptEntry.getObject("location"); + dLocation location = scriptEntry.getdObject("location"); + Element reset = scriptEntry.getElement("reset"); Player player = ((BukkitScriptEntryData)scriptEntry.entryData).getPlayer().getPlayerEntity(); // Debug the execution - dB.report(scriptEntry, getName(), location.debug()); - + dB.report(scriptEntry, getName(), location.debug() + reset.debug()); - player.setCompassTarget(location); + if (reset.asBoolean()) { + Location bed = player.getBedSpawnLocation(); + player.setCompassTarget(bed != null ? bed : player.getWorld().getSpawnLocation()); + } + else { + player.setCompassTarget(location); + } }