package electroblob.wizardry.spell; import electroblob.wizardry.item.SpellActions; import electroblob.wizardry.registry.WizardryItems; import electroblob.wizardry.util.EntityUtils; import electroblob.wizardry.util.MagicDamage; import electroblob.wizardry.util.MagicDamage.DamageType; import electroblob.wizardry.util.SpellModifiers; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; public class Ignite extends SpellRay { public Ignite(){ super("ignite", false, SpellActions.POINT); this.soundValues(1, 1, 0.4f); addProperties(BURN_DURATION); } @Override protected boolean onEntityHit(World world, Entity target, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){ // Fire can damage armour stands, so this includes them if(target instanceof EntityLivingBase) { if(MagicDamage.isEntityImmune(DamageType.FIRE, target)){ if(!world.isRemote && caster instanceof EntityPlayer) ((EntityPlayer)caster).sendStatusMessage( new TextComponentTranslation("spell.resist", target.getName(), this.getNameForTranslationFormatted()), true); }else{ target.setFire((int)(getProperty(BURN_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade))); } return true; } return false; } @Override protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){ if(!EntityUtils.canDamageBlocks(caster, world)) return false; pos = pos.offset(side); if(world.isAirBlock(pos)){ if(!world.isRemote){ world.setBlockState(pos, Blocks.FIRE.getDefaultState()); } return true; } return false; } @Override protected boolean onMiss(World world, EntityLivingBase caster, Vec3d origin, Vec3d direction, int ticksInUse, SpellModifiers modifiers){ return false; } @Override protected void spawnParticle(World world, double x, double y, double z, double vx, double vy, double vz){ world.spawnParticle(EnumParticleTypes.FLAME, x, y, z, 0, 0, 0); } }