This commit is contained in:
Shadows_of_Fire 2018-01-31 00:07:29 -05:00
parent 335f0fc37e
commit f5ae3240f8
2 changed files with 2 additions and 34 deletions

View file

@ -53,6 +53,7 @@ import net.minecraft.util.EnumFacing.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@ -465,7 +466,7 @@ public class ItemDrill extends ItemEnergy{
IBlockState state = world.getBlockState(pos); IBlockState state = world.getBlockState(pos);
Block block = state.getBlock(); Block block = state.getBlock();
float hardness = state.getBlockHardness(world, pos); float hardness = state.getBlockHardness(world, pos);
boolean canHarvest = WorldUtil.canBreakExtraBlock(stack, world, player, pos); boolean canHarvest = (ForgeHooks.canHarvestBlock(block, player, world, pos) || this.canHarvestBlock(state, stack)) && (!isExtra || this.getDestroySpeed(stack, world.getBlockState(pos)) > 1.0F);
if(hardness >= 0.0F && (!isExtra || (canHarvest && !block.hasTileEntity(world.getBlockState(pos))))){ if(hardness >= 0.0F && (!isExtra || (canHarvest && !block.hasTileEntity(world.getBlockState(pos))))){
if(!player.capabilities.isCreativeMode){ if(!player.capabilities.isCreativeMode){
this.extractEnergyInternal(stack, use, false); this.extractEnergyInternal(stack, use, false);

View file

@ -370,39 +370,6 @@ public final class WorldUtil {
} }
//Stolen from TiC //Stolen from TiC
/**
* Returns true if the tool is effective for harvesting the given block.
*/
public static boolean isToolEffective(ItemStack stack, IBlockState state) {
// check material
for (String type : stack.getItem().getToolClasses(stack)) {
if (state.getBlock().isToolEffective(type, state)) { return true; }
}
return false;
}
public static boolean canBreakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos) {
// prevent calling that stuff for air blocks, could lead to unexpected behaviour since it fires events
if (world.isAirBlock(pos)) { return false; }
// check if the block can be broken, since extra block breaks shouldn't instantly break stuff like obsidian
// or precious ores you can't harvest while mining stone
IBlockState state = world.getBlockState(pos);
Block block = state.getBlock();
// only effective materials
if (!isToolEffective(stack, state)) { return false; }
// only harvestable blocks that aren't impossibly slow to harvest
if (!ForgeHooks.canHarvestBlock(block, player, world, pos)) { return false; }
// From this point on it's clear that the player CAN break the block
return true;
}
public static boolean breakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos) { public static boolean breakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos) {
IBlockState state = world.getBlockState(pos); IBlockState state = world.getBlockState(pos);
Block block = state.getBlock(); Block block = state.getBlock();