PaperMC/Spigot-Server-Patches/0365-Optimize-Biome-Mob-Lookups-for-Mob-Spawning.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

80 lines
3.4 KiB
Diff

From 35b06fbc69eb0867a47bb057761d48a87e9ba5ec Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 66c038784c..b6990a6d7a 100644
--- a/src/main/java/net/minecraft/server/BiomeBase.java
+++ b/src/main/java/net/minecraft/server/BiomeBase.java
@@ -118,7 +118,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) {
@@ -155,7 +155,7 @@ public abstract class BiomeBase {
}
for(EnumCreatureType enumcreaturetype : EnumCreatureType.values()) {
- this.aZ.put(enumcreaturetype, Lists.newArrayList());
+ this.aZ.put(enumcreaturetype, new MobList()); // Paper
}
} else {
@@ -297,7 +297,7 @@ public abstract class BiomeBase {
public void a(WorldGenStage.Decoration worldgenstage$decoration, ChunkGenerator<? extends GeneratorSettings> chunkgenerator, GeneratorAccess generatoraccess, long ix, SeededRandom seededrandom, BlockPosition blockposition) {
int jx = 0;
- for(WorldGenFeatureComposite worldgenfeaturecomposite : (List)this.aW.get(worldgenstage$decoration)) {
+ for(WorldGenFeatureComposite worldgenfeaturecomposite : this.aW.get(worldgenstage$decoration)) { // Paper - decompile fix
seededrandom.b(ix, jx, worldgenstage$decoration.ordinal());
worldgenfeaturecomposite.a(generatoraccess, chunkgenerator, seededrandom, blockposition, WorldGenFeatureConfiguration.e);
++jx;
@@ -459,6 +459,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 BiomeMeta extends WeightedRandom.WeightedRandomChoice {
public EntityTypes<? extends EntityInsentient> b;
public int c;
--
2.19.0