From 6ad63fba30e7ecd1b11bb8d77e8ed43f0a6e9ce9 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 3 Mar 2024 14:53:58 -0800 Subject: [PATCH] Per world ticks per spawn settings (#6891) --- patches/server/0005-Paper-config-files.patch | 6 ++-- ...3-Per-world-ticks-per-spawn-settings.patch | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 patches/server/1053-Per-world-ticks-per-spawn-settings.patch diff --git a/patches/server/0005-Paper-config-files.patch b/patches/server/0005-Paper-config-files.patch index 57e8a5c627..6a80fba3c9 100644 --- a/patches/server/0005-Paper-config-files.patch +++ b/patches/server/0005-Paper-config-files.patch @@ -1392,10 +1392,10 @@ index 0000000000000000000000000000000000000000..351fbbc577556ebbd62222615801a96b +} diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java new file mode 100644 -index 0000000000000000000000000000000000000000..15bc01b59bb67f1f5d8590c08d13537fa81ca8e1 +index 0000000000000000000000000000000000000000..dc7950f9a52a718317e5f41de9d396cd7b846bf3 --- /dev/null +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -0,0 +1,551 @@ +@@ -0,0 +1,553 @@ +package io.papermc.paper.configuration; + +import com.google.common.collect.HashBasedTable; @@ -1581,6 +1581,8 @@ index 0000000000000000000000000000000000000000..15bc01b59bb67f1f5d8590c08d13537f + public Reference2IntMap spawnLimits = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1))); + @MergeMap + public Map despawnRanges = Arrays.stream(MobCategory.values()).collect(Collectors.toMap(Function.identity(), category -> new DespawnRange(category.getNoDespawnDistance(), category.getDespawnDistance()))); ++ @MergeMap ++ public Reference2IntMap ticksPerSpawn = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1))); + + @ConfigSerializable + public record DespawnRange(@Required int soft, @Required int hard) { diff --git a/patches/server/1053-Per-world-ticks-per-spawn-settings.patch b/patches/server/1053-Per-world-ticks-per-spawn-settings.patch new file mode 100644 index 0000000000..7cb3e6d77c --- /dev/null +++ b/patches/server/1053-Per-world-ticks-per-spawn-settings.patch @@ -0,0 +1,35 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Sat, 13 Nov 2021 12:36:26 -0800 +Subject: [PATCH] Per world ticks per spawn settings + + +diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java +index f476ba6c97944bdffae5aacae2e285d17541f46e..bc89f9e90af3d69872a58c47a4c2545ba91b6ba5 100644 +--- a/src/main/java/net/minecraft/world/level/Level.java ++++ b/src/main/java/net/minecraft/world/level/Level.java +@@ -204,6 +204,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + return this.getChunkIfLoaded(chunkX, chunkZ) != null; + } + // Paper end - Use getChunkIfLoadedImmediately ++ // Paper start - per world ticks per spawn ++ private int getTicksPerSpawn(SpawnCategory spawnCategory) { ++ final int perWorld = this.paperConfig().entities.spawning.ticksPerSpawn.getInt(CraftSpawnCategory.toNMS(spawnCategory)); ++ if (perWorld >= 0) { ++ return perWorld; ++ } ++ return this.getCraftServer().getTicksPerSpawns(spawnCategory); ++ } ++ // Paper end + + public abstract ResourceKey getTypeKey(); + +@@ -216,7 +225,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // CraftBukkit Ticks things + for (SpawnCategory spawnCategory : SpawnCategory.values()) { + if (CraftSpawnCategory.isValidForLimits(spawnCategory)) { +- this.ticksPerSpawnCategory.put(spawnCategory, (long) this.getCraftServer().getTicksPerSpawns(spawnCategory)); ++ this.ticksPerSpawnCategory.put(spawnCategory, this.getTicksPerSpawn(spawnCategory)); // Paper + } + } +