diff --git a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch index 52e2672c9131..80571067336e 100644 --- a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch +++ b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch @@ -33878,7 +33878,7 @@ index 0000000000000000000000000000000000000000..863a9785c84af6e0c961ae32f0102b5d + } +} diff --git a/ca/spottedleaf/moonrise/paper/PaperHooks.java b/ca/spottedleaf/moonrise/paper/PaperHooks.java -index 7bb2210f2fea91b3f611a58d39a57279200abeb0..4a62c50d0b4fe82c3aacaa56b303b9699120c778 100644 +index 7050fd6efb6fec16ba5657e254c54de1c671c9a0..aa14dd369d5d2c5c843839f289afdc39c200f0c3 100644 --- a/ca/spottedleaf/moonrise/paper/PaperHooks.java +++ b/ca/spottedleaf/moonrise/paper/PaperHooks.java @@ -216,6 +216,11 @@ public final class PaperHooks extends BaseChunkSystemHooks implements PlatformHo diff --git a/paper-server/patches/features/0004-Entity-Activation-Range-2.0.patch b/paper-server/patches/features/0004-Entity-Activation-Range-2.0.patch index d98a7b86566c..079d5704de23 100644 --- a/paper-server/patches/features/0004-Entity-Activation-Range-2.0.patch +++ b/paper-server/patches/features/0004-Entity-Activation-Range-2.0.patch @@ -463,7 +463,7 @@ index f74837dc0be560a1601132594587bcfc22dcf778..c5a212e73c2efeb1f440778cb3f1fa6e public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index c9e0b378db4ca7efa018d5e9150f1c1372373f29..9601774a31012da7ec852a39a058b41b064a282a 100644 +index a13d64459e93ad33ae23e5d39e06f4c0783cbf27..48349eda979e641968142e1f06227445e72f62e5 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -388,6 +388,15 @@ public abstract class Entity @@ -541,7 +541,7 @@ index afbf91722c5f0d0d3d1d075d544feaf0aa187fe2..f332edbc4dad82cbdc02a58aa9ec21fa public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index e1a0eab8bfdda1b68bcb2db0e5c21d6e94d1fd0c..078054c499e7b29d64543f92c1808b5623e3c8e5 100644 +index 554827d60aebf2a538cda9d6c96ed17aea2974b3..51dec65d0f437deb370eabbfa0369c4232caac14 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -217,6 +217,20 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs diff --git a/paper-server/patches/features/0013-Add-Alternate-Current-redstone-implementation.patch b/paper-server/patches/features/0013-Add-Alternate-Current-redstone-implementation.patch index 5bcb463685a6..a18393230d56 100644 --- a/paper-server/patches/features/0013-Add-Alternate-Current-redstone-implementation.patch +++ b/paper-server/patches/features/0013-Add-Alternate-Current-redstone-implementation.patch @@ -2321,7 +2321,7 @@ index 0000000000000000000000000000000000000000..505b5e39d0b4cf2a56c1c720f0c9ab01 + } +} diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 7fa69d76bf2c802b538a21af40898b8abb79629e..d9daa3ea8c4dc21bbe0d0ea9f0ece3f6c6777ba4 100644 +index bc2bacabb588bd6a644ac5226720c7451ac0e475..e4d38cfdac2b926afae3b1b96679b6ce45ea256a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -238,6 +238,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet diff --git a/paper-server/patches/features/0014-Incremental-chunk-and-player-saving.patch b/paper-server/patches/features/0014-Incremental-chunk-and-player-saving.patch index 38027ab1213a..6138d9f23f2d 100644 --- a/paper-server/patches/features/0014-Incremental-chunk-and-player-saving.patch +++ b/paper-server/patches/features/0014-Incremental-chunk-and-player-saving.patch @@ -83,7 +83,7 @@ index 255e01251005a547088aba437ca27ce06fc996e5..487fcb8546ad24125c6573fb84f22a02 ProfilerFiller profiler = Profiler.get(); this.server.spark.executeMainThreadTasks(); // Paper - spark diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index d9daa3ea8c4dc21bbe0d0ea9f0ece3f6c6777ba4..279614d017877ea2ba7c216b9cc874065f5e384d 100644 +index e4d38cfdac2b926afae3b1b96679b6ce45ea256a..ca793f3f7300148cd55d2e873af5b43d9f4c708f 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1470,6 +1470,15 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet @@ -103,7 +103,7 @@ index d9daa3ea8c4dc21bbe0d0ea9f0ece3f6c6777ba4..279614d017877ea2ba7c216b9cc87406 public void save(final @Nullable ProgressListener progressListener, final boolean flush, final boolean noSave) { // Paper start - add close param diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 194a91a2e2d9aa25f62c8a6058bc6d13a42243f5..cbd379d29d2b90b2b6fca8cd42301d12598760a8 100644 +index 576619ccf1f67aca9e5fdaecc68435ef96bb4c84..758df74a454f2aa6fbcc6136767be6d01387dfee 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -212,6 +212,7 @@ import org.slf4j.Logger; @@ -115,7 +115,7 @@ index 194a91a2e2d9aa25f62c8a6058bc6d13a42243f5..cbd379d29d2b90b2b6fca8cd42301d12 private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10; private static final int FLY_STAT_RECORDING_SPEED = 25; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index b5c7affd9ac2f071992e5621a1cf3dfd335930b1..f4e2261a0ffb1d763c1e6a7b353b181178434471 100644 +index 010c6c7e9bf59408bdac22a01f05fe2e8fbafe41..459dd3ae3c9a1c303b8c4f6606d4d2f81c2a532c 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -417,6 +417,7 @@ public abstract class PlayerList { diff --git a/paper-server/patches/features/0016-Optimise-EntityScheduler-ticking.patch b/paper-server/patches/features/0016-Optimise-EntityScheduler-ticking.patch index 4e47fbd2a142..b5badc6e8226 100644 --- a/paper-server/patches/features/0016-Optimise-EntityScheduler-ticking.patch +++ b/paper-server/patches/features/0016-Optimise-EntityScheduler-ticking.patch @@ -66,7 +66,7 @@ index 487fcb8546ad24125c6573fb84f22a02752b35f1..b675e9322234761a69e71e9e8b9d4136 io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.ADVENTURE_CLICK_MANAGER.handleQueue(this.tickCount); // Paper io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.DIALOG_CLICK_MANAGER.handleQueue(this.tickCount); // Paper diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 9601774a31012da7ec852a39a058b41b064a282a..cf3619b6de23f32e9e5a81fbe287fb438ecfcabc 100644 +index 48349eda979e641968142e1f06227445e72f62e5..47b92ca95e423600040dfdff6b8b09891f15e10c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -5383,6 +5383,11 @@ public abstract class Entity diff --git a/paper-server/patches/features/0023-Remove-debug-like-logging.patch b/paper-server/patches/features/0023-Remove-debug-like-logging.patch index a67c98ddba27..f48be4d0a5b1 100644 --- a/paper-server/patches/features/0023-Remove-debug-like-logging.patch +++ b/paper-server/patches/features/0023-Remove-debug-like-logging.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Remove debug-like logging diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b84690962b9f797f95778a7ecbe0c4e398643643..8305d15e8510c09e4a3cdaa78ff1f96a620fc940 100644 +index c2496d0a0e39388a6dd516d23d897e2066ac8643..bdfb22137b5795fbf3a1094cdd5d165e9a9dd418 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1760,7 +1760,7 @@ public class ServerGamePacketListenerImpl diff --git a/paper-server/patches/features/0027-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch b/paper-server/patches/features/0027-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch index 38e7751ae562..89fcb7b81c27 100644 --- a/paper-server/patches/features/0027-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch +++ b/paper-server/patches/features/0027-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch @@ -832,7 +832,7 @@ index 84a92dc868e61969460dddb156af332e6384bcd1..3fef98e8c3c9908c6f05ded33596cbcb tag.putString("Status", BuiltInRegistries.CHUNK_STATUS.getKey(this.chunkStatus).toString()); tag.storeNullable("blending_data", BlendingData.Packed.CODEC, this.blendingData); diff --git a/net/minecraft/world/level/chunk/storage/SimpleRegionStorage.java b/net/minecraft/world/level/chunk/storage/SimpleRegionStorage.java -index df4f03f3a346e0ab0074757b3a077b2407135ac3..0b0265c8d4cb70aef758c1b443d007ef8d6c282b 100644 +index cdbe291d2053239e3b8dd0042dfb475306a6b6e5..12ac13394fc38f089be0ad7731eb4ea9487e1d17 100644 --- a/net/minecraft/world/level/chunk/storage/SimpleRegionStorage.java +++ b/net/minecraft/world/level/chunk/storage/SimpleRegionStorage.java @@ -34,6 +34,7 @@ public class SimpleRegionStorage implements ca.spottedleaf.moonrise.patches.chun diff --git a/paper-server/patches/features/0028-Optimise-collision-checking-in-player-move-packet-ha.patch b/paper-server/patches/features/0028-Optimise-collision-checking-in-player-move-packet-ha.patch index e26e9cc31a35..8deb695598b1 100644 --- a/paper-server/patches/features/0028-Optimise-collision-checking-in-player-move-packet-ha.patch +++ b/paper-server/patches/features/0028-Optimise-collision-checking-in-player-move-packet-ha.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimise collision checking in player move packet handling Move collision logic to just the hasNewCollision call instead of getCubes + hasNewCollision diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 8305d15e8510c09e4a3cdaa78ff1f96a620fc940..cc0d455f88bc7c5798ea27abfaa3333c2656eb92 100644 +index bdfb22137b5795fbf3a1094cdd5d165e9a9dd418..2f293c035f137e5bfbf9e392fe0c4ad5711baf06 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -647,6 +647,7 @@ public class ServerGamePacketListenerImpl diff --git a/paper-server/patches/features/0029-Optional-per-player-mob-spawns.patch b/paper-server/patches/features/0029-Optional-per-player-mob-spawns.patch index 0438b8dbd6f4..ec4f06739f64 100644 --- a/paper-server/patches/features/0029-Optional-per-player-mob-spawns.patch +++ b/paper-server/patches/features/0029-Optional-per-player-mob-spawns.patch @@ -75,7 +75,7 @@ index 2dc8b94c434e841b319ef5b77bd725fd66f3c10b..a5540612a4052d9e9d8b1b0ac3c15917 profiler.popPush("tickSpawningChunks"); diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 2cf8854636df72c1dccbb73dfe8f642dfdf1ea37..99403edc1eda1e238b66028b7d236e5fceb235a1 100644 +index 758df74a454f2aa6fbcc6136767be6d01387dfee..993112707cb4e5a6d1fc162889a31f4c697695a9 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -422,6 +422,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc diff --git a/paper-server/patches/features/0030-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch b/paper-server/patches/features/0030-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch index c10e34855095..3fa83556881d 100644 --- a/paper-server/patches/features/0030-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch +++ b/paper-server/patches/features/0030-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch @@ -60,7 +60,7 @@ index a5540612a4052d9e9d8b1b0ac3c1591777f26caa..c4cfb53e145d69666ffc27ef4ee0c50b spawnCookie = NaturalSpawner.createState(chunkCount, this.level, this::getFullChunk, null, true); } else { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 99403edc1eda1e238b66028b7d236e5fceb235a1..23b3a82ab3e1c6abc85000d9285470cb12300a6b 100644 +index 993112707cb4e5a6d1fc162889a31f4c697695a9..56ee7ed4bdedbc5f7d12b9ccd547ff3984158b1d 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -426,6 +426,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc diff --git a/paper-server/patches/features/0031-DataConverter-Moonrise-co-fixes.patch b/paper-server/patches/features/0031-DataConverter-Moonrise-co-fixes.patch index a72a787ece3c..6cedd510c5dc 100644 --- a/paper-server/patches/features/0031-DataConverter-Moonrise-co-fixes.patch +++ b/paper-server/patches/features/0031-DataConverter-Moonrise-co-fixes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] DataConverter, Moonrise & co fixes diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index cc0d455f88bc7c5798ea27abfaa3333c2656eb92..e24c7e2db785bce4a8801373d8e2bcd25477dbb6 100644 +index 2f293c035f137e5bfbf9e392fe0c4ad5711baf06..ee455011ff5d35466c1ee2f720c03ecef8d5237a 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1856,9 +1856,14 @@ public class ServerGamePacketListenerImpl diff --git a/paper-server/patches/features/0035-Pre-load-data-off-main-during-startup.patch b/paper-server/patches/features/0035-Pre-load-data-off-main-during-startup.patch index 8ae1363f39e9..18083b4d6857 100644 --- a/paper-server/patches/features/0035-Pre-load-data-off-main-during-startup.patch +++ b/paper-server/patches/features/0035-Pre-load-data-off-main-during-startup.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Pre-load data off-main during startup diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index c22cc4387e7cc5da7d38ee14ed7f187b5d9507f4..aa7f2ba4d931f98ce15c52dc2b99f07504149582 100644 +index b515d8be0e2f0639f7fc843d6ce074b0a583c673..984cf7143e3809507c557e0e70ab271b753db235 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -102,7 +102,10 @@ public class Main { diff --git a/paper-server/patches/sources/net/minecraft/server/Main.java.patch b/paper-server/patches/sources/net/minecraft/server/Main.java.patch index 4f003bd23328..8dc040bcbc5d 100644 --- a/paper-server/patches/sources/net/minecraft/server/Main.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/Main.java.patch @@ -140,7 +140,7 @@ WorldStem worldStem; try { -@@ -169,17 +_,31 @@ +@@ -169,17 +_,40 @@ executor -> WorldLoader.load( worldLoadConfig, context -> { @@ -161,8 +161,16 @@ + } + // Paper end - migrate startup world LevelDataAndDimensions worldData = LevelStorageSource.getLevelDataAndDimensions( -- access, levelDataTag, context.dataConfiguration(), datapackDimensions, context.datapackWorldRegistries() -+ access, levelDataTag, context.dataConfiguration(), datapackDimensions, context.datapackWorldRegistries(), net.minecraft.world.level.Level.OVERWORLD // Paper + access, levelDataTag, context.dataConfiguration(), datapackDimensions, context.datapackWorldRegistries() ++ // Paper start - pass dimension and recover missing world gen settings ++ , net.minecraft.world.level.Level.OVERWORLD ++ , () -> { ++ final DedicatedServerProperties properties = settings.getProperties(); ++ return new WorldGenSettings( ++ properties.worldOptions, properties.createDimensions(context.datapackWorldRegistries()) ++ ); ++ } ++ // Paper end - pass dimension and recover missing world gen settings ); return new WorldLoader.DataLoadOutput<>( worldData.worldDataAndGenSettings(), worldData.dimensions().dimensionsRegistryAccess() diff --git a/paper-server/patches/sources/net/minecraft/world/level/storage/LevelStorageSource.java.patch b/paper-server/patches/sources/net/minecraft/world/level/storage/LevelStorageSource.java.patch index cad5725ebad3..13ceefd05349 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/storage/LevelStorageSource.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/storage/LevelStorageSource.java.patch @@ -1,11 +1,32 @@ --- a/net/minecraft/world/level/storage/LevelStorageSource.java +++ b/net/minecraft/world/level/storage/LevelStorageSource.java -@@ -145,13 +_,14 @@ +@@ -145,21 +_,48 @@ final WorldDataConfiguration dataConfiguration, final Registry datapackDimensions, final HolderLookup.Provider registryAccess +- ) { + , final ResourceKey dimension // Paper - pass dimension - ) { ++ ) { ++ // Paper start - Recover missing overworld world gen settings ++ return getLevelDataAndDimensions(worldAccess, levelDataTag, dataConfiguration, datapackDimensions, registryAccess, dimension, () -> { ++ // Preserve dimension settings if we got them from the datapack ++ WorldDimensions defaultDimensions = datapackDimensions.containsKey(LevelStem.OVERWORLD) ++ ? new WorldDimensions(datapackDimensions) ++ : net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldDimensions(registryAccess); ++ return new WorldGenSettings(WorldOptions.defaultWithRandomSeed(), defaultDimensions); ++ }); ++ } ++ ++ public static LevelDataAndDimensions getLevelDataAndDimensions( ++ final LevelStorageSource.LevelStorageAccess worldAccess, ++ final Dynamic levelDataTag, ++ final WorldDataConfiguration dataConfiguration, ++ final Registry datapackDimensions, ++ final HolderLookup.Provider registryAccess, ++ final ResourceKey dimension, ++ final java.util.function.Supplier worldGenSettingsFactory ++ ) { ++ // Paper end - Recover missing overworld world gen settings if (DataFixers.getFileFixer().requiresFileFixing(NbtUtils.getDataVersion(levelDataTag))) { throw new IllegalStateException("Cannot get level data without file fixing first"); } @@ -16,6 +37,24 @@ .mapOrElse( Function.identity(), error -> { +- LOGGER.error( +- "Unable to read or access the world gen settings file! Falling back to the default settings with a random world seed. {}", +- error.message() ++ // Paper start - Recover missing overworld world gen settings ++ Path dataLocation = WorldGenSettings.TYPE.id().withSuffix(".dat").resolveAgainst(worldAccess.getDimensionPath(dimension).resolve(LevelResource.DATA.id())); ++ if (!Files.notExists(dataLocation, java.nio.file.LinkOption.NOFOLLOW_LINKS)) { ++ throw new IllegalStateException("Unable to read or access the world gen settings file " + dataLocation + ". " + error.message()); ++ } ++ LOGGER.warn( ++ "World gen settings file is missing! Recreating settings from server.properties: {}", ++ dataLocation + ); +- return new WorldGenSettings(WorldOptions.defaultWithRandomSeed(), new WorldDimensions(datapackDimensions)); ++ return worldGenSettingsFactory.get(); ++ // Paper end - Recover missing overworld world gen settings + } + ); + LevelSettings settings = LevelSettings.parse(dataTag, dataConfiguration); @@ -170,9 +_,9 @@ } diff --git a/paper-server/src/main/java/io/papermc/paper/world/PaperWorldLoader.java b/paper-server/src/main/java/io/papermc/paper/world/PaperWorldLoader.java index 219d2ec1a0cf..72e73c26b5b6 100644 --- a/paper-server/src/main/java/io/papermc/paper/world/PaperWorldLoader.java +++ b/paper-server/src/main/java/io/papermc/paper/world/PaperWorldLoader.java @@ -144,7 +144,9 @@ private void loadInitialWorld(final LevelStem stem, final boolean hasWorldData) return; } - final WorldGenSettings worldGenSettings = !hasWorldData + final boolean isOverworldLevel = loading.info().dimensionKey() == Level.OVERWORLD; + + final WorldGenSettings worldGenSettings = isOverworldLevel || !hasWorldData ? this.server.getWorldGenSettings() : loadWorldGenSettings( this.server.storageSource, @@ -153,7 +155,7 @@ private void loadInitialWorld(final LevelStem stem, final boolean hasWorldData) ); final var worldDataAndGenSettings = new LevelDataAndDimensions.WorldDataAndGenSettings(this.server.getWorldData(), worldGenSettings); - if (loading.info().dimensionKey() == Level.OVERWORLD) { + if (isOverworldLevel) { final var primaryLevelData = ((PrimaryLevelData) this.server.getWorldData()); primaryLevelData.checkName(loading.data().bukkitName()); primaryLevelData.setModdedInfo(this.server.getServerModName(), this.server.getModdedStatus().shouldReportAsModified());