Merge pull request #2259 from abel1502/abel-abilities-fix

Fix ItemToolAbility bedrock breaking
This commit is contained in:
HbmMods 2025-07-04 09:36:28 +02:00 committed by GitHub
commit b3983f7fb8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 5 deletions

View File

@ -37,7 +37,8 @@ public interface IToolHarvestAbility extends IBaseAbility {
if(skipDefaultDrops) {
// Emulate the block breaking without drops
world.setBlockToAir(x, y, z);
player.getHeldItem().damageItem(1, player);
ItemStack stack = player.getHeldItem();
if(stack != null) stack.damageItem(1, player);
} else if(player instanceof EntityPlayerMP) {
// Break the block conventionally
ItemToolAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
@ -78,7 +79,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
@Override
public void preHarvestAll(int level, World world, EntityPlayer player) {
ItemStack stack = player.getHeldItem();
EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1);
if(stack != null) EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1);
}
@Override
@ -123,7 +124,7 @@ public interface IToolHarvestAbility extends IBaseAbility {
@Override
public void preHarvestAll(int level, World world, EntityPlayer player) {
ItemStack stack = player.getHeldItem();
EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]);
if(stack != null) EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]);
}
@Override

View File

@ -292,14 +292,23 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
Block block = world.getBlock(x, y, z);
int meta = world.getBlockMetadata(x, y, z);
if(!(canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) || block == Blocks.bedrock || block == ModBlocks.stone_keyhole)
if(!(
canHarvestBlock(block, stack) ||
canShearBlock(block, stack, world, x, y, z)) ||
block.getPlayerRelativeBlockHardness(player, world, x, y, z) < 0 ||
block == ModBlocks.stone_keyhole
)
return;
Block refBlock = world.getBlock(refX, refY, refZ);
float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ);
float strength = ForgeHooks.blockStrength(block, player, world, x, y, z);
if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getPlayerRelativeBlockHardness(player, world, refX, refY, refZ) < 0)
if(
!ForgeHooks.canHarvestBlock(block, player, meta) ||
refStrength / strength > 10f ||
refBlock.getPlayerRelativeBlockHardness(player, world, refX, refY, refZ) < 0
)
return;
BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z);