From 504a38317c8ae1a9573ac42b950955e6c51fe868 Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 6 Feb 2023 00:43:42 +0800 Subject: [PATCH] Add --distance argument --- .../citizensnpcs/commands/NPCCommands.java | 19 +++++++++------ .../net/citizensnpcs/trait/HomeTrait.java | 24 ++++++++++++++----- .../java/net/citizensnpcs/util/Messages.java | 1 + .../src/main/resources/messages_en.properties | 1 + 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 9174cbe8f..beaab0e7c 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -1166,7 +1166,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "homeloc --location [loc] --delay [delay] -h(ere) -p(athfind) -t(eleport)", + usage = "homeloc --location [loc] --delay [delay] --distance [distance] -h(ere) -p(athfind) -t(eleport)", desc = "Controls home location", modifiers = { "home" }, min = 1, @@ -1175,7 +1175,7 @@ public class NPCCommands { permission = "citizens.npc.home") @Requirements(ownership = true, selected = true) public void home(CommandContext args, CommandSender sender, NPC npc, @Flag("location") Location loc, - @Flag("delay") Integer delay) throws CommandException { + @Flag("delay") Integer delay, @Flag("distance") Double distance) throws CommandException { HomeTrait trait = npc.getOrAddTrait(HomeTrait.class); String output = ""; if (args.hasFlag('h')) { @@ -1186,22 +1186,27 @@ public class NPCCommands { } if (loc != null) { trait.setHomeLocation(loc); - output += Messaging.tr(Messages.HOME_TRAIT_LOCATION_SET, Util.prettyPrintLocation(trait.getHomeLocation())); + output += " " + + Messaging.tr(Messages.HOME_TRAIT_LOCATION_SET, Util.prettyPrintLocation(trait.getHomeLocation())); + } + if (distance != null) { + trait.setDistanceBlocks(distance); + output += " " + Messaging.tr(Messages.HOME_TRAIT_DISTANCE_SET, trait.getDistanceBlocks()); } if (args.hasFlag('p')) { trait.setReturnStrategy(HomeTrait.ReturnStrategy.PATHFIND); - output += Messaging.tr(Messages.HOME_TRAIT_PATHFIND_SET, npc.getName()); + output += " " + Messaging.tr(Messages.HOME_TRAIT_PATHFIND_SET, npc.getName()); } if (args.hasFlag('t')) { trait.setReturnStrategy(HomeTrait.ReturnStrategy.TELEPORT); - output += Messaging.tr(Messages.HOME_TRAIT_TELEPORT_SET, npc.getName()); + output += " " + Messaging.tr(Messages.HOME_TRAIT_TELEPORT_SET, npc.getName()); } if (delay != null) { trait.setDelayTicks(delay); - output += Messaging.tr(Messages.HOME_TRAIT_DELAY_SET, delay); + output += " " + Messaging.tr(Messages.HOME_TRAIT_DELAY_SET, delay); } if (!output.isEmpty()) { - Messaging.send(sender, output); + Messaging.send(sender, output.trim()); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/HomeTrait.java b/main/src/main/java/net/citizensnpcs/trait/HomeTrait.java index 2b9a3eef4..947d39b77 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HomeTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HomeTrait.java @@ -12,6 +12,8 @@ public class HomeTrait extends Trait { @Persist private int delay = -1; @Persist + private double distance = -1; + @Persist private Location location; @Persist private ReturnStrategy strategy = ReturnStrategy.TELEPORT; @@ -25,6 +27,10 @@ public class HomeTrait extends Trait { return delay; } + public double getDistanceBlocks() { + return distance; + } + public Location getHomeLocation() { return location.clone(); } @@ -42,12 +48,14 @@ public class HomeTrait extends Trait { } t++; if (t > delay || delay == -1) { - if (strategy == ReturnStrategy.TELEPORT) { - npc.teleport(location, TeleportCause.PLUGIN); - } else if (strategy == ReturnStrategy.PATHFIND) { - npc.getNavigator().setTarget(location); - npc.getNavigator().getLocalParameters().distanceMargin(0.9).pathDistanceMargin(0) - .destinationTeleportMargin(1); + if (distance == -1 || npc.getStoredLocation().distance(location) >= distance) { + if (strategy == ReturnStrategy.TELEPORT) { + npc.teleport(location, TeleportCause.PLUGIN); + } else if (strategy == ReturnStrategy.PATHFIND) { + npc.getNavigator().setTarget(location); + npc.getNavigator().getLocalParameters().distanceMargin(0.9).pathDistanceMargin(0) + .destinationTeleportMargin(1); + } } } } @@ -56,6 +64,10 @@ public class HomeTrait extends Trait { this.delay = delay; } + public void setDistanceBlocks(double distance) { + this.distance = distance; + } + public void setHomeLocation(Location location) { this.location = location.clone(); } diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index fed976585..543974ff0 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -155,6 +155,7 @@ public class Messages { public static final String HOLOGRAM_TEXT_MISSING = "citizens.commands.npc.hologram.text-missing"; public static final String HOLOGRAM_TEXT_REMOVED = "citizens.commands.npc.hologram.text-removed"; public static final String HOME_TRAIT_DELAY_SET = "citizens.commands.npc.home.delay-set"; + public static final String HOME_TRAIT_DISTANCE_SET = "citizens.commands.npc.home.distance-set"; public static final String HOME_TRAIT_LOCATION_SET = "citizens.commands.npc.home.home-set"; public static final String HOME_TRAIT_PATHFIND_SET = "citizens.commands.npc.home.pathfind-set"; public static final String HOME_TRAIT_TELEPORT_SET = "citizens.commands.npc.home.teleport-set"; diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties index ad8cb3146..46d42f48c 100644 --- a/main/src/main/resources/messages_en.properties +++ b/main/src/main/resources/messages_en.properties @@ -126,6 +126,7 @@ citizens.commands.npc.hologram.direction-set=Direction set to [[{0}]]. citizens.commands.npc.hologram.line-add=Added a new hologram line: [[{0}]]. citizens.commands.npc.hologram.cleared=Hologram lines cleared. citizens.commands.npc.home.home-set=Home set to [[{0}]]. +citizens.commands.npc.home.distance-set=Distance before returning home set to [[{0}]] blocks. citizens.commands.npc.home.teleport-set=[[{0}]] will now teleport home. citizens.commands.npc.home.pathfind-set=[[{0}]] will now try to pathfind home. citizens.commands.npc.home.delay-set=Delay before returning home set to [[{0}]] ticks.