--- a/net/minecraft/network/protocol/game/PacketPlayOutMultiBlockChange.java
+++ b/net/minecraft/network/protocol/game/PacketPlayOutMultiBlockChange.java
@@ -33,11 +33,19 @@
             short short0 = (Short) shortiterator.next();
 
             this.positions[j] = short0;
-            this.states[j] = chunksection.getBlockState(SectionPosition.sectionRelativeX(short0), SectionPosition.sectionRelativeY(short0), SectionPosition.sectionRelativeZ(short0));
+            this.states[j] = (chunksection != null) ? chunksection.getBlockState(SectionPosition.sectionRelativeX(short0), SectionPosition.sectionRelativeY(short0), SectionPosition.sectionRelativeZ(short0)) : net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); // CraftBukkit - SPIGOT-6076, Mojang bug when empty chunk section notified
         }
 
     }
 
+    // CraftBukkit start - Add constructor
+    public PacketPlayOutMultiBlockChange(SectionPosition sectionposition, ShortSet shortset, IBlockData[] states) {
+        this.sectionPos = sectionposition;
+        this.positions = shortset.toShortArray();
+        this.states = states;
+    }
+    // CraftBukkit end
+
     private PacketPlayOutMultiBlockChange(PacketDataSerializer packetdataserializer) {
         this.sectionPos = SectionPosition.of(packetdataserializer.readLong());
         int i = packetdataserializer.readVarInt();
