diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index be36e334d..0699a323c 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -112,6 +112,7 @@ import net.citizensnpcs.trait.Controllable; import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.trait.HologramTrait; import net.citizensnpcs.trait.ShopTrait; +import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.ChunkCoord; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.NMS; @@ -250,7 +251,10 @@ public class EventListen implements Listener { if (npc == null) return; if (npc.getEntity() instanceof Snowman) { - event.setCancelled(true); + boolean formSnow = npc.hasTrait(SnowmanTrait.class) + ? npc.getTraitNullable(SnowmanTrait.class).shouldFormSnow() + : npc.useMinecraftAI(); + event.setCancelled(!formSnow); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/versioned/SnowmanTrait.java b/main/src/main/java/net/citizensnpcs/trait/versioned/SnowmanTrait.java index 627d42dc4..7b47aca74 100644 --- a/main/src/main/java/net/citizensnpcs/trait/versioned/SnowmanTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/versioned/SnowmanTrait.java @@ -20,6 +20,8 @@ import net.citizensnpcs.util.Messages; public class SnowmanTrait extends Trait { @Persist("derp") private boolean derp; + @Persist + private boolean formSnow; public SnowmanTrait() { super("snowmantrait"); @@ -40,18 +42,26 @@ public class SnowmanTrait extends Trait { this.derp = derp; } + public void setFormSnow(boolean snow) { + formSnow = snow; + } + + public boolean shouldFormSnow() { + return formSnow; + } + public boolean toggleDerp() { return derp = !derp; } @Command( aliases = { "npc" }, - usage = "snowman (-d[erp])", + usage = "snowman (-d[erp]) (-f[orm snow])", desc = "Sets snowman modifiers.", modifiers = { "snowman" }, min = 1, max = 1, - flags = "d", + flags = "df", permission = "citizens.npc.snowman") @Requirements(selected = true, ownership = true, types = { EntityType.SNOWMAN }) public static void snowman(CommandContext args, CommandSender sender, NPC npc) throws CommandException { @@ -62,6 +72,13 @@ public class SnowmanTrait extends Trait { Messaging.sendTr(sender, isDerp ? Messages.SNOWMAN_DERP_SET : Messages.SNOWMAN_DERP_STOPPED, npc.getName()); hasArg = true; } + if (args.hasFlag('f')) { + trait.setFormSnow(!trait.shouldFormSnow()); + Messaging.sendTr(sender, + trait.shouldFormSnow() ? Messages.SNOWMAN_FORM_SNOW_SET : Messages.SNOWMAN_FORM_SNOW_STOPPED, + npc.getName()); + hasArg = true; + } if (!hasArg) throw new CommandUsageException(); } diff --git a/main/src/main/resources/en.json b/main/src/main/resources/en.json index 2e5065275..91340d480 100644 --- a/main/src/main/resources/en.json +++ b/main/src/main/resources/en.json @@ -296,6 +296,8 @@ "citizens.commands.npc.sniffer.state-set" : "[[{0}]]''s state set to [[{1}]].", "citizens.commands.npc.snowman.derp-set" : "[[{0}]] is now in derp mode.", "citizens.commands.npc.snowman.derp-stopped" : "[[{0}]] is no longer in derp mode.", + "citizens.commands.npc.snowman.form-snow-set": "[[{0}]] will now form snow when walking.", + "citizens.commands.npc.snowman.form-snow-stopped": "[[{0}]] will no longer form snow when walking.", "citizens.commands.npc.sound.info" : "[[{0}]]''s sounds are: ambient - [[{1}]] hurt - [[{2}]] and death - [[{3}]].

Valid sounds are {4}.", "citizens.commands.npc.sound.invalid-sound" : "Invalid sound.", "citizens.commands.npc.sound.set" : "[[{0}]]''s sounds are now: ambient - [[{1}]] hurt - [[{2}]] and death - [[{3}]].",