mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-02 17:32:03 +01:00
3360d06f76
* Houston, we got a patch * is this the end of the beginning or the beginning of the end
69 lines
No EOL
2.8 KiB
Diff
69 lines
No EOL
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 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 253890e53..0102a170d 100644
|
|
--- a/src/main/java/net/minecraft/server/BiomeBase.java
|
|
+++ b/src/main/java/net/minecraft/server/BiomeBase.java
|
|
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
|
protected final Map<WorldGenStage.Decoration, List<WorldGenFeatureConfigured<?, ?>>> r = Maps.newHashMap();
|
|
protected final List<WorldGenFeatureConfigured<?, ?>> s = Lists.newArrayList();
|
|
protected final Map<StructureGenerator<?>, WorldGenFeatureConfiguration> t = Maps.newHashMap();
|
|
- private final Map<EnumCreatureType, List<BiomeBase.BiomeMeta>> v = Maps.newHashMap();
|
|
+ private final java.util.EnumMap<EnumCreatureType, List<BiomeBase.BiomeMeta>> v = Maps.newEnumMap(EnumCreatureType.class); // Paper
|
|
private final ThreadLocal<Long2FloatLinkedOpenHashMap> w = ThreadLocal.withInitial(() -> {
|
|
return (Long2FloatLinkedOpenHashMap) SystemUtils.a(() -> {
|
|
Long2FloatLinkedOpenHashMap long2floatlinkedopenhashmap = new Long2FloatLinkedOpenHashMap(1024, 0.25F) {
|
|
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
|
for (j = 0; j < i; ++j) {
|
|
EnumCreatureType enumcreaturetype = aenumcreaturetype[j];
|
|
|
|
- this.v.put(enumcreaturetype, Lists.newArrayList());
|
|
+ this.v.put(enumcreaturetype, new MobList()); // Paper
|
|
}
|
|
|
|
} else {
|
|
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
|
return this.m;
|
|
}
|
|
|
|
+ // 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
|
|
--
|