package be.isach.ultracosmetics.cosmetics.morphs;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.cosmetics.Updatable;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.cosmetics.Category;
import be.isach.ultracosmetics.cosmetics.Cosmetic;
import be.isach.ultracosmetics.cosmetics.type.MorphType;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.MobDisguise;
import org.bukkit.event.HandlerList;
import java.util.UUID;
/**
* Represents an instance of a morph summoned by a player.
*
* @author iSach
* @since 08-03-2015
*/
public abstract class Morph extends Cosmetic<MorphType> implements Updatable {
/**
* The MobDiguise
*
* @see me.libraryaddict.disguise.disguisetypes.MobDisguise MobDisguise from Lib's Disguises
*/
public MobDisguise disguise;
/**
* The Morph Owner.
*/
public UUID owner;
public Morph(UltraPlayer owner, MorphType type, UltraCosmetics ultraCosmetics) {
super(ultraCosmetics, Category.MORPHS, owner, type);
}
@Override
protected void onEquip() {
if (getOwner().getCurrentMorph() != null) {
getOwner().removeMorph();
}
disguise = new MobDisguise(getType().getDisguiseType());
DisguiseAPI.disguiseToAll(getPlayer(), disguise);
if (!getOwner().canSeeSelfMorph()) {
disguise.setViewSelfDisguise(false);
}
runTaskTimer(getUltraCosmetics(), 0, 1);
getOwner().setCurrentMorph(this);
}
@Override
public void run() {
if (getPlayer() == null || getOwner().getCurrentMorph() != this) {
return;
}
onUpdate();
}
/**
* Called when Morph is cleared.
*/
@Override
public void clear() {
DisguiseAPI.undisguiseToAll(getPlayer());
getOwner().setCurrentMorph(null);
super.clear();
}
/**
* @return Disguise.
*/
public MobDisguise getDisguise() {
return disguise;
}
}