Source:
<code>public static ChangeBlockEvent.Break callChangeBlockEventModifyLiquidBreak(net.minecraft.world.World worldIn, BlockPos pos, IBlockState state, int flags) { final CauseTracker causeTracker = CauseTracker.getInstance(); final PhaseData data = causeTracker.getCurrentPhaseData(); BlockState fromState = BlockUtil.fromNative(worldIn.getBlockState(pos)); BlockState toState = BlockUtil.fromNative(state); User owner = data.context.getOwner().orElse(null); User notifier = data.context.getNotifier().orElse(null); Object source = data.context.getSource(LocatableBlock.class).orElse(null); if (source == null) { source = worldIn; } try (CauseStackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) { Sponge.getCauseStackManager().pushCause(source); Sponge.getCauseStackManager().addContext(EventContextKeys.LIQUID_MIX, (World) worldIn); <START> if (owner != null) { <END> Sponge.getCauseStackManager().addContext(EventContextKeys.OWNER, owner); } if (notifier != null) { Sponge.getCauseStackManager().addContext(EventContextKeys.NOTIFIER, notifier); } WorldProperties world = ((World) worldIn).getProperties(); Vector3i position = new Vector3i(pos.getX(), pos.getY(), pos.getZ()); Transaction<BlockSnapshot> transaction = new Transaction<>(BlockSnapshot.builder().blockState(fromState).world(world).position(position).build(), BlockSnapshot.builder().blockState(toState).world(world).position(position).build()); ChangeBlockEvent.Break event = SpongeEventFactory.createChangeBlockEventBreak(Sponge.getCauseStackManager().getCurrentCause(), Collections.singletonList(transaction)); SpongeImpl.postEvent(event); return event; } }</code><technical_language>add a LIQUID_BREAK previous LIQUID_FLOW? is mixing</technical_language>

Target:
public static ChangeBlockEvent.Break callChangeBlockEventModifyLiquidBreak(net.minecraft.world.World worldIn, BlockPos pos, IBlockState state, int flags) { final CauseTracker causeTracker = CauseTracker.getInstance(); final PhaseData data = causeTracker.getCurrentPhaseData(); BlockState fromState = BlockUtil.fromNative(worldIn.getBlockState(pos)); BlockState toState = BlockUtil.fromNative(state); User owner = data.context.getOwner().orElse(null); User notifier = data.context.getNotifier().orElse(null); Object source = data.context.getSource(LocatableBlock.class).orElse(null); if (source == null) { source = worldIn; } try (CauseStackManager.StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) { Sponge.getCauseStackManager().pushCause(source); Sponge.getCauseStackManager().addContext(EventContextKeys.LIQUID_MIX, (World) worldIn); if (owner != null) { Sponge.getCauseStackManager().addContext(EventContextKeys.OWNER, owner); } if (notifier != null) { Sponge.getCauseStackManager().addContext(EventContextKeys.NOTIFIER, notifier); } WorldProperties world = ((World) worldIn).getProperties(); Vector3i position = new Vector3i(pos.getX(), pos.getY(), pos.getZ()); Transaction<BlockSnapshot> transaction = new Transaction<>(BlockSnapshot.builder().blockState(fromState).world(world).position(position).build(), BlockSnapshot.builder().blockState(toState).world(world).position(position).build()); ChangeBlockEvent.Break event = SpongeEventFactory.createChangeBlockEventBreak(Sponge.getCauseStackManager().getCurrentCause(), Collections.singletonList(transaction)); SpongeImpl.postEvent(event); return event; } }