package WayofTime.alchemicalWizardry.common.spell.complex; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellEffect; import WayofTime.alchemicalWizardry.common.spell.complex.enhancement.SpellEnhancement; public abstract class SpellParadigm { protected List bufferedEffectList = new ArrayList(); protected List effectList = new LinkedList(); public void addBufferedEffect(SpellEffect effect) { if(effect!=null) { this.bufferedEffectList.add(effect); effectList.add(effect.getClass().getName()); } } public void modifyBufferedEffect(SpellModifier modifier) { SpellEffect effect = this.getBufferedEffect(); if(effect!=null) { effect.modifyEffect(modifier); effectList.add(modifier.getClass().getName()); } } public void applyEnhancement(SpellEnhancement enh) { if(enh!=null) { if(bufferedEffectList.isEmpty()) { this.enhanceParadigm(enh); } else { SpellEffect effect = this.getBufferedEffect(); if(effect!=null) { effect.enhanceEffect(enh); } } effectList.add(enh.getClass().getName()); } } public abstract void enhanceParadigm(SpellEnhancement enh); public abstract void castSpell(World world, EntityPlayer entityPlayer, ItemStack itemStack); public void applySpellEffect(SpellEffect effect) { effect.modifyParadigm(this); } public void applyAllSpellEffects() { for(SpellEffect effect : bufferedEffectList) { this.applySpellEffect(effect); } } public SpellEffect getBufferedEffect() { if(bufferedEffectList.isEmpty()) { return null; } else { return bufferedEffectList.get(bufferedEffectList.size()-1); } } public int getTotalCost() { int cost = 0; if(this.bufferedEffectList!=null && !this.bufferedEffectList.isEmpty()) { if(this instanceof SpellParadigmProjectile) { for(SpellEffect effect : bufferedEffectList) { cost+=effect.getCostForProjectile(); } }else if(this instanceof SpellParadigmSelf) { for(SpellEffect effect : bufferedEffectList) { cost+=effect.getCostForSelf(); } }else if(this instanceof SpellParadigmMelee) { for(SpellEffect effect : bufferedEffectList) { cost+=effect.getCostForMelee(); } } return (int)(cost*Math.sqrt(this.bufferedEffectList.size())); } return getDefaultCost(); } public abstract int getDefaultCost(); public int getBufferedEffectPower() { SpellEffect eff = this.getBufferedEffect(); if(eff!=null) { return eff.getPowerEnhancements(); } return 0; } public int getBufferedEffectCost() { SpellEffect eff = this.getBufferedEffect(); if(eff!=null) { return eff.getCostEnhancements(); } return 0; } public int getBufferedEffectPotency() { SpellEffect eff = this.getBufferedEffect(); if(eff!=null) { return eff.getPotencyEnhancements(); } return 0; } }