package be.isach.ultracosmetics.cosmetics;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.config.MessageManager;
import be.isach.ultracosmetics.cosmetics.suits.ArmorSlot;
import be.isach.ultracosmetics.cosmetics.type.CosmeticType;
import be.isach.ultracosmetics.cosmetics.type.SuitType;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.util.TextUtil;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.UUID;
/**
* A cosmetic instance summoned by a player.
*
* @author iSach
* @since 07-21-2016
*/
public abstract class Cosmetic<T extends CosmeticType> extends BukkitRunnable implements Listener {
private UltraPlayer owner;
private Category category;
private UltraCosmetics ultraCosmetics;
protected boolean equipped;
private T cosmeticType;
public Cosmetic(UltraCosmetics ultraCosmetics, Category category, UltraPlayer owner, T type) {
this.owner = owner;
this.category = category;
this.ultraCosmetics = ultraCosmetics;
this.cosmeticType = type;
if (owner == null
|| Bukkit.getPlayer(owner.getUuid()) == null) {
throw new IllegalArgumentException("Invalid UltraPlayer.");
}
}
public void equip() {
if (!owner.getBukkitPlayer().hasPermission(getType().getPermission())) {
getPlayer().sendMessage(MessageManager.getMessage("No-Permission"));
return;
}
ultraCosmetics.getServer().getPluginManager().registerEvents(this, ultraCosmetics);
this.equipped = true;
String mess = MessageManager.getMessage(getCategory().getConfigPath() + "." + getCategory().getActivateConfig());
mess = mess.replace(getCategory().getChatPlaceholder(), TextUtil.filterPlaceHolder(getTypeName(), getUltraCosmetics()));
getPlayer().sendMessage(mess);
onEquip();
}
public void clear() {
// Send unequip Message.
try {
String mess = MessageManager.getMessage(getCategory().getConfigPath() + "." + getCategory().getDeactivateConfig());
mess = mess.replace(getCategory().getChatPlaceholder(), TextUtil.filterPlaceHolder(getTypeName(), getUltraCosmetics()));
getPlayer().sendMessage(mess);
} catch (Exception exc) {
}
// unregister listener.
HandlerList.unregisterAll(this);
try {
// Cancel task.
cancel();
} catch (Exception exc) {
// Not Scheduled yet. Ignore.
}
// Call untask finally.
onClear();
owner = null;
}
@Override
public void run() {
}
protected abstract void onEquip();
protected abstract void onClear();
public final UltraPlayer getOwner() {
return owner;
}
public final UltraCosmetics getUltraCosmetics() {
return ultraCosmetics;
}
public final Category getCategory() {
return category;
}
public final Player getPlayer() {
if(owner == null) {
return null;
}
return owner.getBukkitPlayer();
}
public boolean isEquipped() {
return equipped;
}
public final UUID getOwnerUniqueId() {
return owner.getUuid();
}
public T getType() {
return cosmeticType;
}
protected String getTypeName() {
return getType().getName();
}
}