BloodMagic/1.7.10/main/java/WayofTime/alchemicalWizardry/common/spell/complex/SpellParadigm.java
2014-10-13 22:33:20 +02:00

161 lines
4 KiB
Java

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<SpellEffect> bufferedEffectList = new LinkedList();
public List<String> 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;
}
}