diff --git a/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 3e1a9b34b..989dc95ca 100644 --- a/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -1187,6 +1187,21 @@ public class NPCCommands { Messaging.sendTr(sender, Messages.SPEED_MODIFIER_SET, newSpeed); } + @Command( + aliases = { "npc" }, + usage = "swim (--set [true|false])", + desc = "Sets an NPC to swim or not", + modifiers = { "swim" }, + min = 1, + max = 1, + permission = "citizens.npc.swim") + public void swim(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + boolean swim = args.hasValueFlag("set") ? Boolean.parseBoolean(args.getFlag("swim")) : !npc.data().get( + NPC.SWIMMING_METADATA, true); + npc.data().setPersistent(NPC.SWIMMING_METADATA, swim); + Messaging.sendTr(sender, swim ? Messages.SWIMMING_SET : Messages.SWIMMING_UNSET, npc.getName()); + } + @Command( aliases = { "npc" }, usage = "targetable", diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 4fb51788c..41408ec27 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -259,7 +259,9 @@ public class CitizensNPC extends AbstractNPC { try { super.update(); if (isSpawned()) { - NMS.trySwim(getEntity()); + if (data().get(NPC.SWIMMING_METADATA, true)) { + NMS.trySwim(getEntity()); + } navigator.run(); if (++packetUpdateCount > 30) { if (!getNavigator().isNavigating()) { diff --git a/src/main/java/net/citizensnpcs/util/Messages.java b/src/main/java/net/citizensnpcs/util/Messages.java index e2a677dd5..4943f669c 100644 --- a/src/main/java/net/citizensnpcs/util/Messages.java +++ b/src/main/java/net/citizensnpcs/util/Messages.java @@ -184,6 +184,8 @@ public class Messages { public static final String SPAWN_NUMERIC_ID_ONLY = "citizens.commands.npc.spawn.numeric-id-only"; public static final String SPEED_MODIFIER_ABOVE_LIMIT = "citizens.commands.npc.speed.modifier-above-limit"; public static final String SPEED_MODIFIER_SET = "citizens.commands.npc.speed.set"; + public static final String SWIMMING_SET = "citizens.commands.npc.swim.set"; + public static final String SWIMMING_UNSET = "citizens.commands.npc.swim.unset"; public static final String TARGETABLE_SET = "citizens.commands.npc.targetable.set"; public static final String TARGETABLE_UNSET = "citizens.commands.npc.targetable.unset"; public static final String TELEPORT_NPC_LOCATION_NOT_FOUND = "citizens.commands.npc.tp.location-not-found"; diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 63e6720bf..3552a2700 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -96,6 +96,8 @@ citizens.commands.npc.spawn.numeric-id-only=Only numeric IDs can be used for /np citizens.commands.npc.spawn.spawned=You spawned [[{0}]]. citizens.commands.npc.speed.modifier-above-limit=Speed is above the limit. citizens.commands.npc.speed.set=NPC speed modifier set to [[{0}]]. +citizens.commands.npc.swim.set=[[{0}]] will now swim in water. +citizens.commands.npc.swim.unset=[[{0}]] will no longer swim in water. citizens.commands.npc.targetable.set=[[{0}]] can now be targeted by mobs. citizens.commands.npc.targetable.unset=[[{0}]] can no longer be targeted by mobs. citizens.commands.npc.tp.teleported=You teleported to [[{0}]].