76 lines
2.3 KiB
Java
76 lines
2.3 KiB
Java
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.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) {
|
|
target.setFireTicks(400 + (getLevel() * 200));
|
|
}
|
|
|
|
@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 16;
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
}
|