Citizens2/src/main/java/net/citizensnpcs/trait/Age.java

76 lines
2.0 KiB
Java

package net.citizensnpcs.trait;
import net.citizensnpcs.api.exception.NPCLoadException;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.util.DataKey;
import net.citizensnpcs.util.Messaging;
import net.citizensnpcs.util.StringHelper;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Ageable;
public class Age extends Trait implements Toggleable {
private int age = 0;
private boolean locked = true;
public Age() {
super("age");
}
public void describe(CommandSender sender) {
Messaging.sendF(sender, "%s's age is %s and %s locked.", StringHelper.wrap(npc.getName()),
StringHelper.wrap(age), StringHelper.wrap(locked ? "is" : "isn't"));
}
private boolean isAgeable() {
return npc.getBukkitEntity() instanceof Ageable;
}
@Override
public void load(DataKey key) throws NPCLoadException {
if (npc.isSpawned() && !(npc.getBukkitEntity() instanceof Ageable))
throw new NPCLoadException("NPC must be ageable");
age = key.getInt("age");
locked = key.getBoolean("locked");
}
@Override
public void onSpawn() {
if (isAgeable()) {
Ageable entity = (Ageable) npc.getBukkitEntity();
entity.setAge(age);
entity.setAgeLock(locked);
}
}
@Override
public void run() {
if (!locked && isAgeable())
age = ((Ageable) npc.getBukkitEntity()).getAge();
}
@Override
public void save(DataKey key) {
key.setInt("age", age);
key.setBoolean("locked", locked);
}
public void setAge(int age) {
this.age = age;
if (isAgeable())
((Ageable) npc.getBukkitEntity()).setAge(age);
}
@Override
public boolean toggle() {
locked = !locked;
if (isAgeable())
((Ageable) npc.getBukkitEntity()).setAgeLock(locked);
return locked;
}
@Override
public String toString() {
return "Age{age=" + age + ",locked=" + locked + "}";
}
}