mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
replace hash map of spawn limit with array (#492)
* replace hash map of spawn limit with enum map * [ci/skip] Add missing comment
This commit is contained in:
@@ -4,6 +4,92 @@ Date: Sat, 5 Jul 2025 17:01:43 +0900
|
||||
Subject: [PATCH] optimize mob spawning
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index dfafd3125438b6a74f15a749599acfd00918c50a..034d136bcaa894d8999fc51a53d66b40bb884ccd 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -296,7 +296,8 @@ public final class CraftServer implements Server {
|
||||
private final EntityMetadataStore entityMetadata = new EntityMetadataStore();
|
||||
private final PlayerMetadataStore playerMetadata = new PlayerMetadataStore();
|
||||
private final WorldMetadataStore worldMetadata = new WorldMetadataStore();
|
||||
- private final Object2IntOpenHashMap<SpawnCategory> spawnCategoryLimit = new Object2IntOpenHashMap<>();
|
||||
+ private static final SpawnCategory[] SPAWN_CATEGORIES = SpawnCategory.values(); // Leaf - optimize mob spawning
|
||||
+ private final int[] spawnCategoryLimit = new int[SPAWN_CATEGORIES.length]; // Leaf - optimize mob spawning
|
||||
private File container;
|
||||
private WarningState warningState = WarningState.DEFAULT;
|
||||
public ApiVersion minimumAPI;
|
||||
@@ -497,6 +498,7 @@ public final class CraftServer implements Server {
|
||||
this.saveCommandsConfig();
|
||||
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
|
||||
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
|
||||
+ java.util.Arrays.fill(spawnCategoryLimit, -1); // Leaf - optimize mob spawning
|
||||
this.overrideSpawnLimits();
|
||||
console.autosavePeriod = this.configuration.getInt("ticks-per.autosave");
|
||||
this.warningState = WarningState.value(this.configuration.getString("settings.deprecated-verbose"));
|
||||
@@ -529,9 +531,9 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
private void overrideSpawnLimits() {
|
||||
- for (SpawnCategory spawnCategory : SpawnCategory.values()) {
|
||||
+ for (SpawnCategory spawnCategory : SPAWN_CATEGORIES) { // Leaf - optimize mob spawning
|
||||
if (CraftSpawnCategory.isValidForLimits(spawnCategory)) {
|
||||
- this.spawnCategoryLimit.put(spawnCategory, this.configuration.getInt(CraftSpawnCategory.getConfigNameSpawnLimit(spawnCategory)));
|
||||
+ this.spawnCategoryLimit[spawnCategory.ordinal()] = this.configuration.getInt(CraftSpawnCategory.getConfigNameSpawnLimit(spawnCategory)); // Leaf - optimize mob spawning
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2544,7 +2546,7 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
public int getSpawnLimitUnsafe(final SpawnCategory spawnCategory) {
|
||||
- return this.spawnCategoryLimit.getOrDefault(spawnCategory, -1);
|
||||
+ return this.spawnCategoryLimit[spawnCategory.ordinal()]; // Leaf - optimize mob spawning
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index ee5f342995a335593932a497c2bafd36d34cecb2..2523cd17ad4a3add3a9a420777dc49fe0658fe01 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -173,7 +173,8 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
private final @Nullable BiomeProvider biomeProvider;
|
||||
private final List<BlockPopulator> populators = new ArrayList<BlockPopulator>();
|
||||
private final BlockMetadataStore blockMetadata = new BlockMetadataStore(this);
|
||||
- private final Object2IntOpenHashMap<SpawnCategory> spawnCategoryLimit = new Object2IntOpenHashMap<>();
|
||||
+ private static final SpawnCategory[] SPAWN_CATEGORIES = SpawnCategory.values(); // Leaf - optimize mob spawning
|
||||
+ private final int[] spawnCategoryLimit = new int[SPAWN_CATEGORIES.length]; // Leaf - optimize mob spawning
|
||||
private final CraftPersistentDataContainer persistentDataContainer = new CraftPersistentDataContainer(CraftWorld.DATA_TYPE_REGISTRY);
|
||||
// Paper start - void damage configuration
|
||||
private boolean voidDamageEnabled;
|
||||
@@ -303,8 +304,9 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
this.biomeProvider = biomeProvider;
|
||||
|
||||
this.environment = environment;
|
||||
+ Arrays.fill(spawnCategoryLimit, -1); // Leaf - optimize mob spawning
|
||||
// Paper start - per world spawn limits
|
||||
- for (SpawnCategory spawnCategory : SpawnCategory.values()) {
|
||||
+ for (SpawnCategory spawnCategory : SPAWN_CATEGORIES) { // Leaf - optimize mob spawning
|
||||
if (CraftSpawnCategory.isValidForLimits(spawnCategory)) {
|
||||
setSpawnLimit(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory)));
|
||||
}
|
||||
@@ -1868,7 +1870,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
return this.getSpawnLimitUnsafe(spawnCategory);
|
||||
}
|
||||
public final int getSpawnLimitUnsafe(final SpawnCategory spawnCategory) {
|
||||
- int limit = this.spawnCategoryLimit.getOrDefault(spawnCategory, -1);
|
||||
+ int limit = this.spawnCategoryLimit[spawnCategory.ordinal()]; // Leaf - optimize mob spawning
|
||||
if (limit < 0) {
|
||||
limit = this.server.getSpawnLimitUnsafe(spawnCategory);
|
||||
// Paper end - Add mobcaps commands
|
||||
@@ -1881,7 +1883,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null");
|
||||
Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory);
|
||||
|
||||
- this.spawnCategoryLimit.put(spawnCategory, limit);
|
||||
+ this.spawnCategoryLimit[spawnCategory.ordinal()] = limit; // Leaf - optimize mob spawning
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
|
||||
index 348bf5ed91ded3537a86bc0708e0158ad4f9296d..7a7d0b8c0b5e6d9b58ca973972bac488975e6e2a 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
|
||||
|
||||
Reference in New Issue
Block a user