Paper/Spigot-Server-Patches/0306-Optimize-RegistryID.c.patch
Aikar 05466e3b47
[Auto] Update Upstream
Upstream has released updates that appear to apply compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing.

Bukkit Changes:
d2834556 SPIGOT-4219: Event for PigZombies angering.

CraftBukkit Changes:
a9c796f1 SPIGOT-4184: Fix furnaces not matching Vanilla smelt or animations
195f071e SPIGOT-4219: Event for PigZombies angering.
5e3082c7 SPIGOT-4230: Improve legacy block types
2018-08-05 19:46:43 -04:00

69 lines
2.3 KiB
Diff

From 9c353373373975d32ebe850456c5eba4d3b1cb95 Mon Sep 17 00:00:00 2001
From: Andrew Steinborn <git@steinborn.me>
Date: Mon, 23 Jul 2018 13:08:19 -0400
Subject: [PATCH] Optimize RegistryID.c()
This is a frequent hotspot for world loading/saving.
diff --git a/src/main/java/net/minecraft/server/RegistryID.java b/src/main/java/net/minecraft/server/RegistryID.java
index bde5714dd6..a01cda9d81 100644
--- a/src/main/java/net/minecraft/server/RegistryID.java
+++ b/src/main/java/net/minecraft/server/RegistryID.java
@@ -14,12 +14,14 @@ public class RegistryID<K> implements Registry { // Paper - decompile fix
private K[] d;
private int e;
private int f;
+ private java.util.BitSet usedIds; // Paper
public RegistryID(int i) {
i = (int) ((float) i / 0.8F);
this.b = (K[]) (new Object[i]); // Paper - decompile fix
this.c = new int[i];
this.d = (K[]) (new Object[i]); // Paper - decompile fix
+ this.usedIds = new java.util.BitSet(); // Paper
}
public int getId(@Nullable K k0) {
@@ -43,9 +45,14 @@ public class RegistryID<K> implements Registry { // Paper - decompile fix
}
private int c() {
+ // Paper start
+ /*
while (this.e < this.d.length && this.d[this.e] != null) {
++this.e;
}
+ */
+ this.e = this.usedIds.nextClearBit(0);
+ // Paper end
return this.e;
}
@@ -59,6 +66,7 @@ public class RegistryID<K> implements Registry { // Paper - decompile fix
this.d = (K[]) (new Object[i]); // Paper - decompile fix
this.e = 0;
this.f = 0;
+ this.usedIds.clear(); // Paper
for (int j = 0; j < aobject.length; ++j) {
if (aobject[j] != null) {
@@ -84,6 +92,7 @@ public class RegistryID<K> implements Registry { // Paper - decompile fix
this.b[k] = k0;
this.c[k] = i;
this.d[i] = k0;
+ this.usedIds.set(i); // Paper
++this.f;
if (i == this.e) {
++this.e;
@@ -148,6 +157,7 @@ public class RegistryID<K> implements Registry { // Paper - decompile fix
Arrays.fill(this.d, (Object) null);
this.e = 0;
this.f = 0;
+ this.usedIds.clear(); // Paper
}
public int b() {
--
2.18.0