diff options
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.patch | 71 |
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 + |