Implement new flag command API, fix hologram line display

This commit is contained in:
fullwall 2022-09-07 02:11:07 +08:00
parent 61b71cb2d2
commit a316a87711
19 changed files with 379 additions and 356 deletions

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@ import net.citizensnpcs.api.ai.TeleportStuckAction;
import net.citizensnpcs.api.astar.pathfinder.ChunkBlockSource;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.hpastar.HPAGraph;
@ -39,7 +40,8 @@ public class WaypointCommands {
min = 4,
max = 5,
permission = "citizens.waypoints.add")
public void add(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public void add(CommandContext args, CommandSender sender, NPC npc, @Flag("index") Integer index)
throws CommandException {
WaypointProvider provider = npc.getOrAddTrait(Waypoints.class).getCurrentProvider();
if (!(provider instanceof LinearWaypointProvider))
throw new CommandException();
@ -48,7 +50,7 @@ public class WaypointCommands {
if (world == null)
throw new CommandException(Messages.WORLD_NOT_FOUND);
Location loc = new Location(world, args.getInteger(1), args.getInteger(2), args.getInteger(3));
int index = args.getFlagInteger("index", waypoints.size());
int idx = index == null ? waypoints.size() : index;
waypoints.add(index, new Waypoint(loc));
Messaging.sendTr(sender, Messages.WAYPOINT_ADDED, Util.prettyPrintLocation(loc), index);
}

View File

@ -377,6 +377,9 @@ public class HologramTrait extends Trait {
}
public HologramLine(String text, boolean persist, int ticks) {
this.text = text;
this.persist = persist;
this.ticks = ticks;
}
}

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.EntityType;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -65,11 +66,11 @@ public class AxolotlTrait extends Trait {
flags = "d",
permission = "citizens.npc.axolotl")
@Requirements(selected = true, ownership = true, types = EntityType.AXOLOTL)
public static void axolotl(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void axolotl(CommandContext args, CommandSender sender, NPC npc,
@Flag("variant") Axolotl.Variant variant) throws CommandException {
AxolotlTrait trait = npc.getOrAddTrait(AxolotlTrait.class);
String output = "";
if (args.hasValueFlag("variant")) {
Axolotl.Variant variant = Util.matchEnum(Axolotl.Variant.values(), args.getFlag("variant"));
if (variant == null) {
throw new CommandException(Messages.INVALID_AXOLOTL_VARIANT,
Util.listValuesPretty(Axolotl.Variant.values()));

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.EntityType;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -69,11 +70,11 @@ public class BeeTrait extends Trait {
flags = "sn",
permission = "citizens.npc.bee")
@Requirements(selected = true, ownership = true, types = EntityType.BEE)
public static void bee(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void bee(CommandContext args, CommandSender sender, NPC npc, @Flag("anger") Integer anger)
throws CommandException {
BeeTrait trait = npc.getOrAddTrait(BeeTrait.class);
String output = "";
if (args.hasValueFlag("anger")) {
int anger = args.getFlagInteger("anger");
if (anger != null) {
if (anger < 0) {
throw new CommandException(Messages.INVALID_BEE_ANGER);
}

View File

@ -21,6 +21,7 @@ import com.google.common.collect.Lists;
import net.citizensnpcs.Settings.Setting;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.npc.NPC;
@ -196,38 +197,34 @@ public class BossBarTrait extends Trait {
min = 1,
max = 1)
@Requirements(selected = true, ownership = true)
public static void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void bossbar(CommandContext args, CommandSender sender, NPC npc, @Flag("style") BarStyle style,
@Flag("track") String track, @Flag("color") BarColor color, @Flag("visible") Boolean visible,
@Flag("title") String title, @Flag("flags") String flags) throws CommandException {
BossBarTrait trait = npc.getOrAddTrait(BossBarTrait.class);
if (args.hasValueFlag("style")) {
BarStyle style = Util.matchEnum(BarStyle.values(), args.getFlag("style"));
if (style != null) {
trait.setStyle(style);
}
if (style != null) {
trait.setStyle(style);
}
if (args.hasValueFlag("color")) {
BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color"));
if (color != null) {
trait.setColor(color);
}
if (color != null) {
trait.setColor(color);
}
if (args.hasValueFlag("track")) {
trait.setTrackVariable(args.getFlag("track"));
if (track != null) {
trait.setTrackVariable(track);
}
if (args.hasValueFlag("title")) {
trait.setTitle(Colorizer.parseColors(args.getFlag("title")));
if (title != null) {
trait.setTitle(Colorizer.parseColors(title));
}
if (args.hasValueFlag("visible")) {
trait.setVisible(Boolean.parseBoolean(args.getFlag("visible")));
if (visible != null) {
trait.setVisible(visible);
}
if (args.hasValueFlag("flags")) {
List<BarFlag> flags = Lists.newArrayList();
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(args.getFlag("flags"))) {
if (flags != null) {
List<BarFlag> parsed = Lists.newArrayList();
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(flags)) {
BarFlag flag = Util.matchEnum(BarFlag.values(), s);
if (flag != null) {
flags.add(flag);
parsed.add(flag);
}
}
trait.setFlags(flags);
trait.setFlags(parsed);
}
}

View File

@ -8,6 +8,7 @@ import org.bukkit.entity.Ocelot.Type;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -95,26 +96,27 @@ public class CatTrait extends Trait {
flags = "snl",
permission = "citizens.npc.cat")
@Requirements(selected = true, ownership = true, types = EntityType.CAT)
public static void cat(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void cat(CommandContext args, CommandSender sender, NPC npc, @Flag("ccolor") DyeColor ccolor,
@Flag("type") Cat.Type type) throws CommandException {
CatTrait trait = npc.getOrAddTrait(CatTrait.class);
String output = "";
if (args.hasValueFlag("type")) {
Cat.Type type = Util.matchEnum(Cat.Type.values(), args.getFlag("type"));
if (type == null) {
throw new CommandUsageException(Messages.INVALID_CAT_TYPE, Util.listValuesPretty(Cat.Type.values()));
}
trait.setType(type);
output += ' ' + Messaging.tr(Messages.CAT_TYPE_SET, args.getFlag("type"));
}
if (args.hasValueFlag("ccolor")) {
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("ccolor"));
if (color == null) {
if (ccolor == null) {
throw new CommandUsageException(Messages.INVALID_CAT_COLLAR_COLOR,
Util.listValuesPretty(DyeColor.values()));
}
trait.setCollarColor(color);
trait.setCollarColor(ccolor);
output += ' ' + Messaging.tr(Messages.CAT_COLLAR_COLOR_SET, args.getFlag("ccolor"));
}
if (args.hasFlag('s')) {
trait.setSitting(true);
output += ' ' + Messaging.tr(Messages.CAT_STARTED_SITTING, npc.getName());
@ -122,11 +124,13 @@ public class CatTrait extends Trait {
trait.setSitting(false);
output += ' ' + Messaging.tr(Messages.CAT_STOPPED_SITTING, npc.getName());
}
if (args.hasFlag('l')) {
trait.setLyingDown(!trait.isLyingDown());
output += ' ' + Messaging.tr(trait.isLyingDown() ? Messages.CAT_STARTED_LYING : Messages.CAT_STOPPED_LYING,
npc.getName());
}
if (!output.isEmpty()) {
Messaging.send(sender, output.trim());
} else {

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.Fox;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -84,7 +85,8 @@ public class FoxTrait extends Trait {
max = 1,
permission = "citizens.npc.fox")
@Requirements(selected = true, ownership = true, types = EntityType.FOX)
public static void fox(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void fox(CommandContext args, CommandSender sender, NPC npc, @Flag("sleeping") Boolean sleeping,
@Flag("sitting") Boolean sitting, @Flag("crouching") Boolean crouching) throws CommandException {
FoxTrait trait = npc.getOrAddTrait(FoxTrait.class);
String output = "";
if (args.hasValueFlag("type")) {
@ -96,18 +98,15 @@ public class FoxTrait extends Trait {
trait.setType(type);
output += ' ' + Messaging.tr(Messages.FOX_TYPE_SET, args.getFlag("type"));
}
if (args.hasValueFlag("sleeping")) {
boolean sleeping = Boolean.parseBoolean(args.getFlag("sleeping"));
if (sleeping != null) {
trait.setSleeping(sleeping);
output += ' ' + Messaging.tr(sleeping ? Messages.FOX_SLEEPING_SET : Messages.FOX_SLEEPING_UNSET);
}
if (args.hasValueFlag("sitting")) {
boolean sitting = Boolean.parseBoolean(args.getFlag("sitting"));
if (sitting != null) {
trait.setSitting(sitting);
output += ' ' + Messaging.tr(sitting ? Messages.FOX_SITTING_SET : Messages.FOX_SITTING_UNSET);
}
if (args.hasValueFlag("crouching")) {
boolean crouching = Boolean.parseBoolean(args.getFlag("crouching"));
if (crouching != null) {
trait.setCrouching(crouching);
output += ' ' + Messaging.tr(crouching ? Messages.FOX_CROUCHING_SET : Messages.FOX_CROUCHING_UNSET);
}

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Frog.Variant;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.npc.NPC;
@ -44,22 +45,20 @@ public class FrogTrait extends Trait {
@Command(
aliases = { "npc" },
usage = "frog (--variant variant) (--target [target])",
usage = "frog (--variant variant)",
desc = "Sets frog modifiers",
modifiers = { "frog" },
min = 1,
max = 1,
permission = "citizens.npc.frog")
@Requirements(selected = true, ownership = true, types = EntityType.FROG)
public static void frog(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void frog(CommandContext args, CommandSender sender, NPC npc, @Flag("variant") Frog.Variant variant)
throws CommandException {
FrogTrait trait = npc.getOrAddTrait(FrogTrait.class);
String output = "";
if (args.hasValueFlag("variant")) {
String variantRaw = args.getFlag("variant");
Frog.Variant variant = Util.matchEnum(Frog.Variant.values(), variantRaw);
if (variant == null) {
String valid = Util.listValuesPretty(Frog.Variant.values());
throw new CommandException(Messages.INVALID_FROG_VARIANT, valid);
throw new CommandException(Messages.INVALID_FROG_VARIANT, Util.listValuesPretty(Frog.Variant.values()));
}
trait.setVariant(variant);
output += Messaging.tr(Messages.FROG_VARIANT_SET, Util.prettyEnum(variant));

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Llama.Color;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.CommandMessages;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.npc.NPC;
@ -64,14 +65,13 @@ public class LlamaTrait extends Trait {
max = 1,
permission = "citizens.npc.llama")
@Requirements(selected = true, ownership = true)
public static void llama(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void llama(CommandContext args, CommandSender sender, NPC npc,
@Flag({ "color", "colour" }) Color color, @Flag("strength") Integer strength) throws CommandException {
if (npc.getOrAddTrait(MobType.class).getType().name().contains("LLAMA"))
throw new CommandException(CommandMessages.REQUIREMENTS_INVALID_MOB_TYPE);
LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class);
String output = "";
if (args.hasValueFlag("color") || args.hasValueFlag("colour")) {
String colorRaw = args.getFlag("color", args.getFlag("colour"));
Color color = Util.matchEnum(Color.values(), colorRaw);
if (args.hasAnyValueFlag("color", "colour")) {
if (color == null) {
String valid = Util.listValuesPretty(Color.values());
throw new CommandException(Messages.INVALID_LLAMA_COLOR, valid);
@ -79,10 +79,12 @@ public class LlamaTrait extends Trait {
trait.setColor(color);
output += Messaging.tr(Messages.LLAMA_COLOR_SET, Util.prettyEnum(color));
}
if (args.hasValueFlag("strength")) {
trait.setStrength(Math.max(1, Math.min(5, args.getFlagInteger("strength"))));
output += Messaging.tr(Messages.LLAMA_STRENGTH_SET, args.getFlagInteger("strength"));
if (strength != null) {
trait.setStrength(Math.max(1, Math.min(5, strength)));
output += Messaging.tr(Messages.LLAMA_STRENGTH_SET, trait.getStrength());
}
if (args.hasFlag('c')) {
npc.getOrAddTrait(HorseModifiers.class).setCarryingChest(true);
output += Messaging.tr(Messages.HORSE_CHEST_SET) + " ";

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.MushroomCow.Variant;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -56,11 +57,11 @@ public class MushroomCowTrait extends Trait {
max = 1,
permission = "citizens.npc.mushroomcow")
@Requirements(selected = true, ownership = true, types = { EntityType.MUSHROOM_COW })
public static void mushroomcow(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void mushroomcow(CommandContext args, CommandSender sender, NPC npc,
@Flag("variant") MushroomCow.Variant variant) throws CommandException {
MushroomCowTrait trait = npc.getOrAddTrait(MushroomCowTrait.class);
boolean hasArg = false;
if (args.hasValueFlag("variant")) {
MushroomCow.Variant variant = Util.matchEnum(MushroomCow.Variant.values(), args.getFlag("variant"));
if (variant == null) {
Messaging.sendErrorTr(sender, Messages.INVALID_MUSHROOM_COW_VARIANT,
Util.listValuesPretty(MushroomCow.Variant.values()));

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.Panda;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -73,7 +74,7 @@ public class PandaTrait extends Trait {
@Command(
aliases = { "npc" },
usage = "panda --gene (main gene) --hgene (hidden gene) -s(itting)",
usage = "panda --gene (main gene) --hiddengene (hidden gene) -s(itting)",
desc = "Sets panda modifiers",
modifiers = { "panda" },
flags = "s",
@ -81,11 +82,11 @@ public class PandaTrait extends Trait {
max = 1,
permission = "citizens.npc.panda")
@Requirements(selected = true, ownership = true, types = EntityType.PANDA)
public static void panda(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void panda(CommandContext args, CommandSender sender, NPC npc, @Flag("gene") Panda.Gene gene,
@Flag("hiddengene") Panda.Gene hiddengene) throws CommandException {
PandaTrait trait = npc.getOrAddTrait(PandaTrait.class);
String output = "";
if (args.hasValueFlag("gene")) {
Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("gene"));
if (gene == null) {
throw new CommandUsageException(Messages.INVALID_PANDA_GENE,
Util.listValuesPretty(Panda.Gene.values()));
@ -93,14 +94,13 @@ public class PandaTrait extends Trait {
trait.setMainGene(gene);
output += ' ' + Messaging.tr(Messages.PANDA_MAIN_GENE_SET, args.getFlag("gene"));
}
if (args.hasValueFlag("hgene")) {
Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("hgene"));
if (gene == null) {
if (args.hasValueFlag("hiddengene")) {
if (hiddengene == null) {
throw new CommandUsageException(Messages.INVALID_PANDA_GENE,
Util.listValuesPretty(Panda.Gene.values()));
}
trait.setHiddenGene(gene);
output += ' ' + Messaging.tr(Messages.PANDA_HIDDEN_GENE_SET, args.getFlag("hgene"));
trait.setHiddenGene(hiddengene);
output += ' ' + Messaging.tr(Messages.PANDA_HIDDEN_GENE_SET, hiddengene);
}
if (args.hasFlag('s')) {
boolean isSitting = trait.toggleSitting();

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Parrot.Variant;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.npc.NPC;
@ -51,15 +52,13 @@ public class ParrotTrait extends Trait {
max = 1,
permission = "citizens.npc.parrot")
@Requirements(selected = true, ownership = true, types = EntityType.PARROT)
public static void parrot(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void parrot(CommandContext args, CommandSender sender, NPC npc, @Flag("variant") Variant variant)
throws CommandException {
ParrotTrait trait = npc.getOrAddTrait(ParrotTrait.class);
String output = "";
if (args.hasValueFlag("variant")) {
String variantRaw = args.getFlag("variant");
Variant variant = Util.matchEnum(Variant.values(), variantRaw);
if (variant == null) {
String valid = Util.listValuesPretty(Variant.values());
throw new CommandException(Messages.INVALID_PARROT_VARIANT, valid);
throw new CommandException(Messages.INVALID_PARROT_VARIANT, Util.listValuesPretty(Variant.values()));
}
trait.setVariant(variant);
output += Messaging.tr(Messages.PARROT_VARIANT_SET, Util.prettyEnum(variant));

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.Phantom;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -50,15 +51,16 @@ public class PhantomTrait extends Trait {
max = 1,
permission = "citizens.npc.phantom")
@Requirements(selected = true, ownership = true, types = EntityType.PHANTOM)
public static void phantom(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void phantom(CommandContext args, CommandSender sender, NPC npc, @Flag("size") Integer size)
throws CommandException {
PhantomTrait trait = npc.getOrAddTrait(PhantomTrait.class);
String output = "";
if (args.hasValueFlag("size")) {
if (args.getFlagInteger("size") <= 0) {
if (size != null) {
if (size <= 0) {
throw new CommandUsageException();
}
trait.setSize(args.getFlagInteger("size"));
output += Messaging.tr(Messages.PHANTOM_STATE_SET, args.getFlagInteger("size"));
trait.setSize(size);
output += Messaging.tr(Messages.PHANTOM_STATE_SET, size);
}
if (!output.isEmpty()) {
Messaging.send(sender, output);

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.Piglin;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -50,11 +51,11 @@ public class PiglinTrait extends Trait {
max = 1,
permission = "citizens.npc.piglin")
@Requirements(selected = true, ownership = true, types = { EntityType.PIGLIN })
public static void piglin(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void piglin(CommandContext args, CommandSender sender, NPC npc, @Flag("dancing") Boolean dancing)
throws CommandException {
PiglinTrait trait = npc.getOrAddTrait(PiglinTrait.class);
boolean hasArg = false;
if (args.hasValueFlag("dancing")) {
boolean dancing = Boolean.valueOf(args.getFlag("dancing"));
if (dancing != null) {
trait.setDancing(dancing);
Messaging.sendTr(sender, dancing ? Messages.PIGLIN_DANCING_SET : Messages.PIGLIN_DANCING_UNSET,
npc.getName());

View File

@ -5,6 +5,7 @@ import org.bukkit.entity.EntityType;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.npc.NPC;
@ -40,11 +41,12 @@ public class PufferFishTrait extends Trait {
max = 1,
permission = "citizens.npc.pufferfish")
@Requirements(selected = true, ownership = true, types = EntityType.PUFFERFISH)
public static void pufferfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void pufferfish(CommandContext args, CommandSender sender, NPC npc, @Flag("state") Integer state)
throws CommandException {
PufferFishTrait trait = npc.getOrAddTrait(PufferFishTrait.class);
String output = "";
if (args.hasValueFlag("state")) {
int state = Math.min(Math.max(args.getFlagInteger("state"), 0), 3);
if (state != null) {
state = Math.min(Math.max(state, 0), 3);
trait.setPuffState(state);
output += Messaging.tr(Messages.PUFFERFISH_STATE_SET, state);
}

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Shulker;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -76,17 +77,16 @@ public class ShulkerTrait extends Trait {
max = 1,
permission = "citizens.npc.shulker")
@Requirements(selected = true, ownership = true, types = { EntityType.SHULKER })
public static void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void shulker(CommandContext args, CommandSender sender, NPC npc, @Flag("peek") Integer peek,
@Flag("color") DyeColor color) throws CommandException {
ShulkerTrait trait = npc.getOrAddTrait(ShulkerTrait.class);
boolean hasArg = false;
if (args.hasValueFlag("peek")) {
int peek = (byte) args.getFlagInteger("peek");
trait.setPeek(peek);
if (peek != null) {
trait.setPeek((byte) (int) peek);
Messaging.sendTr(sender, Messages.SHULKER_PEEK_SET, npc.getName(), peek);
hasArg = true;
}
if (args.hasValueFlag("color")) {
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color"));
if (color == null) {
Messaging.sendErrorTr(sender, Messages.INVALID_SHULKER_COLOR, Util.listValuesPretty(DyeColor.values()));
return;

View File

@ -8,6 +8,7 @@ import org.bukkit.entity.TropicalFish.Pattern;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -75,29 +76,27 @@ public class TropicalFishTrait extends Trait {
max = 1,
permission = "citizens.npc.tropicalfish")
@Requirements(selected = true, ownership = true, types = EntityType.TROPICAL_FISH)
public static void tropicalfish(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void tropicalfish(CommandContext args, CommandSender sender, NPC npc, @Flag("body") DyeColor body,
@Flag("patterncolor") DyeColor patterncolor, @Flag("pattern") Pattern pattern) throws CommandException {
TropicalFishTrait trait = npc.getOrAddTrait(TropicalFishTrait.class);
String output = "";
if (args.hasValueFlag("body")) {
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("body"));
if (color == null) {
if (body == null) {
throw new CommandException(Messages.INVALID_TROPICALFISH_COLOR,
Util.listValuesPretty(DyeColor.values()));
}
trait.setBodyColor(color);
output += Messaging.tr(Messages.TROPICALFISH_BODY_COLOR_SET, Util.prettyEnum(color));
trait.setBodyColor(body);
output += Messaging.tr(Messages.TROPICALFISH_BODY_COLOR_SET, Util.prettyEnum(body));
}
if (args.hasValueFlag("patterncolor")) {
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("patterncolor"));
if (color == null) {
if (patterncolor == null) {
throw new CommandException(Messages.INVALID_TROPICALFISH_COLOR,
Util.listValuesPretty(DyeColor.values()));
}
trait.setPatternColor(color);
output += Messaging.tr(Messages.TROPICALFISH_PATTERN_COLOR_SET, Util.prettyEnum(color));
trait.setPatternColor(patterncolor);
output += Messaging.tr(Messages.TROPICALFISH_PATTERN_COLOR_SET, Util.prettyEnum(patterncolor));
}
if (args.hasValueFlag("pattern")) {
Pattern pattern = Util.matchEnum(Pattern.values(), args.getFlag("pattern"));
if (pattern == null) {
throw new CommandException(Messages.INVALID_TROPICALFISH_PATTERN,
Util.listValuesPretty(Pattern.values()));

View File

@ -9,6 +9,7 @@ import com.google.common.base.Joiner;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
@ -68,18 +69,19 @@ public class VillagerTrait extends Trait {
max = 1,
permission = "citizens.npc.villager")
@Requirements(selected = true, ownership = true, types = EntityType.VILLAGER)
public static void villager(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
public static void villager(CommandContext args, CommandSender sender, NPC npc,
@Flag("profession") Profession profession, @Flag("type") Villager.Type type, @Flag("level") Integer level)
throws CommandException {
VillagerTrait trait = npc.getOrAddTrait(VillagerTrait.class);
String output = "";
if (args.hasValueFlag("level")) {
if (args.getFlagInteger("level") < 0) {
if (level != null) {
if (level < 0) {
throw new CommandUsageException();
}
trait.setLevel(args.getFlagInteger("level"));
output += " " + Messaging.tr(Messages.VILLAGER_LEVEL_SET, args.getFlagInteger("level"));
trait.setLevel(level);
output += " " + Messaging.tr(Messages.VILLAGER_LEVEL_SET, level);
}
if (args.hasValueFlag("type")) {
Villager.Type type = Util.matchEnum(Villager.Type.values(), args.getFlag("type"));
if (type == null) {
throw new CommandException(Messages.INVALID_VILLAGER_TYPE,
Util.listValuesPretty(Villager.Type.values()));
@ -88,12 +90,11 @@ public class VillagerTrait extends Trait {
output += " " + Messaging.tr(Messages.VILLAGER_TYPE_SET, args.getFlag("type"));
}
if (args.hasValueFlag("profession")) {
Profession parsed = Util.matchEnum(Profession.values(), args.getFlag("profession"));
if (parsed == null) {
if (profession == null) {
throw new CommandException(Messages.INVALID_PROFESSION, args.getFlag("profession"),
Joiner.on(',').join(Profession.values()));
}
npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed);
npc.getOrAddTrait(VillagerProfession.class).setProfession(profession);
output += " " + Messaging.tr(Messages.PROFESSION_SET, npc.getName(), args.getFlag("profession"));
}
if (!output.isEmpty()) {