Yatopia/patches/server/0057-Fix-IndexOutOfBoundsException-when-sending-too-many-.patch
Mykyta Komarn 5431509f72 Greatly improve recipe and furnace performance
Remove more fucked up stream conversions. Also use cached recipe in furnaces when possible, and only lookup when absolutely necessary.

On a server with 8.8K furnaces, the average tick rate was ~0.3-1ms higher when furnaces were burning vs idle furnaces, as compared to ~10ms difference in earlier revisions of these patches.
2020-10-06 18:36:00 -07:00

30 lines
1.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ivan Pekov <ivan@mrivanplays.com>
Date: Tue, 29 Sep 2020 19:25:49 +0300
Subject: [PATCH] Fix IndexOutOfBoundsException when sending too many changes
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java b/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
index f260459d70053ffd17952aebf3e0410666f9bcd0..a28b6a44e744f16598419d20f4fe5d55016213e4 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java
@@ -20,12 +20,16 @@ public class PacketPlayOutMultiBlockChange implements Packet<PacketListenerPlayO
this.a(shortset.size());
int i = 0;
- for (ShortIterator shortiterator = shortset.iterator(); shortiterator.hasNext(); ++i) {
- short short0 = (Short) shortiterator.next();
+ // Yatopia start - fix IndexOutOfBounds exception when doing too many changes
+ ShortIterator shortiterator = shortset.iterator();
+ while (shortiterator.hasNext()) {
+ short short0 = (Short) shortiterator.nextShort();
this.b[i] = short0;
this.c[i] = (chunksection != null) ? chunksection.getType(SectionPosition.a(short0), SectionPosition.b(short0), SectionPosition.c(short0)) : Blocks.AIR.getBlockData(); // CraftBukkit - SPIGOT-6076, Mojang bug when empty chunk section notified
+ i++;
}
+ // Yatopia end
}