Add /npc polarbear -r and restore target and goal selectors

This commit is contained in:
fullwall 2020-12-17 13:13:23 +08:00
parent 040930bcde
commit fe7f6e373f
22 changed files with 323 additions and 35 deletions

View File

@ -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;
}
}

View File

@ -38,7 +38,7 @@ public class Anchor {
if (object.getClass() != getClass()) if (object.getClass() != getClass())
return false; return false;
Anchor op = (Anchor) object; final Anchor op = (Anchor) object;
return new EqualsBuilder().append(name, op.name).isEquals(); return new EqualsBuilder().append(name, op.name).isEquals();
} }
@ -77,10 +77,10 @@ public class Anchor {
*/ */
public boolean load() { public boolean load() {
try { try {
String[] parts = getUnloadedValue(); final String[] parts = getUnloadedValue();
this.location = new Location(Bukkit.getWorld(parts[0]), Double.valueOf(parts[1]), Double.valueOf(parts[2]), this.location = new Location(Bukkit.getWorld(parts[0]), Double.valueOf(parts[1]), Double.valueOf(parts[2]),
Double.valueOf(parts[3])); Double.valueOf(parts[3]));
} catch (Exception e) { } catch (final Exception e) {
// Still not able to be loaded // Still not able to be loaded
} }
return location != null; return location != null;
@ -95,7 +95,7 @@ public class Anchor {
@Override @Override
public String toString() { public String toString() {
String[] parts = getUnloadedValue(); final String[] parts = getUnloadedValue();
return "Anchor{Name='" + name + "';World='" + parts[0] + "';Location='" + parts[1] + ',' + parts[2] + ',' return "Anchor{Name='" + name + "';World='" + parts[0] + "';Location='" + parts[1] + ',' + parts[2] + ','
+ parts[3] + "';}"; + parts[3] + "';}";
} }

View File

@ -188,6 +188,8 @@ public class Messages {
public static final String LEASHABLE_STOPPED = "citizens.commands.npc.leashable.stopped"; 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_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_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_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_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"; 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 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 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 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_ADDED = "citizens.commands.npc.pose.added";
public static final String POSE_ALREADY_EXISTS = "citizens.commands.npc.pose.already-exists"; public static final String POSE_ALREADY_EXISTS = "citizens.commands.npc.pose.already-exists";
public static final String POSE_MISSING = "citizens.commands.npc.pose.missing"; 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_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 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 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_PROVIDER_SET = "citizens.waypoints.set-provider";
public static final String WAYPOINT_TELEPORTING_DISABLED = "citizens.commands.waypoints.disableteleporting.disabled"; 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"; public static final String WAYPOINT_TRIGGER_ADD_PROMPT = "citizens.editors.waypoints.triggers.add.prompt";

View File

@ -428,6 +428,10 @@ public class NMS {
BRIDGE.setPeekShulker(entity, peek); BRIDGE.setPeekShulker(entity, peek);
} }
public static void setPolarBearRearing(Entity entity, boolean rearing) {
BRIDGE.setPolarBearRearing(entity, rearing);
}
public static void setProfile(SkullMeta meta, GameProfile profile) { public static void setProfile(SkullMeta meta, GameProfile profile) {
BRIDGE.setProfile(meta, profile); BRIDGE.setProfile(meta, profile);
} }

View File

@ -149,6 +149,8 @@ public interface NMSBridge {
public void setPeekShulker(Entity entity, int peek); public void setPeekShulker(Entity entity, int peek);
public void setPolarBearRearing(Entity entity, boolean rearing);
public void setProfile(SkullMeta meta, GameProfile profile); public void setProfile(SkullMeta meta, GameProfile profile);
public void setShouldJump(Entity entity); public void setShouldJump(Entity entity);

View File

@ -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.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.added=Added [[{0}]] to the player list.
citizens.commands.npc.playerlist.removed=Removed [[{0}]] from 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.added=Pose added.
citizens.commands.npc.pose.already-exists=The pose [[{0}]] already exists. citizens.commands.npc.pose.already-exists=The pose [[{0}]] already exists.
citizens.commands.npc.pose.invalid-name=Invalid pose name. citizens.commands.npc.pose.invalid-name=Invalid pose name.

View File

@ -20,13 +20,13 @@ import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.util.Colorizer; import net.citizensnpcs.api.util.Colorizer;
import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util; import net.citizensnpcs.util.Util;
public class Commands { public class Commands {
@Command( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]", 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "shulker (--peek [peek] --color [color])", usage = "shulker (--peek [peek] --color [color])",

View File

@ -145,6 +145,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; 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(BossBarTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class));
commands.register(Commands.class); commands.register(Commands.class);
} }
@ -979,6 +981,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).p(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {

View File

@ -22,6 +22,7 @@ import net.citizensnpcs.api.util.Colorizer;
import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "shulker (--peek [peek] --color [color])", usage = "shulker (--peek [peek] --color [color])",

View File

@ -160,6 +160,7 @@ import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; 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(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(LlamaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(LlamaTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class));
manager.register(Commands.class); manager.register(Commands.class);
} }
@ -1036,6 +1038,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).p(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {

View File

@ -24,6 +24,7 @@ import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "shulker (--peek [peek] --color [color])", usage = "shulker (--peek [peek] --color [color])",

View File

@ -163,6 +163,7 @@ import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.trait.versioned.BossBarTrait; import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; import net.citizensnpcs.trait.versioned.SnowmanTrait;
import net.citizensnpcs.util.Messages; 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(ParrotTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PolarBearTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
manager.register(Commands.class); manager.register(Commands.class);
} }
@ -1044,6 +1046,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).p(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {

View File

@ -26,6 +26,7 @@ import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "pufferfish (--state state)", 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "tfish (--body color) (--pattern pattern) (--patterncolor color)", usage = "tfish (--body color) (--pattern pattern) (--patterncolor color)",
@ -250,27 +299,4 @@ public class Commands {
throw new CommandUsageException(); 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();
}
}
} }

View File

@ -175,6 +175,7 @@ import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait; import net.citizensnpcs.trait.versioned.LlamaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.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(PufferFishTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(TropicalFishTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(TropicalFishTrait.class));
manager.register(Commands.class); manager.register(Commands.class);
@ -1080,6 +1082,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).s(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {

View File

@ -38,6 +38,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "pufferfish (--state state)", usage = "pufferfish (--state state)",

View File

@ -188,6 +188,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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(ParrotTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.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(PufferFishTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
@ -1133,6 +1135,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).r(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {

View File

@ -39,6 +39,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "pufferfish (--state state)", usage = "pufferfish (--state state)",

View File

@ -190,6 +190,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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.EntityMinecartAbstract;
import net.minecraft.server.v1_15_R1.EntityPanda; import net.minecraft.server.v1_15_R1.EntityPanda;
import net.minecraft.server.v1_15_R1.EntityPlayer; 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.EntityPose;
import net.minecraft.server.v1_15_R1.EntityPufferFish; import net.minecraft.server.v1_15_R1.EntityPufferFish;
import net.minecraft.server.v1_15_R1.EntityRabbit; 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(ParrotTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.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(PufferFishTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
@ -1144,6 +1147,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a((byte) peek); ((EntityShulker) getHandle(shulker)).a((byte) peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).r(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {
@ -1429,11 +1437,12 @@ public class NMSImpl implements NMSBridge {
public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) {
if (GOAL_SET_FIELD == null || goalSelectors == null) if (GOAL_SET_FIELD == null || goalSelectors == null)
return; return;
int i = 0;
for (PathfinderGoalSelector selector : goalSelectors) { for (PathfinderGoalSelector selector : goalSelectors) {
try { try {
Collection<?> list = (Collection<?>) GOAL_SET_FIELD.invoke(selector); Collection<?> list = (Collection<?>) GOAL_SET_FIELD.invoke(selector);
if (!list.isEmpty()) { if (!list.isEmpty()) {
npc.data().set("goal-selector", Lists.newArrayList(list)); npc.data().set("selector" + i, Lists.newArrayList(list));
} }
list.clear(); list.clear();
} catch (Exception e) { } catch (Exception e) {
@ -1441,6 +1450,7 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) { } catch (Throwable e) {
Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); 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) { public static void restoreGoals(NPC npc, PathfinderGoalSelector... goalSelectors) {
if (GOAL_SET_FIELD == null || goalSelectors == null) if (GOAL_SET_FIELD == null || goalSelectors == null)
return; return;
int i = 0;
for (PathfinderGoalSelector selector : goalSelectors) { for (PathfinderGoalSelector selector : goalSelectors) {
try { try {
Collection<Object> list = (Collection<Object>) GOAL_SET_FIELD.invoke(selector); Collection<Object> list = (Collection<Object>) GOAL_SET_FIELD.invoke(selector);
list.clear(); list.clear();
Collection<Object> old = npc.data().get("goal-selector"); Collection<Object> old = npc.data().get("selector" + i);
if (old != null) { if (old != null) {
list.addAll(old); list.addAll(old);
} }
@ -1730,6 +1741,7 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) { } catch (Throwable e) {
Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage()); Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage());
} }
i++;
} }
} }

View File

@ -1,7 +1,6 @@
package net.citizensnpcs.nms.v1_16_R3.entity; package net.citizensnpcs.nms.v1_16_R3.entity;
import org.bukkit.Bukkit; 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.CraftServer;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPolarBear; 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.DataWatcherObject;
import net.minecraft.server.v1_16_R3.Entity; import net.minecraft.server.v1_16_R3.Entity;
import net.minecraft.server.v1_16_R3.EntityBoat; 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.EntityPolarBear;
import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.EntityTypes;
import net.minecraft.server.v1_16_R3.NBTTagCompound; import net.minecraft.server.v1_16_R3.NBTTagCompound;

View File

@ -39,6 +39,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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( @Command(
aliases = { "npc" }, aliases = { "npc" },
usage = "pufferfish (--state state)", usage = "pufferfish (--state state)",

View File

@ -195,6 +195,7 @@ import net.citizensnpcs.trait.versioned.MushroomCowTrait;
import net.citizensnpcs.trait.versioned.PandaTrait; import net.citizensnpcs.trait.versioned.PandaTrait;
import net.citizensnpcs.trait.versioned.ParrotTrait; import net.citizensnpcs.trait.versioned.ParrotTrait;
import net.citizensnpcs.trait.versioned.PhantomTrait; import net.citizensnpcs.trait.versioned.PhantomTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
import net.citizensnpcs.trait.versioned.PufferFishTrait; import net.citizensnpcs.trait.versioned.PufferFishTrait;
import net.citizensnpcs.trait.versioned.ShulkerTrait; import net.citizensnpcs.trait.versioned.ShulkerTrait;
import net.citizensnpcs.trait.versioned.SnowmanTrait; 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.EntityMinecartAbstract;
import net.minecraft.server.v1_16_R3.EntityPanda; import net.minecraft.server.v1_16_R3.EntityPanda;
import net.minecraft.server.v1_16_R3.EntityPlayer; 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.EntityPose;
import net.minecraft.server.v1_16_R3.EntityPufferFish; import net.minecraft.server.v1_16_R3.EntityPufferFish;
import net.minecraft.server.v1_16_R3.EntityRabbit; 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(ParrotTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PandaTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(PhantomTrait.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(PufferFishTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class)); CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(SnowmanTrait.class));
@ -1168,6 +1171,11 @@ public class NMSImpl implements NMSBridge {
((EntityShulker) getHandle(shulker)).a(peek); ((EntityShulker) getHandle(shulker)).a(peek);
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
((EntityPolarBear) getHandle(entity)).t(rearing);
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {
@ -1449,11 +1457,12 @@ public class NMSImpl implements NMSBridge {
public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) { public static void clearGoals(NPC npc, PathfinderGoalSelector... goalSelectors) {
if (GOAL_SET_FIELD == null || goalSelectors == null) if (GOAL_SET_FIELD == null || goalSelectors == null)
return; return;
int i = 0;
for (PathfinderGoalSelector selector : goalSelectors) { for (PathfinderGoalSelector selector : goalSelectors) {
try { try {
Collection<?> list = (Collection<?>) GOAL_SET_FIELD.invoke(selector); Collection<?> list = (Collection<?>) GOAL_SET_FIELD.invoke(selector);
if (!list.isEmpty()) { if (!list.isEmpty()) {
npc.data().set("goal-selector", Lists.newArrayList(list)); npc.data().set("selector" + i, Lists.newArrayList(list));
} }
list.clear(); list.clear();
} catch (Exception e) { } catch (Exception e) {
@ -1461,6 +1470,7 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) { } catch (Throwable e) {
Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); 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) { public static void restoreGoals(NPC npc, PathfinderGoalSelector... goalSelectors) {
if (GOAL_SET_FIELD == null || goalSelectors == null) if (GOAL_SET_FIELD == null || goalSelectors == null)
return; return;
int i = 0;
for (PathfinderGoalSelector selector : goalSelectors) { for (PathfinderGoalSelector selector : goalSelectors) {
try { try {
Collection<Object> list = (Collection<Object>) GOAL_SET_FIELD.invoke(selector); Collection<Object> list = (Collection<Object>) GOAL_SET_FIELD.invoke(selector);
list.clear(); list.clear();
Collection<Object> old = npc.data().get("goal-selector"); Collection<Object> old = npc.data().get("selector" + i);
if (old != null) { if (old != null) {
list.addAll(old); list.addAll(old);
} }
@ -1695,6 +1706,7 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) { } catch (Throwable e) {
Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage()); Messaging.logTr(Messages.ERROR_RESTORING_GOALS, e.getLocalizedMessage());
} }
i++;
} }
} }

View File

@ -905,6 +905,11 @@ public class NMSImpl implements NMSBridge {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override
public void setPolarBearRearing(org.bukkit.entity.Entity entity, boolean rearing) {
throw new UnsupportedOperationException();
}
@Override @Override
public void setProfile(SkullMeta meta, GameProfile profile) { public void setProfile(SkullMeta meta, GameProfile profile) {
if (SKULL_PROFILE_FIELD == null) { if (SKULL_PROFILE_FIELD == null) {