geforkt von Mirrors/Paper
b62dfa0bf9
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers CraftBukkit Changes:1cf8b5dc
SPIGOT-4400: Populators running on existing chunks116cb9a1
SPIGOT-4399: Add attribute modifier equality test5ee1c18a
SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
81 Zeilen
3.4 KiB
Diff
81 Zeilen
3.4 KiB
Diff
From 39ac4e554ae280c1dd3a3cfb6be744c15ec0b266 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
|
|
|