package com.thebrokenrail.sorcerycraft.spell; import com.thebrokenrail.sorcerycraft.spell.api.Spell; import net.minecraft.block.AbstractFireBlock; import net.minecraft.block.BlockState; import net.minecraft.block.TntBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.FlintAndSteelItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.state.property.Properties; import net.minecraft.util.Identifier; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class FlameSpell extends Spell { public FlameSpell(Identifier id, int level) { super(id, level); } @Override public void execute(World world, Entity source, Entity attacker, Entity target) { if (attacker instanceof LivingEntity) { ((LivingEntity) attacker).onAttacking(target); } target.setOnFireFor(8 + (getLevel() * 4)); } @Override public void execute(World world, Entity source, Entity attacker, BlockHitResult hitResult) { BlockPos blockPos = hitResult.getBlockPos(); BlockState blockState = world.getBlockState(blockPos); BlockPos sideBlockPos = hitResult.getBlockPos().offset(hitResult.getSide()); BlockState sideBlockState = world.getBlockState(sideBlockPos); if (blockState.getBlock() instanceof TntBlock) { TntBlock.primeTnt(world, blockPos); world.removeBlock(blockPos, false); } else if (FlintAndSteelItem.canIgnite(sideBlockState, world, sideBlockPos)) { world.setBlockState(sideBlockPos, AbstractFireBlock.getState(world, sideBlockPos)); } else if (FlintAndSteelItem.isIgnitable(blockState)) { world.setBlockState(blockPos, blockState.with(Properties.LIT, true)); } } @Override public int getXPCost() { switch (getLevel()) { case 0: { return 8; } case 1: { return 12; } } return -1; } @Override public ItemStack getItemCost() { switch (getLevel()) { case 0: { return new ItemStack(Items.FLINT_AND_STEEL); } case 1: { return new ItemStack(Items.FIRE_CHARGE); } } return ItemStack.EMPTY; } @Override public int getMaxLevel() { return 2; } }