diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java index 8fcbaf57c..7a54bd3fe 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/GuidedWaypointProvider.java @@ -27,6 +27,7 @@ import net.citizensnpcs.util.Util; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -50,7 +51,12 @@ public class GuidedWaypointProvider implements WaypointProvider { private PRTree> tree = PRTree.create(new Region3D.Converter(), 30); @Override - public WaypointEditor createEditor(final Player player, CommandContext args) { + public WaypointEditor createEditor(final CommandSender sender, CommandContext args) { + if (!(sender instanceof Player)) { + Messaging.sendErrorTr(sender, Messages.COMMAND_MUST_BE_INGAME); + return null; + } + final Player player = (Player) sender; return new WaypointEditor() { private final WaypointMarkers markers = new WaypointMarkers(player.getWorld()); private boolean showPath; @@ -188,13 +194,13 @@ public class GuidedWaypointProvider implements WaypointProvider { tree = PRTree.create(new Region3D.Converter(), 30); tree.load(Lists.newArrayList(Iterables.transform(Iterables. concat(available, helpers), new Function>() { - @Override - public Region3D apply(Waypoint arg0) { - Location loc = arg0.getLocation(); - Vector root = new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - return new Region3D(root, root, arg0); - } - }))); + @Override + public Region3D apply(Waypoint arg0) { + Location loc = arg0.getLocation(); + Vector root = new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + return new Region3D(root, root, arg0); + } + }))); } @Override diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java index d526acf22..85bcf6751 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java @@ -27,6 +27,7 @@ import net.citizensnpcs.util.Util; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.command.CommandSender; import org.bukkit.conversations.Conversation; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -44,16 +45,24 @@ public class LinearWaypointProvider implements WaypointProvider { private final List waypoints = Lists.newArrayList(); @Override - public WaypointEditor createEditor(Player player, CommandContext args) { + public WaypointEditor createEditor(CommandSender sender, CommandContext args) { if (args.hasFlag('h')) { - waypoints.add(new Waypoint(player.getLocation())); + try { + if (args.getSenderLocation() != null) { + waypoints.add(new Waypoint(args.getSenderLocation())); + } + } catch (CommandException e) { + Messaging.sendError(sender, e.getMessage()); + } return null; } else if (args.hasValueFlag("at")) { try { - Location location = CommandContext.parseLocation(player.getLocation(), args.getFlag("at")); - waypoints.add(new Waypoint(location)); + Location location = CommandContext.parseLocation(args.getSenderLocation(), args.getFlag("at")); + if (location != null) { + waypoints.add(new Waypoint(location)); + } } catch (CommandException e) { - Messaging.sendError(player, e.getMessage()); + Messaging.sendError(sender, e.getMessage()); } return null; } else if (args.hasFlag('c')) { @@ -67,8 +76,11 @@ public class LinearWaypointProvider implements WaypointProvider { } else if (args.hasFlag('p')) { setPaused(!isPaused()); return null; + } else if (!(sender instanceof CommandSender)) { + Messaging.sendErrorTr(sender, Messages.COMMAND_MUST_BE_INGAME); + return null; } - return new LinearWaypointEditor(player); + return new LinearWaypointEditor((Player) sender); } @Override @@ -408,7 +420,7 @@ public class LinearWaypointProvider implements WaypointProvider { Location npcLoc = npc.getEntity().getLocation(cachedLocation); if (npcLoc.getWorld() != next.getLocation().getWorld() || npcLoc.distanceSquared(next.getLocation()) < npc.getNavigator().getLocalParameters() - .distanceMargin()) { + .distanceMargin()) { return false; } currentDestination = next; diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java index 32a9c3823..37370e34d 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/WanderWaypointProvider.java @@ -8,7 +8,7 @@ import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.util.DataKey; -import org.bukkit.entity.Player; +import org.bukkit.command.CommandSender; public class WanderWaypointProvider implements WaypointProvider { private Goal currentGoal; @@ -20,7 +20,7 @@ public class WanderWaypointProvider implements WaypointProvider { private final int yrange = DEFAULT_YRANGE; @Override - public WaypointEditor createEditor(Player player, CommandContext args) { + public WaypointEditor createEditor(CommandSender sender, CommandContext args) { return new WaypointEditor() { @Override public void begin() { diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/WaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/WaypointProvider.java index ca754eae5..426094aac 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/WaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/WaypointProvider.java @@ -4,18 +4,18 @@ import net.citizensnpcs.api.command.CommandContext; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.persistence.Persistable; -import org.bukkit.entity.Player; +import org.bukkit.command.CommandSender; public interface WaypointProvider extends Persistable { /** - * Creates an {@link WaypointEditor} with the given {@link Player}. + * Creates an {@link WaypointEditor} with the given {@link CommandSender}. * - * @param player + * @param sender * The player to link the editor with * @param args * @return The editor */ - public WaypointEditor createEditor(Player player, CommandContext args); + public WaypointEditor createEditor(CommandSender sender, CommandContext args); /** * Returns whether this provider has paused execution of waypoints.