diff --git a/main/src/main/java/net/citizensnpcs/trait/versioned/PolarBearTrait.java b/main/src/main/java/net/citizensnpcs/trait/versioned/PolarBearTrait.java new file mode 100644 index 00000000..4b1076e3 --- /dev/null +++ b/main/src/main/java/net/citizensnpcs/trait/versioned/PolarBearTrait.java @@ -0,0 +1,33 @@ +package net.citizensnpcs.trait.versioned; + +import org.bukkit.entity.PolarBear; + +import net.citizensnpcs.api.persistence.Persist; +import net.citizensnpcs.api.trait.Trait; +import net.citizensnpcs.api.trait.TraitName; +import net.citizensnpcs.util.NMS; + +@TraitName("polarbeartrait") +public class PolarBearTrait extends Trait { + @Persist + private boolean rearing; + + public PolarBearTrait() { + super("polarbeartrait"); + } + + public boolean isRearing() { + return rearing; + } + + @Override + public void run() { + if (npc.isSpawned() && npc.getEntity() instanceof PolarBear) { + NMS.setPolarBearRearing(npc.getEntity(), rearing); + } + } + + public void setRearing(boolean rearing) { + this.rearing = rearing; + } +} diff --git a/main/src/main/java/net/citizensnpcs/util/Anchor.java b/main/src/main/java/net/citizensnpcs/util/Anchor.java index fbac479f..6b9a86ed 100644 --- a/main/src/main/java/net/citizensnpcs/util/Anchor.java +++ b/main/src/main/java/net/citizensnpcs/util/Anchor.java @@ -38,7 +38,7 @@ public class Anchor { if (object.getClass() != getClass()) return false; - Anchor op = (Anchor) object; + final Anchor op = (Anchor) object; return new EqualsBuilder().append(name, op.name).isEquals(); } @@ -77,10 +77,10 @@ public class Anchor { */ public boolean load() { try { - String[] parts = getUnloadedValue(); + final String[] parts = getUnloadedValue(); this.location = new Location(Bukkit.getWorld(parts[0]), Double.valueOf(parts[1]), Double.valueOf(parts[2]), Double.valueOf(parts[3])); - } catch (Exception e) { + } catch (final Exception e) { // Still not able to be loaded } return location != null; @@ -95,7 +95,7 @@ public class Anchor { @Override public String toString() { - String[] parts = getUnloadedValue(); + final String[] parts = getUnloadedValue(); return "Anchor{Name='" + name + "';World='" + parts[0] + "';Location='" + parts[1] + ',' + parts[2] + ',' + parts[3] + "';}"; } diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index 0ad10483..a6bba9c1 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -188,6 +188,8 @@ public class Messages { public static final String LEASHABLE_STOPPED = "citizens.commands.npc.leashable.stopped"; public static final String LINEAR_WAYPOINT_EDITOR_ADDED_WAYPOINT = "citizens.editors.waypoints.linear.added-waypoint"; public static final String LINEAR_WAYPOINT_EDITOR_BEGIN = "citizens.editors.waypoints.linear.begin"; + public static final String LINEAR_WAYPOINT_EDITOR_CYCLE_SET = "citizens.editors.waypoints.linear.cycle-set"; + public static final String LINEAR_WAYPOINT_EDITOR_CYCLE_UNSET = "citizens.editors.waypoints.linear.cycle-unset"; public static final String LINEAR_WAYPOINT_EDITOR_END = "citizens.editors.waypoints.linear.end"; public static final String LINEAR_WAYPOINT_EDITOR_NOT_SHOWING_MARKERS = "citizens.editors.waypoints.linear.not-showing-markers"; public static final String LINEAR_WAYPOINT_EDITOR_RANGE_EXCEEDED = "citizens.editors.waypoints.linear.range-exceeded"; @@ -268,6 +270,8 @@ public class Messages { public static final String PATHFINDING_RANGE_SET = "citizens.commands.npc.pathfindingrange.set"; public static final String PHANTOM_STATE_SET = "citizens.commands.npc.phantom.phantom-set"; public static final String PLAYER_NOT_FOUND_FOR_SPAWN = "citizens.commands.npc.create.no-player-for-spawn"; + public static final String POLAR_BEAR_REARING = "citizens.commands.npc.polarbear.rearing-set"; + public static final String POLAR_BEAR_STOPPED_REARING = "citizens.commands.npc.polarbear.rearing-unset"; public static final String POSE_ADDED = "citizens.commands.npc.pose.added"; public static final String POSE_ALREADY_EXISTS = "citizens.commands.npc.pose.already-exists"; public static final String POSE_MISSING = "citizens.commands.npc.pose.missing"; @@ -381,8 +385,6 @@ public class Messages { public static final String WANDER_WAYPOINTS_REGION_EDITING_START = "citizens.editors.waypoints.wander.editing-regions"; public static final String WANDER_WAYPOINTS_REMOVED_REGION = "citizens.editors.waypoints.wander.removed-region"; public static final String WAYPOINT_ADDED = "citizens.commands.waypoints.add.waypoint-added"; - public static final String LINEAR_WAYPOINT_EDITOR_CYCLE_SET = "citizens.editors.waypoints.linear.cycle-set"; - public static final String LINEAR_WAYPOINT_EDITOR_CYCLE_UNSET = "citizens.editors.waypoints.linear.cycle-unset"; public static final String WAYPOINT_PROVIDER_SET = "citizens.waypoints.set-provider"; public static final String WAYPOINT_TELEPORTING_DISABLED = "citizens.commands.waypoints.disableteleporting.disabled"; public static final String WAYPOINT_TRIGGER_ADD_PROMPT = "citizens.editors.waypoints.triggers.add.prompt"; diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 296c1112..3f64e2cf 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -428,6 +428,10 @@ public class NMS { BRIDGE.setPeekShulker(entity, peek); } + public static void setPolarBearRearing(Entity entity, boolean rearing) { + BRIDGE.setPolarBearRearing(entity, rearing); + } + public static void setProfile(SkullMeta meta, GameProfile profile) { BRIDGE.setProfile(meta, profile); } diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index f39c65d7..781c8e63 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -149,6 +149,8 @@ public interface NMSBridge { public void setPeekShulker(Entity entity, int peek); + public void setPolarBearRearing(Entity entity, boolean rearing); + public void setProfile(SkullMeta meta, GameProfile profile); public void setShouldJump(Entity entity); diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties index cd9793c3..0ae6376f 100644 --- a/main/src/main/resources/messages_en.properties +++ b/main/src/main/resources/messages_en.properties @@ -161,6 +161,8 @@ citizens.commands.npc.pathopt.attack-range-set=[[{0}]]''s attack range set to [[ citizens.commands.npc.pathopt.use-new-finder=[[{0}]]''s use new finder set to [[{1}]]. citizens.commands.npc.playerlist.added=Added [[{0}]] to the player list. citizens.commands.npc.playerlist.removed=Removed [[{0}]] from the player list. +citizens.commands.npc.polarbear.rearing-set=[[{0}]] is now rearing. +citizens.commands.npc.polarbear.rearing-unset=[[{0}]] is no longer rearing. citizens.commands.npc.pose.added=Pose added. citizens.commands.npc.pose.already-exists=The pose [[{0}]] already exists. citizens.commands.npc.pose.invalid-name=Invalid pose name. diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/trait/Commands.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/trait/Commands.java index 1d08e005..7ec0f4dc 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/trait/Commands.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/trait/Commands.java @@ -20,13 +20,13 @@ import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.util.Colorizer; import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.trait.versioned.BossBarTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Util; public class Commands { - @Command( aliases = { "npc" }, usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]", @@ -59,6 +59,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "shulker (--peek [peek] --color [color])", diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index 5d127e14..37331423 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -145,6 +145,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.trait.versioned.BossBarTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; @@ -595,6 +596,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); commands.register(Commands.class); } @@ -979,6 +981,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).p(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/trait/Commands.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/trait/Commands.java index 1935c196..7f96534e 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/trait/Commands.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/trait/Commands.java @@ -22,6 +22,7 @@ import net.citizensnpcs.api.util.Colorizer; import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; @@ -91,6 +92,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "shulker (--peek [peek] --color [color])", diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index fafd2674..b47061b8 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -160,6 +160,7 @@ import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; @@ -634,6 +635,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(LlamaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); manager.register(Commands.class); } @@ -1036,6 +1038,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).p(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/trait/Commands.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/trait/Commands.java index 675fa43d..bf946e05 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/trait/Commands.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/trait/Commands.java @@ -24,6 +24,7 @@ import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; @@ -120,6 +121,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "shulker (--peek [peek] --color [color])", diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index 6d18d9ca..a25a6f47 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -163,6 +163,7 @@ import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.util.Messages; @@ -638,6 +639,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParrotTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); manager.register(Commands.class); } @@ -1044,6 +1046,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).p(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/trait/Commands.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/trait/Commands.java index 8333e9d5..d1cb6a2d 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/trait/Commands.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/trait/Commands.java @@ -26,6 +26,7 @@ import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -150,6 +151,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "pufferfish (--state state)", @@ -205,6 +231,29 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "snowman (-d[erp])", + desc = "Sets snowman modifiers.", + modifiers = { "snowman" }, + min = 1, + max = 1, + flags = "d", + permission = "citizens.npc.snowman") + @Requirements(selected = true, ownership = true, types = { EntityType.SNOWMAN }) + public void snowman(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); + boolean hasArg = false; + if (args.hasFlag('d')) { + boolean isDerp = trait.toggleDerp(); + Messaging.sendTr(sender, isDerp ? Messages.SNOWMAN_DERP_SET : Messages.SNOWMAN_DERP_STOPPED, npc.getName()); + hasArg = true; + } + if (!hasArg) { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "tfish (--body color) (--pattern pattern) (--patterncolor color)", @@ -250,27 +299,4 @@ public class Commands { throw new CommandUsageException(); } } - - @Command( - aliases = { "npc" }, - usage = "snowman (-d[erp])", - desc = "Sets snowman modifiers.", - modifiers = { "snowman" }, - min = 1, - max = 1, - flags = "d", - permission = "citizens.npc.snowman") - @Requirements(selected = true, ownership = true, types = { EntityType.SNOWMAN }) - public void snowman(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); - boolean hasArg = false; - if (args.hasFlag('d')) { - boolean isDerp = trait.toggleDerp(); - Messaging.sendTr(sender, isDerp ? Messages.SNOWMAN_DERP_SET : Messages.SNOWMAN_DERP_STOPPED, npc.getName()); - hasArg = true; - } - if (!hasArg) { - throw new CommandUsageException(); - } - } } diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index 2800210a..84c9cac1 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -175,6 +175,7 @@ import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -663,6 +664,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PufferFishTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(TropicalFishTrait.class)); manager.register(Commands.class); @@ -1080,6 +1082,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).s(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java index 9b6233a4..cbd555eb 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java @@ -38,6 +38,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -320,6 +321,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "pufferfish (--state state)", diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index bdb36b45..a16cb913 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -188,6 +188,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -714,6 +715,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParrotTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PufferFishTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); @@ -1133,6 +1135,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).r(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java index b5afb3f7..fff83ef1 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java @@ -39,6 +39,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -364,6 +365,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "pufferfish (--state state)", diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 6c82cc30..74389eb3 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -190,6 +190,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -232,6 +233,7 @@ import net.minecraft.server.v1_15_R1.EntityLiving; import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntityPanda; import net.minecraft.server.v1_15_R1.EntityPlayer; +import net.minecraft.server.v1_15_R1.EntityPolarBear; import net.minecraft.server.v1_15_R1.EntityPose; import net.minecraft.server.v1_15_R1.EntityPufferFish; import net.minecraft.server.v1_15_R1.EntityRabbit; @@ -723,6 +725,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParrotTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PufferFishTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); @@ -1144,6 +1147,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a((byte) peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).r(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { @@ -1429,11 +1437,12 @@ public class NMSImpl implements NMSBridge { public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { if (GOAL_SET_FIELD == null || goalSelectors == null) return; + int i = 0; for (PathfinderGoalSelector selector : goalSelectors) { try { Collection list = (Collection) GOAL_SET_FIELD.invoke(selector); if (!list.isEmpty()) { - npc.data().set("goal-selector", Lists.newArrayList(list)); + npc.data().set("selector" + i, Lists.newArrayList(list)); } list.clear(); } catch (Exception e) { @@ -1441,6 +1450,7 @@ public class NMSImpl implements NMSBridge { } catch (Throwable e) { Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); } + i++; } } @@ -1717,11 +1727,12 @@ public class NMSImpl implements NMSBridge { public static void restoreGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { if (GOAL_SET_FIELD == null || goalSelectors == null) return; + int i = 0; for (PathfinderGoalSelector selector : goalSelectors) { try { Collection list = (Collection) GOAL_SET_FIELD.invoke(selector); list.clear(); - Collection old = npc.data().get("goal-selector"); + Collection old = npc.data().get("selector" + i); if (old != null) { list.addAll(old); } @@ -1730,6 +1741,7 @@ public class NMSImpl implements NMSBridge { } catch (Throwable e) { Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage()); } + i++; } } diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PolarBearController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PolarBearController.java index b691eb7f..9cd7a7f1 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PolarBearController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PolarBearController.java @@ -1,7 +1,6 @@ package net.citizensnpcs.nms.v1_16_R3.entity; import org.bukkit.Bukkit; -import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import org.bukkit.craftbukkit.v1_16_R3.CraftServer; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPolarBear; @@ -19,6 +18,7 @@ import net.minecraft.server.v1_16_R3.DamageSource; import net.minecraft.server.v1_16_R3.DataWatcherObject; import net.minecraft.server.v1_16_R3.Entity; import net.minecraft.server.v1_16_R3.EntityBoat; +import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import net.minecraft.server.v1_16_R3.EntityPolarBear; import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.NBTTagCompound; diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java index 31986320..1074cd9b 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java @@ -39,6 +39,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -364,6 +365,31 @@ public class Commands { } } + @Command( + aliases = { "npc" }, + usage = "polarbear (-r)", + desc = "Sets polarbear modifiers.", + modifiers = { "polarbear" }, + min = 1, + max = 1, + flags = "r", + permission = "citizens.npc.polarbear") + @Requirements(selected = true, ownership = true, types = { EntityType.POLAR_BEAR }) + public void polarbear(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + PolarBearTrait trait = npc.getOrAddTrait(PolarBearTrait.class); + String output = ""; + if (args.hasFlag('r')) { + trait.setRearing(!trait.isRearing()); + output += Messaging + .tr(trait.isRearing() ? Messages.POLAR_BEAR_REARING : Messages.POLAR_BEAR_STOPPED_REARING); + } + if (!output.isEmpty()) { + Messaging.send(sender, output); + } else { + throw new CommandUsageException(); + } + } + @Command( aliases = { "npc" }, usage = "pufferfish (--state state)", diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index ce82d850..ddbdd74c 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -195,6 +195,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait; import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.PhantomTrait; +import net.citizensnpcs.trait.versioned.PolarBearTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait; @@ -237,6 +238,7 @@ import net.minecraft.server.v1_16_R3.EntityLiving; import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import net.minecraft.server.v1_16_R3.EntityPanda; import net.minecraft.server.v1_16_R3.EntityPlayer; +import net.minecraft.server.v1_16_R3.EntityPolarBear; import net.minecraft.server.v1_16_R3.EntityPose; import net.minecraft.server.v1_16_R3.EntityPufferFish; import net.minecraft.server.v1_16_R3.EntityRabbit; @@ -730,6 +732,7 @@ public class NMSImpl implements NMSBridge { CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParrotTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.class)); + CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PufferFishTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); @@ -1168,6 +1171,11 @@ public class NMSImpl implements NMSBridge { ((EntityShulker) getHandle(shulker)).a(peek); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + ((EntityPolarBear) getHandle(entity)).t(rearing); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) { @@ -1449,11 +1457,12 @@ public class NMSImpl implements NMSBridge { public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { if (GOAL_SET_FIELD == null || goalSelectors == null) return; + int i = 0; for (PathfinderGoalSelector selector : goalSelectors) { try { Collection list = (Collection) GOAL_SET_FIELD.invoke(selector); if (!list.isEmpty()) { - npc.data().set("goal-selector", Lists.newArrayList(list)); + npc.data().set("selector" + i, Lists.newArrayList(list)); } list.clear(); } catch (Exception e) { @@ -1461,6 +1470,7 @@ public class NMSImpl implements NMSBridge { } catch (Throwable e) { Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); } + i++; } } @@ -1681,12 +1691,13 @@ public class NMSImpl implements NMSBridge { public static void restoreGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { if (GOAL_SET_FIELD == null || goalSelectors == null) return; + int i = 0; for (PathfinderGoalSelector selector : goalSelectors) { try { Collection list = (Collection) GOAL_SET_FIELD.invoke(selector); list.clear(); - Collection old = npc.data().get("goal-selector"); + Collection old = npc.data().get("selector" + i); if (old != null) { list.addAll(old); } @@ -1695,6 +1706,7 @@ public class NMSImpl implements NMSBridge { } catch (Throwable e) { Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage()); } + i++; } } diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index 4ab7922b..f04365d3 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -905,6 +905,11 @@ public class NMSImpl implements NMSBridge { throw new UnsupportedOperationException(); } + @Override + public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) { + throw new UnsupportedOperationException(); + } + @Override public void setProfile(SkullMeta meta, GameProfile profile) { if (SKULL_PROFILE_FIELD == null) {