aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch')
-rw-r--r--Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch b/Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch
new file mode 100644
index 0000000000..2fb6267de7
--- /dev/null
+++ b/Spigot-Server-Patches/0352-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.patch
@@ -0,0 +1,71 @@
+From 38dcc25caf79d64c5fcb8cf6046cb7fe4cbd72a9 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Wed, 12 Sep 2018 21:47:01 -0400
+Subject: [PATCH] Optimize Biome Mob Lookups for Mob Spawning
+
+Uses an EnumMap as well as a Set paired List for O(1) contains calls.
+
+diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java
+index c399bdecc3..3496d4236d 100644
+--- a/src/main/java/net/minecraft/server/BiomeBase.java
++++ b/src/main/java/net/minecraft/server/BiomeBase.java
+@@ -120,7 +120,7 @@ public abstract class BiomeBase {
+ protected final Map<WorldGenStage.Decoration, List<WorldGenFeatureComposite<?, ?>>> aW = Maps.newHashMap();
+ protected final List<WorldGenFeatureCompositeFlower<?>> aX = Lists.newArrayList();
+ protected final Map<StructureGenerator<?>, WorldGenFeatureConfiguration> aY = Maps.newHashMap();
+- private final Map<EnumCreatureType, List<BiomeBase.BiomeMeta>> aZ = Maps.newHashMap();
++ private final java.util.EnumMap<EnumCreatureType, List<BiomeBase.BiomeMeta>> aZ = Maps.newEnumMap(EnumCreatureType.class); // Paper
+
+ @Nullable
+ public static BiomeBase a(BiomeBase biomebase) {
+@@ -169,7 +169,7 @@ public abstract class BiomeBase {
+ for (j = 0; j < i; ++j) {
+ EnumCreatureType enumcreaturetype = aenumcreaturetype[j];
+
+- this.aZ.put(enumcreaturetype, Lists.newArrayList());
++ this.aZ.put(enumcreaturetype, new MobList()); // Paper
+ }
+
+ } else {
+@@ -473,6 +473,38 @@ public abstract class BiomeBase {
+
+ }
+
++ // Paper start - keep track of data in a pair set to give O(1) contains calls - we have to hook removals incase plugins mess with it
++ public static class MobList extends java.util.ArrayList<BiomeMeta> {
++ java.util.Set<BiomeMeta> biomes = new java.util.HashSet<>();
++
++ @Override
++ public boolean contains(Object o) {
++ return biomes.contains(o);
++ }
++
++ @Override
++ public boolean add(BiomeMeta biomeMeta) {
++ biomes.add(biomeMeta);
++ return super.add(biomeMeta);
++ }
++
++ @Override
++ public BiomeMeta remove(int index) {
++ BiomeMeta removed = super.remove(index);
++ if (removed != null) {
++ biomes.remove(removed);
++ }
++ return removed;
++ }
++
++ @Override
++ public void clear() {
++ biomes.clear();
++ super.clear();
++ }
++ }
++ // Paper end
++
+ public static class a {
+
+ @Nullable
+--
+2.21.0
+