package com.laytonsmith.abstraction.bukkit.entities;
import com.laytonsmith.abstraction.MCColor;
import com.laytonsmith.abstraction.MCLivingEntity;
import com.laytonsmith.abstraction.MCPotionData;
import com.laytonsmith.abstraction.MCProjectileSource;
import com.laytonsmith.abstraction.blocks.MCBlockProjectileSource;
import com.laytonsmith.abstraction.bukkit.BukkitConvertor;
import com.laytonsmith.abstraction.bukkit.BukkitMCColor;
import com.laytonsmith.abstraction.bukkit.BukkitMCPotionData;
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlockProjectileSource;
import com.laytonsmith.abstraction.entities.MCAreaEffectCloud;
import com.laytonsmith.abstraction.enums.MCParticle;
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCParticle;
import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.Entity;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.projectiles.BlockProjectileSource;
import org.bukkit.projectiles.ProjectileSource;
import java.util.ArrayList;
import java.util.List;
public class BukkitMCAreaEffectCloud extends BukkitMCEntity implements MCAreaEffectCloud{
AreaEffectCloud aec;
public BukkitMCAreaEffectCloud(Entity aec) {
super(aec);
this.aec = (AreaEffectCloud) aec;
}
@Override
public MCPotionData getBasePotionData() {
return new BukkitMCPotionData(aec.getBasePotionData());
}
@Override
public MCColor getColor(){
return BukkitMCColor.GetMCColor(aec.getColor());
}
@Override
public List<MCLivingEntity.MCEffect> getCustomEffects(){
List<MCLivingEntity.MCEffect> list = new ArrayList<>();
for (PotionEffect pe : aec.getCustomEffects()) {
list.add(new MCLivingEntity.MCEffect(pe.getType().getId(), pe.getAmplifier(),
pe.getDuration() / 20, pe.isAmbient(), pe.hasParticles()));
}
return list;
}
@Override
public int getDuration(){
return aec.getDuration();
}
@Override
public int getDurationOnUse(){
return aec.getDurationOnUse();
}
@Override
public MCParticle getParticle(){
return BukkitMCParticle.getConvertor().getAbstractedEnum(aec.getParticle());
}
@Override
public float getRadius(){
return aec.getRadius();
}
@Override
public float getRadiusOnUse(){
return aec.getRadiusOnUse();
}
@Override
public float getRadiusPerTick(){
return aec.getRadiusPerTick();
}
@Override
public int getReapplicationDelay(){
return aec.getReapplicationDelay();
}
@Override
public MCProjectileSource getSource() {
ProjectileSource source = aec.getSource();
if (source instanceof BlockProjectileSource) {
return new BukkitMCBlockProjectileSource((BlockProjectileSource) source);
}
return (MCProjectileSource) BukkitConvertor.BukkitGetCorrectEntity((Entity) source);
}
@Override
public int getWaitTime(){
return aec.getWaitTime();
}
@Override
public void addCustomEffect(MCLivingEntity.MCEffect effect){
PotionEffect pe = new PotionEffect(PotionEffectType.getById(effect.getPotionID()),
effect.getSecondsRemaining() * 20, effect.getStrength(), effect.isAmbient(), effect.hasParticles());
aec.addCustomEffect(pe, true);
}
@Override
public void clearCustomEffects(){
aec.clearCustomEffects();
}
@Override
public void setBasePotionData(MCPotionData pd){
aec.setBasePotionData((PotionData) pd.getHandle());
}
@Override
public void setColor(MCColor color){
aec.setColor(BukkitMCColor.GetColor(color));
}
@Override
public void setDuration(int ticks){
aec.setDuration(ticks);
}
@Override
public void setDurationOnUse(int ticks){
aec.setDurationOnUse(ticks);
}
@Override
public void setParticle(MCParticle particle){
aec.setParticle(BukkitMCParticle.getConvertor().getConcreteEnum(particle));
}
@Override
public void setRadius(float radius){
aec.setRadius(radius);
}
@Override
public void setRadiusOnUse(float radius){
aec.setRadiusOnUse(radius);
}
@Override
public void setRadiusPerTick(float radius){
aec.setRadiusPerTick(radius);
}
@Override
public void setReapplicationDelay(int ticks){
aec.setReapplicationDelay(ticks);
}
@Override
public void setSource(MCProjectileSource source) {
if(source == null){
aec.setSource(null);
} else if(source instanceof MCBlockProjectileSource){
aec.setSource((BlockProjectileSource) source.getHandle());
} else {
aec.setSource((ProjectileSource) source.getHandle());
}
}
@Override
public void setWaitTime(int ticks){
aec.setWaitTime(ticks);
}
}