Citizens2/main/src/main/java/net/citizensnpcs/trait/versioned/LlamaTrait.java

103 lines
3.5 KiB
Java

package net.citizensnpcs.trait.versioned;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Llama;
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;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.api.trait.trait.MobType;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.trait.HorseModifiers;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util;
@TraitName("llamatrait")
public class LlamaTrait extends Trait {
@Persist
private Color color = Color.BROWN;
@Persist
private int strength = 3;
public LlamaTrait() {
super("llamatrait");
}
public Color getColor() {
return color;
}
public int getStrength() {
return strength;
}
@Override
public void run() {
if (npc.isSpawned() && npc.getEntity() instanceof Llama) {
Llama llama = (Llama) npc.getEntity();
llama.setColor(color);
llama.setStrength(strength);
}
}
public void setColor(Llama.Color color) {
this.color = color;
}
public void setStrength(int strength) {
this.strength = strength;
}
@Command(
aliases = { "npc" },
usage = "llama (--color color) (--strength strength)",
desc = "Sets llama modifiers",
modifiers = { "llama" },
min = 1,
max = 1,
permission = "citizens.npc.llama")
@Requirements(selected = true, ownership = true)
public static void llama(CommandContext args, CommandSender sender, NPC npc,
@Flag({ "color", "colour" }) Color color, @Flag("strength") Integer strength) throws CommandException {
EntityType type = npc.getOrAddTrait(MobType.class).getType();
if (!type.name().contains("LLAMA"))
throw new CommandException(CommandMessages.REQUIREMENTS_INVALID_MOB_TYPE, Util.prettyEnum(type));
LlamaTrait trait = npc.getOrAddTrait(LlamaTrait.class);
String output = "";
if (args.hasAnyValueFlag("color", "colour")) {
if (color == null) {
String valid = Util.listValuesPretty(Color.values());
throw new CommandException(Messages.INVALID_LLAMA_COLOR, valid);
}
trait.setColor(color);
output += Messaging.tr(Messages.LLAMA_COLOR_SET, Util.prettyEnum(color));
}
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) + " ";
} else if (args.hasFlag('b')) {
npc.getOrAddTrait(HorseModifiers.class).setCarryingChest(false);
output += Messaging.tr(Messages.HORSE_CHEST_UNSET) + " ";
}
if (!output.isEmpty()) {
Messaging.send(sender, output);
}
}
}