From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 19 Feb 2022 20:15:41 -0800 Subject: [PATCH] Option to have default CustomSpawners in custom worlds By default, only LevelStem's that specifically match the ResourceKey for OVERWORLD will have the 5 (currently) impls of CustomSpawner (for phantoms, wandering traders, etc.). This adds an option to instead of just looking at the LevelStem key, look at the DimensionType key which is one level below that. Defaults to off to keep vanilla behavior. diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java index 9bff729df7156b071b08913549838024bb17c3c9..88a4dda44e59fbe6215d7ac2e5af0c54527a2fc7 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -681,4 +681,9 @@ public class PaperConfig { } globalMaxConcurrentChunkLoads = getDouble("settings.chunk-loading.global-max-concurrent-loads", 500.0); } + + public static boolean useDimensionTypeForCustomSpawners; + private static void useDimensionTypeForCustomSpawners() { + useDimensionTypeForCustomSpawners = getBoolean("settings.use-dimension-type-for-custom-spawners", false); + } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index dc94d0a99af26a61b1309ea556b0df2d5f525ea3..dca58725c490bbfef0c50bdd38b58a93622422e2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -617,7 +617,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop spawners; + if (com.destroystokyo.paper.PaperConfig.useDimensionTypeForCustomSpawners && this.registryHolder.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getResourceKey(holder.value()).orElseThrow() == DimensionType.OVERWORLD_LOCATION) { + spawners = list; + } else { + spawners = Collections.emptyList(); + } + world = new ServerLevel(this, this.executor, worldSession, iworlddataserver, worldKey, holder, worldloadlistener, chunkgenerator, flag, j, spawners, true, org.bukkit.World.Environment.getEnvironment(dimension), gen, biomeProvider); + // Paper end } worlddata.setModdedInfo(this.getServerModName(), this.getModdedStatus().shouldReportAsModified());