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

70 lines
1.7 KiB
Java

package net.citizensnpcs.trait;
import org.bukkit.entity.Ocelot;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.util.NMS;
/**
* Persists Ocelot metadata.
*
* @see Ocelot
*/
@TraitName("ocelotmodifiers")
public class OcelotModifiers extends Trait {
@Persist("sitting")
private boolean sitting;
@Persist("type")
private Ocelot.Type type = Ocelot.Type.WILD_OCELOT;
public OcelotModifiers() {
super("ocelotmodifiers");
}
private void migrateToCat() {
npc.getOrAddTrait(CatTrait.class).setSitting(sitting);
npc.getOrAddTrait(CatTrait.class).setType(type);
}
@Override
public void onSpawn() {
updateModifiers();
}
public void setSitting(boolean sit) {
sitting = sit;
updateModifiers();
}
public void setType(Ocelot.Type type) {
this.type = type;
updateModifiers();
}
public boolean supportsOcelotType() {
return SUPPORTS_CAT_TYPE;
}
private void updateModifiers() {
if (!(npc.getEntity() instanceof Ocelot))
return;
Ocelot ocelot = (Ocelot) npc.getEntity();
NMS.setSitting(ocelot, sitting);
if (!SUPPORTS_CAT_TYPE) {
migrateToCat();
return;
}
try {
ocelot.setCatType(type);
} catch (UnsupportedOperationException ex) {
migrateToCat();
SUPPORTS_CAT_TYPE = false;
}
}
private static boolean SUPPORTS_CAT_TYPE = true;
}