diff --git a/README b/README index 4e6f69a2c..a45bef5cb 100644 --- a/README +++ b/README @@ -1 +1,5 @@ ---------- Citizens2 README ---------- + +Citizens is an NPC plugin for the Bukkit API. It was first released on March 5, 2011, and has since +seen numerous updates. Citizens provides an API itself, which developers can use to create their +own NPC characters. \ No newline at end of file diff --git a/TODO b/TODO deleted file mode 100644 index 58427c9e8..000000000 --- a/TODO +++ /dev/null @@ -1,5 +0,0 @@ --Citizens2 TODO List- - --Add NPC templates --Finish pathfinding API --Add database support (MySQL and/or SQLite) \ No newline at end of file diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index 9b9468495..2105c17d5 100644 Binary files a/lib/CitizensAPI.jar and b/lib/CitizensAPI.jar differ diff --git a/src/net/citizensnpcs/Citizens.java b/src/net/citizensnpcs/Citizens.java index 7b1bef531..a1eed9e86 100644 --- a/src/net/citizensnpcs/Citizens.java +++ b/src/net/citizensnpcs/Citizens.java @@ -14,10 +14,10 @@ import net.citizensnpcs.api.trait.Character; import net.citizensnpcs.api.trait.DefaultInstanceFactory; import net.citizensnpcs.api.trait.InstanceFactory; import net.citizensnpcs.api.trait.Trait; -import net.citizensnpcs.api.trait.builtin.Inventory; -import net.citizensnpcs.api.trait.builtin.Owner; -import net.citizensnpcs.api.trait.builtin.SpawnLocation; -import net.citizensnpcs.api.trait.builtin.Spawned; +import net.citizensnpcs.api.trait.trait.Inventory; +import net.citizensnpcs.api.trait.trait.Owner; +import net.citizensnpcs.api.trait.trait.SpawnLocation; +import net.citizensnpcs.api.trait.trait.Spawned; import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.api.util.DatabaseStorage; import net.citizensnpcs.api.util.Storage; diff --git a/src/net/citizensnpcs/EventListen.java b/src/net/citizensnpcs/EventListen.java index 4298e9a26..13ae133e5 100644 --- a/src/net/citizensnpcs/EventListen.java +++ b/src/net/citizensnpcs/EventListen.java @@ -7,8 +7,8 @@ import java.util.Map; import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.trait.builtin.Owner; -import net.citizensnpcs.api.trait.builtin.SpawnLocation; +import net.citizensnpcs.api.trait.trait.Owner; +import net.citizensnpcs.api.trait.trait.SpawnLocation; import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.util.Messaging; diff --git a/src/net/citizensnpcs/command/Command.java b/src/net/citizensnpcs/command/Command.java index e54630c82..103e8e601 100644 --- a/src/net/citizensnpcs/command/Command.java +++ b/src/net/citizensnpcs/command/Command.java @@ -1,21 +1,3 @@ -// $Id$ -/* - * Copyright (C) 2010 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command; import java.lang.annotation.Retention; @@ -37,6 +19,6 @@ public @interface Command { String[] modifiers() default ""; String usage() default ""; - + String permission() default ""; } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/CommandManager.java b/src/net/citizensnpcs/command/CommandManager.java index 2fe8499bb..b38442d83 100644 --- a/src/net/citizensnpcs/command/CommandManager.java +++ b/src/net/citizensnpcs/command/CommandManager.java @@ -1,22 +1,3 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command; import java.lang.reflect.InvocationTargetException; @@ -33,7 +14,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.trait.builtin.Owner; +import net.citizensnpcs.api.trait.trait.Owner; import net.citizensnpcs.command.exception.CommandException; import net.citizensnpcs.command.exception.CommandUsageException; import net.citizensnpcs.command.exception.NoPermissionsException; diff --git a/src/net/citizensnpcs/command/Injector.java b/src/net/citizensnpcs/command/Injector.java index 3a4a01e6e..030d88096 100644 --- a/src/net/citizensnpcs/command/Injector.java +++ b/src/net/citizensnpcs/command/Injector.java @@ -1,9 +1,3 @@ -// $Id$ -/* - * Copyright (C) 2010 sk89q - * All rights reserved. - */ - package net.citizensnpcs.command; import java.lang.reflect.Constructor; @@ -13,7 +7,6 @@ import java.util.logging.Level; import net.citizensnpcs.util.Messaging; public class Injector { - private Object[] args; private Class[] argClasses; diff --git a/src/net/citizensnpcs/command/command/NPCCommands.java b/src/net/citizensnpcs/command/command/NPCCommands.java index 7974bfd9c..32a03a6eb 100644 --- a/src/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/net/citizensnpcs/command/command/NPCCommands.java @@ -5,10 +5,10 @@ import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.Character; import net.citizensnpcs.api.trait.InstanceFactory; -import net.citizensnpcs.api.trait.builtin.MobType; -import net.citizensnpcs.api.trait.builtin.Owner; -import net.citizensnpcs.api.trait.builtin.SpawnLocation; -import net.citizensnpcs.api.trait.builtin.Spawned; +import net.citizensnpcs.api.trait.trait.MobType; +import net.citizensnpcs.api.trait.trait.Owner; +import net.citizensnpcs.api.trait.trait.SpawnLocation; +import net.citizensnpcs.api.trait.trait.Spawned; import net.citizensnpcs.command.Command; import net.citizensnpcs.command.CommandContext; import net.citizensnpcs.command.Requirements; @@ -41,8 +41,14 @@ public class NPCCommands { Messaging.send(player, " Type: " + npc.getTrait(MobType.class).getType()); } - @Command(aliases = { "npc" }, usage = "create [name] --type (type) --char (character)", desc = "Create a new NPC", - modifiers = { "create" }, min = 2, max = 5, permission = "npc.create") + @Command( + aliases = { "npc" }, + usage = "create [name] --type (type) --char (character)", + desc = "Create a new NPC", + modifiers = { "create" }, + min = 2, + max = 5, + permission = "npc.create") @Requirements public void createNPC(CommandContext args, Player player, NPC npc) { String name = args.getString(1); @@ -64,9 +70,8 @@ public class NPCCommands { if (args.hasValueFlag("char")) { String character = args.getFlag("char").toLowerCase(); if (characterManager.getInstance(character, create) == null) { - Messaging.sendError(player, - "The character '" + args.getFlag("char") + "' does not exist. " + create.getName() - + " was created at your location without a character."); + Messaging.sendError(player, "The character '" + args.getFlag("char") + "' does not exist. " + + create.getName() + " was created at your location without a character."); success = false; } else { create.setCharacter(characterManager.getInstance(character, create)); @@ -87,16 +92,27 @@ public class NPCCommands { Messaging.send(player, successMsg); } - @Command(aliases = { "npc" }, usage = "despawn", desc = "Despawn an NPC", modifiers = { "despawn" }, min = 1, - max = 1, permission = "npc.despawn") + @Command( + aliases = { "npc" }, + usage = "despawn", + desc = "Despawn an NPC", + modifiers = { "despawn" }, + min = 1, + max = 1, + permission = "npc.despawn") public void despawnNPC(CommandContext args, Player player, NPC npc) { npc.getTrait(Spawned.class).setSpawned(false); npc.despawn(); Messaging.send(player, ChatColor.GREEN + "You despawned " + StringHelper.wrap(npc.getName()) + "."); } - @Command(aliases = { "npc" }, usage = "remove (all)", desc = "Remove an NPC", modifiers = { "remove" }, min = 1, - max = 2) + @Command( + aliases = { "npc" }, + usage = "remove (all)", + desc = "Remove an NPC", + modifiers = { "remove" }, + min = 1, + max = 2) @Requirements public void removeNPC(CommandContext args, Player player, NPC npc) { if (args.argsLength() == 2) { @@ -124,8 +140,14 @@ public class NPCCommands { Messaging.send(player, "You permanently removed " + StringHelper.wrap(npc.getName()) + "."); } - @Command(aliases = { "npc" }, usage = "rename [name]", desc = "Rename an NPC", modifiers = { "rename" }, min = 2, - max = 2, permission = "npc.rename") + @Command( + aliases = { "npc" }, + usage = "rename [name]", + desc = "Rename an NPC", + modifiers = { "rename" }, + min = 2, + max = 2, + permission = "npc.rename") public void renameNPC(CommandContext args, Player player, NPC npc) { String oldName = npc.getName(); String newName = args.getString(1); @@ -134,13 +156,18 @@ public class NPCCommands { newName = newName.substring(0, 15); } npc.setName(newName); - Messaging.send(player, - ChatColor.GREEN + "You renamed " + StringHelper.wrap(oldName) + " to " + StringHelper.wrap(newName) - + "."); + Messaging.send(player, ChatColor.GREEN + "You renamed " + StringHelper.wrap(oldName) + " to " + + StringHelper.wrap(newName) + "."); } - @Command(aliases = { "npc" }, usage = "select [id]", desc = "Selects an NPC with the given ID", - modifiers = { "select" }, min = 2, max = 2, permission = "npc.select") + @Command( + aliases = { "npc" }, + usage = "select [id]", + desc = "Selects an NPC with the given ID", + modifiers = { "select" }, + min = 2, + max = 2, + permission = "npc.select") @Requirements(ownership = true) public void selectNPC(CommandContext args, Player player, NPC npc) { NPC toSelect = npcManager.getNPC(args.getInteger(1)); @@ -156,8 +183,13 @@ public class NPCCommands { Messaging.sendWithNPC(player, Setting.SELECTION_MESSAGE.asString(), toSelect); } - @Command(aliases = { "npc" }, usage = "character [character]", desc = "Sets the character of an NPC", - modifiers = { "character" }, min = 2, max = 2) + @Command( + aliases = { "npc" }, + usage = "character [character]", + desc = "Sets the character of an NPC", + modifiers = { "character" }, + min = 2, + max = 2) public void setNPCCharacter(CommandContext args, Player player, NPC npc) { String name = args.getString(1).toLowerCase(); Character character = characterManager.getInstance(name, npc); @@ -174,13 +206,19 @@ public class NPCCommands { Messaging.sendError(player, "You don't have permission to execute that command."); return; } - Messaging.send(player, - StringHelper.wrap(npc.getName() + "'s") + " character is now '" + StringHelper.wrap(name) + "'."); + Messaging.send(player, StringHelper.wrap(npc.getName() + "'s") + " character is now '" + + StringHelper.wrap(name) + "'."); npc.setCharacter(character); } - @Command(aliases = { "npc" }, usage = "spawn [id]", desc = "Spawn an existing NPC", modifiers = { "spawn" }, - min = 2, max = 2, permission = "npc.spawn") + @Command( + aliases = { "npc" }, + usage = "spawn [id]", + desc = "Spawn an existing NPC", + modifiers = { "spawn" }, + min = 2, + max = 2, + permission = "npc.spawn") @Requirements public void spawnNPC(CommandContext args, Player player, NPC npc) { NPC respawn = npcManager.getNPC(args.getInteger(1)); @@ -204,8 +242,14 @@ public class NPCCommands { } } - @Command(aliases = { "npc" }, usage = "tphere", desc = "Teleport an NPC to your location", - modifiers = { "tphere" }, min = 1, max = 1, permission = "npc.tphere") + @Command( + aliases = { "npc" }, + usage = "tphere", + desc = "Teleport an NPC to your location", + modifiers = { "tphere" }, + min = 1, + max = 1, + permission = "npc.tphere") public void teleportNPCToPlayer(CommandContext args, Player player, NPC npc) { // Spawn the NPC if it isn't spawned to prevent NPEs if (!npc.isSpawned()) @@ -215,8 +259,14 @@ public class NPCCommands { Messaging.send(player, StringHelper.wrap(npc.getName()) + " was teleported to your location."); } - @Command(aliases = { "npc" }, usage = "tp", desc = "Teleport to an NPC", modifiers = { "tp", "teleport" }, min = 1, - max = 1, permission = "npc.tp") + @Command( + aliases = { "npc" }, + usage = "tp", + desc = "Teleport to an NPC", + modifiers = { "tp", "teleport" }, + min = 1, + max = 1, + permission = "npc.tp") public void teleportToNPC(CommandContext args, Player player, NPC npc) { // Spawn the NPC if it isn't spawned to prevent NPEs if (!npc.isSpawned()) diff --git a/src/net/citizensnpcs/command/exception/CommandException.java b/src/net/citizensnpcs/command/exception/CommandException.java index d219da6b1..0039563ee 100644 --- a/src/net/citizensnpcs/command/exception/CommandException.java +++ b/src/net/citizensnpcs/command/exception/CommandException.java @@ -1,36 +1,17 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010, 2011 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command.exception; public class CommandException extends Exception { - public CommandException() { - super(); - } + private static final long serialVersionUID = 870638193072101739L; - public CommandException(String message) { - super(message); - } + public CommandException() { + super(); + } - public CommandException(Throwable t) { - super(t); - } + public CommandException(String message) { + super(message); + } - private static final long serialVersionUID = 870638193072101739L; + public CommandException(Throwable t) { + super(t); + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/exception/CommandUsageException.java b/src/net/citizensnpcs/command/exception/CommandUsageException.java index aa4a2be2c..98bda1ca6 100644 --- a/src/net/citizensnpcs/command/exception/CommandUsageException.java +++ b/src/net/citizensnpcs/command/exception/CommandUsageException.java @@ -1,35 +1,16 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010, 2011 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command.exception; public class CommandUsageException extends CommandException { - private static final long serialVersionUID = -6761418114414516542L; + private static final long serialVersionUID = -6761418114414516542L; - protected String usage; + protected String usage; - public CommandUsageException(String message, String usage) { - super(message); - this.usage = usage; - } + public CommandUsageException(String message, String usage) { + super(message); + this.usage = usage; + } - public String getUsage() { - return usage; - } + public String getUsage() { + return usage; + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/exception/NoPermissionsException.java b/src/net/citizensnpcs/command/exception/NoPermissionsException.java index 7e09553f0..87299abdb 100644 --- a/src/net/citizensnpcs/command/exception/NoPermissionsException.java +++ b/src/net/citizensnpcs/command/exception/NoPermissionsException.java @@ -1,22 +1,3 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010, 2011 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command.exception; public class NoPermissionsException extends CommandException { diff --git a/src/net/citizensnpcs/command/exception/RequirementMissingException.java b/src/net/citizensnpcs/command/exception/RequirementMissingException.java index 81c2a9e77..43549ce14 100644 --- a/src/net/citizensnpcs/command/exception/RequirementMissingException.java +++ b/src/net/citizensnpcs/command/exception/RequirementMissingException.java @@ -1,10 +1,9 @@ package net.citizensnpcs.command.exception; public class RequirementMissingException extends CommandException { + private static final long serialVersionUID = -4299721983654504028L; - public RequirementMissingException(String message) { - super(message); - } - - private static final long serialVersionUID = -4299721983654504028L; + public RequirementMissingException(String message) { + super(message); + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/exception/UnhandledCommandException.java b/src/net/citizensnpcs/command/exception/UnhandledCommandException.java index 6e6c908c6..d7e3c3f1f 100644 --- a/src/net/citizensnpcs/command/exception/UnhandledCommandException.java +++ b/src/net/citizensnpcs/command/exception/UnhandledCommandException.java @@ -1,24 +1,5 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010, 2011 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command.exception; public class UnhandledCommandException extends CommandException { - private static final long serialVersionUID = 3370887306593968091L; + private static final long serialVersionUID = 3370887306593968091L; } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/exception/WrappedCommandException.java b/src/net/citizensnpcs/command/exception/WrappedCommandException.java index f82a9ed7a..66680bee5 100644 --- a/src/net/citizensnpcs/command/exception/WrappedCommandException.java +++ b/src/net/citizensnpcs/command/exception/WrappedCommandException.java @@ -1,28 +1,9 @@ -// $Id$ -/* - * WorldEdit - * Copyright (C) 2010, 2011 sk89q - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.citizensnpcs.command.exception; public class WrappedCommandException extends CommandException { - public WrappedCommandException(Throwable t) { - super(t); - } + private static final long serialVersionUID = -4075721444847778918L; - private static final long serialVersionUID = -4075721444847778918L; + public WrappedCommandException(Throwable t) { + super(t); + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/CitizensNPC.java b/src/net/citizensnpcs/npc/CitizensNPC.java index c23fb7e8c..4ce31b39d 100644 --- a/src/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/net/citizensnpcs/npc/CitizensNPC.java @@ -5,9 +5,9 @@ import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.event.NPCDespawnEvent; import net.citizensnpcs.api.event.NPCSpawnEvent; import net.citizensnpcs.api.npc.AbstractNPC; -import net.citizensnpcs.api.trait.builtin.Inventory; -import net.citizensnpcs.api.trait.builtin.SpawnLocation; -import net.citizensnpcs.api.trait.builtin.Spawned; +import net.citizensnpcs.api.trait.trait.Inventory; +import net.citizensnpcs.api.trait.trait.SpawnLocation; +import net.citizensnpcs.api.trait.trait.Spawned; import net.citizensnpcs.npc.ai.CitizensAI; import net.citizensnpcs.util.Messaging; diff --git a/src/net/citizensnpcs/npc/CitizensNPCManager.java b/src/net/citizensnpcs/npc/CitizensNPCManager.java index 521e19b57..b9d46f701 100644 --- a/src/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/net/citizensnpcs/npc/CitizensNPCManager.java @@ -9,7 +9,7 @@ import net.citizensnpcs.api.event.NPCSelectEvent; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCManager; import net.citizensnpcs.api.trait.Character; -import net.citizensnpcs.api.trait.builtin.SpawnLocation; +import net.citizensnpcs.api.trait.trait.SpawnLocation; import net.citizensnpcs.api.util.Storage; import net.citizensnpcs.util.ByIdArray; import net.citizensnpcs.util.NPCBuilder; diff --git a/src/net/citizensnpcs/npc/NPCInventory.java b/src/net/citizensnpcs/npc/NPCInventory.java index f4aa711df..1696212c9 100644 --- a/src/net/citizensnpcs/npc/NPCInventory.java +++ b/src/net/citizensnpcs/npc/NPCInventory.java @@ -88,7 +88,7 @@ public class NPCInventory implements IInventory { index++; } - npc.getTrait(net.citizensnpcs.api.trait.builtin.Inventory.class).setContents(bukkitItems); + npc.getTrait(net.citizensnpcs.api.trait.trait.Inventory.class).setContents(bukkitItems); } @Override diff --git a/src/net/citizensnpcs/trait/waypoint/WaypointProvider.java b/src/net/citizensnpcs/trait/waypoint/WaypointProvider.java index 5553b36c5..f517325ed 100644 --- a/src/net/citizensnpcs/trait/waypoint/WaypointProvider.java +++ b/src/net/citizensnpcs/trait/waypoint/WaypointProvider.java @@ -7,6 +7,7 @@ import net.citizensnpcs.editor.Editor; import org.bukkit.entity.Player; public interface WaypointProvider { + public Editor createEditor(Player player); public void load(DataKey key); diff --git a/src/net/citizensnpcs/util/Messaging.java b/src/net/citizensnpcs/util/Messaging.java index c30f0bf88..c40859bb4 100644 --- a/src/net/citizensnpcs/util/Messaging.java +++ b/src/net/citizensnpcs/util/Messaging.java @@ -4,7 +4,7 @@ import java.util.logging.Level; import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.trait.builtin.Owner; +import net.citizensnpcs.api.trait.trait.Owner; import org.bukkit.Bukkit; import org.bukkit.ChatColor;