diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index 5eadb7f5d..3a10a77cf 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -126,11 +126,11 @@ public class EventListen implements Listener { break; } if (limit < 0) - return; + return; int owned = 0; for (NPC npc : CitizensAPI.getNPCRegistry()) { if (!event.getNPC().equals(npc) && npc.hasTrait(Owner.class) - && npc.getTrait(Owner.class).isOwnedBy(event.getCreator())) { + && npc.getTraitNullable(Owner.class).isOwnedBy(event.getCreator())) { owned++; } } @@ -263,7 +263,7 @@ public class EventListen implements Listener { Player damager = (Player) damageEvent.getDamager(); if (npc.hasTrait(ClickRedirectTrait.class)) { - npc = npc.getTrait(ClickRedirectTrait.class).getRedirectNPC(); + npc = npc.getTraitNullable(ClickRedirectTrait.class).getRedirectNPC(); if (npc == null) return; } @@ -271,7 +271,7 @@ public class EventListen implements Listener { NPCLeftClickEvent leftClickEvent = new NPCLeftClickEvent(npc, damager); Bukkit.getPluginManager().callEvent(leftClickEvent); if (npc.hasTrait(CommandTrait.class)) { - npc.getTrait(CommandTrait.class).dispatch(damager, CommandTrait.Hand.LEFT); + npc.getTraitNullable(CommandTrait.class).dispatch(damager, CommandTrait.Hand.LEFT); } } else if (event instanceof EntityDamageByBlockEvent) { Bukkit.getPluginManager().callEvent(new NPCDamageByBlockEvent(npc, (EntityDamageByBlockEvent) event)); @@ -483,7 +483,7 @@ public class EventListen implements Listener { return; } if (npc.hasTrait(ClickRedirectTrait.class)) { - npc = npc.getTrait(ClickRedirectTrait.class).getRedirectNPC(); + npc = npc.getTraitNullable(ClickRedirectTrait.class).getRedirectNPC(); if (npc == null) return; } @@ -494,7 +494,7 @@ public class EventListen implements Listener { event.setCancelled(true); } if (npc.hasTrait(CommandTrait.class)) { - npc.getTrait(CommandTrait.class).dispatch(player, CommandTrait.Hand.RIGHT); + npc.getTraitNullable(CommandTrait.class).dispatch(player, CommandTrait.Hand.RIGHT); } } @@ -609,7 +609,7 @@ public class EventListen implements Listener { NPCLeftClickEvent leftClickEvent = new NPCLeftClickEvent(npc, damager); Bukkit.getPluginManager().callEvent(leftClickEvent); if (npc.hasTrait(CommandTrait.class)) { - npc.getTrait(CommandTrait.class).dispatch(damager, CommandTrait.Hand.LEFT); + npc.getTraitNullable(CommandTrait.class).dispatch(damager, CommandTrait.Hand.LEFT); } } @@ -629,7 +629,7 @@ public class EventListen implements Listener { return; if ((Util.isHorse(npc.getEntity().getType()) || npc.getEntity().getType() == EntityType.BOAT || npc.getEntity().getType() == EntityType.PIG || npc.getEntity() instanceof Minecart) - && (!npc.hasTrait(Controllable.class) || !npc.getTrait(Controllable.class).isEnabled())) { + && (!npc.hasTrait(Controllable.class) || !npc.getTraitNullable(Controllable.class).isEnabled())) { event.setCancelled(true); } } @@ -706,7 +706,7 @@ public class EventListen implements Listener { } private boolean spawn(NPC npc) { - Location spawn = npc.getTrait(CurrentLocation.class).getLocation(); + Location spawn = npc.getOrAddTrait(CurrentLocation.class).getLocation(); if (spawn == null) { if (Messaging.isDebugging()) { Messaging.debug("Couldn't find a spawn location for despawned NPC id", npc.getId()); diff --git a/main/src/main/java/net/citizensnpcs/commands/EditorCommands.java b/main/src/main/java/net/citizensnpcs/commands/EditorCommands.java index b637185fd..a5c622427 100644 --- a/main/src/main/java/net/citizensnpcs/commands/EditorCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/EditorCommands.java @@ -50,7 +50,7 @@ public class EditorCommands { permission = "citizens.npc.edit.path") @Requirements(selected = true, ownership = true) public void path(CommandContext args, CommandSender player, NPC npc) { - Editor editor = npc.getTrait(Waypoints.class).getEditor(player, args); + Editor editor = npc.getOrAddTrait(Waypoints.class).getEditor(player, args); if (editor == null) return; Editor.enterOrLeave((Player) player, editor); @@ -65,6 +65,6 @@ public class EditorCommands { max = 1, permission = "citizens.npc.edit.text") public void text(CommandContext args, Player player, NPC npc) { - Editor.enterOrLeave(player, npc.getTrait(Text.class).getEditor(player)); + Editor.enterOrLeave(player, npc.getOrAddTrait(Text.class).getEditor(player)); } } diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index deb73af86..ee5620cbf 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -31,8 +31,7 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Ageable; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse.Color; -import org.bukkit.entity.Horse.Style; +import org.bukkit.entity.Horse; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Player; @@ -141,7 +140,7 @@ public class NPCCommands { public void age(CommandContext args, CommandSender sender, NPC npc) throws CommandException { if (!npc.isSpawned() || (!(npc.getEntity() instanceof Ageable) && !(npc.getEntity() instanceof Zombie))) throw new CommandException(Messages.MOBTYPE_CANNOT_BE_AGED, npc.getName()); - Age trait = npc.getTrait(Age.class); + Age trait = npc.getOrAddTrait(Age.class); boolean toggleLock = args.hasFlag('l'); if (toggleLock) { Messaging.sendTr(sender, trait.toggle() ? Messages.AGE_LOCKED : Messages.AGE_UNLOCKED); @@ -182,7 +181,7 @@ public class NPCCommands { max = 3, permission = "citizens.npc.anchor") public void anchor(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - Anchors trait = npc.getTrait(Anchors.class); + Anchors trait = npc.getOrAddTrait(Anchors.class); if (args.hasValueFlag("save")) { if (args.getFlag("save").isEmpty()) throw new CommandException(Messages.INVALID_ANCHOR_NAME); @@ -257,7 +256,7 @@ public class NPCCommands { max = 1) @Requirements(selected = true, ownership = true, types = EntityType.ARMOR_STAND) public void armorstand(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ArmorStandTrait trait = npc.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = npc.getOrAddTrait(ArmorStandTrait.class); if (args.hasValueFlag("visible")) { trait.setVisible(Boolean.valueOf(args.getFlag("visible"))); } @@ -302,7 +301,7 @@ public class NPCCommands { flags = "lrpo", permission = "citizens.npc.command") public void command(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - CommandTrait commands = npc.getTrait(CommandTrait.class); + CommandTrait commands = npc.getOrAddTrait(CommandTrait.class); if (args.argsLength() == 1) { commands.describe(sender); } else if (args.getString(1).equalsIgnoreCase("add")) { @@ -368,7 +367,7 @@ public class NPCCommands { if (!npc.hasTrait(Controllable.class)) { npc.addTrait(new Controllable(false)); } - Controllable trait = npc.getTrait(Controllable.class); + Controllable trait = npc.getOrAddTrait(Controllable.class); boolean enabled = trait.toggle(); if (args.hasFlag('y')) { enabled = trait.setEnabled(true); @@ -402,7 +401,7 @@ public class NPCCommands { Location location = args.getSenderLocation(); location.getChunk().load(); copy.teleport(location, TeleportCause.COMMAND); - copy.getTrait(CurrentLocation.class).setLocation(location); + copy.getOrAddTrait(CurrentLocation.class).setLocation(location); } CommandSenderCreateNPCEvent event = sender instanceof Player @@ -474,9 +473,9 @@ public class NPCCommands { // Initialize necessary traits if (!Setting.SERVER_OWNS_NPCS.asBoolean()) { - npc.getTrait(Owner.class).setOwner(sender); + npc.getOrAddTrait(Owner.class).setOwner(sender); } - npc.getTrait(MobType.class).setType(type); + npc.getOrAddTrait(MobType.class).setType(type); Location spawnLoc = null; if (sender instanceof Player) { @@ -541,7 +540,7 @@ public class NPCCommands { // Set age after entity spawns if (npc.getEntity() instanceof Ageable) { - npc.getTrait(Age.class).setAge(age); + npc.getOrAddTrait(Age.class).setAge(age); } selector.select(sender, npc); Messaging.send(sender, msg + '.'); @@ -563,7 +562,7 @@ public class NPCCommands { if (npc == null) { throw new CommandException(Messages.NO_NPC_WITH_ID_FOUND, args.getString(1)); } - npc.getTrait(Spawned.class).setSpawned(false); + npc.getOrAddTrait(Spawned.class).setSpawned(false); npc.despawn(DespawnReason.REMOVAL); Messaging.sendTr(sender, Messages.NPC_DESPAWNED, npc.getName()); } @@ -590,7 +589,7 @@ public class NPCCommands { permission = "citizens.npc.enderman") public void enderman(CommandContext args, Player sender, NPC npc) throws CommandException { if (args.hasFlag('a')) { - boolean angry = npc.getTrait(EndermanTrait.class).toggleAngry(); + boolean angry = npc.getOrAddTrait(EndermanTrait.class).toggleAngry(); Messaging.sendTr(sender, angry ? Messages.ENDERMAN_ANGRY_SET : Messages.ENDERMAN_ANGRY_UNSET, npc.getName()); } @@ -636,7 +635,7 @@ public class NPCCommands { if (player == null) { throw new CommandException(); } - boolean following = npc.getTrait(FollowTrait.class).toggle(player, protect); + boolean following = npc.getOrAddTrait(FollowTrait.class).toggle(player, protect); Messaging.sendTr(sender, following ? Messages.FOLLOW_SET : Messages.FOLLOW_UNSET, npc.getName(), player.getName()); } @@ -671,7 +670,7 @@ public class NPCCommands { Messaging.sendErrorTr(sender, Messages.GAMEMODE_INVALID, args.getString(1)); return; } - npc.getTrait(GameModeTrait.class).setGameMode(mode); + npc.getOrAddTrait(GameModeTrait.class).setGameMode(mode); Messaging.sendTr(sender, Messages.GAMEMODE_SET, mode.name().toLowerCase()); } @@ -689,7 +688,7 @@ public class NPCCommands { ChatColor chatColor = Util.matchEnum(ChatColor.values(), args.getFlag("color")); if (!(npc.getEntity() instanceof Player)) throw new CommandException(Messages.GLOWING_COLOR_PLAYER_ONLY); - npc.getTrait(ScoreboardTrait.class).setColor(chatColor); + npc.getOrAddTrait(ScoreboardTrait.class).setColor(chatColor); if (!npc.data().has(NPC.GLOWING_METADATA)) { npc.data().setPersistent(NPC.GLOWING_METADATA, true); } @@ -711,7 +710,7 @@ public class NPCCommands { max = 1, permission = "citizens.npc.gravity") public void gravity(CommandContext args, CommandSender sender, NPC npc) { - boolean enabled = npc.getTrait(Gravity.class).toggle(); + boolean enabled = npc.getOrAddTrait(Gravity.class).toggle(); String key = !enabled ? Messages.GRAVITY_ENABLED : Messages.GRAVITY_DISABLED; Messaging.sendTr(sender, key, npc.getName()); } @@ -725,7 +724,7 @@ public class NPCCommands { max = -1, permission = "citizens.npc.hologram") public void hologram(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - HologramTrait trait = npc.getTrait(HologramTrait.class); + HologramTrait trait = npc.getOrAddTrait(HologramTrait.class); if (args.argsLength() == 1) { String output = Messaging.tr(Messages.HOLOGRAM_DESCRIBE_HEADER, npc.getName()); List lines = trait.getLines(); @@ -792,11 +791,11 @@ public class NPCCommands { permission = "citizens.npc.horse") @Requirements(selected = true, ownership = true) public void horse(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - EntityType type = npc.getTrait(MobType.class).getType(); + EntityType type = npc.getOrAddTrait(MobType.class).getType(); if (!Util.isHorse(type)) { throw new CommandException(CommandMessages.REQUIREMENTS_INVALID_MOB_TYPE, Util.prettyEnum(type)); } - HorseModifiers horse = npc.getTrait(HorseModifiers.class); + HorseModifiers horse = npc.getOrAddTrait(HorseModifiers.class); String output = ""; if (args.hasFlag('c')) { horse.setCarryingChest(true); @@ -808,18 +807,18 @@ public class NPCCommands { if (type == EntityType.HORSE && (args.hasValueFlag("color") || args.hasValueFlag("colour"))) { String colorRaw = args.getFlag("color", args.getFlag("colour")); - Color color = Util.matchEnum(Color.values(), colorRaw); + Horse.Color color = Util.matchEnum(Horse.Color.values(), colorRaw); if (color == null) { - String valid = Util.listValuesPretty(Color.values()); + String valid = Util.listValuesPretty(Horse.Color.values()); throw new CommandException(Messages.INVALID_HORSE_COLOR, valid); } horse.setColor(color); output += Messaging.tr(Messages.HORSE_COLOR_SET, Util.prettyEnum(color)); } if (type == EntityType.HORSE && args.hasValueFlag("style")) { - Style style = Util.matchEnum(Style.values(), args.getFlag("style")); + Horse.Style style = Util.matchEnum(Horse.Style.values(), args.getFlag("style")); if (style == null) { - String valid = Util.listValuesPretty(Style.values()); + String valid = Util.listValuesPretty(Horse.Style.values()); throw new CommandException(Messages.INVALID_HORSE_STYLE, valid); } horse.setStyle(style); @@ -854,7 +853,7 @@ public class NPCCommands { max = 1, permission = "citizens.npc.inventory") public void inventory(CommandContext args, CommandSender sender, NPC npc) { - npc.getTrait(Inventory.class).openInventory((Player) sender); + npc.getOrAddTrait(Inventory.class).openInventory((Player) sender); } @Command( @@ -937,7 +936,7 @@ public class NPCCommands { } } else if (args.getValueFlags().size() == 0 && sender instanceof Player) { for (NPC add : source.sorted()) { - if (!npcs.contains(add) && add.getTrait(Owner.class).isOwnedBy(sender)) { + if (!npcs.contains(add) && add.getOrAddTrait(Owner.class).isOwnedBy(sender)) { npcs.add(add); } } @@ -945,7 +944,7 @@ public class NPCCommands { if (args.hasValueFlag("owner")) { String name = args.getFlag("owner"); for (NPC add : source.sorted()) { - if (!npcs.contains(add) && add.getTrait(Owner.class).isOwnedBy(name)) { + if (!npcs.contains(add) && add.getOrAddTrait(Owner.class).isOwnedBy(name)) { npcs.add(add); } } @@ -958,7 +957,7 @@ public class NPCCommands { throw new CommandException(Messages.COMMAND_INVALID_MOBTYPE, type); for (NPC add : source) { - if (!npcs.contains(add) && add.getTrait(MobType.class).getType() == type) + if (!npcs.contains(add) && add.getOrAddTrait(MobType.class).getType() == type) npcs.add(add); } } @@ -990,7 +989,7 @@ public class NPCCommands { boolean toggle = true; if (args.hasAnyValueFlag("randomlook", "rlook")) { boolean enableRandomLook = Boolean.parseBoolean(args.getFlag("randomlook", args.getFlag("rlook"))); - npc.getTrait(LookClose.class).setRandomLook(enableRandomLook); + npc.getOrAddTrait(LookClose.class).setRandomLook(enableRandomLook); Messaging.sendTr(sender, enableRandomLook ? Messages.LOOKCLOSE_RANDOM_SET : Messages.LOOKCLOSE_RANDOM_STOPPED, npc.getName()); @@ -999,7 +998,7 @@ public class NPCCommands { if (args.hasAnyValueFlag("randomlookdelay", "rlookdelay")) { int delay = Integer.parseInt(args.getFlag("randomlookdelay", args.getFlag("rlookdelay"))); delay = Math.max(1, delay); - npc.getTrait(LookClose.class).setRandomLookDelay(delay); + npc.getOrAddTrait(LookClose.class).setRandomLookDelay(delay); Messaging.sendTr(sender, Messages.LOOKCLOSE_RANDOM_DELAY_SET, npc.getName(), delay); toggle = false; } @@ -1010,7 +1009,7 @@ public class NPCCommands { float min = Float.parseFloat(parts[0]), max = Float.parseFloat(parts[1]); if (min > max) throw new IllegalArgumentException(); - npc.getTrait(LookClose.class).setRandomLookPitchRange(min, max); + npc.getOrAddTrait(LookClose.class).setRandomLookPitchRange(min, max); } catch (Exception e) { throw new CommandException(Messaging.tr(Messages.ERROR_SETTING_LOOKCLOSE_RANGE, flag)); } @@ -1024,7 +1023,7 @@ public class NPCCommands { float min = Float.parseFloat(parts[0]), max = Float.parseFloat(parts[1]); if (min > max) throw new IllegalArgumentException(); - npc.getTrait(LookClose.class).setRandomLookYawRange(min, max); + npc.getOrAddTrait(LookClose.class).setRandomLookYawRange(min, max); } catch (Exception e) { throw new CommandException(Messaging.tr(Messages.ERROR_SETTING_LOOKCLOSE_RANGE, flag)); } @@ -1033,7 +1032,7 @@ public class NPCCommands { } if (toggle) { Messaging.sendTr(sender, - npc.getTrait(LookClose.class).toggle() ? Messages.LOOKCLOSE_SET : Messages.LOOKCLOSE_STOPPED, + npc.getOrAddTrait(LookClose.class).toggle() ? Messages.LOOKCLOSE_SET : Messages.LOOKCLOSE_STOPPED, npc.getName()); } } @@ -1138,10 +1137,10 @@ public class NPCCommands { NMS.mount(mount.getEntity(), npc.getEntity()); return; } else if (args.hasFlag('c')) { - npc.getTrait(MountTrait.class).unmount(); + npc.getOrAddTrait(MountTrait.class).unmount(); return; } - boolean enabled = npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled(); + boolean enabled = npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled(); if (!enabled) { Messaging.sendTr(sender, Messages.NPC_NOT_CONTROLLABLE, npc.getName()); return; @@ -1150,7 +1149,7 @@ public class NPCCommands { throw new CommandException(CommandMessages.MUST_BE_INGAME); } Player player = (Player) sender; - boolean success = npc.getTrait(Controllable.class).mount(player); + boolean success = npc.getOrAddTrait(Controllable.class).mount(player); if (!success) { Messaging.sendTr(player, Messages.FAILED_TO_MOUNT_NPC, npc.getName()); } @@ -1165,7 +1164,7 @@ public class NPCCommands { permission = "citizens.npc.moveto") public void moveto(CommandContext args, CommandSender sender, NPC npc) throws CommandException { if (!npc.isSpawned()) { - npc.spawn(npc.getTrait(CurrentLocation.class).getLocation(), SpawnReason.COMMAND); + npc.spawn(npc.getOrAddTrait(CurrentLocation.class).getLocation(), SpawnReason.COMMAND); } if (!npc.isSpawned()) { throw new CommandException("NPC could not be spawned."); @@ -1233,7 +1232,7 @@ public class NPCCommands { public void npc(CommandContext args, CommandSender sender, final NPC npc) { Messaging.send(sender, StringHelper.wrapHeader(npc.getName())); Messaging.send(sender, " ID: " + npc.getId()); - Messaging.send(sender, " Type: " + npc.getTrait(MobType.class).getType()); + Messaging.send(sender, " Type: " + npc.getOrAddTrait(MobType.class).getType()); if (npc.isSpawned()) { Location loc = npc.getEntity().getLocation(); String format = " Spawned at %d, %d, %d in world %s"; @@ -1261,7 +1260,7 @@ public class NPCCommands { permission = "citizens.npc.ocelot") @Requirements(selected = true, ownership = true, types = { EntityType.OCELOT }) public void ocelot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - OcelotModifiers trait = npc.getTrait(OcelotModifiers.class); + OcelotModifiers trait = npc.getOrAddTrait(OcelotModifiers.class); if (args.hasFlag('s')) { trait.setSitting(true); } else if (args.hasFlag('n')) { @@ -1289,7 +1288,7 @@ public class NPCCommands { max = 2, permission = "citizens.npc.owner") public void owner(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - Owner ownerTrait = npc.getTrait(Owner.class); + Owner ownerTrait = npc.getOrAddTrait(Owner.class); if (args.argsLength() == 1) { Messaging.sendTr(sender, Messages.NPC_OWNER, npc.getName(), ownerTrait.getOwner()); return; @@ -1410,7 +1409,7 @@ public class NPCCommands { npc.data().setPersistent("removefromplayerlist", remove); if (npc.isSpawned()) { npc.despawn(DespawnReason.PENDING_RESPAWN); - npc.spawn(npc.getTrait(CurrentLocation.class).getLocation(), SpawnReason.RESPAWN); + npc.spawn(npc.getOrAddTrait(CurrentLocation.class).getLocation(), SpawnReason.RESPAWN); NMS.addOrRemoveFromPlayerList(npc.getEntity(), remove); } Messaging.sendTr(sender, remove ? Messages.REMOVED_FROM_PLAYERLIST : Messages.ADDED_TO_PLAYERLIST, @@ -1427,7 +1426,7 @@ public class NPCCommands { max = 2, permission = "citizens.npc.pose") public void pose(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - Poses trait = npc.getTrait(Poses.class); + Poses trait = npc.getOrAddTrait(Poses.class); if (args.hasValueFlag("save")) { if (args.getFlag("save").isEmpty()) throw new CommandException(Messages.INVALID_POSE_NAME); @@ -1483,7 +1482,7 @@ public class NPCCommands { @Requirements(selected = true, ownership = true, types = { EntityType.CREEPER }) public void power(CommandContext args, CommandSender sender, NPC npc) { Messaging.sendTr(sender, - npc.getTrait(Powered.class).toggle() ? Messages.POWERED_SET : Messages.POWERED_STOPPED); + npc.getOrAddTrait(Powered.class).toggle() ? Messages.POWERED_SET : Messages.POWERED_STOPPED); } @Command( @@ -1496,7 +1495,7 @@ public class NPCCommands { permission = "citizens.npc.profession") @Requirements(selected = true, ownership = true) public void profession(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - EntityType type = npc.getTrait(MobType.class).getType(); + EntityType type = npc.getOrAddTrait(MobType.class).getType(); if (type != EntityType.VILLAGER && !type.name().equals("ZOMBIE_VILLAGER")) { throw new RequirementMissingException(Messaging.tr(CommandMessages.REQUIREMENTS_INVALID_MOB_TYPE, type.name().toLowerCase().replace('_', ' '))); @@ -1507,7 +1506,7 @@ public class NPCCommands { throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), Joiner.on(',').join(Profession.values())); } - npc.getTrait(VillagerProfession.class).setProfession(parsed); + npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); Messaging.sendTr(sender, Messages.PROFESSION_SET, npc.getName(), profession); } @@ -1526,7 +1525,7 @@ public class NPCCommands { } catch (IllegalArgumentException ex) { throw new CommandException(Messages.INVALID_RABBIT_TYPE, Joiner.on(',').join(Rabbit.Type.values())); } - npc.getTrait(RabbitType.class).setType(type); + npc.getOrAddTrait(RabbitType.class).setType(type); Messaging.sendTr(sender, Messages.RABBIT_TYPE_SET, npc.getName(), type.name()); } @@ -1543,7 +1542,7 @@ public class NPCCommands { String owner = args.getFlag("owner"); Collection npcs = Lists.newArrayList(CitizensAPI.getNPCRegistry()); for (NPC o : npcs) { - if (o.getTrait(Owner.class).isOwnedBy(owner)) { + if (o.getOrAddTrait(Owner.class).isOwnedBy(owner)) { o.destroy(sender); } } @@ -1574,7 +1573,8 @@ public class NPCCommands { public void run(NPC npc) throws CommandException { if (npc == null) throw new CommandException(Messages.COMMAND_MUST_HAVE_SELECTED); - if (!(sender instanceof ConsoleCommandSender) && !npc.getTrait(Owner.class).isOwnedBy(sender)) + if (!(sender instanceof ConsoleCommandSender) + && !npc.getOrAddTrait(Owner.class).isOwnedBy(sender)) throw new CommandException(Messages.COMMAND_MUST_BE_OWNER); if (!sender.hasPermission("citizens.npc.remove") && !sender.hasPermission("citizens.admin")) throw new NoPermissionsException(); @@ -1589,7 +1589,7 @@ public class NPCCommands { } if (npc == null) throw new CommandException(Messages.COMMAND_MUST_HAVE_SELECTED); - if (!(sender instanceof ConsoleCommandSender) && !npc.getTrait(Owner.class).isOwnedBy(sender)) + if (!(sender instanceof ConsoleCommandSender) && !npc.getOrAddTrait(Owner.class).isOwnedBy(sender)) throw new CommandException(Messages.COMMAND_MUST_BE_OWNER); if (!sender.hasPermission("citizens.npc.remove") && !sender.hasPermission("citizens.admin")) throw new NoPermissionsException(); @@ -1607,7 +1607,7 @@ public class NPCCommands { public void rename(CommandContext args, CommandSender sender, NPC npc) { String oldName = npc.getName(); String newName = Colorizer.parseColors(args.getJoinedStrings(1)); - int nameLength = SpigotUtil.getMaxNameLength(npc.getTrait(MobType.class).getType()); + int nameLength = SpigotUtil.getMaxNameLength(npc.getOrAddTrait(MobType.class).getType()); if (newName.length() > nameLength) { Messaging.sendErrorTr(sender, Messages.NPC_NAME_TOO_LONG, nameLength); newName = newName.substring(0, nameLength); @@ -1644,7 +1644,7 @@ public class NPCCommands { max = 1, permission = "citizens.npc.scoreboard") public void scoreboard(CommandContext args, CommandSender sender, NPC npc) { - ScoreboardTrait trait = npc.getTrait(ScoreboardTrait.class); + ScoreboardTrait trait = npc.getOrAddTrait(ScoreboardTrait.class); String output = ""; if (args.hasValueFlag("addtag")) { for (String tag : args.getFlag("addtag").split(",")) { @@ -1672,7 +1672,7 @@ public class NPCCommands { max = 1, permission = "citizens.npc.script") public void script(CommandContext args, CommandSender sender, NPC npc) { - ScriptTrait trait = npc.getTrait(ScriptTrait.class); + ScriptTrait trait = npc.getOrAddTrait(ScriptTrait.class); if (args.hasValueFlag("add")) { List files = new ArrayList(); for (String file : args.getFlag("add").split(",")) { @@ -1748,7 +1748,7 @@ public class NPCCommands { permission = "citizens.npc.sheep") @Requirements(selected = true, ownership = true, types = { EntityType.SHEEP }) public void sheep(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - SheepTrait trait = npc.getTrait(SheepTrait.class); + SheepTrait trait = npc.getOrAddTrait(SheepTrait.class); boolean hasArg = false; if (args.hasValueFlag("sheared")) { trait.setSheared(Boolean.valueOf(args.getFlag("sheared"))); @@ -1781,7 +1781,7 @@ public class NPCCommands { @Requirements(types = EntityType.PLAYER, selected = true, ownership = true) public void skin(final CommandContext args, final CommandSender sender, final NPC npc) throws CommandException { String skinName = npc.getName(); - final SkinTrait trait = npc.getTrait(SkinTrait.class); + final SkinTrait trait = npc.getOrAddTrait(SkinTrait.class); if (args.hasFlag('c')) { trait.clearTexture(); } else if (args.hasValueFlag("url")) { @@ -1873,7 +1873,7 @@ public class NPCCommands { @Requirements(types = EntityType.PLAYER, selected = true, ownership = true) public void skinLayers(final CommandContext args, final CommandSender sender, final NPC npc) throws CommandException { - SkinLayers trait = npc.getTrait(SkinLayers.class); + SkinLayers trait = npc.getOrAddTrait(SkinLayers.class); if (args.hasValueFlag("cape")) { trait.setVisible(Layer.CAPE, Boolean.valueOf(args.getFlag("cape"))); } @@ -1909,7 +1909,7 @@ public class NPCCommands { permission = "citizens.npc.size") @Requirements(selected = true, ownership = true, types = { EntityType.MAGMA_CUBE, EntityType.SLIME }) public void slimeSize(CommandContext args, CommandSender sender, NPC npc) { - SlimeSize trait = npc.getTrait(SlimeSize.class); + SlimeSize trait = npc.getOrAddTrait(SlimeSize.class); if (args.argsLength() <= 1) { trait.describe(sender); return; @@ -2016,7 +2016,7 @@ public class NPCCommands { if (respawn.isSpawned()) { throw new CommandException(Messages.NPC_ALREADY_SPAWNED, respawn.getName()); } - Location location = respawn.getTrait(CurrentLocation.class).getLocation(); + Location location = respawn.getOrAddTrait(CurrentLocation.class).getLocation(); if (location == null || args.hasValueFlag("location")) { if (args.getSenderLocation() == null) throw new CommandException(Messages.NO_STORED_SPAWN_LOCATION); @@ -2048,12 +2048,12 @@ public class NPCCommands { min = 2, permission = "citizens.npc.speak") public void speak(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - String type = npc.getTrait(Speech.class).getDefaultVocalChord(); + String type = npc.getOrAddTrait(Speech.class).getDefaultVocalChord(); String message = Colorizer.parseColors(args.getJoinedStrings(1)); if (message.length() <= 0) { Messaging.send(sender, "Default Vocal Chord for " + npc.getName() + ": " - + npc.getTrait(Speech.class).getDefaultVocalChord()); + + npc.getOrAddTrait(Speech.class).getDefaultVocalChord()); return; } @@ -2140,7 +2140,7 @@ public class NPCCommands { max = 1, permission = "citizens.npc.tp") public void tp(CommandContext args, Player player, NPC npc) { - Location to = npc.getTrait(CurrentLocation.class).getLocation(); + Location to = npc.getOrAddTrait(CurrentLocation.class).getLocation(); if (to == null) { Messaging.sendError(player, Messages.TELEPORT_NPC_LOCATION_NOT_FOUND); return; @@ -2289,7 +2289,7 @@ public class NPCCommands { permission = "citizens.npc.wither") @Requirements(selected = true, ownership = true, types = { EntityType.WITHER }) public void wither(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - WitherTrait trait = npc.getTrait(WitherTrait.class); + WitherTrait trait = npc.getOrAddTrait(WitherTrait.class); if (args.hasValueFlag("charged")) { trait.setCharged(Boolean.valueOf(args.getFlag("charged"))); } @@ -2307,7 +2307,7 @@ public class NPCCommands { permission = "citizens.npc.wolf") @Requirements(selected = true, ownership = true, types = EntityType.WOLF) public void wolf(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - WolfModifiers trait = npc.getTrait(WolfModifiers.class); + WolfModifiers trait = npc.getOrAddTrait(WolfModifiers.class); if (args.hasFlag('a')) { trait.setAngry(!trait.isAngry()); } diff --git a/main/src/main/java/net/citizensnpcs/commands/TraitCommands.java b/main/src/main/java/net/citizensnpcs/commands/TraitCommands.java index c15e3a333..7038c0e49 100644 --- a/main/src/main/java/net/citizensnpcs/commands/TraitCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/TraitCommands.java @@ -86,7 +86,7 @@ public class TraitCommands { throw new CommandException(Messages.TRAIT_NOT_CONFIGURABLE); if (!npc.hasTrait(clazz)) throw new CommandException(Messages.TRAIT_NOT_FOUND_ON_NPC); - CommandConfigurable trait = (CommandConfigurable) npc.getTrait(clazz); + CommandConfigurable trait = (CommandConfigurable) npc.getOrAddTrait(clazz); trait.configure(args); } diff --git a/main/src/main/java/net/citizensnpcs/commands/WaypointCommands.java b/main/src/main/java/net/citizensnpcs/commands/WaypointCommands.java index 270aaa470..3a1c84425 100644 --- a/main/src/main/java/net/citizensnpcs/commands/WaypointCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/WaypointCommands.java @@ -35,7 +35,7 @@ public class WaypointCommands { max = 5, permission = "citizens.waypoints.add") public void add(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - WaypointProvider provider = npc.getTrait(Waypoints.class).getCurrentProvider(); + WaypointProvider provider = npc.getOrAddTrait(Waypoints.class).getCurrentProvider(); if (!(provider instanceof LinearWaypointProvider)) throw new CommandException(); List waypoints = (List) ((LinearWaypointProvider) provider).waypoints(); @@ -88,7 +88,7 @@ public class WaypointCommands { flags = "d", permission = "citizens.waypoints.provider") public void provider(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - Waypoints waypoints = npc.getTrait(Waypoints.class); + Waypoints waypoints = npc.getOrAddTrait(Waypoints.class); if (args.argsLength() == 1) { if (args.hasFlag('d')) { waypoints.describeProviders(sender); diff --git a/main/src/main/java/net/citizensnpcs/editor/CopierEditor.java b/main/src/main/java/net/citizensnpcs/editor/CopierEditor.java index 9d8278d87..a7f5f4454 100644 --- a/main/src/main/java/net/citizensnpcs/editor/CopierEditor.java +++ b/main/src/main/java/net/citizensnpcs/editor/CopierEditor.java @@ -46,7 +46,7 @@ public class CopierEditor extends Editor { Location location = player.getLocation(); location.getChunk().load(); copy.teleport(location, TeleportCause.PLUGIN); - copy.getTrait(CurrentLocation.class).setLocation(location); + copy.getOrAddTrait(CurrentLocation.class).setLocation(location); } Messaging.sendTr(player, Messages.NPC_COPIED, npc.getName()); diff --git a/main/src/main/java/net/citizensnpcs/editor/EndermanEquipper.java b/main/src/main/java/net/citizensnpcs/editor/EndermanEquipper.java index 9d7d776ef..c740bc1ca 100644 --- a/main/src/main/java/net/citizensnpcs/editor/EndermanEquipper.java +++ b/main/src/main/java/net/citizensnpcs/editor/EndermanEquipper.java @@ -42,7 +42,7 @@ public class EndermanEquipper implements Equipper { hand.setAmount(hand.getAmount() - 1); equipper.getInventory().setItemInHand(hand); } - npc.getTrait(Equipment.class).set(0, set); + npc.getOrAddTrait(Equipment.class).set(0, set); } else { MaterialData carried = ((Enderman) npc.getEntity()).getCarriedMaterial(); if (carried.getItemType() == Material.AIR) { @@ -61,7 +61,7 @@ public class EndermanEquipper implements Equipper { hand.setAmount(hand.getAmount() - 1); equipper.getInventory().setItemInHand(hand); } - npc.getTrait(Equipment.class).set(0, set); + npc.getOrAddTrait(Equipment.class).set(0, set); } } } diff --git a/main/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java b/main/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java index 1ddbc925a..1319a2420 100644 --- a/main/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java +++ b/main/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java @@ -66,13 +66,13 @@ public class EquipmentEditor extends Editor { if (hand.getType() == Material.AIR || hand.getAmount() <= 0) { return; } - ItemStack old = npc.getTrait(Equipment.class).get(finalSlot); + ItemStack old = npc.getOrAddTrait(Equipment.class).get(finalSlot); if (old != null && old.getType() != Material.AIR) { event.getPlayer().getWorld().dropItemNaturally(event.getPlayer().getLocation(), old); } ItemStack newStack = hand.clone(); newStack.setAmount(1); - npc.getTrait(Equipment.class).set(finalSlot, newStack); + npc.getOrAddTrait(Equipment.class).set(finalSlot, newStack); hand.setAmount(hand.getAmount() - 1); event.getPlayer().getInventory().setItemInHand(hand); } diff --git a/main/src/main/java/net/citizensnpcs/editor/GenericEquipper.java b/main/src/main/java/net/citizensnpcs/editor/GenericEquipper.java index 965fd7bfa..2d03688d7 100644 --- a/main/src/main/java/net/citizensnpcs/editor/GenericEquipper.java +++ b/main/src/main/java/net/citizensnpcs/editor/GenericEquipper.java @@ -19,7 +19,7 @@ public class GenericEquipper implements Equipper { public void equip(Player equipper, NPC toEquip) { // TODO: migrate to an inventory-GUI system ItemStack hand = equipper.getInventory().getItemInHand(); - Equipment trait = toEquip.getTrait(Equipment.class); + Equipment trait = toEquip.getOrAddTrait(Equipment.class); EquipmentSlot slot = EquipmentSlot.HAND; Material type = hand == null ? Material.AIR : hand.getType(); // First, determine the slot to edit diff --git a/main/src/main/java/net/citizensnpcs/editor/PigEquipper.java b/main/src/main/java/net/citizensnpcs/editor/PigEquipper.java index f400800fb..b0bf8df18 100644 --- a/main/src/main/java/net/citizensnpcs/editor/PigEquipper.java +++ b/main/src/main/java/net/citizensnpcs/editor/PigEquipper.java @@ -17,13 +17,13 @@ public class PigEquipper implements Equipper { Pig pig = (Pig) toEquip.getEntity(); if (hand.getType() == Material.SADDLE) { if (!pig.hasSaddle()) { - toEquip.getTrait(Saddle.class).toggle(); + toEquip.getOrAddTrait(Saddle.class).toggle(); hand.setAmount(0); Messaging.sendTr(equipper, Messages.SADDLED_SET, toEquip.getName()); } } else if (pig.hasSaddle()) { equipper.getWorld().dropItemNaturally(pig.getLocation(), new ItemStack(Material.SADDLE, 1)); - toEquip.getTrait(Saddle.class).toggle(); + toEquip.getOrAddTrait(Saddle.class).toggle(); Messaging.sendTr(equipper, Messages.SADDLED_STOPPED, toEquip.getName()); } equipper.getInventory().setItemInHand(hand); diff --git a/main/src/main/java/net/citizensnpcs/editor/SheepEquipper.java b/main/src/main/java/net/citizensnpcs/editor/SheepEquipper.java index 5f7c614da..d1166a653 100644 --- a/main/src/main/java/net/citizensnpcs/editor/SheepEquipper.java +++ b/main/src/main/java/net/citizensnpcs/editor/SheepEquipper.java @@ -20,20 +20,20 @@ public class SheepEquipper implements Equipper { ItemStack hand = equipper.getInventory().getItemInHand(); Sheep sheep = (Sheep) toEquip.getEntity(); if (hand.getType() == Material.SHEARS) { - Messaging.sendTr(equipper, toEquip.getTrait(SheepTrait.class).toggleSheared() ? Messages.SHEARED_SET + Messaging.sendTr(equipper, toEquip.getOrAddTrait(SheepTrait.class).toggleSheared() ? Messages.SHEARED_SET : Messages.SHEARED_STOPPED, toEquip.getName()); } else if (hand.getType() == (SpigotUtil.isUsing1_13API() ? Material.INK_SAC : Material.valueOf("INK_SACK"))) { Dye dye = (Dye) hand.getData(); if (sheep.getColor() == dye.getColor()) return; DyeColor color = dye.getColor(); - toEquip.getTrait(WoolColor.class).setColor(color); + toEquip.getOrAddTrait(WoolColor.class).setColor(color); Messaging.sendTr(equipper, Messages.EQUIPMENT_EDITOR_SHEEP_COLOURED, toEquip.getName(), color.name().toLowerCase().replace("_", " ")); hand.setAmount(hand.getAmount() - 1); } else { - toEquip.getTrait(WoolColor.class).setColor(DyeColor.WHITE); + toEquip.getOrAddTrait(WoolColor.class).setColor(DyeColor.WHITE); Messaging.sendTr(equipper, Messages.EQUIPMENT_EDITOR_SHEEP_COLOURED, toEquip.getName(), "white"); } equipper.getInventory().setItemInHand(hand); diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index ae230c8aa..72182f760 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -85,7 +85,7 @@ public class CitizensNPC extends AbstractNPC { getEntity().isValid()); return false; } - boolean keepSelected = getTrait(Spawned.class).shouldSpawn(); + boolean keepSelected = getOrAddTrait(Spawned.class).shouldSpawn(); if (!keepSelected) { data().remove("selectors"); } @@ -138,7 +138,7 @@ public class CitizensNPC extends AbstractNPC { @Override public Location getStoredLocation() { - return isSpawned() ? getEntity().getLocation() : getTrait(CurrentLocation.class).getLocation(); + return isSpawned() ? getEntity().getLocation() : getOrAddTrait(CurrentLocation.class).getLocation(); } @Override @@ -156,8 +156,8 @@ public class CitizensNPC extends AbstractNPC { public void load(final DataKey root) { super.load(root); // Spawn the NPC - CurrentLocation spawnLocation = getTrait(CurrentLocation.class); - if (getTrait(Spawned.class).shouldSpawn() && spawnLocation.getLocation() != null) { + CurrentLocation spawnLocation = getOrAddTrait(CurrentLocation.class); + if (getOrAddTrait(Spawned.class).shouldSpawn() && spawnLocation.getLocation() != null) { if (spawnLocation.getLocation() != null) { spawn(spawnLocation.getLocation(), SpawnReason.RESPAWN); } else { @@ -245,7 +245,7 @@ public class CitizensNPC extends AbstractNPC { at.getChunk().load(); } - getTrait(CurrentLocation.class).setLocation(at); + getOrAddTrait(CurrentLocation.class).setLocation(at); entityController.spawn(at, this); getEntity().setMetadata(NPC_METADATA_MARKER, new FixedMetadataValue(CitizensAPI.getPlugin(), true)); @@ -275,8 +275,8 @@ public class CitizensNPC extends AbstractNPC { NMS.setBodyYaw(getEntity(), at.getYaw()); // Set the spawned state - getTrait(CurrentLocation.class).setLocation(at); - getTrait(Spawned.class).setSpawned(true); + getOrAddTrait(CurrentLocation.class).setLocation(at); + getOrAddTrait(Spawned.class).setSpawned(true); NPCSpawnEvent spawnEvent = new NPCSpawnEvent(this, at, reason); Bukkit.getPluginManager().callEvent(spawnEvent); @@ -419,11 +419,11 @@ public class CitizensNPC extends AbstractNPC { return; } - getTrait(ScoreboardTrait.class).apply(team, nameVisibility); + getOrAddTrait(ScoreboardTrait.class).apply(team, nameVisibility); } private void updateFlyableState() { - EntityType type = isSpawned() ? getEntity().getType() : getTrait(MobType.class).getType(); + EntityType type = isSpawned() ? getEntity().getType() : getOrAddTrait(MobType.class).getType(); if (type == null) return; if (!Util.isAlwaysFlyable(type)) @@ -432,7 +432,7 @@ public class CitizensNPC extends AbstractNPC { data().setPersistent(NPC.FLYABLE_METADATA, true); } if (!hasTrait(Gravity.class)) { - getTrait(Gravity.class).setEnabled(true); + getOrAddTrait(Gravity.class).setEnabled(true); } } diff --git a/main/src/main/java/net/citizensnpcs/npc/NPCSelector.java b/main/src/main/java/net/citizensnpcs/npc/NPCSelector.java index b6fff0e4e..bc89ef175 100644 --- a/main/src/main/java/net/citizensnpcs/npc/NPCSelector.java +++ b/main/src/main/java/net/citizensnpcs/npc/NPCSelector.java @@ -102,7 +102,7 @@ public class NPCSelector implements Listener, net.citizensnpcs.api.npc.NPCSelect List selected = player.getMetadata("selected"); if (selected == null || selected.size() == 0 || selected.get(0).asInt() != npc.getId()) { if (Util.matchesItemInHand(player, Setting.SELECTION_ITEM.asString()) - && npc.getTrait(Owner.class).isOwnedBy(player)) { + && npc.getOrAddTrait(Owner.class).isOwnedBy(player)) { player.removeMetadata("selected", plugin); select(player, npc); Messaging.sendWithNPC(player, Setting.SELECTION_MESSAGE.asString(), npc); diff --git a/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java b/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java index 84ea0b548..d41fcbca2 100644 --- a/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java +++ b/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java @@ -80,7 +80,7 @@ public class Skin { Preconditions.checkNotNull(entity); NPC npc = entity.getNPC(); - SkinTrait skinTrait = npc.getTrait(SkinTrait.class); + SkinTrait skinTrait = npc.getOrAddTrait(SkinTrait.class); // Use npc cached skin if available. // If npc requires latest skin, cache is used for faster availability until the latest skin can be loaded. String cachedName = npc.data().get(CACHED_SKIN_UUID_NAME_METADATA); @@ -103,7 +103,7 @@ public class Skin { String defaultSkinName = ChatColor.stripColor(npc.getName()).toLowerCase(); if (npc.hasTrait(SkinTrait.class) && this.skinName.equals(defaultSkinName) - && !npc.getTrait(SkinTrait.class).fetchDefaultSkin()) { + && !npc.getOrAddTrait(SkinTrait.class).fetchDefaultSkin()) { return false; } if (hasFetched) { @@ -371,7 +371,7 @@ public class Skin { private static void setNPCSkinData(SkinnableEntity entity, String skinName, UUID skinId, Property skinProperty) { NPC npc = entity.getNPC(); - SkinTrait skinTrait = npc.getTrait(SkinTrait.class); + SkinTrait skinTrait = npc.getOrAddTrait(SkinTrait.class); // cache skins for faster initial skin availability and // for use when the latest skin is not required. diff --git a/main/src/main/java/net/citizensnpcs/trait/Controllable.java b/main/src/main/java/net/citizensnpcs/trait/Controllable.java index 6a405d8b0..f7fdbc6c9 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Controllable.java +++ b/main/src/main/java/net/citizensnpcs/trait/Controllable.java @@ -88,7 +88,7 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } return; } - if (ownerRequired && !npc.getTrait(Owner.class).isOwnedBy(player)) { + if (ownerRequired && !npc.getOrAddTrait(Owner.class).isOwnedBy(player)) { return; } NMS.mount(npc.getEntity(), player); diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index 06959158f..28913bde9 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -53,7 +53,7 @@ public class HologramTrait extends Trait { private NPC createHologram(String line, double heightOffset) { NPC hologramNPC = registry.createNPC(EntityType.ARMOR_STAND, line); hologramNPC.addTrait(new ClickRedirectTrait(npc)); - ArmorStandTrait trait = hologramNPC.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = hologramNPC.getOrAddTrait(ArmorStandTrait.class); trait.setVisible(false); trait.setSmall(true); trait.setMarker(true); diff --git a/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java b/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java index 3fbcbc945..a79e8052b 100644 --- a/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java +++ b/main/src/main/java/net/citizensnpcs/trait/OcelotModifiers.java @@ -25,8 +25,8 @@ public class OcelotModifiers extends Trait { } private void migrateToCat() { - npc.getTrait(CatTrait.class).setSitting(sitting); - npc.getTrait(CatTrait.class).setType(type); + npc.getOrAddTrait(CatTrait.class).setSitting(sitting); + npc.getOrAddTrait(CatTrait.class).setType(type); } @Override diff --git a/main/src/main/java/net/citizensnpcs/trait/Poses.java b/main/src/main/java/net/citizensnpcs/trait/Poses.java index 13c0e719c..1b4252892 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Poses.java +++ b/main/src/main/java/net/citizensnpcs/trait/Poses.java @@ -62,7 +62,7 @@ public class Poses extends Trait { private void assumePose(float yaw, float pitch) { if (!npc.isSpawned()) { - npc.spawn(npc.getTrait(CurrentLocation.class).getLocation(), SpawnReason.COMMAND); + npc.spawn(npc.getOrAddTrait(CurrentLocation.class).getLocation(), SpawnReason.COMMAND); } Util.assumePose(npc.getEntity(), yaw, pitch); } @@ -130,7 +130,7 @@ public class Poses extends Trait { if (!hasPose(defaultPose)) return; if (!npc.getNavigator().isNavigating() - && (!npc.hasTrait(LookClose.class) || !npc.getTrait(LookClose.class).canSeeTarget())) { + && (!npc.hasTrait(LookClose.class) || !npc.getOrAddTrait(LookClose.class).canSeeTarget())) { assumePose(defaultPose); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java index 85d4ca166..0a7426693 100644 --- a/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java +++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/triggers/DelayTrigger.java @@ -32,7 +32,7 @@ public class DelayTrigger implements WaypointTrigger { @Override public void onWaypointReached(NPC npc, Location waypoint) { if (delay > 0) { - scheduleTask(npc.getTrait(Waypoints.class).getCurrentProvider()); + scheduleTask(npc.getOrAddTrait(Waypoints.class).getCurrentProvider()); } } diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java index d88f91571..6ce35c7cc 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java @@ -230,7 +230,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -287,7 +287,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable } boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { g(0, 0); } @@ -379,17 +379,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -435,7 +435,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java index 2f3553e1b..19724868d 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java @@ -36,7 +36,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } 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 0d79a8e45..1d08e0057 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 @@ -36,7 +36,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -69,7 +69,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -103,7 +103,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java index 128890e6a..dfca38f4b 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java @@ -43,14 +43,14 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); trait.setSmall(true); trait.setMarker(true); trait.setVisible(false); - holder.getTrait(ArmorStandTrait.class).setVisible(false); + holder.getOrAddTrait(ArmorStandTrait.class).setVisible(false); holder.data().set(NPC.NAMEPLATE_VISIBLE_METADATA, false); holder.data().set(NPC.DEFAULT_PROTECTED_METADATA, true); new BukkitRunnable() { diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java index c20148c2d..a3286faff 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java @@ -261,7 +261,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -347,7 +347,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable cA(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { g(0, 0); } @@ -390,17 +390,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -447,7 +447,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseController.java index 9554b473f..e3383fca5 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseController.java @@ -36,7 +36,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseMuleController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseMuleController.java index 94a4cc73b..a339d3628 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseMuleController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseMuleController.java @@ -36,7 +36,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseSkeletonController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseSkeletonController.java index d4a3b66f2..c87e9eaf7 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseSkeletonController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseSkeletonController.java @@ -36,7 +36,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseZombieController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseZombieController.java index c1c9569dd..850587662 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseZombieController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HorseZombieController.java @@ -36,7 +36,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/LlamaController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/LlamaController.java index f720942ff..d8271a24e 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/LlamaController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/LlamaController.java @@ -36,7 +36,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } 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 a1448630a..1935c196a 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 @@ -37,7 +37,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -70,7 +70,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = EntityType.LLAMA) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -101,7 +101,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -135,7 +135,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java index 02f27c049..4712eaa08 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java @@ -43,14 +43,14 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); trait.setSmall(true); trait.setMarker(true); trait.setVisible(false); - holder.getTrait(ArmorStandTrait.class).setVisible(false); + holder.getOrAddTrait(ArmorStandTrait.class).setVisible(false); holder.data().set(NPC.NAMEPLATE_VISIBLE_METADATA, false); holder.data().set(NPC.DEFAULT_PROTECTED_METADATA, true); new BukkitRunnable() { diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java index e4d34aada..bbadbe46e 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java @@ -281,7 +281,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -374,7 +374,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable Y(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { a(0, 0, 0); } @@ -417,17 +417,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -474,7 +474,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseController.java index 2cf20e106..c9476a3ac 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseController.java @@ -39,7 +39,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -206,7 +206,7 @@ public class HorseController extends MobEntityController { public void M() { super.M(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseDonkeyController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseDonkeyController.java index 5231d5eaf..6ba766bb1 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseDonkeyController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseDonkeyController.java @@ -206,7 +206,7 @@ public class HorseDonkeyController extends MobEntityController { public void M() { super.M(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseMuleController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseMuleController.java index 139109cb0..9cee2244d 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseMuleController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseMuleController.java @@ -39,7 +39,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -206,7 +206,7 @@ public class HorseMuleController extends MobEntityController { public void M() { super.M(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseSkeletonController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseSkeletonController.java index efe708b90..099ac5c3a 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseSkeletonController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseSkeletonController.java @@ -39,7 +39,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -209,7 +209,7 @@ public class HorseSkeletonController extends MobEntityController { public void M() { super.M(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseZombieController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseZombieController.java index 897ca5aca..df3d3894d 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseZombieController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HorseZombieController.java @@ -39,7 +39,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -209,7 +209,7 @@ public class HorseZombieController extends MobEntityController { public void M() { super.M(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/LlamaController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/LlamaController.java index ffc3ddc4f..58674fe7a 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/LlamaController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/LlamaController.java @@ -37,7 +37,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } 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 0e9a7d6ea..675fa43d4 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 @@ -39,7 +39,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -72,7 +72,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = EntityType.LLAMA) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -103,7 +103,7 @@ public class Commands { permission = "citizens.npc.parrot") @Requirements(selected = true, ownership = true, types = EntityType.PARROT) public void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ParrotTrait trait = npc.getTrait(ParrotTrait.class); + ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class); String output = ""; if (args.hasValueFlag("variant")) { String variantRaw = args.getFlag("variant"); @@ -130,7 +130,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -164,7 +164,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java index d18023d62..d7b030c8c 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java @@ -43,7 +43,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java index 57f9858bb..c7210ee17 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java @@ -260,7 +260,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -344,7 +344,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable W(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { a(0, 0, 0); } @@ -387,17 +387,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -474,7 +474,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseController.java index 7a3f62b47..dc3796aad 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseController.java @@ -42,7 +42,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -209,7 +209,7 @@ public class HorseController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseDonkeyController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseDonkeyController.java index 5485817f5..b7bbc021f 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseDonkeyController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseDonkeyController.java @@ -209,7 +209,7 @@ public class HorseDonkeyController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseMuleController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseMuleController.java index 56559d74c..1e67d6d1d 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseMuleController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseMuleController.java @@ -42,7 +42,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -209,7 +209,7 @@ public class HorseMuleController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseSkeletonController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseSkeletonController.java index e1f8298dd..1cbb51f03 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseSkeletonController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseSkeletonController.java @@ -42,7 +42,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -210,7 +210,7 @@ public class HorseSkeletonController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseZombieController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseZombieController.java index 7914781f7..df734cb21 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseZombieController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HorseZombieController.java @@ -42,7 +42,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -210,7 +210,7 @@ public class HorseZombieController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/LlamaController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/LlamaController.java index 43351036f..8a9c947ba 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/LlamaController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/LlamaController.java @@ -40,7 +40,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java index 565885df8..eaf62560c 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java @@ -179,7 +179,7 @@ public class PufferFishController extends MobEntityController { if (npc != null) { npc.update(); if (npc.hasTrait(PufferFishTrait.class)) { - setPuffState(npc.getTrait(PufferFishTrait.class).getPuffState()); + setPuffState(npc.getOrAddTrait(PufferFishTrait.class).getPuffState()); } } } 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 188f7d3f7..8333e9d58 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 @@ -43,7 +43,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -76,7 +76,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = EntityType.LLAMA) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -107,7 +107,7 @@ public class Commands { permission = "citizens.npc.parrot") @Requirements(selected = true, ownership = true, types = EntityType.PARROT) public void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ParrotTrait trait = npc.getTrait(ParrotTrait.class); + ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class); String output = ""; if (args.hasValueFlag("variant")) { String variantRaw = args.getFlag("variant"); @@ -134,7 +134,7 @@ public class Commands { permission = "citizens.npc.phantom") @Requirements(selected = true, ownership = true, types = EntityType.PHANTOM) public void phantom(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PhantomTrait trait = npc.getTrait(PhantomTrait.class); + PhantomTrait trait = npc.getOrAddTrait(PhantomTrait.class); String output = ""; if (args.hasValueFlag("size")) { if (args.getFlagInteger("size") <= 0) { @@ -160,7 +160,7 @@ public class Commands { permission = "citizens.npc.pufferfish") @Requirements(selected = true, ownership = true, types = EntityType.PUFFERFISH) public void pufferfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PufferFishTrait trait = npc.getTrait(PufferFishTrait.class); + PufferFishTrait trait = npc.getOrAddTrait(PufferFishTrait.class); String output = ""; if (args.hasValueFlag("state")) { int state = Math.min(Math.max(args.getFlagInteger("state"), 0), 3); @@ -182,7 +182,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -215,7 +215,7 @@ public class Commands { permission = "citizens.npc.tropicalfish") @Requirements(selected = true, ownership = true, types = EntityType.TROPICAL_FISH) public void tropicalfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - TropicalFishTrait trait = npc.getTrait(TropicalFishTrait.class); + TropicalFishTrait trait = npc.getOrAddTrait(TropicalFishTrait.class); String output = ""; if (args.hasValueFlag("body")) { DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("body")); @@ -262,7 +262,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java index f998fb163..f239abca9 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java @@ -43,7 +43,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java index 4f3b24ae3..415106a23 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java @@ -251,7 +251,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -348,7 +348,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable entityBaseTick(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { e(new Vec3D(0, 0, 0)); } @@ -391,17 +391,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -469,7 +469,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseController.java index 9e38aa26e..ae2761c00 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseController.java @@ -45,7 +45,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -228,7 +228,7 @@ public class HorseController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseDonkeyController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseDonkeyController.java index 781634d20..5b6e67ac8 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseDonkeyController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseDonkeyController.java @@ -227,7 +227,7 @@ public class HorseDonkeyController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseMuleController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseMuleController.java index 62aff5803..eaf1636cb 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseMuleController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseMuleController.java @@ -45,7 +45,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -227,7 +227,7 @@ public class HorseMuleController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseSkeletonController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseSkeletonController.java index 1f40eb818..598ba6ec3 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseSkeletonController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseSkeletonController.java @@ -45,7 +45,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -228,7 +228,7 @@ public class HorseSkeletonController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseZombieController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseZombieController.java index ec309ae9f..f38ce4b05 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseZombieController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HorseZombieController.java @@ -45,7 +45,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -228,7 +228,7 @@ public class HorseZombieController extends MobEntityController { public void mobTick() { super.mobTick(); if (npc != null) { - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/LlamaController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/LlamaController.java index 13ae6acc8..36c8d194e 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/LlamaController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/LlamaController.java @@ -43,7 +43,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java index e4351a642..72ed1a7ca 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java @@ -233,7 +233,7 @@ public class PufferFishController extends MobEntityController { } super.tick(); if (npc != null && npc.hasTrait(PufferFishTrait.class)) { - setPuffState(npc.getTrait(PufferFishTrait.class).getPuffState()); + setPuffState(npc.getOrAddTrait(PufferFishTrait.class).getPuffState()); } } diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java index a4d310378..85314b397 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java @@ -45,7 +45,7 @@ public class TraderLlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } 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 db9019a71..70898223e 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 @@ -56,7 +56,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -91,7 +91,7 @@ public class Commands { permission = "citizens.npc.cat") @Requirements(selected = true, ownership = true, types = EntityType.CAT) public void cat(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - CatTrait trait = npc.getTrait(CatTrait.class); + CatTrait trait = npc.getOrAddTrait(CatTrait.class); String output = ""; if (args.hasValueFlag("type")) { Cat.Type type = Util.matchEnum(Cat.Type.values(), args.getFlag("type")); @@ -139,7 +139,7 @@ public class Commands { permission = "citizens.npc.fox") @Requirements(selected = true, ownership = true, types = EntityType.FOX) public void fox(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - FoxTrait trait = npc.getTrait(FoxTrait.class); + FoxTrait trait = npc.getOrAddTrait(FoxTrait.class); String output = ""; if (args.hasValueFlag("type")) { Fox.Type type = Util.matchEnum(Fox.Type.values(), args.getFlag("type")); @@ -181,7 +181,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = { EntityType.LLAMA, EntityType.TRADER_LLAMA }) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -212,7 +212,7 @@ public class Commands { permission = "citizens.npc.mushroomcow") @Requirements(selected = true, ownership = true, types = { EntityType.MUSHROOM_COW }) public void mushroomcow(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - MushroomCowTrait trait = npc.getTrait(MushroomCowTrait.class); + MushroomCowTrait trait = npc.getOrAddTrait(MushroomCowTrait.class); boolean hasArg = false; if (args.hasValueFlag("variant")) { MushroomCow.Variant variant = Util.matchEnum(MushroomCow.Variant.values(), args.getFlag("variant")); @@ -240,7 +240,7 @@ public class Commands { permission = "citizens.npc.panda") @Requirements(selected = true, ownership = true, types = EntityType.PANDA) public void panda(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PandaTrait trait = npc.getTrait(PandaTrait.class); + PandaTrait trait = npc.getOrAddTrait(PandaTrait.class); String output = ""; if (args.hasValueFlag("gene")) { Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("gene")); @@ -277,7 +277,7 @@ public class Commands { permission = "citizens.npc.parrot") @Requirements(selected = true, ownership = true, types = EntityType.PARROT) public void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ParrotTrait trait = npc.getTrait(ParrotTrait.class); + ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class); String output = ""; if (args.hasValueFlag("variant")) { String variantRaw = args.getFlag("variant"); @@ -304,7 +304,7 @@ public class Commands { permission = "citizens.npc.phantom") @Requirements(selected = true, ownership = true, types = EntityType.PHANTOM) public void phantom(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PhantomTrait trait = npc.getTrait(PhantomTrait.class); + PhantomTrait trait = npc.getOrAddTrait(PhantomTrait.class); String output = ""; if (args.hasValueFlag("size")) { if (args.getFlagInteger("size") <= 0) { @@ -330,7 +330,7 @@ public class Commands { permission = "citizens.npc.pufferfish") @Requirements(selected = true, ownership = true, types = EntityType.PUFFERFISH) public void pufferfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PufferFishTrait trait = npc.getTrait(PufferFishTrait.class); + PufferFishTrait trait = npc.getOrAddTrait(PufferFishTrait.class); String output = ""; if (args.hasValueFlag("state")) { int state = Math.min(Math.max(args.getFlagInteger("state"), 0), 3); @@ -352,7 +352,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -386,7 +386,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); @@ -408,7 +408,7 @@ public class Commands { permission = "citizens.npc.tropicalfish") @Requirements(selected = true, ownership = true, types = EntityType.TROPICAL_FISH) public void tropicalfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - TropicalFishTrait trait = npc.getTrait(TropicalFishTrait.class); + TropicalFishTrait trait = npc.getOrAddTrait(TropicalFishTrait.class); String output = ""; if (args.hasValueFlag("body")) { DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("body")); @@ -454,7 +454,7 @@ public class Commands { permission = "citizens.npc.villager") @Requirements(selected = true, ownership = true, types = EntityType.VILLAGER) public void villager(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - VillagerTrait trait = npc.getTrait(VillagerTrait.class); + VillagerTrait trait = npc.getOrAddTrait(VillagerTrait.class); String output = ""; if (args.hasValueFlag("level")) { if (args.getFlagInteger("level") < 0) { @@ -478,7 +478,7 @@ public class Commands { throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), Joiner.on(',').join(Profession.values())); } - npc.getTrait(VillagerProfession.class).setProfession(parsed); + npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); output += Messaging.tr(Messages.PROFESSION_SET, npc.getName(), args.getFlag("profession")); } if (!output.isEmpty()) { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java index 0d72e8b0e..6a4f11f93 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java @@ -43,7 +43,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java index a4ca787cc..ccdb42100 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java @@ -229,7 +229,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -348,7 +348,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable entityBaseTick(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { e(new Vec3D(0, 0, 0)); } @@ -392,17 +392,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -480,7 +480,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseController.java index c98f48801..7ce6b6706 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseController.java @@ -45,7 +45,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -231,7 +231,7 @@ public class HorseController extends MobEntityController { if (npc == null) return; NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseDonkeyController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseDonkeyController.java index c2f719653..178b29129 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseDonkeyController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseDonkeyController.java @@ -229,7 +229,7 @@ public class HorseDonkeyController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseMuleController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseMuleController.java index 9d149b4a9..b95c36bbe 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseMuleController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseMuleController.java @@ -45,7 +45,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -229,7 +229,7 @@ public class HorseMuleController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseSkeletonController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseSkeletonController.java index 3e7c15d34..894c4a417 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseSkeletonController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseSkeletonController.java @@ -45,7 +45,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -230,7 +230,7 @@ public class HorseSkeletonController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseZombieController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseZombieController.java index 0e42b58dd..27539c67c 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseZombieController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HorseZombieController.java @@ -45,7 +45,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -230,7 +230,7 @@ public class HorseZombieController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/LlamaController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/LlamaController.java index 3ff719256..2a3958501 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/LlamaController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/LlamaController.java @@ -43,7 +43,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java index 85460e6e8..80d722a2d 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java @@ -249,7 +249,7 @@ public class PufferFishController extends MobEntityController { } super.tick(); if (npc != null && npc.hasTrait(PufferFishTrait.class)) { - setPuffState(npc.getTrait(PufferFishTrait.class).getPuffState()); + setPuffState(npc.getOrAddTrait(PufferFishTrait.class).getPuffState()); } } diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TraderLlamaController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TraderLlamaController.java index e5a261ebc..72e4dc7bd 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TraderLlamaController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TraderLlamaController.java @@ -45,7 +45,7 @@ public class TraderLlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } 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 75a26b6ff..a86adcdef 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 @@ -59,7 +59,7 @@ public class Commands { permission = "citizens.npc.bee") @Requirements(selected = true, ownership = true, types = EntityType.BEE) public void bee(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BeeTrait trait = npc.getTrait(BeeTrait.class); + BeeTrait trait = npc.getOrAddTrait(BeeTrait.class); String output = ""; if (args.hasValueFlag("anger")) { int anger = args.getFlagInteger("anger"); @@ -95,7 +95,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -130,7 +130,7 @@ public class Commands { permission = "citizens.npc.cat") @Requirements(selected = true, ownership = true, types = EntityType.CAT) public void cat(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - CatTrait trait = npc.getTrait(CatTrait.class); + CatTrait trait = npc.getOrAddTrait(CatTrait.class); String output = ""; if (args.hasValueFlag("type")) { Cat.Type type = Util.matchEnum(Cat.Type.values(), args.getFlag("type")); @@ -178,7 +178,7 @@ public class Commands { permission = "citizens.npc.fox") @Requirements(selected = true, ownership = true, types = EntityType.FOX) public void fox(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - FoxTrait trait = npc.getTrait(FoxTrait.class); + FoxTrait trait = npc.getOrAddTrait(FoxTrait.class); String output = ""; if (args.hasValueFlag("type")) { Fox.Type type = Util.matchEnum(Fox.Type.values(), args.getFlag("type")); @@ -220,7 +220,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = { EntityType.LLAMA, EntityType.TRADER_LLAMA }) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -251,7 +251,7 @@ public class Commands { permission = "citizens.npc.mushroomcow") @Requirements(selected = true, ownership = true, types = { EntityType.MUSHROOM_COW }) public void mushroomcow(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - MushroomCowTrait trait = npc.getTrait(MushroomCowTrait.class); + MushroomCowTrait trait = npc.getOrAddTrait(MushroomCowTrait.class); boolean hasArg = false; if (args.hasValueFlag("variant")) { MushroomCow.Variant variant = Util.matchEnum(MushroomCow.Variant.values(), args.getFlag("variant")); @@ -280,7 +280,7 @@ public class Commands { permission = "citizens.npc.panda") @Requirements(selected = true, ownership = true, types = EntityType.PANDA) public void panda(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PandaTrait trait = npc.getTrait(PandaTrait.class); + PandaTrait trait = npc.getOrAddTrait(PandaTrait.class); String output = ""; if (args.hasValueFlag("gene")) { Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("gene")); @@ -321,7 +321,7 @@ public class Commands { permission = "citizens.npc.parrot") @Requirements(selected = true, ownership = true, types = EntityType.PARROT) public void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ParrotTrait trait = npc.getTrait(ParrotTrait.class); + ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class); String output = ""; if (args.hasValueFlag("variant")) { String variantRaw = args.getFlag("variant"); @@ -348,7 +348,7 @@ public class Commands { permission = "citizens.npc.phantom") @Requirements(selected = true, ownership = true, types = EntityType.PHANTOM) public void phantom(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PhantomTrait trait = npc.getTrait(PhantomTrait.class); + PhantomTrait trait = npc.getOrAddTrait(PhantomTrait.class); String output = ""; if (args.hasValueFlag("size")) { if (args.getFlagInteger("size") <= 0) { @@ -374,7 +374,7 @@ public class Commands { permission = "citizens.npc.pufferfish") @Requirements(selected = true, ownership = true, types = EntityType.PUFFERFISH) public void pufferfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PufferFishTrait trait = npc.getTrait(PufferFishTrait.class); + PufferFishTrait trait = npc.getOrAddTrait(PufferFishTrait.class); String output = ""; if (args.hasValueFlag("state")) { int state = Math.min(Math.max(args.getFlagInteger("state"), 0), 3); @@ -396,7 +396,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -430,7 +430,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); @@ -452,7 +452,7 @@ public class Commands { permission = "citizens.npc.tropicalfish") @Requirements(selected = true, ownership = true, types = EntityType.TROPICAL_FISH) public void tropicalfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - TropicalFishTrait trait = npc.getTrait(TropicalFishTrait.class); + TropicalFishTrait trait = npc.getOrAddTrait(TropicalFishTrait.class); String output = ""; if (args.hasValueFlag("body")) { DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("body")); @@ -498,7 +498,7 @@ public class Commands { permission = "citizens.npc.villager") @Requirements(selected = true, ownership = true, types = EntityType.VILLAGER) public void villager(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - VillagerTrait trait = npc.getTrait(VillagerTrait.class); + VillagerTrait trait = npc.getOrAddTrait(VillagerTrait.class); String output = ""; if (args.hasValueFlag("level")) { if (args.getFlagInteger("level") < 0) { @@ -522,7 +522,7 @@ public class Commands { throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), Joiner.on(',').join(Profession.values())); } - npc.getTrait(VillagerProfession.class).setProfession(parsed); + npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); output += Messaging.tr(Messages.PROFESSION_SET, npc.getName(), args.getFlag("profession")); } if (!output.isEmpty()) { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java index 99d76b1f8..c80585c1f 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java @@ -43,7 +43,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/EntityHumanNPC.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/EntityHumanNPC.java index dc1207100..bfd293adf 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/EntityHumanNPC.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/EntityHumanNPC.java @@ -243,7 +243,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -379,7 +379,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable entityBaseTick(); boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { g(new Vec3D(0, 0, 0)); } @@ -423,17 +423,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -512,7 +512,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseController.java index 7f6dba495..a5b606757 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseController.java @@ -45,7 +45,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -231,7 +231,7 @@ public class HorseController extends MobEntityController { if (npc == null) return; NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseDonkeyController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseDonkeyController.java index a94a9bab2..34fa1801c 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseDonkeyController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseDonkeyController.java @@ -229,7 +229,7 @@ public class HorseDonkeyController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseMuleController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseMuleController.java index 84b722f6c..eebd11874 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseMuleController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseMuleController.java @@ -45,7 +45,7 @@ public class HorseMuleController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -229,7 +229,7 @@ public class HorseMuleController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseSkeletonController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseSkeletonController.java index 0bac1ad0d..45203ec4e 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseSkeletonController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseSkeletonController.java @@ -45,7 +45,7 @@ public class HorseSkeletonController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -230,7 +230,7 @@ public class HorseSkeletonController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseZombieController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseZombieController.java index f6fcbdaa5..0c0845e22 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseZombieController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/HorseZombieController.java @@ -45,7 +45,7 @@ public class HorseZombieController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } @@ -230,7 +230,7 @@ public class HorseZombieController extends MobEntityController { super.mobTick(); if (npc != null) { NMSImpl.updateMinecraftAIState(npc, this); - if (npc.hasTrait(Controllable.class) && npc.getTrait(Controllable.class).isEnabled()) { + if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) { riding = getBukkitEntity().getPassengers().size() > 0; getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) .setValue(baseMovementSpeed * npc.getNavigator().getDefaultParameters().speedModifier()); diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/LlamaController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/LlamaController.java index 3f6a39b70..48c8e5479 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/LlamaController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/LlamaController.java @@ -43,7 +43,7 @@ public class LlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/PufferFishController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/PufferFishController.java index bbe34c868..1e8f5c265 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/PufferFishController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/PufferFishController.java @@ -249,7 +249,7 @@ public class PufferFishController extends MobEntityController { } super.tick(); if (npc != null && npc.hasTrait(PufferFishTrait.class)) { - setPuffState(npc.getTrait(PufferFishTrait.class).getPuffState()); + setPuffState(npc.getOrAddTrait(PufferFishTrait.class).getPuffState()); } } diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/TraderLlamaController.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/TraderLlamaController.java index 1211d2791..9c0288a70 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/TraderLlamaController.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/entity/TraderLlamaController.java @@ -45,7 +45,7 @@ public class TraderLlamaController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/trait/Commands.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/trait/Commands.java index bf488b01d..24c0ad464 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/trait/Commands.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/trait/Commands.java @@ -59,7 +59,7 @@ public class Commands { permission = "citizens.npc.bee") @Requirements(selected = true, ownership = true, types = EntityType.BEE) public void bee(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BeeTrait trait = npc.getTrait(BeeTrait.class); + BeeTrait trait = npc.getOrAddTrait(BeeTrait.class); String output = ""; if (args.hasValueFlag("anger")) { int anger = args.getFlagInteger("anger"); @@ -95,7 +95,7 @@ public class Commands { max = 1) @Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON }) public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - BossBarTrait trait = npc.getTrait(BossBarTrait.class); + BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class); if (args.hasValueFlag("color")) { BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color")); trait.setColor(color); @@ -130,7 +130,7 @@ public class Commands { permission = "citizens.npc.cat") @Requirements(selected = true, ownership = true, types = EntityType.CAT) public void cat(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - CatTrait trait = npc.getTrait(CatTrait.class); + CatTrait trait = npc.getOrAddTrait(CatTrait.class); String output = ""; if (args.hasValueFlag("type")) { Cat.Type type = Util.matchEnum(Cat.Type.values(), args.getFlag("type")); @@ -178,7 +178,7 @@ public class Commands { permission = "citizens.npc.fox") @Requirements(selected = true, ownership = true, types = EntityType.FOX) public void fox(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - FoxTrait trait = npc.getTrait(FoxTrait.class); + FoxTrait trait = npc.getOrAddTrait(FoxTrait.class); String output = ""; if (args.hasValueFlag("type")) { Fox.Type type = Util.matchEnum(Fox.Type.values(), args.getFlag("type")); @@ -220,7 +220,7 @@ public class Commands { permission = "citizens.npc.llama") @Requirements(selected = true, ownership = true, types = { EntityType.LLAMA, EntityType.TRADER_LLAMA }) public void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - LlamaTrait trait = npc.getTrait(LlamaTrait.class); + LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class); String output = ""; if (args.hasValueFlag("color") || args.hasValueFlag("colour")) { String colorRaw = args.getFlag("color", args.getFlag("colour")); @@ -251,7 +251,7 @@ public class Commands { permission = "citizens.npc.mushroomcow") @Requirements(selected = true, ownership = true, types = { EntityType.MUSHROOM_COW }) public void mushroomcow(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - MushroomCowTrait trait = npc.getTrait(MushroomCowTrait.class); + MushroomCowTrait trait = npc.getOrAddTrait(MushroomCowTrait.class); boolean hasArg = false; if (args.hasValueFlag("variant")) { MushroomCow.Variant variant = Util.matchEnum(MushroomCow.Variant.values(), args.getFlag("variant")); @@ -280,7 +280,7 @@ public class Commands { permission = "citizens.npc.panda") @Requirements(selected = true, ownership = true, types = EntityType.PANDA) public void panda(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PandaTrait trait = npc.getTrait(PandaTrait.class); + PandaTrait trait = npc.getOrAddTrait(PandaTrait.class); String output = ""; if (args.hasValueFlag("gene")) { Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("gene")); @@ -321,7 +321,7 @@ public class Commands { permission = "citizens.npc.parrot") @Requirements(selected = true, ownership = true, types = EntityType.PARROT) public void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ParrotTrait trait = npc.getTrait(ParrotTrait.class); + ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class); String output = ""; if (args.hasValueFlag("variant")) { String variantRaw = args.getFlag("variant"); @@ -348,7 +348,7 @@ public class Commands { permission = "citizens.npc.phantom") @Requirements(selected = true, ownership = true, types = EntityType.PHANTOM) public void phantom(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PhantomTrait trait = npc.getTrait(PhantomTrait.class); + PhantomTrait trait = npc.getOrAddTrait(PhantomTrait.class); String output = ""; if (args.hasValueFlag("size")) { if (args.getFlagInteger("size") <= 0) { @@ -374,7 +374,7 @@ public class Commands { permission = "citizens.npc.pufferfish") @Requirements(selected = true, ownership = true, types = EntityType.PUFFERFISH) public void pufferfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - PufferFishTrait trait = npc.getTrait(PufferFishTrait.class); + PufferFishTrait trait = npc.getOrAddTrait(PufferFishTrait.class); String output = ""; if (args.hasValueFlag("state")) { int state = Math.min(Math.max(args.getFlagInteger("state"), 0), 3); @@ -396,7 +396,7 @@ public class Commands { permission = "citizens.npc.shulker") @Requirements(selected = true, ownership = true, types = { EntityType.SHULKER }) public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - ShulkerTrait trait = npc.getTrait(ShulkerTrait.class); + ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class); boolean hasArg = false; if (args.hasValueFlag("peek")) { int peek = (byte) args.getFlagInteger("peek"); @@ -430,7 +430,7 @@ public class Commands { 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.getTrait(SnowmanTrait.class); + SnowmanTrait trait = npc.getOrAddTrait(SnowmanTrait.class); boolean hasArg = false; if (args.hasFlag('d')) { boolean isDerp = trait.toggleDerp(); @@ -452,7 +452,7 @@ public class Commands { permission = "citizens.npc.tropicalfish") @Requirements(selected = true, ownership = true, types = EntityType.TROPICAL_FISH) public void tropicalfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - TropicalFishTrait trait = npc.getTrait(TropicalFishTrait.class); + TropicalFishTrait trait = npc.getOrAddTrait(TropicalFishTrait.class); String output = ""; if (args.hasValueFlag("body")) { DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("body")); @@ -498,7 +498,7 @@ public class Commands { permission = "citizens.npc.villager") @Requirements(selected = true, ownership = true, types = EntityType.VILLAGER) public void villager(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - VillagerTrait trait = npc.getTrait(VillagerTrait.class); + VillagerTrait trait = npc.getOrAddTrait(VillagerTrait.class); String output = ""; if (args.hasValueFlag("level")) { if (args.getFlagInteger("level") < 0) { @@ -522,7 +522,7 @@ public class Commands { throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), Joiner.on(',').join(Profession.values())); } - npc.getTrait(VillagerProfession.class).setProfession(parsed); + npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); output += Messaging.tr(Messages.PROFESSION_SET, npc.getName(), args.getFlag("profession")); } if (!output.isEmpty()) { diff --git a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/util/PlayerAnimationImpl.java b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/util/PlayerAnimationImpl.java index d9e2b9c29..0db6a3ccc 100644 --- a/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/util/PlayerAnimationImpl.java +++ b/v1_16_R2/src/main/java/net/citizensnpcs/nms/v1_16_R2/util/PlayerAnimationImpl.java @@ -43,7 +43,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false); diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java index d4ddc5a9d..cfcb3b557 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java @@ -231,7 +231,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public String getSkinName() { - String skinName = npc.getTrait(SkinTrait.class).getSkinName(); + String skinName = npc.getOrAddTrait(SkinTrait.class).getSkinName(); if (skinName == null) { skinName = npc.getName(); } @@ -292,7 +292,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable } boolean navigating = npc.getNavigator().isNavigating(); if (!navigating && getBukkitEntity() != null - && (!npc.hasTrait(Gravity.class) || npc.getTrait(Gravity.class).hasGravity()) + && (!npc.hasTrait(Gravity.class) || npc.getOrAddTrait(Gravity.class).hasGravity()) && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { g(0, 0); } @@ -357,17 +357,17 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public void setSkinName(String name) { - npc.getTrait(SkinTrait.class).setSkinName(name); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name); } @Override public void setSkinName(String name, boolean forceUpdate) { - npc.getTrait(SkinTrait.class).setSkinName(name, forceUpdate); + npc.getOrAddTrait(SkinTrait.class).setSkinName(name, forceUpdate); } @Override public void setSkinPersistent(String skinName, String signature, String data) { - npc.getTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); + npc.getOrAddTrait(SkinTrait.class).setSkinPersistent(skinName, signature, data); } public void setTargetLook(Entity target, float yawOffset, float renderOffset) { @@ -433,7 +433,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; this.cserver = (CraftServer) Bukkit.getServer(); - npc.getTrait(Inventory.class); + npc.getOrAddTrait(Inventory.class); } @Override diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HorseController.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HorseController.java index 3214a3ea7..77389e70b 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HorseController.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HorseController.java @@ -35,7 +35,7 @@ public class HorseController extends MobEntityController { @Override public void spawn(Location at, NPC npc) { - npc.getTrait(HorseModifiers.class); + npc.getOrAddTrait(HorseModifiers.class); super.spawn(at, npc); } diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java index d29e06a63..9650736f5 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java @@ -42,7 +42,7 @@ public class PlayerAnimationImpl { } final NPC holder = registry.createNPC(EntityType.ARMOR_STAND, ""); holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + ArmorStandTrait trait = holder.getOrAddTrait(ArmorStandTrait.class); trait.setGravity(false); trait.setHasArms(false); trait.setHasBaseplate(false);