Source:
public void sendBlockChanges(TShortList dirtyBlocks, Cube cube, EntityPlayerMP player) { if (!CubicChunksConfig.allowVanillaClients) { return; } CubePos offset = getPlayerOffsetS2C(player); int idx = cube.getX() + offset.getX(); int idy = cube.getY() + offset.getY(); int idz = cube.getZ() + offset.getZ(); if (idy < 0 || idy >= 16) { return; } if (dirtyBlocks.size() == 1) { int localAddress = dirtyBlocks.get(0); int x = localToBlock(cube.getX(), AddressTools.getLocalX(localAddress)); int y = localToBlock(cube.getY(), AddressTools.getLocalY(localAddress)); int z = localToBlock(cube.getZ(), AddressTools.getLocalZ(localAddress)); SPacketBlockChange packet = new SPacketBlockChange(world, new BlockPos(x, y, z)); player.connection.sendPacket(packet); return; } SPacketMultiBlockChange.BlockUpdateData[] updates = new SPacketMultiBlockChange.BlockUpdateData[dirtyBlocks.size()]; SPacketMultiBlockChange packet = new SPacketMultiBlockChange(); for (int i = 0; i < dirtyBlocks.size(); i++) { int localAddress = dirtyBlocks.get(i); int x = AddressTools.getLocalX(localAddress); int localY = AddressTools.getLocalY(localAddress); int y = localY + Coords.cubeToMinBlock(idy); int z = AddressTools.getLocalZ(localAddress); short vanillaPos = (short)(x << 12 | z << 8 | y); updates[i] = packet.new BlockUpdateData(vanillaPos, cube.getBlockState( localToBlock(cube.getX(), x), localToBlock(cube.getY(), localY), localToBlock(cube.getZ(), z))); } ((ISPacketMultiBlockChange) packet).setChangedBlocks(updates); ((ISPacketMultiBlockChange) packet).setChunkPos(new ChunkPos(idx, idz)); player.connection.sendPacket(packet); }

Target:
public void sendBlockChanges(TShortList dirtyBlocks, Cube cube, EntityPlayerMP player) { if (!CubicChunksConfig.allowVanillaClients) { return; } CubePos offset = getPlayerOffsetS2C(player); int posX = cube.getX() + offset.getX(); int posY = cube.getY() + offset.getY(); int posZ = cube.getZ() + offset.getZ(); if (posY < 0 || posY >= 16) { return; } if (dirtyBlocks.size() == 1) { int localAddress = dirtyBlocks.get(0); int x = localToBlock(cube.getX(), AddressTools.getLocalX(localAddress)); int y = localToBlock(cube.getY(), AddressTools.getLocalY(localAddress)); int z = localToBlock(cube.getZ(), AddressTools.getLocalZ(localAddress)); SPacketBlockChange packet = new SPacketBlockChange(world, new BlockPos(x, y, z)); player.connection.sendPacket(packet); return; } SPacketMultiBlockChange.BlockUpdateData[] updates = new SPacketMultiBlockChange.BlockUpdateData[dirtyBlocks.size()]; SPacketMultiBlockChange packet = new SPacketMultiBlockChange(); for (int i = 0; i < dirtyBlocks.size(); i++) { int localAddress = dirtyBlocks.get(i); int x = AddressTools.getLocalX(localAddress); int localY = AddressTools.getLocalY(localAddress); int y = localY + Coords.cubeToMinBlock(posY); int z = AddressTools.getLocalZ(localAddress); short vanillaPos = (short)(x << 12 | z << 8 | y); updates[i] = packet.new BlockUpdateData(vanillaPos, cube.getBlockState( localToBlock(cube.getX(), x), localToBlock(cube.getY(), localY), localToBlock(cube.getZ(), z))); } ((ISPacketMultiBlockChange) packet).setChangedBlocks(updates); ((ISPacketMultiBlockChange) packet).setChunkPos(new ChunkPos(posX, posZ)); player.connection.sendPacket(packet); }