2013-02-06 08:17:21 +01:00
|
|
|
package net.citizensnpcs.commands;
|
2012-08-05 15:07:42 +02:00
|
|
|
|
2012-08-25 04:40:36 +02:00
|
|
|
import java.util.List;
|
|
|
|
|
2012-08-05 15:07:42 +02:00
|
|
|
import net.citizensnpcs.api.CitizensAPI;
|
2013-01-25 14:48:28 +01:00
|
|
|
import net.citizensnpcs.api.command.Command;
|
|
|
|
import net.citizensnpcs.api.command.CommandConfigurable;
|
|
|
|
import net.citizensnpcs.api.command.CommandContext;
|
2013-02-06 08:17:21 +01:00
|
|
|
import net.citizensnpcs.api.command.Requirements;
|
2013-01-25 14:48:28 +01:00
|
|
|
import net.citizensnpcs.api.command.exception.CommandException;
|
|
|
|
import net.citizensnpcs.api.command.exception.NoPermissionsException;
|
2012-08-05 15:07:42 +02:00
|
|
|
import net.citizensnpcs.api.npc.NPC;
|
|
|
|
import net.citizensnpcs.api.trait.Trait;
|
2013-01-25 14:48:28 +01:00
|
|
|
import net.citizensnpcs.api.util.Messaging;
|
2012-10-04 08:58:35 +02:00
|
|
|
import net.citizensnpcs.util.Messages;
|
2012-08-05 15:07:42 +02:00
|
|
|
import net.citizensnpcs.util.StringHelper;
|
|
|
|
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
|
2012-08-25 04:40:36 +02:00
|
|
|
import com.google.common.base.Joiner;
|
|
|
|
import com.google.common.base.Splitter;
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
2012-09-16 08:35:04 +02:00
|
|
|
@Requirements(selected = true, ownership = true)
|
2012-08-05 15:07:42 +02:00
|
|
|
public class TraitCommands {
|
2013-01-04 07:57:21 +01:00
|
|
|
@Command(aliases = { "trait", "tr" }, usage = "add [trait name]...", desc = "Adds traits to the NPC", modifiers = {
|
2013-02-23 05:27:00 +01:00
|
|
|
"add", "a" }, min = 1, permission = "citizens.npc.trait")
|
2012-08-05 15:07:42 +02:00
|
|
|
public void add(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
2012-08-25 04:40:36 +02:00
|
|
|
List<String> added = Lists.newArrayList();
|
|
|
|
List<String> failed = Lists.newArrayList();
|
|
|
|
for (String traitName : Splitter.on(',').split(args.getJoinedStrings(0))) {
|
2013-02-18 09:54:52 +01:00
|
|
|
if (!sender.hasPermission("citizens.npc.trait." + traitName)) {
|
2012-08-25 04:40:36 +02:00
|
|
|
failed.add(String.format("%s: No permission", traitName));
|
2013-02-18 09:54:52 +01:00
|
|
|
continue;
|
|
|
|
}
|
2012-08-25 04:40:36 +02:00
|
|
|
|
|
|
|
Class<? extends Trait> clazz = CitizensAPI.getTraitFactory().getTraitClass(traitName);
|
|
|
|
if (clazz == null) {
|
|
|
|
failed.add(String.format("%s: Trait not found", traitName));
|
|
|
|
continue;
|
|
|
|
}
|
2012-09-16 08:35:04 +02:00
|
|
|
if (npc.hasTrait(clazz)) {
|
|
|
|
failed.add(String.format("%s: Already added", traitName));
|
2012-08-25 04:40:36 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
npc.addTrait(clazz);
|
|
|
|
added.add(StringHelper.wrap(traitName));
|
2012-08-05 15:07:42 +02:00
|
|
|
}
|
2012-08-25 04:40:36 +02:00
|
|
|
if (added.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_ADDED, Joiner.on(", ").join(added));
|
2012-08-25 04:40:36 +02:00
|
|
|
if (failed.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_FAILED_TO_ADD, Joiner.on(", ").join(failed));
|
2012-08-05 15:07:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Command(
|
2012-10-15 10:55:13 +02:00
|
|
|
aliases = { "traitc", "trc" },
|
2012-10-15 14:39:57 +02:00
|
|
|
usage = "[trait name] (flags)",
|
2012-08-05 15:07:42 +02:00
|
|
|
desc = "Configures a trait",
|
|
|
|
modifiers = { "*" },
|
2012-10-15 14:39:57 +02:00
|
|
|
min = 1,
|
2012-08-05 15:07:42 +02:00
|
|
|
flags = "*",
|
2013-02-23 05:27:00 +01:00
|
|
|
permission = "citizens.npc.trait-configure")
|
2012-08-05 15:07:42 +02:00
|
|
|
public void configure(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
2012-08-06 11:22:04 +02:00
|
|
|
String traitName = args.getString(0);
|
2012-08-05 15:07:42 +02:00
|
|
|
if (!sender.hasPermission("citizens.npc.trait-configure." + traitName))
|
|
|
|
throw new NoPermissionsException();
|
2012-08-06 11:26:17 +02:00
|
|
|
Class<? extends Trait> clazz = CitizensAPI.getTraitFactory().getTraitClass(args.getString(0));
|
2012-08-05 15:07:42 +02:00
|
|
|
if (clazz == null)
|
2012-10-04 08:58:35 +02:00
|
|
|
throw new CommandException(Messages.TRAIT_NOT_FOUND);
|
2012-10-15 14:55:54 +02:00
|
|
|
if (!CommandConfigurable.class.isAssignableFrom(clazz))
|
2012-10-04 08:58:35 +02:00
|
|
|
throw new CommandException(Messages.TRAIT_NOT_CONFIGURABLE);
|
2012-08-05 15:07:42 +02:00
|
|
|
if (!npc.hasTrait(clazz))
|
2012-10-04 08:58:35 +02:00
|
|
|
throw new CommandException(Messages.TRAIT_NOT_FOUND_ON_NPC);
|
2012-08-05 15:07:42 +02:00
|
|
|
CommandConfigurable trait = (CommandConfigurable) npc.getTrait(clazz);
|
|
|
|
trait.configure(args);
|
|
|
|
}
|
2012-09-16 08:35:04 +02:00
|
|
|
|
|
|
|
@Command(
|
|
|
|
aliases = { "trait", "tr" },
|
|
|
|
usage = "remove [trait name]...",
|
|
|
|
desc = "Removes traits on the NPC",
|
|
|
|
modifiers = { "remove", "rem", "r" },
|
|
|
|
min = 1,
|
2013-02-23 05:27:00 +01:00
|
|
|
permission = "citizens.npc.trait")
|
2012-09-16 08:35:04 +02:00
|
|
|
public void remove(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
|
|
List<String> removed = Lists.newArrayList();
|
|
|
|
List<String> failed = Lists.newArrayList();
|
|
|
|
for (String traitName : Splitter.on(',').split(args.getJoinedStrings(0))) {
|
2013-02-18 09:54:52 +01:00
|
|
|
if (!sender.hasPermission("citizens.npc.trait." + traitName)) {
|
2012-09-16 08:35:04 +02:00
|
|
|
failed.add(String.format("%s: No permission", traitName));
|
2013-02-18 09:54:52 +01:00
|
|
|
continue;
|
|
|
|
}
|
2012-09-16 08:35:04 +02:00
|
|
|
|
|
|
|
Class<? extends Trait> clazz = CitizensAPI.getTraitFactory().getTraitClass(traitName);
|
|
|
|
if (clazz == null) {
|
|
|
|
failed.add(String.format("%s: Trait not found", traitName));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
boolean hasTrait = npc.hasTrait(clazz);
|
|
|
|
if (!hasTrait) {
|
|
|
|
failed.add(String.format("%s: Trait not attached", traitName));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
npc.removeTrait(clazz);
|
|
|
|
removed.add(StringHelper.wrap(traitName));
|
|
|
|
}
|
|
|
|
if (removed.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_REMOVED, Joiner.on(", ").join(removed));
|
2012-09-16 08:35:04 +02:00
|
|
|
if (failed.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.FAILED_TO_REMOVE, Joiner.on(", ").join(failed));
|
2012-09-16 08:35:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Command(
|
|
|
|
aliases = { "trait", "tr" },
|
|
|
|
usage = "[trait name], [trait name]...",
|
|
|
|
desc = "Toggles traits on the NPC",
|
|
|
|
modifiers = { "*" },
|
|
|
|
min = 1,
|
2013-02-23 05:27:00 +01:00
|
|
|
permission = "citizens.npc.trait")
|
2012-09-16 08:35:04 +02:00
|
|
|
public void toggle(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
|
|
List<String> added = Lists.newArrayList();
|
|
|
|
List<String> removed = Lists.newArrayList();
|
|
|
|
List<String> failed = Lists.newArrayList();
|
|
|
|
for (String traitName : Splitter.on(',').split(args.getJoinedStrings(0))) {
|
2013-02-18 09:54:52 +01:00
|
|
|
if (!sender.hasPermission("citizens.npc.trait." + traitName)) {
|
2012-09-16 08:35:04 +02:00
|
|
|
failed.add(String.format("%s: No permission", traitName));
|
2013-02-18 09:54:52 +01:00
|
|
|
continue;
|
|
|
|
}
|
2012-09-16 08:35:04 +02:00
|
|
|
|
|
|
|
Class<? extends Trait> clazz = CitizensAPI.getTraitFactory().getTraitClass(traitName);
|
|
|
|
if (clazz == null) {
|
|
|
|
failed.add(String.format("%s: Trait not found", traitName));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
boolean remove = npc.hasTrait(clazz);
|
|
|
|
if (remove) {
|
|
|
|
npc.removeTrait(clazz);
|
|
|
|
removed.add(StringHelper.wrap(traitName));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
npc.addTrait(clazz);
|
|
|
|
added.add(StringHelper.wrap(traitName));
|
|
|
|
}
|
|
|
|
if (added.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_ADDED, Joiner.on(", ").join(added));
|
2012-09-16 08:35:04 +02:00
|
|
|
if (removed.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_REMOVED, Joiner.on(", ").join(removed));
|
2012-09-16 08:35:04 +02:00
|
|
|
if (failed.size() > 0)
|
2012-10-04 08:58:35 +02:00
|
|
|
Messaging.sendTr(sender, Messages.TRAITS_FAILED_TO_CHANGE, Joiner.on(", ").join(failed));
|
2012-09-16 08:35:04 +02:00
|
|
|
}
|
2012-08-05 15:07:42 +02:00
|
|
|
}
|