From 3acd639f6f054d248621d1ecbdb0eec796571e08 Mon Sep 17 00:00:00 2001 From: Mechoriet Date: Sat, 7 Oct 2023 21:50:12 +0200 Subject: [PATCH] work work work --- .../server/0103-fastutil-EntityTracker.patch | 32 +++++++++++ ...l-use-ObjectMapList-in-EntityTracker.patch | 19 ------- patches/server/0106-fastutil-World.patch | 11 +++- .../server/0107-fastutil-NBTTagCompound.patch | 43 +++++++++++++-- ....patch => 0109-fastutil-DataWatcher.patch} | 0 .../0109-fixup-fastutil-NBTTagCompound.patch | 54 ------------------- ... => 0110-fastutil-HandshakeListener.patch} | 0 ...> 0111-fastutil-ChunkProviderServer.patch} | 0 .../0112-fastutil-SpawnerCreature.patch | 45 ++++++++++++++++ .../0113-fastutil-CraftingManager.patch | 19 +++++++ 10 files changed, 145 insertions(+), 78 deletions(-) create mode 100644 patches/server/0103-fastutil-EntityTracker.patch delete mode 100644 patches/server/0103-fastutil-use-ObjectMapList-in-EntityTracker.patch rename patches/server/{0110-fastutil-DataWatcher.patch => 0109-fastutil-DataWatcher.patch} (100%) delete mode 100644 patches/server/0109-fixup-fastutil-NBTTagCompound.patch rename patches/server/{0111-fastutil-HandshakeListener.patch => 0110-fastutil-HandshakeListener.patch} (100%) rename patches/server/{0112-fastutil-ChunkProviderServer.patch => 0111-fastutil-ChunkProviderServer.patch} (100%) create mode 100644 patches/server/0112-fastutil-SpawnerCreature.patch create mode 100644 patches/server/0113-fastutil-CraftingManager.patch diff --git a/patches/server/0103-fastutil-EntityTracker.patch b/patches/server/0103-fastutil-EntityTracker.patch new file mode 100644 index 00000000..638919f9 --- /dev/null +++ b/patches/server/0103-fastutil-EntityTracker.patch @@ -0,0 +1,32 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mechoriet +Date: Sat, 7 Oct 2023 17:33:39 +0200 +Subject: [PATCH] fastutil - EntityTracker + + +diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java +index cb72b36725927272fddfdad929b268a7b06140ac..d3afb43259dc34a63c561266efbf7e5050d9d213 100644 +--- a/src/main/java/net/minecraft/server/EntityTracker.java ++++ b/src/main/java/net/minecraft/server/EntityTracker.java +@@ -13,7 +13,7 @@ public class EntityTracker { + + private static final Logger a = LogManager.getLogger(); + private final WorldServer world; +- private Set c = Sets.newHashSet(); ++ private Set c = new io.papermc.paper.util.maplist.ObjectMapList<>(); // PandaSpigot - FastUtil - ObjectMapList + public IntHashMap trackedEntities = new IntHashMap(); + private int e; + +diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +index 0b90b6f30ea09fb117281d5ddd2fc752d2c139b5..91e72f4fe98a4d83c5f886e86c945c602eb1454a 100644 +--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java ++++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +@@ -42,7 +42,7 @@ public class EntityTrackerEntry { + // PaperSpigot start + // Replace trackedPlayers Set with a Map. The value is true until the player receives + // their first update (which is forced to have absolute coordinates), false afterward. +- public java.util.Map trackedPlayerMap = new java.util.HashMap(); ++ public java.util.Map trackedPlayerMap = new it.unimi.dsi.fastutil.objects.Reference2BooleanOpenHashMap<>(); + public Set trackedPlayers = trackedPlayerMap.keySet(); + // PaperSpigot end + diff --git a/patches/server/0103-fastutil-use-ObjectMapList-in-EntityTracker.patch b/patches/server/0103-fastutil-use-ObjectMapList-in-EntityTracker.patch deleted file mode 100644 index 52ab8c83..00000000 --- a/patches/server/0103-fastutil-use-ObjectMapList-in-EntityTracker.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Mechoriet -Date: Sat, 7 Oct 2023 17:33:39 +0200 -Subject: [PATCH] fastutil - use ObjectMapList in EntityTracker - - -diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java -index cb72b36725927272fddfdad929b268a7b06140ac..d3afb43259dc34a63c561266efbf7e5050d9d213 100644 ---- a/src/main/java/net/minecraft/server/EntityTracker.java -+++ b/src/main/java/net/minecraft/server/EntityTracker.java -@@ -13,7 +13,7 @@ public class EntityTracker { - - private static final Logger a = LogManager.getLogger(); - private final WorldServer world; -- private Set c = Sets.newHashSet(); -+ private Set c = new io.papermc.paper.util.maplist.ObjectMapList<>(); // PandaSpigot - FastUtil - ObjectMapList - public IntHashMap trackedEntities = new IntHashMap(); - private int e; - diff --git a/patches/server/0106-fastutil-World.patch b/patches/server/0106-fastutil-World.patch index a3acd18c..f75c73d7 100644 --- a/patches/server/0106-fastutil-World.patch +++ b/patches/server/0106-fastutil-World.patch @@ -5,9 +5,18 @@ Subject: [PATCH] fastutil - World diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 38ebe35f6fa434103b52e86262c7f4cc32d486e3..5736c939c850e9c4dea9c4070079ed1fd4db9809 100644 +index 38ebe35f6fa434103b52e86262c7f4cc32d486e3..560b15ee0d932f30161915be21425c97d4ba656d 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java +@@ -36,7 +36,7 @@ public abstract class World implements IBlockAccess { + private int a = 63; + protected boolean e; + // Spigot start - guard entity list from removals +- public final List entityList = new java.util.ArrayList() ++ public final List entityList = new it.unimi.dsi.fastutil.objects.ObjectArrayList() + { + @Override + public Entity remove(int index) @@ -66,8 +66,8 @@ public abstract class World implements IBlockAccess { public final List tileEntityList = Lists.newArrayList(); private final List b = Lists.newArrayList(); diff --git a/patches/server/0107-fastutil-NBTTagCompound.patch b/patches/server/0107-fastutil-NBTTagCompound.patch index 87a50c21..e8e07c49 100644 --- a/patches/server/0107-fastutil-NBTTagCompound.patch +++ b/patches/server/0107-fastutil-NBTTagCompound.patch @@ -5,15 +5,50 @@ Subject: [PATCH] fastutil - NBTTagCompound diff --git a/src/main/java/net/minecraft/server/NBTTagCompound.java b/src/main/java/net/minecraft/server/NBTTagCompound.java -index 22d7c2ab36f11f93c0b9d08b786c784562ef7077..89c9298fde1711a1a5923b81715f45f1341fa693 100644 +index 22d7c2ab36f11f93c0b9d08b786c784562ef7077..01cc42ebc8429ac0fb66366542781739fbe77ee7 100644 --- a/src/main/java/net/minecraft/server/NBTTagCompound.java +++ b/src/main/java/net/minecraft/server/NBTTagCompound.java -@@ -12,7 +12,7 @@ import java.util.concurrent.Callable; +@@ -12,10 +12,14 @@ import java.util.concurrent.Callable; public class NBTTagCompound extends NBTBase { - private Map map = Maps.newHashMap(); -+ private Map map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // PandaSpigot - reduce memory footprint of NBTTagCompound +- +- public NBTTagCompound() {} ++ private Map map; - public NBTTagCompound() {} ++ public NBTTagCompound() { ++ map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // PandaSpigot - reduce memory footprint of NBTTagCompound ++ } ++ public NBTTagCompound(it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap map) { ++ this.map = map; ++ } + void write(DataOutput dataoutput) throws IOException { + Iterator iterator = this.map.keySet().iterator(); +@@ -282,16 +286,17 @@ public class NBTTagCompound extends NBTBase { + } + + public NBTBase clone() { +- NBTTagCompound nbttagcompound = new NBTTagCompound(); +- Iterator iterator = this.map.keySet().iterator(); +- ++ it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap ret = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>( ++ this.map.size(), 0.8f); ++ Iterator> iterator = (this.map instanceof it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) ++ ? ((it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) this.map).object2ObjectEntrySet() ++ .fastIterator() ++ : this.map.entrySet().iterator(); + while (iterator.hasNext()) { +- String s = (String) iterator.next(); +- +- nbttagcompound.set(s, ((NBTBase) this.map.get(s)).clone()); ++ Map.Entry entry = iterator.next(); ++ ret.put(entry.getKey(), entry.getValue().clone()); + } +- +- return nbttagcompound; ++ return new NBTTagCompound(ret); + } + + public boolean equals(Object object) { diff --git a/patches/server/0110-fastutil-DataWatcher.patch b/patches/server/0109-fastutil-DataWatcher.patch similarity index 100% rename from patches/server/0110-fastutil-DataWatcher.patch rename to patches/server/0109-fastutil-DataWatcher.patch diff --git a/patches/server/0109-fixup-fastutil-NBTTagCompound.patch b/patches/server/0109-fixup-fastutil-NBTTagCompound.patch deleted file mode 100644 index a7dbfc2e..00000000 --- a/patches/server/0109-fixup-fastutil-NBTTagCompound.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Mechoriet -Date: Sat, 7 Oct 2023 21:24:34 +0200 -Subject: [PATCH] fixup! fastutil - NBTTagCompound - - -diff --git a/src/main/java/net/minecraft/server/NBTTagCompound.java b/src/main/java/net/minecraft/server/NBTTagCompound.java -index 89c9298fde1711a1a5923b81715f45f1341fa693..01cc42ebc8429ac0fb66366542781739fbe77ee7 100644 ---- a/src/main/java/net/minecraft/server/NBTTagCompound.java -+++ b/src/main/java/net/minecraft/server/NBTTagCompound.java -@@ -12,10 +12,14 @@ import java.util.concurrent.Callable; - - public class NBTTagCompound extends NBTBase { - -- private Map map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // PandaSpigot - reduce memory footprint of NBTTagCompound -- -- public NBTTagCompound() {} -+ private Map map; - -+ public NBTTagCompound() { -+ map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // PandaSpigot - reduce memory footprint of NBTTagCompound -+ } -+ public NBTTagCompound(it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap map) { -+ this.map = map; -+ } - void write(DataOutput dataoutput) throws IOException { - Iterator iterator = this.map.keySet().iterator(); - -@@ -282,16 +286,17 @@ public class NBTTagCompound extends NBTBase { - } - - public NBTBase clone() { -- NBTTagCompound nbttagcompound = new NBTTagCompound(); -- Iterator iterator = this.map.keySet().iterator(); -- -+ it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap ret = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>( -+ this.map.size(), 0.8f); -+ Iterator> iterator = (this.map instanceof it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) -+ ? ((it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) this.map).object2ObjectEntrySet() -+ .fastIterator() -+ : this.map.entrySet().iterator(); - while (iterator.hasNext()) { -- String s = (String) iterator.next(); -- -- nbttagcompound.set(s, ((NBTBase) this.map.get(s)).clone()); -+ Map.Entry entry = iterator.next(); -+ ret.put(entry.getKey(), entry.getValue().clone()); - } -- -- return nbttagcompound; -+ return new NBTTagCompound(ret); - } - - public boolean equals(Object object) { diff --git a/patches/server/0111-fastutil-HandshakeListener.patch b/patches/server/0110-fastutil-HandshakeListener.patch similarity index 100% rename from patches/server/0111-fastutil-HandshakeListener.patch rename to patches/server/0110-fastutil-HandshakeListener.patch diff --git a/patches/server/0112-fastutil-ChunkProviderServer.patch b/patches/server/0111-fastutil-ChunkProviderServer.patch similarity index 100% rename from patches/server/0112-fastutil-ChunkProviderServer.patch rename to patches/server/0111-fastutil-ChunkProviderServer.patch diff --git a/patches/server/0112-fastutil-SpawnerCreature.patch b/patches/server/0112-fastutil-SpawnerCreature.patch new file mode 100644 index 00000000..561ba10f --- /dev/null +++ b/patches/server/0112-fastutil-SpawnerCreature.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mechoriet +Date: Sat, 7 Oct 2023 21:43:55 +0200 +Subject: [PATCH] fastutil - SpawnerCreature + + +diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java +index 550bd42b656ce2e7a0d1542215845d2bf7c475d7..4c497835c9f3be3410d53a53beb289fcb36ca2d9 100644 +--- a/src/main/java/net/minecraft/server/SpawnerCreature.java ++++ b/src/main/java/net/minecraft/server/SpawnerCreature.java +@@ -23,28 +23,13 @@ public final class SpawnerCreature { + // Spigot start - get entity count only from chunks being processed in b + private int getEntityCount(WorldServer server, Class oClass) + { +- // PandaSpigot start - use entire world, not just active chunks. Spigot broke vanilla expectations. +- if (true) { +- int sum = 0; +- for (Chunk c : server.chunkProviderServer.chunks.values()) { +- sum += c.entityCount.get(oClass); +- } +- return sum; +- } +- // PandaSpigot end +- int i = 0; +- Iterator it = this.b.iterator(); +- while ( it.hasNext() ) +- { +- Long coord = it.next(); +- int x = LongHash.msw( coord ); +- int z = LongHash.lsw( coord ); +- if ( !server.chunkProviderServer.unloadQueue.contains( coord ) && server.isChunkLoaded( x, z, true ) ) +- { +- i += server.getChunkAt( x, z ).entityCount.get( oClass ); +- } ++ int sum = 0; ++ for (it.unimi.dsi.fastutil.objects.ObjectIterator objectIterator = (server.chunkProviderServer).chunks.values() ++ .iterator(); objectIterator.hasNext();) { ++ Chunk c = objectIterator.next(); ++ sum += c.entityCount.get(oClass); + } +- return i; ++ return sum; + } + // Spigot end + diff --git a/patches/server/0113-fastutil-CraftingManager.patch b/patches/server/0113-fastutil-CraftingManager.patch new file mode 100644 index 00000000..e70a3313 --- /dev/null +++ b/patches/server/0113-fastutil-CraftingManager.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mechoriet +Date: Sat, 7 Oct 2023 21:46:27 +0200 +Subject: [PATCH] fastutil - CraftingManager + + +diff --git a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java +index 544ff0a6c2ec62911c97fb02aec24d0215188dc3..2d099863b1d77cf5e1dbc6c37a48f517685d1925 100644 +--- a/src/main/java/net/minecraft/server/CraftingManager.java ++++ b/src/main/java/net/minecraft/server/CraftingManager.java +@@ -14,7 +14,7 @@ import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit + public class CraftingManager { + + private static final CraftingManager a = new CraftingManager(); +- public List recipes = Lists.newArrayList(); ++ public List recipes = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); + // CraftBukkit start + public IRecipe lastRecipe; + public org.bukkit.inventory.InventoryView lastCraftView;