package WayofTime.alchemicalWizardry.common.spell.complex; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellEffect; import WayofTime.alchemicalWizardry.common.spell.complex.enhancement.SpellEnhancement; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import java.util.LinkedList; import java.util.List; public abstract class SpellParadigm { protected List bufferedEffectList = new LinkedList(); public 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(); } } else if (this instanceof SpellParadigmTool) { for (SpellEffect effect : bufferedEffectList) { cost += effect.getCostForTool(); } } 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; } }