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

97 lines
3.6 KiB
Java

package net.citizensnpcs.trait.versioned;
import java.util.Map;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Pose;
import org.bukkit.entity.Warden;
import com.google.common.collect.Maps;
import net.citizensnpcs.api.command.Arg;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.NMS;
@TraitName("wardentrait")
public class WardenTrait extends Trait {
private final Map<UUID, Integer> anger = Maps.newHashMap();
public WardenTrait() {
super("wardentrait");
}
private void addAnger(Entity entity, int anger) {
this.anger.put(entity.getUniqueId(), anger);
}
@Override
public void run() {
if (npc.isSpawned() && npc.getEntity() instanceof Warden) {
Warden warden = (Warden) npc.getEntity();
for (Map.Entry<UUID, Integer> entry : anger.entrySet()) {
warden.setAnger(Bukkit.getEntity(entry.getKey()), entry.getValue());
}
}
}
@Command(
aliases = { "npc" },
usage = "warden dig|emerge|roar|anger [entity uuid/player name] [anger]",
desc = "Sets warden modifiers",
modifiers = { "warden" },
min = 1,
max = 4,
permission = "citizens.npc.warden")
@Requirements(selected = true, ownership = true, types = EntityType.WARDEN)
public static void warden(CommandContext args, CommandSender sender, NPC npc,
@Arg(value = 1, completions = { "anger", "dig", "emerge", "roar" }) String command, @Arg(2) String player,
@Arg(3) Integer anger) throws CommandException {
WardenTrait trait = npc.getOrAddTrait(WardenTrait.class);
String output = "";
if (command.equalsIgnoreCase("anger")) {
if (anger == null)
throw new CommandUsageException();
Entity entity = null;
try {
UUID uuid = UUID.fromString(player);
entity = Bukkit.getEntity(uuid);
} catch (IllegalArgumentException iae) {
entity = Bukkit.getOfflinePlayer(player).getPlayer();
}
if (entity != null) {
trait.addAnger(entity, anger);
output = Messaging.tr(Messages.WARDEN_ANGER_ADDED, entity, anger);
}
} else if (command.equalsIgnoreCase("dig")) {
NMS.setWardenPose(npc.getEntity(), Pose.DIGGING);
output = Messaging.tr(Messages.WARDEN_POSE_SET, npc.getName(), "dig");
} else if (command.equalsIgnoreCase("emerge")) {
NMS.setWardenPose(npc.getEntity(), Pose.EMERGING);
output = Messaging.tr(Messages.WARDEN_POSE_SET, npc.getName(), "emerge");
} else if (command.equalsIgnoreCase("roar")) {
NMS.setWardenPose(npc.getEntity(), Pose.ROARING);
output = Messaging.tr(Messages.WARDEN_POSE_SET, npc.getName(), "roar");
}
if (!output.isEmpty()) {
Messaging.send(sender, output.trim());
} else {
throw new CommandUsageException();
}
}
}