diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 4bd234a5c..64a18b0ca 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -2272,7 +2272,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "playsound [sound] (volume) (pitch)", + usage = "playsound [sound] (volume) (pitch) (--at x:y:z:world)", desc = "Plays a sound at the NPC's location", modifiers = { "playsound" }, min = 2, @@ -2280,9 +2280,10 @@ public class NPCCommands { permission = "citizens.npc.playsound") @Requirements(selected = true, ownership = true) public void playsound(CommandContext args, CommandSender sender, NPC npc, @Arg(1) String sound, - @Arg(value = 2, defValue = "1") Float volume, @Arg(value = 3, defValue = "1") Float pitch) - throws CommandException { - npc.getEntity().getWorld().playSound(npc.getEntity(), sound, volume, pitch); + @Arg(value = 2, defValue = "1") Float volume, @Arg(value = 3, defValue = "1") Float pitch, + @Flag("at") Location at) throws CommandException { + Location loc = at == null ? npc.getStoredLocation() : at; + loc.getWorld().playSound(loc, sound, volume, pitch); } @Command( diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java index 1dbdd62a6..4323e3f86 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java @@ -74,9 +74,11 @@ public class CitizensNPCRegistry implements NPCRegistry { if (type == EntityType.ARMOR_STAND && !npc.hasTrait(ArmorStandTrait.class)) { npc.addTrait(ArmorStandTrait.class); } + if (Setting.DEFAULT_LOOK_CLOSE.asBoolean()) { npc.addTrait(LookClose.class); } + npc.addTrait(MountTrait.class); return npc; } diff --git a/main/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java b/main/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java index ce891927b..7852a4f1c 100644 --- a/main/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java +++ b/main/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java @@ -35,6 +35,7 @@ import net.citizensnpcs.api.astar.pathfinder.MinecraftBlockExaminer; import net.citizensnpcs.api.astar.pathfinder.SwimmingExaminer; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.util.DataKey; +import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.api.util.SpigotUtil; import net.citizensnpcs.npc.ai.AStarNavigationStrategy.AStarPlanner; import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator; @@ -390,6 +391,9 @@ public class CitizensNavigator implements Navigator, Runnable { private void stopNavigating(CancelReason reason) { if (!isNavigating()) return; + if (reason == CancelReason.STUCK && Messaging.isDebugging()) { + Messaging.debug(npc, "navigation ended, stuck", executing); + } if (session != null) { session.end(); session = null; diff --git a/main/src/main/java/net/citizensnpcs/trait/shop/ExperienceAction.java b/main/src/main/java/net/citizensnpcs/trait/shop/ExperienceAction.java index f73ce6978..0f93b1da1 100644 --- a/main/src/main/java/net/citizensnpcs/trait/shop/ExperienceAction.java +++ b/main/src/main/java/net/citizensnpcs/trait/shop/ExperienceAction.java @@ -25,7 +25,7 @@ public class ExperienceAction extends NPCShopAction { @Override public String describe() { - return exp + " XP"; + return exp == 1 ? exp + " level" : exp + " levels"; } @Override @@ -90,7 +90,7 @@ public class ExperienceAction extends NPCShopAction { ExperienceAction old = (ExperienceAction) previous; description = old.describe(); } - return Util.createItem(Material.EXPERIENCE_BOTTLE, "Experience", description); + return Util.createItem(Material.EXPERIENCE_BOTTLE, "XP Level", description); } @Override diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties index 3205b868b..d967143e3 100644 --- a/main/src/main/resources/messages_en.properties +++ b/main/src/main/resources/messages_en.properties @@ -63,8 +63,8 @@ citizens.commands.npc.command.cost-missing=Missing cost to set. citizens.commands.npc.command.invalid-error-message=Invalid error message. Valid messages are [[{0}]]. citizens.commands.npc.command.hide-error-messages-set=Now hiding error messages. citizens.commands.npc.command.hide-error-messages-unset=No longer hiding error messages. -citizens.commands.npc.command.experience-cost-set=Set experience cost per click to [[{0}]]. -citizens.commands.npc.command.individual-experience-cost-set=Set experience cost per click to [[{0}]] for command id [[{1}]]. +citizens.commands.npc.command.experience-cost-set=Set xp level cost per click to [[{0}]]. +citizens.commands.npc.command.individual-experience-cost-set=Set xp level cost per click to [[{0}]] for command id [[{1}]]. citizens.commands.npc.command.left-hand-header=Commands to run on [[left click]]: citizens.commands.npc.command.right-hand-header=Commands to run on [[right click]]: citizens.commands.npc.command.command-removed=Command [[{0}]] removed.