package eiteam.esteemedinnovation.tools.steam.upgrades;
import eiteam.esteemedinnovation.api.SteamChargable;
import eiteam.esteemedinnovation.api.tool.SteamTool;
import eiteam.esteemedinnovation.api.tool.SteamToolSlot;
import eiteam.esteemedinnovation.commons.util.OreDictHelper;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.world.BlockEvent;
import javax.annotation.Nonnull;
import static eiteam.esteemedinnovation.tools.ToolsModule.upgradeResource;
public class ItemTimberChainUpgrade extends ItemSteamToolUpgrade {
public ItemTimberChainUpgrade() {
super(SteamToolSlot.SAW_HEAD, upgradeResource("timberHead"), null, 1);
}
@Override
public boolean onBlockBreakWithTool(BlockEvent.BreakEvent event, @Nonnull ItemStack toolStack, @Nonnull ItemStack thisUpgradeStack) {
IBlockState state = event.getState();
Block block = state.getBlock();
if (block.isToolEffective(((SteamTool) toolStack.getItem()).toolClass(), state)) {
fellBlocks(event.getWorld(), event.getPos(), event.getPlayer(), toolStack);
}
return true;
}
/**
* Mines all of the log blocks above the starting coordinate.
* @param world The world instance.
* @param startPos The starting Block Position
* @param player The player doing the felling.
* @param axe The axe's ItemStack
*/
private static void fellBlocks(World world, BlockPos startPos, EntityPlayer player, ItemStack axe) {
SteamChargable chargable = (SteamChargable) axe.getItem();
BlockPos.MutableBlockPos curPos = new BlockPos.MutableBlockPos(startPos);
for (int y = startPos.getY(); y < 256; y++) {
curPos.setY(y);
IBlockState state = world.getBlockState(curPos);
Block block = state.getBlock();
if (OreDictHelper.listHasItem(OreDictHelper.logs, Item.getItemFromBlock(block))) {
world.setBlockToAir(curPos);
block.harvestBlock(world, player, curPos, state, world.getTileEntity(curPos), axe);
if (y % 2 == 0) {
if (!chargable.addSteam(axe, -chargable.steamPerDurability(), player)) {
break;
}
}
} else {
break;
}
}
}
@Override
public void onUpdateBreakSpeedWithTool(PlayerEvent.BreakSpeed event, @Nonnull ItemStack toolStack, @Nonnull ItemStack thisUpgradeStack) {
event.setNewSpeed(event.getNewSpeed() * 0.7F);
}
}