package am2.api.spell.component.interfaces; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import am2.api.spell.ItemSpellBase; import am2.api.spell.enums.Affinity; import am2.api.spell.enums.SpellCastResult; public interface ISpellShape extends ISpellPart { /** * Creates the target area/entity list and applies the effects to ground/mobs * @param item The spell being cast * @param stack The itemstack representing the spell * @param caster The caster of the spell * @param target The specified target of the spell. If this is not NULL, this is a forced target, and should be included with any other targets of the shape. Otherwise the default spell shape logic should apply. * @param world The world the spell is being cast in * @param x The x-coordinate of the spell's effect * @param y The y-coordinate of the spell's effect * @param z The z-coordinate of the spell's effect * @param side The side the spell is applied on * @param giveXP This is passed along to be given back to the SpellHelper where needed. * @param useCount The number of ticks the spell item has been in use for * @return The result of the spell cast. */ public SpellCastResult beginStackStage(ItemSpellBase item, ItemStack stack, EntityLivingBase caster, EntityLivingBase target, World world, double x, double y, double z, int side, boolean giveXP, int useCount); /** * Is this shape a valid shape for a channeled/maintained spell? */ public boolean isChanneled(); /** * Allows different shapes to vary the mana cost of a spell * @param spellStack the itemstack representing the spell (useful if you want to vary based on added modifiers as well, for example) * @return */ public float manaCostMultiplier(ItemStack spellStack); /** * Is the spell a terminus shape? Return true if this component does not continue the spell chain when proccing. */ public boolean isTerminusShape(); /** * Is the shape a principal shape? Return true if this spell requires another shape to proc (like runes and zones) */ public boolean isPrincipumShape(); /** * Play the sound for the specified affinity */ public String getSoundForAffinity(Affinity affinity, ItemStack stack, World world); }