From 3526e4ebbf30917ed51fd05202ce33fab5c07259 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Sun, 21 Dec 2025 13:30:08 +0100 Subject: [PATCH 1/5] Minecraft 1.21.11 (#184) * feat: 1.21.11 (untested) * fix: nullable annotation * fix: new api versioning * fix: command issues * paper: Update to 997f5054574db24d114d25d7ed88b0c9db3573a0: Mark client as loading after API respawn (Fixes #13417) (#13418) --- aspaper-api/build.gradle.kts.patch | 10 +++++----- aspaper-server/build.gradle.kts.patch | 8 ++++---- .../features/0001-Disable-dragon-battle.patch | 4 ++-- .../features/0002-Avoid-IO-call-for-UUID.patch | 6 +++--- .../0003-Prevent-config-disk-io-on-world-load.patch | 10 +++++----- .../0004-Read-only-dimension-data-store.patch | 10 +++++----- .../minecraft/server/level/ServerLevel.java.patch | 12 ++++++------ .../paper-patches/features/0003-Branding.patch | 13 ------------- .../com/infernalsuite/asp/SlimeNMSBridgeImpl.java | 9 +++++---- .../asp/config/SlimePaperWorldConfig.java | 6 +++--- .../asp/level/ReadOnlyDimensionDataStorage.java | 4 ++-- .../infernalsuite/asp/level/SlimeLevelInstance.java | 6 +++--- .../src/main/kotlin/asp.base-conventions.gradle.kts | 2 +- gradle.properties | 9 +++++---- gradle/libs.versions.toml | 2 +- 15 files changed, 50 insertions(+), 61 deletions(-) diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index 1003af3b..58ddbe9f 100644 --- a/aspaper-api/build.gradle.kts.patch +++ b/aspaper-api/build.gradle.kts.patch @@ -1,6 +1,6 @@ --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts -@@ -39,6 +_,7 @@ +@@ -41,6 +_,7 @@ } dependencies { @@ -8,7 +8,7 @@ // api dependencies are listed transitively to API consumers api("com.google.guava:guava:33.3.1-jre") api("com.google.code.gson:gson:2.11.0") -@@ -89,7 +_,7 @@ +@@ -91,7 +_,7 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher") } @@ -17,7 +17,7 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -99,6 +_,18 @@ +@@ -101,6 +_,18 @@ main { java { srcDir(generatedDir) @@ -36,7 +36,7 @@ } } } -@@ -165,7 +_,7 @@ +@@ -183,7 +_,7 @@ tasks.withType().configureEach { val options = options as StandardJavadocDocletOptions @@ -45,7 +45,7 @@ options.use() options.isDocFilesSubDirs = true options.links( -@@ -198,11 +_,11 @@ +@@ -216,11 +_,11 @@ } // workaround for https://github.com/gradle/gradle/issues/4046 diff --git a/aspaper-server/build.gradle.kts.patch b/aspaper-server/build.gradle.kts.patch index 33bdedf7..c677a437 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -1,6 +1,6 @@ --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts -@@ -23,6 +_,17 @@ +@@ -22,6 +_,17 @@ minecraftVersion = providers.gradleProperty("mcVersion") gitFilePatches = false @@ -16,7 +16,7 @@ + activeFork = aspaper + spigot { - enabled = true + enabled = false buildDataRef = "42d18d4c4653ffc549778dbe223f6994a031d69e" @@ -104,7 +_,19 @@ } @@ -49,7 +49,7 @@ implementation("ca.spottedleaf:concurrentutil:0.0.7") implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 -@@ -197,14 +_,14 @@ +@@ -198,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -69,7 +69,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -263,7 +_,7 @@ +@@ -264,7 +_,7 @@ jvmArgumentProviders.add(provider) } diff --git a/aspaper-server/minecraft-patches/features/0001-Disable-dragon-battle.patch b/aspaper-server/minecraft-patches/features/0001-Disable-dragon-battle.patch index 66372749..43da5213 100644 --- a/aspaper-server/minecraft-patches/features/0001-Disable-dragon-battle.patch +++ b/aspaper-server/minecraft-patches/features/0001-Disable-dragon-battle.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable dragon battle diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index efd599c516d89ebc5f040413b7c17c5bf0ad796c..fe30353d28cf7e35e7ba7267a8a630f2cffccd4a 100644 +index 24d3b1161cf45a915b37f510645500c5a45350eb..cd7aca9f76aef0824d94c73373a8f4536d05c4e8 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -707,7 +707,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -715,7 +715,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ); this.structureManager = new StructureManager(this, this.serverLevelData.worldGenOptions(), this.structureCheck); // CraftBukkit if (this.dimension() == Level.END && this.dimensionTypeRegistration().is(BuiltinDimensionTypes.END) || env == org.bukkit.World.Environment.THE_END) { // CraftBukkit - Allow to create EnderDragonBattle in default and custom END diff --git a/aspaper-server/minecraft-patches/features/0002-Avoid-IO-call-for-UUID.patch b/aspaper-server/minecraft-patches/features/0002-Avoid-IO-call-for-UUID.patch index fab9e859..53c38eb9 100644 --- a/aspaper-server/minecraft-patches/features/0002-Avoid-IO-call-for-UUID.patch +++ b/aspaper-server/minecraft-patches/features/0002-Avoid-IO-call-for-UUID.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Avoid IO call for UUID diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 2c8e5d8bebb53c70c3180e72af738e87ec0f36f6..c394731283ee3344a8e21d3b2d0f75470e4f6bfd 100644 +index cd7aca9f76aef0824d94c73373a8f4536d05c4e8..7893b71f81ae055512ec88415ebe388b7152cc5a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -636,7 +636,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -642,7 +642,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // CraftBukkit start - super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.location(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor + super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.identifier(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor this.levelStorageAccess = levelStorageAccess; - this.uuid = org.bukkit.craftbukkit.util.WorldUUID.getOrCreate(levelStorageAccess.levelDirectory.path().toFile()); + this.uuid = bootstrap == null ? org.bukkit.craftbukkit.util.WorldUUID.getOrCreate(levelStorageAccess.levelDirectory.path().toFile()) : java.util.UUID.randomUUID(); //ASP - avoid IO calls diff --git a/aspaper-server/minecraft-patches/features/0003-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/minecraft-patches/features/0003-Prevent-config-disk-io-on-world-load.patch index 165cb108..988cdfd7 100644 --- a/aspaper-server/minecraft-patches/features/0003-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/minecraft-patches/features/0003-Prevent-config-disk-io-on-world-load.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Prevent config disk io on world load diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index c394731283ee3344a8e21d3b2d0f75470e4f6bfd..db13c732fdea20e28130a89b40bbe8662d4873da 100644 +index 7893b71f81ae055512ec88415ebe388b7152cc5a..b43b7d06a7514da20a35a856d19eaef5670fc4af 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -634,7 +634,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -640,7 +640,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ) { //ASP end // CraftBukkit start -- super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.location(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor -+ super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> bootstrap != null ? com.infernalsuite.asp.config.SlimePaperWorldConfig.initializeOrGet() : server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.location(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor //ASP - Optimize world config +- super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.identifier(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor ++ super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> bootstrap != null ? com.infernalsuite.asp.config.SlimePaperWorldConfig.initializeOrGet() : server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.identifier(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor //ASP - Optimize world config this.levelStorageAccess = levelStorageAccess; this.uuid = bootstrap == null ? org.bukkit.craftbukkit.util.WorldUUID.getOrCreate(levelStorageAccess.levelDirectory.path().toFile()) : java.util.UUID.randomUUID(); //ASP - avoid IO calls this.levelLoadListener = new net.minecraft.server.level.progress.LoggingLevelLoadListener(false, this); diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index d225267b1b07854b76c88ce461d7817a86d023a0..de152aca205954d33cf2997043cb8c91b9587cdf 100644 +index 0df3a12f64f9c48561d64059289727b18239d6ce..25c2fe67019da8089107c2662c5813ff302485cc 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -844,7 +844,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/aspaper-server/minecraft-patches/features/0004-Read-only-dimension-data-store.patch b/aspaper-server/minecraft-patches/features/0004-Read-only-dimension-data-store.patch index 432286d3..d3d2261b 100644 --- a/aspaper-server/minecraft-patches/features/0004-Read-only-dimension-data-store.patch +++ b/aspaper-server/minecraft-patches/features/0004-Read-only-dimension-data-store.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Read only dimension data store diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 413f0673557b9e3f9177d15e9bef61bded209e34..ebc9373bb3a48ef41d54d445c1aa02fe06d83cff 100644 +index af67b07722bb0125acd081dab767d7e7b360623b..fc4f631f7d55ce67f348e3b6090095e6ef8445e8 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -210,7 +210,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -208,7 +208,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon LOGGER.error("Failed to create dimension data storage directory", (Throwable)var14); } -- this.dataStorage = new DimensionDataStorage(new SavedData.Context(level), path, fixerUpper, level.registryAccess()); +- this.dataStorage = new DimensionDataStorage(path, fixerUpper, level.registryAccess()); + //ASP start - No dimension data storage + if(level instanceof com.infernalsuite.asp.level.SlimeLevelInstance) { -+ this.dataStorage = new com.infernalsuite.asp.level.ReadOnlyDimensionDataStorage(new SavedData.Context(level), path, fixerUpper, level.registryAccess()); ++ this.dataStorage = new com.infernalsuite.asp.level.ReadOnlyDimensionDataStorage(path, fixerUpper, level.registryAccess()); + } else { -+ this.dataStorage = new DimensionDataStorage(new SavedData.Context(level), path, fixerUpper, level.registryAccess()); ++ this.dataStorage = new DimensionDataStorage(path, fixerUpper, level.registryAccess()); + } + //ASP end - No dimension data storage this.ticketStorage = this.dataStorage.computeIfAbsent(TicketStorage.TYPE); diff --git a/aspaper-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch b/aspaper-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch index ec55b661..c8af94f8 100644 --- a/aspaper-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch +++ b/aspaper-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -592,7 +_,31 @@ +@@ -598,7 +_,31 @@ } // Paper end - chunk tick iteration @@ -29,19 +29,19 @@ + } + + public ServerLevel( -+ @Nullable com.infernalsuite.asp.level.SlimeBootstrap bootstrap, ++ com.infernalsuite.asp.level.@Nullable SlimeBootstrap bootstrap, MinecraftServer server, Executor dispatcher, LevelStorageSource.LevelStorageAccess levelStorageAccess, -@@ -608,6 +_,7 @@ +@@ -614,6 +_,7 @@ org.bukkit.generator.ChunkGenerator gen, // CraftBukkit org.bukkit.generator.BiomeProvider biomeProvider // CraftBukkit ) { + //ASP end // CraftBukkit start - super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.location(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor + super(serverLevelData, dimension, server.registryAccess(), levelStem.type(), false, isDebug, biomeZoomSeed, server.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> server.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(levelStorageAccess.levelDirectory.path(), serverLevelData.getLevelName(), dimension.identifier(), spigotConfig, server.registryAccess(), serverLevelData.getGameRules())), dispatcher); // Paper - create paper world configs & Async-Anti-Xray: Pass executor this.levelStorageAccess = levelStorageAccess; -@@ -635,6 +_,13 @@ +@@ -641,6 +_,13 @@ chunkGenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkGenerator, gen); } // CraftBukkit end @@ -55,7 +55,7 @@ boolean flag = server.forceSynchronousWrites(); DataFixer fixerUpper = server.getFixerUpper(); // Paper - rewrite chunk system -@@ -713,6 +_,12 @@ +@@ -723,6 +_,12 @@ public void setDragonFight(@Nullable EndDragonFight dragonFight) { this.dragonFight = dragonFight; } diff --git a/aspaper-server/paper-patches/features/0003-Branding.patch b/aspaper-server/paper-patches/features/0003-Branding.patch index 2a99d901..09949065 100644 --- a/aspaper-server/paper-patches/features/0003-Branding.patch +++ b/aspaper-server/paper-patches/features/0003-Branding.patch @@ -88,16 +88,3 @@ index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..2610e8d1ce20331895b0a76fa50efc06 } @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 774556a62eb240da42e84db4502e2ed43495be17..0c54eb1187c31a2e6efd4b0898fc600fa1bddeee 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -11,7 +11,7 @@ public final class Versioning { - public static String getBukkitVersion() { - String result = "Unknown-Version"; - -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.infernalsuite.asp/aspaper-api/pom.properties"); - Properties properties = new Properties(); - - if (stream != null) { diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java index 71a452cf..c0433c4b 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java @@ -15,12 +15,13 @@ import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.MinecraftServer; import net.minecraft.server.WorldLoader; import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.server.dedicated.DedicatedServerProperties; -import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.gamerules.GameRules; +import net.minecraft.world.level.gamerules.GameRuleMap; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelSettings; import net.minecraft.world.level.dimension.LevelStem; @@ -187,7 +188,7 @@ private SlimeLevelInstance createCustomWorld(SlimeWorld world, @Nullable Resourc default -> throw new IllegalArgumentException("Unknown dimension supplied"); }; - ResourceKey worldKey = dimensionOverride == null ? ResourceKey.create(Registries.DIMENSION, ResourceLocation.parse(worldName.toLowerCase(Locale.ENGLISH))) : dimensionOverride; + ResourceKey worldKey = dimensionOverride == null ? ResourceKey.create(Registries.DIMENSION, Identifier.parse(worldName.toLowerCase(Locale.ENGLISH))) : dimensionOverride; LevelStem stem = MinecraftServer.getServer().registries().compositeAccess().lookupOrThrow(Registries.LEVEL_STEM).get(dimension).orElseThrow().value(); SlimeLevelInstance level; @@ -212,7 +213,7 @@ private PrimaryLevelData createWorldData(SlimeWorld world) { WorldLoader.DataLoadContext context = mcServer.worldLoaderContext; LevelSettings worldsettings = new LevelSettings(worldName, serverProps.gameMode.get(), false, serverProps.difficulty.get(), - true, new GameRules(context.dataConfiguration().enabledFeatures()), mcServer.worldLoaderContext.dataConfiguration()); + true, new GameRules(context.dataConfiguration().enabledFeatures(), GameRuleMap.of()), mcServer.worldLoaderContext.dataConfiguration()); WorldOptions worldoptions = new WorldOptions(0, false, false); diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/config/SlimePaperWorldConfig.java b/aspaper-server/src/main/java/com/infernalsuite/asp/config/SlimePaperWorldConfig.java index 3b246b08..f2f3fcac 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/config/SlimePaperWorldConfig.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/config/SlimePaperWorldConfig.java @@ -3,16 +3,16 @@ import io.papermc.paper.configuration.Configurations; import io.papermc.paper.configuration.PaperConfigurations; import io.papermc.paper.configuration.WorldConfiguration; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.gamerules.GameRules; import org.spigotmc.SpigotWorldConfig; import java.nio.file.Path; public class SlimePaperWorldConfig { - private static final ResourceLocation FAKE_WORLD_KEY = ResourceLocation.fromNamespaceAndPath("infernalsuite", "asp-slimeworld"); + private static final Identifier FAKE_WORLD_KEY = Identifier.fromNamespaceAndPath("infernalsuite", "asp-slimeworld"); public static WorldConfiguration cachedSlimeWorldConfig; private SlimePaperWorldConfig() {} diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/ReadOnlyDimensionDataStorage.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/ReadOnlyDimensionDataStorage.java index 6abd3952..4397426d 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/ReadOnlyDimensionDataStorage.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/ReadOnlyDimensionDataStorage.java @@ -17,8 +17,8 @@ */ public class ReadOnlyDimensionDataStorage extends DimensionDataStorage { - public ReadOnlyDimensionDataStorage(SavedData.Context ctx, Path dataFolder, DataFixer fixerUpper, HolderLookup.Provider registries) { - super(ctx, dataFolder, fixerUpper, registries); + public ReadOnlyDimensionDataStorage(Path dataFolder, DataFixer fixerUpper, HolderLookup.Provider registries) { + super(dataFolder, fixerUpper, registries); } @Override diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeLevelInstance.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeLevelInstance.java index 4f52abbe..8e6f204a 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeLevelInstance.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeLevelInstance.java @@ -26,7 +26,7 @@ import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; @@ -106,7 +106,7 @@ public SlimeLevelInstance(SlimeBootstrap slimeBootstrap, PrimaryLevelData primar serverLevelData.setSpawn( new LevelData.RespawnData( GlobalPos.of( - ResourceKey.create(Registries.DIMENSION, this.dimension().location()), + ResourceKey.create(Registries.DIMENSION, this.dimension().identifier()), new BlockPos( propertyMap.getValue(SlimeProperties.SPAWN_X), propertyMap.getValue(SlimeProperties.SPAWN_Y), @@ -143,7 +143,7 @@ public SlimeLevelInstance(SlimeBootstrap slimeBootstrap, PrimaryLevelData primar @Override public @NotNull ChunkGenerator getGenerator(SlimeBootstrap slimeBootstrap) { String biomeStr = slimeBootstrap.initial().getPropertyMap().getValue(SlimeProperties.DEFAULT_BIOME); - ResourceKey biomeKey = ResourceKey.create(Registries.BIOME, ResourceLocation.parse(biomeStr)); + ResourceKey biomeKey = ResourceKey.create(Registries.BIOME, Identifier.parse(biomeStr)); Holder defaultBiome = MinecraftServer.getServer().registryAccess().lookupOrThrow(Registries.BIOME).get(biomeKey).orElseThrow(); return new SlimeLevelGenerator(defaultBiome, this); } diff --git a/buildSrc/src/main/kotlin/asp.base-conventions.gradle.kts b/buildSrc/src/main/kotlin/asp.base-conventions.gradle.kts index 923da580..6ad34f64 100644 --- a/buildSrc/src/main/kotlin/asp.base-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/asp.base-conventions.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = rootProject.providers.gradleProperty("group").get() -version = rootProject.providers.gradleProperty("apiVersion").get() +version = rootProject.providers.gradleProperty("aspApiVersion").get() java { toolchain { diff --git a/gradle.properties b/gradle.properties index c4f2167d..9a3c5f5a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,10 @@ group=com.infernalsuite.asp -apiVersion=4.2.0-SNAPSHOT -version=1.21.10-R0.1-SNAPSHOT -mcVersion=1.21.10 +aspApiVersion=4.2.0-SNAPSHOT +apiVersion=1.21.11 +version=1.21.11-R0.1-SNAPSHOT +mcVersion=1.21.11 -paperRef=f8cf03d68ccd498cc7c5be434f1269ead112aaf4 +paperRef=997f5054574db24d114d25d7ed88b0c9db3573a0 org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5d4eab7e..6ed94a33 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ autoservice = "1.1.1" blossom = "2.1.0" bstats = "3.1.0" cloud-core = "2.0.0" -cloud-minecraft = "2.0.0-beta.10" +cloud-minecraft = "2.0.0-beta.14" configurate = "4.1.2" indra-git = "3.1.3" gradle-profiles = "0.54.0" From 17eee4fcdec4b835ee70bb59752be466e7734883 Mon Sep 17 00:00:00 2001 From: NotStevy <63160089+notstevy@users.noreply.github.com> Date: Mon, 29 Dec 2025 21:29:06 +0100 Subject: [PATCH 2/5] paper: Update to 6d5a450ffb067fb06a9d434093ebb6d098271083 (Promote build channel from ALPHA to BETA) (#189) --- aspaper-server/build.gradle.kts.patch | 6 +++--- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aspaper-server/build.gradle.kts.patch b/aspaper-server/build.gradle.kts.patch index c677a437..0f7bbb59 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -16,8 +16,8 @@ + activeFork = aspaper + spigot { - enabled = false - buildDataRef = "42d18d4c4653ffc549778dbe223f6994a031d69e" + enabled = true + buildDataRef = "17f77cee7117ab9d6175f088ae8962bfd04e61a9" @@ -104,7 +_,19 @@ } } @@ -46,7 +46,7 @@ - implementation(project(":paper-api")) + implementation(project(":aspaper-api")) //ASP + implementation(project(":core")) //ASP - implementation("ca.spottedleaf:concurrentutil:0.0.7") + implementation("ca.spottedleaf:concurrentutil:0.0.8") implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 @@ -198,14 +_,14 @@ diff --git a/gradle.properties b/gradle.properties index 9a3c5f5a..d0b3f5a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ apiVersion=1.21.11 version=1.21.11-R0.1-SNAPSHOT mcVersion=1.21.11 -paperRef=997f5054574db24d114d25d7ed88b0c9db3573a0 +paperRef=6d5a450ffb067fb06a9d434093ebb6d098271083 org.gradle.caching=true org.gradle.parallel=true From db3a1fd7fb72da6d3f0a0c26c5995806262f2dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rost=C3=A1s=20Andr=C3=A1s?= Date: Mon, 12 Jan 2026 00:52:43 +0100 Subject: [PATCH 3/5] feat: added a public method to mysql loader to be able to close the connection (#188) Co-authored-by: David Mayr --- .../com/infernalsuite/asp/loaders/mysql/MysqlLoader.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/loaders/mysql-loader/src/main/java/com/infernalsuite/asp/loaders/mysql/MysqlLoader.java b/loaders/mysql-loader/src/main/java/com/infernalsuite/asp/loaders/mysql/MysqlLoader.java index 546a42ce..9e56af24 100644 --- a/loaders/mysql-loader/src/main/java/com/infernalsuite/asp/loaders/mysql/MysqlLoader.java +++ b/loaders/mysql-loader/src/main/java/com/infernalsuite/asp/loaders/mysql/MysqlLoader.java @@ -75,6 +75,12 @@ public MysqlLoader(HikariDataSource hikariDataSource) throws SQLException { init(); } + public void close() { + if (source != null && !source.isClosed()) { + source.close(); + } + } + @Override public void update() throws IOException, NewerStorageException { try (Connection con = source.getConnection()) { From f150abe4a28171c7da786a8fc170c1178381bd37 Mon Sep 17 00:00:00 2001 From: IS_Bot Date: Mon, 12 Jan 2026 00:37:21 +0100 Subject: [PATCH 4/5] Automatically updated to Paper commit: e7445e169ca62f27d12dadb1eafa7c0dd751701f Prevent ticking virtual world borders multiple times per server tick (#13513) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d0b3f5a8..f8a58fb1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ apiVersion=1.21.11 version=1.21.11-R0.1-SNAPSHOT mcVersion=1.21.11 -paperRef=6d5a450ffb067fb06a9d434093ebb6d098271083 +paperRef=e7445e169ca62f27d12dadb1eafa7c0dd751701f org.gradle.caching=true org.gradle.parallel=true From 1722c53e158d718c86cd354ff8c745f37075ddca Mon Sep 17 00:00:00 2001 From: David Date: Mon, 12 Jan 2026 01:07:22 +0100 Subject: [PATCH 5/5] fix: branding patches --- .../features/0003-Branding.patch | 119 +++++++++++++----- 1 file changed, 87 insertions(+), 32 deletions(-) diff --git a/aspaper-server/paper-patches/features/0003-Branding.patch b/aspaper-server/paper-patches/features/0003-Branding.patch index 09949065..0a83739a 100644 --- a/aspaper-server/paper-patches/features/0003-Branding.patch +++ b/aspaper-server/paper-patches/features/0003-Branding.patch @@ -5,56 +5,111 @@ Subject: [PATCH] Branding diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index d0554ed6631535815e5932930911e3fe1dee8710..ac171c6b9008eaaeb9e433fdb188bd797fd95759 100644 +index 602d3ce2cd16405f35453ce12a207b70312a4a8a..6102be342a05a413b6e170166642fdd6a94ddebb 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -35,7 +35,7 @@ public class PaperVersionFetcher implements VersionFetcher { - private static final Logger LOGGER = LogUtils.getClassLogger(); +@@ -40,8 +40,8 @@ public class PaperVersionFetcher implements VersionFetcher { + private static final ComponentLogger COMPONENT_LOGGER = ComponentLogger.logger(LogManager.getRootLogger().getName()); private static final int DISTANCE_ERROR = -1; private static final int DISTANCE_UNKNOWN = -2; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper"; -+ private static final String DOWNLOAD_PAGE = "https://discord.gg/YevvsMa"; - - @Override - public long getCacheTime() { -@@ -49,7 +49,7 @@ public class PaperVersionFetcher implements VersionFetcher { - if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { - updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); +- private static final String REPOSITORY = "PaperMC/Paper"; ++ private static final String DOWNLOAD_PAGE = "https://infernalsuite.com/download/asp"; ++ private static final String REPOSITORY = "InfernalSuite/AdvancedSlimePaper"; + private static final ServerBuildInfo BUILD_INFO = ServerBuildInfo.buildInfo(); + private static final String USER_AGENT = BUILD_INFO.brandName() + "/" + BUILD_INFO.asString(VERSION_SIMPLE) + " (https://papermc.io)"; + private static final Gson GSON = new Gson(); +@@ -72,15 +72,15 @@ public class PaperVersionFetcher implements VersionFetcher { + COMPONENT_LOGGER.warn(text("*** You are running a development version without access to version information ***")); } else { -- updateMessage = getUpdateStatusMessage("PaperMC/Paper", build); -+ updateMessage = getUpdateStatusMessage("InfernalSuite/AdvancedSlimePaper", build); - } - final @Nullable Component history = this.getHistory(); + final Optional apiResult = fetchMinecraftVersionList(); +- if (buildNumber.isPresent()) { ++ /*if (buildNumber.isPresent()) { + distance = fetchDistanceFromSiteApi(buildNumber.getAsInt()); +- } else { +- final Optional gitBranch = BUILD_INFO.gitBranch(); +- final Optional gitCommit = BUILD_INFO.gitCommit(); +- if (gitBranch.isPresent() && gitCommit.isPresent()) { +- distance = fetchDistanceFromGitHub(gitBranch.get(), gitCommit.get()); +- } ++ } else { */ //ASP End ++ final Optional gitBranch = BUILD_INFO.gitBranch(); ++ final Optional gitCommit = BUILD_INFO.gitCommit(); ++ if (gitBranch.isPresent() && gitCommit.isPresent()) { ++ distance = fetchDistanceFromGitHub(gitBranch.get(), gitCommit.get()); + } ++ //} //ASP -@@ -59,16 +59,16 @@ public class PaperVersionFetcher implements VersionFetcher { - private static Component getUpdateStatusMessage(final String repo, final ServerBuildInfo build) { + switch (distance) { + case DISTANCE_ERROR -> COMPONENT_LOGGER.error(text("*** Error obtaining version information! Cannot fetch version info ***")); +@@ -109,27 +109,27 @@ public class PaperVersionFetcher implements VersionFetcher { + private static Component getUpdateStatusMessage() { int distance = DISTANCE_ERROR; -- final OptionalInt buildNumber = build.buildNumber(); -+ /*final OptionalInt buildNumber = build.buildNumber(); //ASP start +- final OptionalInt buildNumber = PaperVersionFetcher.BUILD_INFO.buildNumber(); ++ /*final OptionalInt buildNumber = PaperVersionFetcher.BUILD_INFO.buildNumber(); //ASP start if (buildNumber.isPresent()) { - distance = fetchDistanceFromSiteApi(build, buildNumber.getAsInt()); + distance = fetchDistanceFromSiteApi(buildNumber.getAsInt()); - } else { -+ } else { */ //ASP End - final Optional gitBranch = build.gitBranch(); - final Optional gitCommit = build.gitCommit(); - if (gitBranch.isPresent() && gitCommit.isPresent()) { - distance = fetchDistanceFromGitHub(repo, gitBranch.get(), gitCommit.get()); - } -- } +- final Optional gitBranch = PaperVersionFetcher.BUILD_INFO.gitBranch(); +- final Optional gitCommit = PaperVersionFetcher.BUILD_INFO.gitCommit(); +- if (gitBranch.isPresent() && gitCommit.isPresent()) { +- distance = fetchDistanceFromGitHub(gitBranch.get(), gitCommit.get()); +- } ++ } else { */ //ASP End ++ final Optional gitBranch = PaperVersionFetcher.BUILD_INFO.gitBranch(); ++ final Optional gitCommit = PaperVersionFetcher.BUILD_INFO.gitCommit(); ++ if (gitBranch.isPresent() && gitCommit.isPresent()) { ++ distance = fetchDistanceFromGitHub(gitBranch.get(), gitCommit.get()); + } + //} //ASP return switch (distance) { case DISTANCE_ERROR -> text("Error obtaining version information", NamedTextColor.YELLOW); -@@ -76,7 +76,7 @@ public class PaperVersionFetcher implements VersionFetcher { + case 0 -> text("You are running the latest version", NamedTextColor.GREEN); case DISTANCE_UNKNOWN -> text("Unknown version", NamedTextColor.YELLOW); default -> text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) - .append(Component.newline()) +- .append(Component.newline()) - .append(text("Download the new version at: ") -+ .append(text("Download the new version from our Discord: ") - .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) - .hoverEvent(text("Click to open", NamedTextColor.WHITE)) - .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); +- .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) +- .hoverEvent(text("Click to open", NamedTextColor.WHITE)) +- .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); ++ .append(Component.newline()) ++ .append(text("Download the new version at: ") ++ .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) ++ .hoverEvent(text("Click to open", NamedTextColor.WHITE)) ++ .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); + }; + } + +@@ -150,10 +150,10 @@ public class PaperVersionFetcher implements VersionFetcher { + final JsonObject json = GSON.fromJson(reader, JsonObject.class); + final JsonObject versions = json.getAsJsonObject("versions"); + final List versionList = versions.keySet().stream() +- .map(versions::getAsJsonArray) +- .flatMap(array -> StreamSupport.stream(array.spliterator(), false)) +- .map(JsonElement::getAsString) +- .toList(); ++ .map(versions::getAsJsonArray) ++ .flatMap(array -> StreamSupport.stream(array.spliterator(), false)) ++ .map(JsonElement::getAsString) ++ .toList(); + + for (final String latestVersion : versionList) { + if (latestVersion.equals(currentVersion)) { +@@ -203,9 +203,9 @@ public class PaperVersionFetcher implements VersionFetcher { + try (final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { + final JsonArray builds = GSON.fromJson(reader, JsonArray.class); + final int latest = StreamSupport.stream(builds.spliterator(), false) +- .mapToInt(build -> build.getAsJsonObject().get("id").getAsInt()) +- .max() +- .orElseThrow(); ++ .mapToInt(build -> build.getAsJsonObject().get("id").getAsInt()) ++ .max() ++ .orElseThrow(); + return Math.max(latest - jenkinsBuild, 0); + } catch (final JsonSyntaxException ex) { + LOGGER.error("Error parsing json from Paper's downloads API", ex); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..2610e8d1ce20331895b0a76fa50efc062001678e 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java