PaperMC/Spigot-Server-Patches/0300-Optimize-RegistryID.c.patch
Aikar 459987d69f
More improvements to activation range, improve turtles
improved the water code so that immunity wont trigger if the entity
has the water pathfinder system active, so this improves support
for all entities that know how to behave in water.

Merged 2 EAR patches together, and removed an MCUtil method that
doesnt have a purpose anymore
2018-10-04 23:18:46 -04:00

68 lines
2.1 KiB
Diff

From 765c811360685b754d86b1617a860f682f03b9d0 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 d03ac0e70c..9242999f70 100644
--- a/src/main/java/net/minecraft/server/RegistryID.java
+++ b/src/main/java/net/minecraft/server/RegistryID.java
@@ -13,12 +13,14 @@ public class RegistryID<K> implements Registry<K> {
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]);
this.c = new int[i];
this.d = (K[])(new Object[i]);
+ this.usedIds = new java.util.BitSet(); // Paper
}
public int getId(@Nullable K object) {
@@ -41,9 +43,14 @@ public class RegistryID<K> implements Registry<K> {
}
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;
}
@@ -56,6 +63,7 @@ public class RegistryID<K> implements Registry<K> {
this.d = (K[])(new Object[i]);
this.e = 0;
this.f = 0;
+ this.usedIds.clear(); // Paper
for(int j = 0; j < aobject.length; ++j) {
if (aobject[j] != null) {
@@ -80,6 +88,7 @@ public class RegistryID<K> implements Registry<K> {
this.b[l] = object;
this.c[l] = i;
this.d[i] = object;
+ this.usedIds.set(i); // Paper
++this.f;
if (i == this.e) {
++this.e;
@@ -140,6 +149,7 @@ public class RegistryID<K> implements Registry<K> {
Arrays.fill(this.d, (Object)null);
this.e = 0;
this.f = 0;
+ this.usedIds.clear(); // Paper
}
public int b() {
--
2.19.0