Source:
public static NotifyNeighborBlockEvent callNotifyNeighborEvent(World world, BlockPos sourcePos, EnumSet notifiedSides) { final PhaseTracker phaseTracker = PhaseTracker.getInstance(); final PhaseData peek = phaseTracker.getCurrentPhaseData(); final PhaseContext<?> context = peek.context; if (peek.state.isWorldGeneration() || peek.state == State.RESTORING_BLOCKS) { return null; } try (CauseStackManager.StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) { final net.minecraft.world.chunk.Chunk chunk = ((WorldServer) world).getChunkFromBlockCoords(sourcePos); final IMixinChunk mixinChunk = (IMixinChunk) chunk; final BlockState blockstate = (BlockState) chunk.getBlockState(sourcePos); final LocatableBlock locatable = LocatableBlock.builder() .world(world) .position(sourcePos.getX(), sourcePos.getY(), sourcePos.getZ()) .state(blockstate) .build(); if (context.getNotifier().isPresent()) { context.addNotifierAndOwnerToCauseStack(frame); } else { mixinChunk.getBlockNotifier(sourcePos).ifPresent(user -> frame.addContext(EventContextKeys.NOTIFIER, user)); mixinChunk.getBlockOwner(sourcePos).ifPresent(owner -> frame.addContext(EventContextKeys.OWNER, owner)); } Sponge.getCauseStackManager().pushCause(locatable); final Map<Direction, BlockState> neighbors = new HashMap<>(); for (Object obj : notifiedSides) { EnumFacing notifiedSide = (EnumFacing) obj; BlockPos offset = sourcePos.offset(notifiedSide); Direction direction = DirectionFacingProvider.getInstance().getKey(notifiedSide).get(); Location<World> location = new Location<>(world, VecHelper.toVector3i(offset)); if (location.getBlockY() >= 0 && location.getBlockY() <= 255) { neighbors.put(direction, location.getBlock()); } } NotifyNeighborBlockEvent event = SpongeEventFactory.createNotifyNeighborBlockEvent(Sponge.getCauseStackManager().getCurrentCause(), neighbors, neighbors); SpongeImpl.postEvent(event); return event; } }

Target:
public static NotifyNeighborBlockEvent callNotifyNeighborEvent(World world, BlockPos sourcePos, EnumSet notifiedSides) { final PhaseTracker phaseTracker = PhaseTracker.getInstance(); final PhaseData peek = phaseTracker.getCurrentPhaseData(); final PhaseContext<?> context = peek.context; if (peek.state.isWorldGeneration() || peek.state == State.RESTORING_BLOCKS) { return null; } try (CauseStackManager.StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) { final BlockState blockstate = (BlockState) ((net.minecraft.world.World) world).getBlockState(sourcePos); final LocatableBlock locatable = new SpongeLocatableBlockBuilder().world(world).position(sourcePos.getX(), sourcePos.getY(), sourcePos.getZ()) .state(blockstate) .build(); if (context.getNotifier().isPresent()) { context.addNotifierAndOwnerToCauseStack(frame); } else { final IMixinChunk mixinChunk = (IMixinChunk) ((WorldServer) world).getChunk(sourcePos); mixinChunk.getBlockNotifier(sourcePos).ifPresent(user -> frame.addContext(EventContextKeys.NOTIFIER, user)); mixinChunk.getBlockOwner(sourcePos).ifPresent(owner -> frame.addContext(EventContextKeys.OWNER, owner)); } Sponge.getCauseStackManager().pushCause(locatable); final Map<Direction, BlockState> neighbors = new HashMap<>(); for (Object obj : notifiedSides) { EnumFacing notifiedSide = (EnumFacing) obj; BlockPos offset = sourcePos.offset(notifiedSide); Direction direction = DirectionFacingProvider.getInstance().getKey(notifiedSide).get(); Location<World> location = new Location<>(world, VecHelper.toVector3i(offset)); if (location.getBlockY() >= 0 && location.getBlockY() <= 255) { neighbors.put(direction, location.getBlock()); } } NotifyNeighborBlockEvent event = SpongeEventFactory.createNotifyNeighborBlockEvent(Sponge.getCauseStackManager().getCurrentCause(), neighbors, neighbors); SpongeImpl.postEvent(event); return event; } }