--- a/net/minecraft/world/level/block/state/BlockBase.java +++ b/net/minecraft/world/level/block/state/BlockBase.java @@ -84,6 +84,11 @@ import net.minecraft.world.phys.shapes.VoxelShapeCollision; import net.minecraft.world.phys.shapes.VoxelShapes; +// CraftBukkit start +import net.minecraft.world.item.context.ItemActionContext; +import net.minecraft.world.level.ServerExplosion; +// CraftBukkit end + public abstract class BlockBase implements FeatureElement { protected static final EnumDirection[] UPDATE_SHAPE_ORDER = new EnumDirection[]{EnumDirection.WEST, EnumDirection.EAST, EnumDirection.NORTH, EnumDirection.SOUTH, EnumDirection.DOWN, EnumDirection.UP}; @@ -158,6 +163,12 @@ protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {} + // CraftBukkit start + protected void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag, @Nullable ItemActionContext context) { + this.onPlace(iblockdata, world, blockposition, iblockdata1, flag); + } + // CraftBukkit end + protected void onRemove(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { if (iblockdata.hasBlockEntity() && !iblockdata.is(iblockdata1.getBlock())) { world.removeBlockEntity(blockposition); @@ -174,8 +185,10 @@ TileEntity tileentity = iblockdata.hasBlockEntity() ? worldserver.getBlockEntity(blockposition) : null; LootParams.a lootparams_a = (new LootParams.a(worldserver)).withParameter(LootContextParameters.ORIGIN, Vec3D.atCenterOf(blockposition)).withParameter(LootContextParameters.TOOL, ItemStack.EMPTY).withOptionalParameter(LootContextParameters.BLOCK_ENTITY, tileentity).withOptionalParameter(LootContextParameters.THIS_ENTITY, explosion.getDirectSourceEntity()); - if (explosion.getBlockInteraction() == Explosion.Effect.DESTROY_WITH_DECAY) { - lootparams_a.withParameter(LootContextParameters.EXPLOSION_RADIUS, explosion.radius()); + // CraftBukkit start - add yield + if (explosion instanceof ServerExplosion serverExplosion && serverExplosion.yield < 1.0F) { + lootparams_a.withParameter(LootContextParameters.EXPLOSION_RADIUS, 1.0F / serverExplosion.yield); + // CraftBukkit end } iblockdata.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, flag); @@ -1125,7 +1138,13 @@ } public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) { - this.getBlock().onPlace(this.asState(), world, blockposition, iblockdata, flag); + // CraftBukkit start + this.onPlace(world, blockposition, iblockdata, flag, null); + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag, @Nullable ItemActionContext context) { + this.getBlock().onPlace(this.asState(), world, blockposition, iblockdata, flag, context); + // CraftBukkit end } public void onRemove(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) {