From 06baf2e3a381dd7f652418d9b85ab69565abba0e Mon Sep 17 00:00:00 2001 From: David Mayr Date: Wed, 2 Apr 2025 12:34:12 +0200 Subject: [PATCH 01/17] fix: make asp compile with file patches only on 1.21.5 Signed-off-by: David --- aspaper-api/build.gradle.kts.patch | 8 +++--- aspaper-server/build.gradle.kts.patch | 26 ++++++++++++------- .../bukkit/craftbukkit/CraftServer.java.patch | 2 +- .../java/com/infernalsuite/asp/Converter.java | 16 ++++++------ .../asp/SimpleDataFixerConverter.java | 9 ++++--- .../infernalsuite/asp/SlimeNMSBridgeImpl.java | 3 --- .../level/ReadOnlyDimensionDataStorage.java | 14 ++++------ .../asp/level/SlimeInMemoryWorld.java | 2 +- .../asp/level/SlimeLevelInstance.java | 15 ++++++----- gradle.properties | 6 ++--- 10 files changed, 52 insertions(+), 49 deletions(-) diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index 33a97d1b5..2c80c4ea6 100644 --- a/aspaper-api/build.gradle.kts.patch +++ b/aspaper-api/build.gradle.kts.patch @@ -13,15 +13,15 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher") } --val generatedApiPath: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath() -+val generatedApiPath: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.toPath() +-val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath() ++val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.toPath() idea { module { - generatedSourceDirs.add(generatedApiPath.toFile()) + generatedSourceDirs.add(generatedDir.toFile()) @@ -103,6 +_,18 @@ main { java { - srcDir(generatedApiPath) + srcDir(generatedDir) + srcDir(file("../paper-api/src/main/java")) + } + resources { diff --git a/aspaper-server/build.gradle.kts.patch b/aspaper-server/build.gradle.kts.patch index 35b337a9e..a3ebd98af 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -1,8 +1,8 @@ --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts -@@ -21,6 +_,17 @@ - // macheOldPath = file("F:\\Projects\\PaperTooling\\mache\\versions\\1.21.4\\src\\main\\java") - // gitFilePatches = true +@@ -28,6 +_,17 @@ + // oldPaperCommit = "f4f275519f7c1fbe9db173b7144a4fe81440e365" + //} + val aspaper = forks.register("aspaper") { + upstream.patchDir("paperServer") { @@ -16,9 +16,9 @@ + activeFork = aspaper + spigot { - buildDataRef = "3edaf46ec1eed4115ce1b18d2846cded42577e42" - packageVersion = "v1_21_R3" // also needs to be updated in MappingEnvironment -@@ -101,7 +_,20 @@ + buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" + packageVersion = "v1_21_R4" // also needs to be updated in MappingEnvironment +@@ -108,7 +_,20 @@ } } @@ -40,18 +40,17 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { extendsFrom(configurations.compileClasspath.get()) } -@@ -119,7 +_,9 @@ +@@ -130,7 +_,8 @@ } dependencies { - implementation(project(":paper-api")) + implementation(project(":aspaper-api")) //ASP + implementation(project(":core")) //ASP -+ implementation("commons-io:commons-io:2.11.0") implementation("ca.spottedleaf:concurrentutil:0.0.3") 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 -@@ -189,14 +_,14 @@ +@@ -201,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -71,3 +70,12 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, +@@ -262,7 +_,7 @@ + jvmArgumentProviders.add(provider) + } + +-val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath() ++val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-server/src/generated/java").asFile.toPath() + idea { + module { + generatedSourceDirs.add(generatedDir.toFile()) diff --git a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch index 94ef404f6..2636a43e0 100644 --- a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch +++ b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1508,6 +_,8 @@ +@@ -1466,6 +_,8 @@ return false; } diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java index 848a6e1ce..c7a572fcc 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java @@ -99,14 +99,14 @@ public static Tag convertTag(T tag) { public static T convertTag(Tag base) { return switch (base.getId()) { case Tag.TAG_END -> (T) EndBinaryTag.endBinaryTag(); - case Tag.TAG_BYTE -> (T) ByteBinaryTag.byteBinaryTag(((ByteTag) base).getAsByte()); - case Tag.TAG_SHORT -> (T) ShortBinaryTag.shortBinaryTag(((ShortTag) base).getAsShort()); - case Tag.TAG_INT -> (T) IntBinaryTag.intBinaryTag(((IntTag) base).getAsInt()); - case Tag.TAG_LONG -> (T) LongBinaryTag.longBinaryTag(((LongTag) base).getAsLong()); - case Tag.TAG_FLOAT -> (T) FloatBinaryTag.floatBinaryTag(((FloatTag) base).getAsFloat()); - case Tag.TAG_DOUBLE -> (T) DoubleBinaryTag.doubleBinaryTag(((DoubleTag) base).getAsDouble()); + case Tag.TAG_BYTE -> (T) ByteBinaryTag.byteBinaryTag(((ByteTag) base).byteValue()); + case Tag.TAG_SHORT -> (T) ShortBinaryTag.shortBinaryTag(((ShortTag) base).shortValue()); + case Tag.TAG_INT -> (T) IntBinaryTag.intBinaryTag(((IntTag) base).intValue()); + case Tag.TAG_LONG -> (T) LongBinaryTag.longBinaryTag(((LongTag) base).longValue()); + case Tag.TAG_FLOAT -> (T) FloatBinaryTag.floatBinaryTag(((FloatTag) base).floatValue()); + case Tag.TAG_DOUBLE -> (T) DoubleBinaryTag.doubleBinaryTag(((DoubleTag) base).doubleValue()); case Tag.TAG_BYTE_ARRAY -> (T) ByteArrayBinaryTag.byteArrayBinaryTag(((ByteArrayTag) base).getAsByteArray()); - case Tag.TAG_STRING -> (T) StringBinaryTag.stringBinaryTag(((StringTag) base).getAsString()); + case Tag.TAG_STRING -> (T) StringBinaryTag.stringBinaryTag(((StringTag) base).asString().orElseThrow()); //TODO(david): Figure out what to do with optional? case Tag.TAG_LIST -> { ListTag originalList = ((ListTag) base); if(originalList.isEmpty()) { @@ -119,7 +119,7 @@ public static T convertTag(Tag base) { case Tag.TAG_COMPOUND -> { CompoundBinaryTag.Builder builder = CompoundBinaryTag.builder(); CompoundTag originalCompound = ((CompoundTag) base); - for (String key : originalCompound.getAllKeys()) builder.put(key, convertTag(Objects.requireNonNull(originalCompound.get(key)))); + for (String key : originalCompound.keySet()) builder.put(key, convertTag(Objects.requireNonNull(originalCompound.get(key)))); yield (T) builder.build(); } case Tag.TAG_INT_ARRAY -> (T) IntArrayBinaryTag.intArrayBinaryTag(((IntArrayTag) base).getAsIntArray()); diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java index 15ebd6388..58ece200b 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -1,9 +1,9 @@ package com.infernalsuite.asp; -import ca.spottedleaf.dataconverter.converters.DataConverter; +/*import ca.spottedleaf.dataconverter.converters.DataConverter; import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry; import ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils; -import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; +import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; 1.21.5 */ import com.infernalsuite.asp.serialization.SlimeWorldReader; import com.infernalsuite.asp.skeleton.SkeletonSlimeWorld; import com.infernalsuite.asp.skeleton.SlimeChunkSectionSkeleton; @@ -24,7 +24,8 @@ class SimpleDataFixerConverter implements SlimeWorldReader { @Override public SlimeWorld readFromData(SlimeWorld data) { - int newVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + return data; //TODO(david): re-add this as soon as dataconverter is back in paper + /* int newVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); 1.21.5 int currentVersion = data.getDataVersion(); // Already fixed if (currentVersion == newVersion) { @@ -92,7 +93,7 @@ public SlimeWorld readFromData(SlimeWorld data) { data.getExtraData(), data.getPropertyMap(), newVersion - ); + ); */ } 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 2cba0515e..a4d238a10 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java @@ -1,8 +1,5 @@ package com.infernalsuite.asp; -import ca.spottedleaf.dataconverter.converters.DataConverter; -import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry; -import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; import com.infernalsuite.asp.api.SlimeNMSBridge; import com.infernalsuite.asp.api.world.SlimeWorld; import com.infernalsuite.asp.api.world.SlimeWorldInstance; 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 f58a673d0..ae53e8dff 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 @@ -3,6 +3,7 @@ import com.mojang.datafixers.DataFixer; import net.minecraft.core.HolderLookup; import net.minecraft.world.level.saveddata.SavedData; +import net.minecraft.world.level.saveddata.SavedDataType; import net.minecraft.world.level.storage.DimensionDataStorage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,18 +17,13 @@ */ public class ReadOnlyDimensionDataStorage extends DimensionDataStorage { - public ReadOnlyDimensionDataStorage(Path dataFolder, DataFixer fixerUpper, HolderLookup.Provider registries) { - super(dataFolder, fixerUpper, registries); + public ReadOnlyDimensionDataStorage(SavedData.Context ctx, Path dataFolder, DataFixer fixerUpper, HolderLookup.Provider registries) { + super(ctx, dataFolder, fixerUpper, registries); } - @SuppressWarnings("unchecked") @Override - public @Nullable T get(SavedData.@NotNull Factory factory, @NotNull String name) { - Optional optional = this.cache.get(name); - if(optional == null) { - return null; - } - return (T) optional.orElse(null); + public @Nullable T get(SavedDataType type) { + return (T) this.cache.get(type).orElse(null); } @Override diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java index 5f1c42509..84dbc79ed 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java @@ -252,7 +252,7 @@ public SlimeWorld getForSerialization() { this.instance.getWorld().storeBukkitValues(nmsTag); // Bukkit stores the relevant tag as a tag with the key "BukkitValues" in the tag we supply to it - var adventureTag = Converter.convertTag(nmsTag.getCompound("BukkitValues")); + var adventureTag = Converter.convertTag(nmsTag.getCompoundOrEmpty("BukkitValues")); world.getExtraData().put("BukkitValues", adventureTag); return new SkeletonSlimeWorld(world.getName(), 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 0469b5243..1d1ac0a8e 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 @@ -117,13 +117,14 @@ public void unload(@NotNull LevelChunk chunk, ChunkEntitySlices slices) { slimeInstance.unload(chunk, slices); } - @Override - public void saveIncrementally(boolean doFull) { - if(doFull) { - //Avoid doing the internal save because it saves the level.dat into the temp folder. That causes pterodactyl users to have issues. - save(); - } - } + //TODO(david): Figure out why thats missing in 1.21.5 +// @Override +// public void saveIncrementally(boolean doFull) { +// if(doFull) { +// //Avoid doing the internal save because it saves the level.dat into the temp folder. That causes pterodactyl users to have issues. +// save(); +// } +// } public Future save() { AsyncCatcher.catchOp("SWM world save"); diff --git a/gradle.properties b/gradle.properties index fe0c636c9..2c312050d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group=com.infernalsuite.asp apiVersion=4.0.0-SNAPSHOT -version=1.21.4-R0.1-SNAPSHOT +version=1.21.5-R0.1-SNAPSHOT -mcVersion=1.21.4 -paperRef=6ea42025a49f232f47861c6ca943b0fc66b7effe +mcVersion=1.21.5 +paperRef=ef0f0d101f97523b7b2df22fa90c04951bb48bca org.gradle.caching=true org.gradle.parallel=true From 4b940d0d149c77817471ac4f9a2235a9d5f258aa Mon Sep 17 00:00:00 2001 From: David Date: Wed, 2 Apr 2025 12:37:19 +0200 Subject: [PATCH 02/17] fix: npe on null cache Signed-off-by: David --- .../asp/level/ReadOnlyDimensionDataStorage.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 ae53e8dff..6abd3952e 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 @@ -23,7 +23,11 @@ public ReadOnlyDimensionDataStorage(SavedData.Context ctx, Path dataFolder, Data @Override public @Nullable T get(SavedDataType type) { - return (T) this.cache.get(type).orElse(null); + Optional optional = this.cache.get(type); + if(optional == null) { + return null; + } + return (T) optional.orElse(null); } @Override From 92779f24d3b345fa0fc143fb51cafe85d213706c Mon Sep 17 00:00:00 2001 From: David Date: Wed, 2 Apr 2025 12:45:34 +0200 Subject: [PATCH 03/17] fix: paper server feature patches Signed-off-by: David --- .../0004-Delete-temp-folder-after-world-is-unloaded.patch | 4 ++-- .../0005-Prevent-config-disk-io-on-world-load.patch | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch index ff237d481..b4d18d584 100644 --- a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch +++ b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Delete temp folder after world is unloaded diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 090b295ccd7f61c2f1cc5131ffb0371c22e48f04..0bbc51dcf0ba7773b818994890d14fd0300608f3 100644 +index 96d60c6649d40537e8e3a87774300a751efc0c61..04c21c5760f1db9011e431702700caec97fb1a93 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1518,6 +1518,12 @@ public final class CraftServer implements Server { +@@ -1476,6 +1476,12 @@ public final class CraftServer implements Server { handle.getChunkSource().close(save); io.papermc.paper.FeatureHooks.closeEntityManager(handle, save); // SPIGOT-6722: close entityManager // Paper - chunk system handle.levelStorageAccess.close(); diff --git a/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch index 70c5ff9d8..3fb158897 100644 --- a/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Prevent config disk io on world load diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index e0d4222a99f22d7130d95cf29b034a98f2f3b76e..776440ec20c7bf0acac8678773b0a5d29548c270 100644 +index 7c585b71d06f438f414227c2625f27b6c323045e..ea4cd0bb12e0a04c6d738aca8dbb206f192244a3 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java @@ -78,7 +78,12 @@ public class SpigotConfig { @@ -13,7 +13,7 @@ index e0d4222a99f22d7130d95cf29b034a98f2f3b76e..776440ec20c7bf0acac8678773b0a5d2 } + // ASP start - Improve Slime IO - public static void readConfig(Class clazz, Object instance) { // Paper - package-private -> public + public static void readConfig(Class clazz, Object instance) { + readConfig(clazz, instance, true); + } + public static void readConfig(Class clazz, Object instance, boolean save) { @@ -35,7 +35,7 @@ index e0d4222a99f22d7130d95cf29b034a98f2f3b76e..776440ec20c7bf0acac8678773b0a5d2 Bukkit.getLogger().log(Level.SEVERE, "Could not save " + SpigotConfig.CONFIG_FILE, ex); } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 89e2adbc1e1a0709d03e151e3ffcdbff10a44098..6b2241efbc248324f178a547aea9f398ed624247 100644 +index 43c6240ec2855c0f668ce04de29d22a223d2612f..c6f398977149c8b35454fb79f099322c36d557d5 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -10,17 +10,28 @@ public class SpigotWorldConfig { From c72c19deb819635ae5d65448165b237d6b566183 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 2 Apr 2025 12:57:08 +0200 Subject: [PATCH 04/17] feat: port all patches Signed-off-by: David --- .../features/0001-Disable-dragon-battle.patch | 4 ++-- .../features/0002-World-overrides.patch | 4 ++-- .../features/0003-Avoid-IO-call-for-UUID.patch | 8 ++++---- .../0004-Prevent-config-disk-io-on-world-load.patch | 10 +++++----- .../0005-Read-only-dimension-data-store.patch | 12 ++++++------ .../scheduling/ChunkHolderManager.java.patch | 2 +- .../minecraft/server/level/ServerLevel.java.patch | 8 ++++---- .../chunk/storage/SerializableChunkData.java.patch | 2 +- 8 files changed, 25 insertions(+), 25 deletions(-) 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 a48979525..9f6b70767 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 c5ddf6c0f0ff795da2f7aec8915a081b334423ec..a373f5b8e03f4179a4d9f63d79abc19a38f952b6 100644 +index af678738023b3ee4c9333a3b92817decc60f95fd..c156efe43a04490cdf7f0870179c0aa06902b96a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -689,7 +689,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -680,7 +680,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-World-overrides.patch b/aspaper-server/minecraft-patches/features/0002-World-overrides.patch index d7db4aa7f..7344ccb61 100644 --- a/aspaper-server/minecraft-patches/features/0002-World-overrides.patch +++ b/aspaper-server/minecraft-patches/features/0002-World-overrides.patch @@ -5,10 +5,10 @@ Subject: [PATCH] World overrides diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 1509c96ae9247d1d5ddd0fc50210f88da10bf3de..bbc4be3c3811ee19bd791cb6626474038d35a298 100644 +index 9623b1124c43d6aca94588a4153475e647751788..912da569c851dd6d3747ac19dbfff27c416ca981 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -516,18 +516,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 this.pvpMode = server.isPvpAllowed(); this.levelStorageAccess = levelStorageAccess; -- this.uuid = org.bukkit.craftbukkit.util.WorldUUID.getUUID(levelStorageAccess.levelDirectory.path().toFile()); -+ this.uuid = bootstrap == null ? org.bukkit.craftbukkit.util.WorldUUID.getUUID(levelStorageAccess.levelDirectory.path().toFile()) : UUID.randomUUID(); //ASP - avoid IO calls +- 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 // CraftBukkit end this.tickTime = tickTime; this.server = server; diff --git a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch index 8d003194a..8180de417 100644 --- a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch @@ -5,10 +5,10 @@ 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 60608cea4e564c1ce47f8a4de2c1a48986bbdecb..1b5d65136421b63353b1c6cd8ae5d413ec070b92 100644 +index 16493872aa3a4384c180b1de4dff4617ad5978da..5c89b8cda6383d7feb5b83fd7c805af819a17f8b 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -614,7 +614,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -605,7 +605,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ) { //ASP end // CraftBukkit start @@ -16,12 +16,12 @@ index 60608cea4e564c1ce47f8a4de2c1a48986bbdecb..1b5d65136421b63353b1c6cd8ae5d413 + 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 this.pvpMode = server.isPvpAllowed(); this.levelStorageAccess = levelStorageAccess; - this.uuid = bootstrap == null ? org.bukkit.craftbukkit.util.WorldUUID.getUUID(levelStorageAccess.levelDirectory.path().toFile()) : UUID.randomUUID(); //ASP - avoid IO calls + 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/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 1dbe7c7c1051c3972105534a07ce50d4cf98fc85..e1d3c292b9efccb032245f4f1618f2650f0bc619 100644 +index 3a254bc46e320364d660c48d67d6db86c72acf94..7ff98d209298da2e57fe03bddfb3f18fa619b25f 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -851,7 +851,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -837,7 +837,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl this.maxSectionY = this.maxY >> 4; this.sectionsCount = this.maxSectionY - this.minSectionY + 1; // Paper end - getblock optimisations - cache world height/sections diff --git a/aspaper-server/minecraft-patches/features/0005-Read-only-dimension-data-store.patch b/aspaper-server/minecraft-patches/features/0005-Read-only-dimension-data-store.patch index bd3e2ff80..f1279fa1f 100644 --- a/aspaper-server/minecraft-patches/features/0005-Read-only-dimension-data-store.patch +++ b/aspaper-server/minecraft-patches/features/0005-Read-only-dimension-data-store.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Read only dimension data store diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 6540b2d6a1062d883811ce240c49d30d1925b291..f89eb4e909c2eeb22732dcb368b3758637f036f7 100644 +index 5d63bf024cbcbd2f627c64fee77553c9a512bd15..da169d319e9c09de2d5a34784af4e4c133b10f46 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -207,7 +207,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -210,7 +210,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon LOGGER.error("Failed to create dimension data storage directory", (Throwable)var15); } -- this.dataStorage = new DimensionDataStorage(path, fixerUpper, level.registryAccess()); +- this.dataStorage = new DimensionDataStorage(new SavedData.Context(level), 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(path, fixerUpper, level.registryAccess()); ++ this.dataStorage = new com.infernalsuite.asp.level.ReadOnlyDimensionDataStorage(new SavedData.Context(level), path, fixerUpper, level.registryAccess()); + } else { -+ this.dataStorage = new DimensionDataStorage(path, fixerUpper, level.registryAccess()); ++ this.dataStorage = new DimensionDataStorage(new SavedData.Context(level), path, fixerUpper, level.registryAccess()); + } + //ASP end - No dimension data storage + this.ticketStorage = this.dataStorage.computeIfAbsent(TicketStorage.TYPE); this.chunkMap = new ChunkMap( level, - levelStorageAccess, diff --git a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java.patch b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java.patch index cfd198c02..bde171761 100644 --- a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java.patch +++ b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java.patch @@ -1,6 +1,6 @@ --- a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java +++ b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java -@@ -184,7 +_,9 @@ +@@ -186,7 +_,9 @@ }; } 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 44ce62a20..99400a5e6 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 -@@ -570,7 +_,32 @@ +@@ -561,7 +_,32 @@ } // Paper end - chunk tick iteration @@ -34,7 +34,7 @@ MinecraftServer server, Executor dispatcher, LevelStorageSource.LevelStorageAccess levelStorageAccess, -@@ -587,6 +_,7 @@ +@@ -578,6 +_,7 @@ org.bukkit.generator.ChunkGenerator gen, // CraftBukkit org.bukkit.generator.BiomeProvider biomeProvider // CraftBukkit ) { @@ -42,7 +42,7 @@ // 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 this.pvpMode = server.isPvpAllowed(); -@@ -614,6 +_,13 @@ +@@ -605,6 +_,13 @@ chunkGenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkGenerator, gen); } // CraftBukkit end @@ -56,7 +56,7 @@ boolean flag = server.forceSynchronousWrites(); DataFixer fixerUpper = server.getFixerUpper(); // Paper - rewrite chunk system -@@ -695,6 +_,12 @@ +@@ -684,6 +_,12 @@ public void setDragonFight(@Nullable EndDragonFight dragonFight) { this.dragonFight = dragonFight; } diff --git a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch index 81744efd8..d95189181 100644 --- a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch +++ b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/SerializableChunkData.java +++ b/net/minecraft/world/level/chunk/storage/SerializableChunkData.java -@@ -387,6 +_,12 @@ +@@ -350,6 +_,12 @@ if (flag2) { lightEngine.queueSectionData(LightLayer.SKY, sectionPos, sectionData.skyLight); } From 5632a1808de10d19a22331560f110b05bdc74bf0 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 2 Apr 2025 13:11:27 +0200 Subject: [PATCH 05/17] chore: add big fat temporary warning and fail if someone loads an old world Signed-off-by: David --- .../asp/SimpleDataFixerConverter.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java index 58ece200b..b6f046301 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -24,15 +24,24 @@ class SimpleDataFixerConverter implements SlimeWorldReader { @Override public SlimeWorld readFromData(SlimeWorld data) { - return data; //TODO(david): re-add this as soon as dataconverter is back in paper - /* int newVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); 1.21.5 + int newVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); int currentVersion = data.getDataVersion(); // Already fixed if (currentVersion == newVersion) { return data; } - long encodedNewVersion = DataConverter.encodeVersions(newVersion, Integer.MAX_VALUE); + System.out.println(""" + You tried loading a world from a previous minecraft version with the dev build of 1.21.5 + This is currently unsupported until paper reintroduces the dataconverter. + This functionality will come back in a future release. + + Also: Please don't bug the paper team to re-add dataconverter. As of 02.04.2025, paper 1.21.5 isn't even released. + Give them time. Thank you. + """); + throw new IllegalStateException("Loading old worlds is temporarily unsupported."); + //TODO(david): re-add this as soon as dataconverter is back in paper + /*long encodedNewVersion = DataConverter.encodeVersions(newVersion, Integer.MAX_VALUE); 1.21.5 long encodedCurrentVersion = DataConverter.encodeVersions(currentVersion, Integer.MAX_VALUE); Long2ObjectMap chunks = new Long2ObjectOpenHashMap<>(); From cb672986589f44e8845c4e7faa48ec2c8262e028 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 2 Apr 2025 14:56:47 +0200 Subject: [PATCH 06/17] chore: clarify on why saveIncrementally is commented out Signed-off-by: David --- .../java/com/infernalsuite/asp/level/SlimeLevelInstance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1d1ac0a8e..e97b090cf 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 @@ -117,7 +117,7 @@ public void unload(@NotNull LevelChunk chunk, ChunkEntitySlices slices) { slimeInstance.unload(chunk, slices); } - //TODO(david): Figure out why thats missing in 1.21.5 + //TODO(david): Re-add this once the following patch is applied: https://github.com/PaperMC/Paper/blob/update/1.21.5/paper-server/patches/unapplied/0024-Incremental-chunk-and-player-saving.patch // @Override // public void saveIncrementally(boolean doFull) { // if(doFull) { From af30cca5cd7c11251e5615f6656a79ac20d12bdd Mon Sep 17 00:00:00 2001 From: David Date: Thu, 3 Apr 2025 08:43:12 +0200 Subject: [PATCH 07/17] feat: incremental saving is back in paper Signed-off-by: David --- .../asp/level/SlimeLevelInstance.java | 15 +++++++-------- gradle.properties | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) 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 e97b090cf..0469b5243 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 @@ -117,14 +117,13 @@ public void unload(@NotNull LevelChunk chunk, ChunkEntitySlices slices) { slimeInstance.unload(chunk, slices); } - //TODO(david): Re-add this once the following patch is applied: https://github.com/PaperMC/Paper/blob/update/1.21.5/paper-server/patches/unapplied/0024-Incremental-chunk-and-player-saving.patch -// @Override -// public void saveIncrementally(boolean doFull) { -// if(doFull) { -// //Avoid doing the internal save because it saves the level.dat into the temp folder. That causes pterodactyl users to have issues. -// save(); -// } -// } + @Override + public void saveIncrementally(boolean doFull) { + if(doFull) { + //Avoid doing the internal save because it saves the level.dat into the temp folder. That causes pterodactyl users to have issues. + save(); + } + } public Future save() { AsyncCatcher.catchOp("SWM world save"); diff --git a/gradle.properties b/gradle.properties index 2c312050d..77fb39106 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ apiVersion=4.0.0-SNAPSHOT version=1.21.5-R0.1-SNAPSHOT mcVersion=1.21.5 -paperRef=ef0f0d101f97523b7b2df22fa90c04951bb48bca +paperRef=35b466e315a447ef54162384d52bad6e1372bd36 org.gradle.caching=true org.gradle.parallel=true From 86cfd5f0dea7fc6f2ac4eda81a0e14bfad0223dd Mon Sep 17 00:00:00 2001 From: David Mayr Date: Sun, 20 Apr 2025 19:17:00 +0200 Subject: [PATCH 08/17] feat: update to newest 1.21.5 commit Signed-off-by: David Mayr --- aspaper-api/build.gradle.kts.patch | 3 +-- aspaper-server/build.gradle.kts.patch | 4 ++-- .../features/0001-Disable-dragon-battle.patch | 4 ++-- .../features/0003-Avoid-IO-call-for-UUID.patch | 4 ++-- .../0004-Prevent-config-disk-io-on-world-load.patch | 8 ++++---- .../net/minecraft/server/level/ServerLevel.java.patch | 8 ++++---- .../level/chunk/storage/SerializableChunkData.java.patch | 2 +- .../0005-Prevent-config-disk-io-on-world-load.patch | 6 +++--- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- 10 files changed, 21 insertions(+), 22 deletions(-) diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index 2c80c4ea6..cb63c5848 100644 --- a/aspaper-api/build.gradle.kts.patch +++ b/aspaper-api/build.gradle.kts.patch @@ -1,10 +1,9 @@ --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts -@@ -39,7 +_,7 @@ +@@ -41,6 +_,7 @@ } dependencies { -- + api(project(":api")) //ASP // api dependencies are listed transitively to API consumers api("com.google.guava:guava:33.3.1-jre") diff --git a/aspaper-server/build.gradle.kts.patch b/aspaper-server/build.gradle.kts.patch index a3ebd98af..8c5ff65bb 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -50,7 +50,7 @@ implementation("ca.spottedleaf:concurrentutil:0.0.3") 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 -@@ -201,14 +_,14 @@ +@@ -206,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -70,7 +70,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -262,7 +_,7 @@ +@@ -267,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 9f6b70767..55073500c 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 af678738023b3ee4c9333a3b92817decc60f95fd..c156efe43a04490cdf7f0870179c0aa06902b96a 100644 +index f8c2eec34c4639a5daaefa0962c44d40b7f22f93..a32a4756ac0c0261b3f28de7e10130d03c5780ce 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -680,7 +680,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -681,7 +681,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/0003-Avoid-IO-call-for-UUID.patch b/aspaper-server/minecraft-patches/features/0003-Avoid-IO-call-for-UUID.patch index 57c2fa3cd..c1634b4f8 100644 --- a/aspaper-server/minecraft-patches/features/0003-Avoid-IO-call-for-UUID.patch +++ b/aspaper-server/minecraft-patches/features/0003-Avoid-IO-call-for-UUID.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Avoid IO call for UUID diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index c156efe43a04490cdf7f0870179c0aa06902b96a..16493872aa3a4384c180b1de4dff4617ad5978da 100644 +index a32a4756ac0c0261b3f28de7e10130d03c5780ce..a13ebfbff00340c7ab500e20702120cbae9d3fb3 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -608,7 +608,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -609,7 +609,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe 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 this.pvpMode = server.isPvpAllowed(); this.levelStorageAccess = levelStorageAccess; diff --git a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch index 8180de417..4327b4468 100644 --- a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch @@ -5,10 +5,10 @@ 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 16493872aa3a4384c180b1de4dff4617ad5978da..5c89b8cda6383d7feb5b83fd7c805af819a17f8b 100644 +index a13ebfbff00340c7ab500e20702120cbae9d3fb3..5b7bb4bfe47a1c4fb2d3e52b03eb23c50c85627d 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -605,7 +605,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -606,7 +606,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ) { //ASP end // CraftBukkit start @@ -18,10 +18,10 @@ index 16493872aa3a4384c180b1de4dff4617ad5978da..5c89b8cda6383d7feb5b83fd7c805af8 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 diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 3a254bc46e320364d660c48d67d6db86c72acf94..7ff98d209298da2e57fe03bddfb3f18fa619b25f 100644 +index 013ed7dbe2309f562f63e66203179a90566e8115..f2de12320d1435ec65e0feac64fb6e88ff3ef811 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -837,7 +837,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -838,7 +838,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl this.maxSectionY = this.maxY >> 4; this.sectionsCount = this.maxSectionY - this.minSectionY + 1; // Paper end - getblock optimisations - cache world height/sections 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 99400a5e6..69310eb28 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 -@@ -561,7 +_,32 @@ +@@ -562,7 +_,32 @@ } // Paper end - chunk tick iteration @@ -34,7 +34,7 @@ MinecraftServer server, Executor dispatcher, LevelStorageSource.LevelStorageAccess levelStorageAccess, -@@ -578,6 +_,7 @@ +@@ -579,6 +_,7 @@ org.bukkit.generator.ChunkGenerator gen, // CraftBukkit org.bukkit.generator.BiomeProvider biomeProvider // CraftBukkit ) { @@ -42,7 +42,7 @@ // 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 this.pvpMode = server.isPvpAllowed(); -@@ -605,6 +_,13 @@ +@@ -606,6 +_,13 @@ chunkGenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkGenerator, gen); } // CraftBukkit end @@ -56,7 +56,7 @@ boolean flag = server.forceSynchronousWrites(); DataFixer fixerUpper = server.getFixerUpper(); // Paper - rewrite chunk system -@@ -684,6 +_,12 @@ +@@ -685,6 +_,12 @@ public void setDragonFight(@Nullable EndDragonFight dragonFight) { this.dragonFight = dragonFight; } diff --git a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch index d95189181..b7d448603 100644 --- a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch +++ b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/SerializableChunkData.java +++ b/net/minecraft/world/level/chunk/storage/SerializableChunkData.java -@@ -350,6 +_,12 @@ +@@ -361,6 +_,12 @@ if (flag2) { lightEngine.queueSectionData(LightLayer.SKY, sectionPos, sectionData.skyLight); } diff --git a/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch index 3fb158897..43df3051a 100644 --- a/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/paper-patches/features/0005-Prevent-config-disk-io-on-world-load.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent config disk io on world load diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index 7c585b71d06f438f414227c2625f27b6c323045e..ea4cd0bb12e0a04c6d738aca8dbb206f192244a3 100644 +index c935d75b83338ce41507e9be11153dd1c4052cb6..3feaba566c22b1e93b2b4edc7786723a2f9e28c6 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java -@@ -78,7 +78,12 @@ public class SpigotConfig { +@@ -79,7 +79,12 @@ public class SpigotConfig { } } @@ -21,7 +21,7 @@ index 7c585b71d06f438f414227c2625f27b6c323045e..ea4cd0bb12e0a04c6d738aca8dbb206f for (Method method : clazz.getDeclaredMethods()) { if (Modifier.isPrivate(method.getModifiers())) { if (method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE) { -@@ -95,7 +100,11 @@ public class SpigotConfig { +@@ -96,7 +101,11 @@ public class SpigotConfig { } try { diff --git a/gradle.properties b/gradle.properties index 77fb39106..13b3c341f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ apiVersion=4.0.0-SNAPSHOT version=1.21.5-R0.1-SNAPSHOT mcVersion=1.21.5 -paperRef=35b466e315a447ef54162384d52bad6e1372bd36 +paperRef=5f0b82925e06c90400b4069631b15c8f2c47c76d org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0937f4663..3362da57f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -adventure = "4.17.0" +adventure = "4.20.0" annotations = "26.0.1" autoservice = "1.1.1" blossom = "2.1.0" From d4b251655d046c6ae3e353d12d668ce63d58dc73 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Thu, 5 Jun 2025 01:54:04 +0200 Subject: [PATCH 09/17] feat: initial 1.21.6-pre3 work Signed-off-by: David Mayr --- aspaper-api/build.gradle.kts.patch | 10 +- aspaper-server/build.gradle.kts.patch | 28 +++-- .../features/0001-Disable-dragon-battle.patch | 4 +- .../features/0002-World-overrides.patch | 4 +- .../0003-Avoid-IO-call-for-UUID.patch | 4 +- ...Prevent-config-disk-io-on-world-load.patch | 10 +- .../scheduling/NewChunkHolder.java.patch | 13 +- .../server/level/ServerLevel.java.patch | 8 +- .../storage/SerializableChunkData.java.patch | 2 +- .../features/0003-Branding.patch | 10 +- ...-temp-folder-after-world-is-unloaded.patch | 4 +- .../bukkit/craftbukkit/CraftServer.java.patch | 2 +- .../asp/SimpleDataFixerConverter.java | 116 ++++++++---------- gradle.properties | 6 +- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 16 files changed, 103 insertions(+), 122 deletions(-) diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index cb63c5848..69ef72411 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 -@@ -41,6 +_,7 @@ +@@ -40,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") -@@ -93,7 +_,7 @@ +@@ -90,7 +_,7 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher") } @@ -17,7 +17,7 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -103,6 +_,18 @@ +@@ -100,6 +_,18 @@ main { java { srcDir(generatedDir) @@ -36,7 +36,7 @@ } } } -@@ -169,7 +_,7 @@ +@@ -166,7 +_,7 @@ tasks.withType { val options = options as StandardJavadocDocletOptions @@ -45,7 +45,7 @@ options.use() options.isDocFilesSubDirs = true options.links( -@@ -202,11 +_,11 @@ +@@ -199,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 8c5ff65bb..1544bcbeb 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -1,9 +1,15 @@ --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts -@@ -28,6 +_,17 @@ - // oldPaperCommit = "f4f275519f7c1fbe9db173b7144a4fe81440e365" - //} +@@ -24,9 +_,20 @@ + minecraftVersion = providers.gradleProperty("mcVersion") + gitFilePatches = false +- updatingMinecraft { +- oldPaperCommit = "a033e3b9ef78cfe85be807ac3fd1dd956274d4db" ++// updatingMinecraft { ++// oldPaperCommit = "a033e3b9ef78cfe85be807ac3fd1dd956274d4db" ++// } ++ + val aspaper = forks.register("aspaper") { + upstream.patchDir("paperServer") { + upstreamPath = "paper-server" @@ -11,14 +17,13 @@ + patchesDir = rootDirectory.dir("aspaper-server/paper-patches") + outputDir = rootDirectory.dir("paper-server") + } -+ } + } + + activeFork = aspaper -+ + spigot { - buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" - packageVersion = "v1_21_R4" // also needs to be updated in MappingEnvironment -@@ -108,7 +_,20 @@ + enabled = false +@@ -109,7 +_,19 @@ } } @@ -33,14 +38,13 @@ + resources { srcDir("../paper-server/src/test/resources") } + } +} -+ +val log4jPlugins = sourceSets.create("log4jPlugins") { + java { srcDir("../paper-server/src/log4jPlugins/java") } +} configurations.named(log4jPlugins.compileClasspathConfigurationName) { extendsFrom(configurations.compileClasspath.get()) } -@@ -130,7 +_,8 @@ +@@ -131,7 +_,8 @@ } dependencies { @@ -50,7 +54,7 @@ implementation("ca.spottedleaf:concurrentutil:0.0.3") 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 -@@ -206,14 +_,14 @@ +@@ -207,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -70,7 +74,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -267,7 +_,7 @@ +@@ -273,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 55073500c..aa90d7f5f 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 f8c2eec34c4639a5daaefa0962c44d40b7f22f93..a32a4756ac0c0261b3f28de7e10130d03c5780ce 100644 +index 53ec0565a76663de74bb228c23c3d74a640a20f9..2c85ace929aeb9078fe868bcc56a2be08ac2f7ba 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -681,7 +681,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -684,7 +684,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-World-overrides.patch b/aspaper-server/minecraft-patches/features/0002-World-overrides.patch index 7344ccb61..e520cc593 100644 --- a/aspaper-server/minecraft-patches/features/0002-World-overrides.patch +++ b/aspaper-server/minecraft-patches/features/0002-World-overrides.patch @@ -5,10 +5,10 @@ Subject: [PATCH] World overrides diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 9623b1124c43d6aca94588a4153475e647751788..912da569c851dd6d3747ac19dbfff27c416ca981 100644 +index 3349baa2ab971db435b88083688bd0f99474607e..610e58bede7e1482fc861ab6559f4f3a6e7e3633 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -514,18 +514,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 this.pvpMode = server.isPvpAllowed(); this.levelStorageAccess = levelStorageAccess; diff --git a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch index 4327b4468..b9dad947d 100644 --- a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch @@ -5,10 +5,10 @@ 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 a13ebfbff00340c7ab500e20702120cbae9d3fb3..5b7bb4bfe47a1c4fb2d3e52b03eb23c50c85627d 100644 +index 939605ce630ab66b7236962dec3ae61ed23dc222..51cfeb87385b7e40922049a197a417a3892c2fce 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -606,7 +606,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -609,7 +609,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ) { //ASP end // CraftBukkit start @@ -18,7 +18,7 @@ index a13ebfbff00340c7ab500e20702120cbae9d3fb3..5b7bb4bfe47a1c4fb2d3e52b03eb23c5 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 diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 013ed7dbe2309f562f63e66203179a90566e8115..f2de12320d1435ec65e0feac64fb6e88ff3ef811 100644 +index e4b9a564aad3d9b673808caa18265b06592ceab8..8bb30eba86b74f155ef9580dc6c01d761e23dd5a 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -838,7 +838,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @@ -28,5 +28,5 @@ index 013ed7dbe2309f562f63e66203179a90566e8115..f2de12320d1435ec65e0feac64fb6e88 - this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot + this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), !(this instanceof com.infernalsuite.asp.level.SlimeLevelInstance)); // Spigot //ASP - Improve Slime IO this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config - this.generator = gen; - this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); + this.generator = generator; + this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); diff --git a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java.patch b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java.patch index ff3cc89a5..aaa3b0f28 100644 --- a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java.patch +++ b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java.patch @@ -1,15 +1,6 @@ --- a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java +++ b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java -@@ -116,7 +_,7 @@ - } - - if (!transientChunk) { -- if (entityChunk != null) { -+ if (!(this.world instanceof com.infernalsuite.asp.level.SlimeLevelInstance) && entityChunk != null) { - final List entities = ChunkEntitySlices.readEntities(this.world, entityChunk); - - ((ChunkSystemServerLevel)this.world).moonrise$getEntityLookup().addEntityChunkEntities(entities, new ChunkPos(this.chunkX, this.chunkZ)); -@@ -894,7 +_,7 @@ +@@ -896,7 +_,7 @@ final ChunkEntitySlices entityChunk = state.entityChunk(); final PoiChunk poiChunk = state.poiChunk(); @@ -18,7 +9,7 @@ // unload chunk data if (chunk != null) { -@@ -910,13 +_,24 @@ +@@ -912,13 +_,24 @@ } if (chunk instanceof LevelChunk levelChunk) { 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 69310eb28..ed0f12260 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 -@@ -562,7 +_,32 @@ +@@ -565,7 +_,32 @@ } // Paper end - chunk tick iteration @@ -34,7 +34,7 @@ MinecraftServer server, Executor dispatcher, LevelStorageSource.LevelStorageAccess levelStorageAccess, -@@ -579,6 +_,7 @@ +@@ -582,6 +_,7 @@ org.bukkit.generator.ChunkGenerator gen, // CraftBukkit org.bukkit.generator.BiomeProvider biomeProvider // CraftBukkit ) { @@ -42,7 +42,7 @@ // 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 this.pvpMode = server.isPvpAllowed(); -@@ -606,6 +_,13 @@ +@@ -609,6 +_,13 @@ chunkGenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkGenerator, gen); } // CraftBukkit end @@ -56,7 +56,7 @@ boolean flag = server.forceSynchronousWrites(); DataFixer fixerUpper = server.getFixerUpper(); // Paper - rewrite chunk system -@@ -685,6 +_,12 @@ +@@ -689,6 +_,12 @@ public void setDragonFight(@Nullable EndDragonFight dragonFight) { this.dragonFight = dragonFight; } diff --git a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch index b7d448603..4e9f2dea8 100644 --- a/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch +++ b/aspaper-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/SerializableChunkData.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/SerializableChunkData.java +++ b/net/minecraft/world/level/chunk/storage/SerializableChunkData.java -@@ -361,6 +_,12 @@ +@@ -363,6 +_,12 @@ if (flag2) { lightEngine.queueSectionData(LightLayer.SKY, sectionPos, sectionData.skyLight); } diff --git a/aspaper-server/paper-patches/features/0003-Branding.patch b/aspaper-server/paper-patches/features/0003-Branding.patch index bddf7be57..2a99d901a 100644 --- a/aspaper-server/paper-patches/features/0003-Branding.patch +++ b/aspaper-server/paper-patches/features/0003-Branding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Branding diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eec04fcdd4b6c6f92a2db37bfe06dca2a93e300d 100644 +index d0554ed6631535815e5932930911e3fe1dee8710..ac171c6b9008eaaeb9e433fdb188bd797fd95759 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 { @@ -56,7 +56,7 @@ index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eec04fcdd4b6c6f92a2db37bfe06dca2 .hoverEvent(text("Click to open", NamedTextColor.WHITE)) .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE)))); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index 790bad0494454ca12ee152e3de6da3da634d9b20..d047646990ff52b31a24bdebf000ecfbebdae99a 100644 +index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..2610e8d1ce20331895b0a76fa50efc062001678e 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java @@ -31,6 +31,7 @@ public record ServerBuildInfoImpl( @@ -76,8 +76,8 @@ index 790bad0494454ca12ee152e3de6da3da634d9b20..d047646990ff52b31a24bdebf000ecfb getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) - .orElse(BRAND_PAPER_NAME), + .orElse(BRAND_ADVANCED_SLIME_PAPER_NAME), - SharedConstants.getCurrentVersion().getId(), - SharedConstants.getCurrentVersion().getName(), + SharedConstants.getCurrentVersion().id(), + SharedConstants.getCurrentVersion().name(), getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) @@ -61,7 +62,7 @@ public record ServerBuildInfoImpl( @@ -89,7 +89,7 @@ index 790bad0494454ca12ee152e3de6da3da634d9b20..d047646990ff52b31a24bdebf000ecfb @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..ee1ffebaf4e9f7e2f8e0fd8406357b64d38b7399 100644 +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 { diff --git a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch index b4d18d584..4de1518c7 100644 --- a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch +++ b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Delete temp folder after world is unloaded diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 96d60c6649d40537e8e3a87774300a751efc0c61..04c21c5760f1db9011e431702700caec97fb1a93 100644 +index 5cfa6d499ca812ae9d88c337c45b6251b968f0af..3fbc64a70ecf186b69fe2abc2a677dcf0794a44c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1476,6 +1476,12 @@ public final class CraftServer implements Server { +@@ -1485,6 +1485,12 @@ public final class CraftServer implements Server { handle.getChunkSource().close(save); io.papermc.paper.FeatureHooks.closeEntityManager(handle, save); // SPIGOT-6722: close entityManager // Paper - chunk system handle.levelStorageAccess.close(); diff --git a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch index 2636a43e0..782ff12ac 100644 --- a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch +++ b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1466,6 +_,8 @@ +@@ -1475,6 +_,8 @@ return false; } diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java index ee4805cea..2cc7c0c94 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -1,12 +1,12 @@ package com.infernalsuite.asp; -/*import ca.spottedleaf.dataconverter.converters.DataConverter; +import ca.spottedleaf.dataconverter.converters.DataConverter; import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry; import ca.spottedleaf.dataconverter.minecraft.datatypes.MCDataType; import ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils; import ca.spottedleaf.dataconverter.types.MapType; import ca.spottedleaf.dataconverter.types.nbt.NBTListType; -import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; 1.21.5 */ +import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; import com.infernalsuite.asp.api.SlimeDataConverter; import com.infernalsuite.asp.serialization.SlimeWorldReader; import com.infernalsuite.asp.skeleton.SkeletonSlimeWorld; @@ -41,17 +41,7 @@ public SlimeWorld readFromData(SlimeWorld data) { return data; } - System.out.println(""" - You tried loading a world from a previous minecraft version with the dev build of 1.21.5 - This is currently unsupported until paper reintroduces the dataconverter. - This functionality will come back in a future release. - - Also: Please don't bug the paper team to re-add dataconverter. As of 02.04.2025, paper 1.21.5 isn't even released. - Give them time. Thank you. - """); - throw new IllegalStateException("Loading old worlds is temporarily unsupported."); - //TODO(david): re-add this as soon as dataconverter is back in paper - /*long encodedNewVersion = DataConverter.encodeVersions(newVersion, Integer.MAX_VALUE); 1.21.5 + long encodedNewVersion = DataConverter.encodeVersions(newVersion, Integer.MAX_VALUE); long encodedCurrentVersion = DataConverter.encodeVersions(currentVersion, Integer.MAX_VALUE); Long2ObjectMap chunks = new Long2ObjectOpenHashMap<>(); @@ -112,7 +102,7 @@ public SlimeWorld readFromData(SlimeWorld data) { data.getExtraData(), data.getPropertyMap(), newVersion - ); */ + ); } @Override @@ -131,68 +121,64 @@ private static CompoundBinaryTag convertAndBack(CompoundBinaryTag value, Consume @Override public CompoundBinaryTag convertChunkTo1_13(CompoundBinaryTag tag) { - throw new IllegalStateException("Loading old worlds is temporarily unsupported."); -// CompoundTag nmsTag = (CompoundTag) Converter.convertTag(tag); -// -// int version = nmsTag.getInt("DataVersion"); -// -// long encodedNewVersion = DataConverter.encodeVersions(1631, Integer.MAX_VALUE); -// long encodedCurrentVersion = DataConverter.encodeVersions(version, Integer.MAX_VALUE); -// -// MCTypeRegistry.CHUNK.convert(new NBTMapType(nmsTag), encodedCurrentVersion, encodedNewVersion); -// -// return Converter.convertTag(nmsTag); + CompoundTag nmsTag = (CompoundTag) Converter.convertTag(tag); + + int version = nmsTag.getInt("DataVersion"); + + long encodedNewVersion = DataConverter.encodeVersions(1631, Integer.MAX_VALUE); + long encodedCurrentVersion = DataConverter.encodeVersions(version, Integer.MAX_VALUE); + + MCTypeRegistry.CHUNK.convert(new NBTMapType(nmsTag), encodedCurrentVersion, encodedNewVersion); + + return Converter.convertTag(nmsTag); } @Override public List convertEntities(List input, int from, int to) { - throw new IllegalStateException("Loading old worlds is temporarily unsupported."); -// List entities = new ArrayList<>(input.size()); -// -// long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); -// long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); -// -// for (CompoundBinaryTag upgradeEntity : input) { -// entities.add( -// convertAndBack(upgradeEntity, (tag) -> MCTypeRegistry.ENTITY.convert(new NBTMapType(tag), encodedCurrentVersion, encodedNewVersion)) -// ); -// } -// return entities; + List entities = new ArrayList<>(input.size()); + + long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); + long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); + + for (CompoundBinaryTag upgradeEntity : input) { + entities.add( + convertAndBack(upgradeEntity, (tag) -> MCTypeRegistry.ENTITY.convert(new NBTMapType(tag), encodedCurrentVersion, encodedNewVersion)) + ); + } + return entities; } @Override public List convertTileEntities(List input, int from, int to) { - throw new IllegalStateException("Loading old worlds is temporarily unsupported."); -// List blockEntities = new ArrayList<>(input.size()); -// -// long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); -// long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); -// -// for (CompoundBinaryTag upgradeEntity : input) { -// blockEntities.add( -// convertAndBack(upgradeEntity, (tag) -> MCTypeRegistry.TILE_ENTITY.convert(new NBTMapType(tag), encodedCurrentVersion, encodedNewVersion)) -// ); -// } -// return blockEntities; + List blockEntities = new ArrayList<>(input.size()); + + long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); + long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); + + for (CompoundBinaryTag upgradeEntity : input) { + blockEntities.add( + convertAndBack(upgradeEntity, (tag) -> MCTypeRegistry.TILE_ENTITY.convert(new NBTMapType(tag), encodedCurrentVersion, encodedNewVersion)) + ); + } + return blockEntities; } @Override public ListBinaryTag convertBlockPalette(ListBinaryTag input, int from, int to) { - throw new IllegalStateException("Loading old worlds is temporarily unsupported."); -// long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); -// long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); -// -// ListTag nbtList = (ListTag) Converter.convertTag(input); -// NBTListType listType = new NBTListType(nbtList); -// -// for (int i = 0, len = listType.size(); i < len; ++i) { -// final MapType replace = MCTypeRegistry.BLOCK_STATE.convert(listType.getMap(i), -// encodedCurrentVersion, encodedNewVersion); -// if (replace != null) { -// listType.setMap(i, replace); -// } -// } -// -// return Converter.convertTag(listType.getTag()); + long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); + long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); + + ListTag nbtList = (ListTag) Converter.convertTag(input); + NBTListType listType = new NBTListType(nbtList); + + for (int i = 0, len = listType.size(); i < len; ++i) { + final MapType replace = MCTypeRegistry.BLOCK_STATE.convert(listType.getMap(i), + encodedCurrentVersion, encodedNewVersion); + if (replace != null) { + listType.setMap(i, replace); + } + } + + return Converter.convertTag(listType.getTag()); } } diff --git a/gradle.properties b/gradle.properties index 13b3c341f..c031c4266 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group=com.infernalsuite.asp apiVersion=4.0.0-SNAPSHOT -version=1.21.5-R0.1-SNAPSHOT +version=1.21.6-R0.1-SNAPSHOT -mcVersion=1.21.5 -paperRef=5f0b82925e06c90400b4069631b15c8f2c47c76d +mcVersion=1.21.6-pre3 +paperRef=921c5f936ea7ade002e532bafbe94f1349828d55 org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3362da57f..fe3aaf27e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ lettuce = "6.5.1.RELEASE" lombok = "1.18.36" lombok-plugin = "8.11" mongo = "5.2.1" -paperweight = "2.0.0-beta.14" +paperweight = "2.0.0-beta.17" plugin-yml-paper = "0.6.0" shadow = "8.3.5" slf4j = "2.0.16" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793a..002b867c4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From cc4bb33a80a28bd6d29cce1b7cd966459ef2fb96 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Thu, 5 Jun 2025 02:10:19 +0200 Subject: [PATCH 10/17] fix: compilation issues on ASP side Signed-off-by: David Mayr --- .../asp/SimpleDataFixerConverter.java | 6 ++--- .../infernalsuite/asp/SlimeNMSBridgeImpl.java | 2 +- .../asp/level/NMSSlimeChunk.java | 26 +++++++++++-------- .../asp/level/SlimeInMemoryWorld.java | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java index 2cc7c0c94..d6f0e1efe 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -34,7 +34,7 @@ class SimpleDataFixerConverter implements SlimeWorldReader, SlimeDat @Override public SlimeWorld readFromData(SlimeWorld data) { - int newVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + int newVersion = SharedConstants.getCurrentVersion().dataVersion().version(); int currentVersion = data.getDataVersion(); // Already fixed if (currentVersion == newVersion) { @@ -123,7 +123,7 @@ private static CompoundBinaryTag convertAndBack(CompoundBinaryTag value, Consume public CompoundBinaryTag convertChunkTo1_13(CompoundBinaryTag tag) { CompoundTag nmsTag = (CompoundTag) Converter.convertTag(tag); - int version = nmsTag.getInt("DataVersion"); + int version = nmsTag.getInt("DataVersion").orElseThrow(); long encodedNewVersion = DataConverter.encodeVersions(1631, Integer.MAX_VALUE); long encodedCurrentVersion = DataConverter.encodeVersions(version, Integer.MAX_VALUE); @@ -172,7 +172,7 @@ public ListBinaryTag convertBlockPalette(ListBinaryTag input, int from, int to) NBTListType listType = new NBTListType(nbtList); for (int i = 0, len = listType.size(); i < len; ++i) { - final MapType replace = MCTypeRegistry.BLOCK_STATE.convert(listType.getMap(i), + final MapType replace = MCTypeRegistry.BLOCK_STATE.convert(listType.getMap(i), encodedCurrentVersion, encodedNewVersion); if (replace != null) { listType.setMap(i, replace); 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 bcd0d73fe..9c1360173 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SlimeNMSBridgeImpl.java @@ -164,7 +164,7 @@ public SlimeWorldInstance getInstance(World world) { @Override public int getCurrentVersion() { - return SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + return SharedConstants.getCurrentVersion().dataVersion().version(); } public void registerWorld(SlimeLevelInstance server) { diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/NMSSlimeChunk.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/NMSSlimeChunk.java index ccbc1ea4f..e234c0e34 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/NMSSlimeChunk.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/NMSSlimeChunk.java @@ -19,7 +19,9 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; +import net.minecraft.util.ProblemReporter; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biomes; @@ -27,12 +29,10 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.chunk.PalettedContainer; -import net.minecraft.world.level.chunk.PalettedContainerRO; +import net.minecraft.world.level.chunk.*; import net.minecraft.world.level.chunk.storage.SerializableChunkData; import net.minecraft.world.level.lighting.LevelLightEngine; +import net.minecraft.world.level.storage.TagValueOutput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -168,13 +168,17 @@ public List getEntities(ChunkEntitySlices slices) { if (slices == null) return new ArrayList<>(); List entities = new ArrayList<>(slices.entities.size()); - // Work by - for (Entity entity : slices.entities) { - CompoundTag entityNbt = new CompoundTag(); - try { - if (entity.save(entityNbt)) entities.add(Converter.convertTag(entityNbt)); - } catch (final Exception e) { - LOGGER.error("Could not save the entity = {}, exception = {}", entity, e); + try(final ProblemReporter.ScopedCollector scopedCollector = new ProblemReporter.ScopedCollector(ChunkAccess.problemPath(chunk.getPos()), LOGGER)) { + // Work by + for (Entity entity : slices.entities) { + try { + TagValueOutput tagValueOutput = TagValueOutput.createWithContext(scopedCollector, entity.registryAccess()); + + if (entity.save(tagValueOutput)) + entities.add(Converter.convertTag(tagValueOutput.buildResult())); + } catch (final Exception e) { + LOGGER.error("Could not save the entity = {}, exception = {}", entity, e); + } } } diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java index 73ad5b82a..d339d126f 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java @@ -254,7 +254,7 @@ public SlimeWorld clone(String worldName, SlimeLoader loader) throws WorldAlread @Override public int getDataVersion() { - return SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + return SharedConstants.getCurrentVersion().dataVersion().version(); } @Override From 2f6040bcb9983e007acb9f67a4e4a6b58ce2449a Mon Sep 17 00:00:00 2001 From: David Mayr Date: Wed, 11 Jun 2025 18:18:59 +0200 Subject: [PATCH 11/17] fix: update to newest paper Signed-off-by: David Mayr --- aspaper-api/build.gradle.kts.patch | 10 +++--- ...Prevent-config-disk-io-on-world-load.patch | 8 ++--- .../moonrise/paper/PaperHooks.java.patch | 2 +- ...-temp-folder-after-world-is-unloaded.patch | 4 +-- .../bukkit/craftbukkit/CraftServer.java.patch | 2 +- .../asp/level/SlimeChunkConverter.java | 32 +++++++++---------- .../level/moonrise/SlimeEntityDataLoader.java | 4 +-- .../level/moonrise/SlimePoiDataLoader.java | 4 +-- gradle.properties | 2 +- 9 files changed, 33 insertions(+), 35 deletions(-) diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index cb63c5848..69ef72411 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 -@@ -41,6 +_,7 @@ +@@ -40,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") -@@ -93,7 +_,7 @@ +@@ -90,7 +_,7 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher") } @@ -17,7 +17,7 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -103,6 +_,18 @@ +@@ -100,6 +_,18 @@ main { java { srcDir(generatedDir) @@ -36,7 +36,7 @@ } } } -@@ -169,7 +_,7 @@ +@@ -166,7 +_,7 @@ tasks.withType { val options = options as StandardJavadocDocletOptions @@ -45,7 +45,7 @@ options.use() options.isDocFilesSubDirs = true options.links( -@@ -202,11 +_,11 @@ +@@ -199,11 +_,11 @@ } // workaround for https://github.com/gradle/gradle/issues/4046 diff --git a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch index 4327b4468..f88f831e6 100644 --- a/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch +++ b/aspaper-server/minecraft-patches/features/0004-Prevent-config-disk-io-on-world-load.patch @@ -5,7 +5,7 @@ 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 a13ebfbff00340c7ab500e20702120cbae9d3fb3..5b7bb4bfe47a1c4fb2d3e52b03eb23c50c85627d 100644 +index 1c7cc5d5f031ff9bf7e1755b6071ab17e6e5f43e..395ce84e6734b3257c27f1c3d3ab0ff57da3cb7e 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -606,7 +606,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -18,7 +18,7 @@ index a13ebfbff00340c7ab500e20702120cbae9d3fb3..5b7bb4bfe47a1c4fb2d3e52b03eb23c5 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 diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 013ed7dbe2309f562f63e66203179a90566e8115..f2de12320d1435ec65e0feac64fb6e88ff3ef811 100644 +index 418d3958b7510d469142178f9427c829b6387d83..c09fc4d3d16e23c5c6640c89202b1528a6d34016 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -838,7 +838,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @@ -28,5 +28,5 @@ index 013ed7dbe2309f562f63e66203179a90566e8115..f2de12320d1435ec65e0feac64fb6e88 - this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot + this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), !(this instanceof com.infernalsuite.asp.level.SlimeLevelInstance)); // Spigot //ASP - Improve Slime IO this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config - this.generator = gen; - this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); + this.generator = generator; + this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); diff --git a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/paper/PaperHooks.java.patch b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/paper/PaperHooks.java.patch index 9a93c6ef0..c21fc6843 100644 --- a/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/paper/PaperHooks.java.patch +++ b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/paper/PaperHooks.java.patch @@ -1,6 +1,6 @@ --- a/ca/spottedleaf/moonrise/paper/PaperHooks.java +++ b/ca/spottedleaf/moonrise/paper/PaperHooks.java -@@ -198,6 +_,7 @@ +@@ -199,6 +_,7 @@ @Override public boolean forceNoSave(final ChunkAccess chunk) { diff --git a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch index b4d18d584..4de1518c7 100644 --- a/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch +++ b/aspaper-server/paper-patches/features/0004-Delete-temp-folder-after-world-is-unloaded.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Delete temp folder after world is unloaded diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 96d60c6649d40537e8e3a87774300a751efc0c61..04c21c5760f1db9011e431702700caec97fb1a93 100644 +index 5cfa6d499ca812ae9d88c337c45b6251b968f0af..3fbc64a70ecf186b69fe2abc2a677dcf0794a44c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1476,6 +1476,12 @@ public final class CraftServer implements Server { +@@ -1485,6 +1485,12 @@ public final class CraftServer implements Server { handle.getChunkSource().close(save); io.papermc.paper.FeatureHooks.closeEntityManager(handle, save); // SPIGOT-6722: close entityManager // Paper - chunk system handle.levelStorageAccess.close(); diff --git a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch index 2636a43e0..782ff12ac 100644 --- a/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch +++ b/aspaper-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1466,6 +_,8 @@ +@@ -1475,6 +_,8 @@ return false; } diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java index 68cc5e672..93e723678 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.biome.Biome; @@ -43,6 +44,9 @@ public class SlimeChunkConverter { + private static final Codec>> BLOCK_TICKS_CODEC = SavedTick.codec(BuiltInRegistries.BLOCK.byNameCodec()).listOf(); + private static final Codec>> FLUID_TICKS_CODEC = SavedTick.codec(BuiltInRegistries.FLUID.byNameCodec()).listOf(); + static SlimeChunkLevel deserializeSlimeChunk(SlimeLevelInstance instance, SlimeChunk chunk) { int x = chunk.getX(); int z = chunk.getZ(); @@ -108,9 +112,9 @@ static SlimeChunkLevel deserializeSlimeChunk(SlimeLevelInstance instance, SlimeC LevelChunkTicks blockLevelChunkTicks; if(chunk.getBlockTicks() != null) { - List> blockList = SavedTick.loadTickList( - (ListTag) Converter.convertTag(chunk.getBlockTicks()), string -> BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(string)), pos - ); + ListTag tag = (ListTag) Converter.convertTag(chunk.getBlockTicks()); + List> blockList = SavedTick.filterTickListForChunk(BLOCK_TICKS_CODEC.parse(NbtOps.INSTANCE, tag).resultOrPartial().orElse(List.of()), pos); + blockLevelChunkTicks = new LevelChunkTicks<>(blockList); } else { blockLevelChunkTicks = new LevelChunkTicks<>(); @@ -118,9 +122,9 @@ static SlimeChunkLevel deserializeSlimeChunk(SlimeLevelInstance instance, SlimeC LevelChunkTicks fluidLevelChunkTicks; if(chunk.getFluidTicks() != null) { - List> fluidList = SavedTick.loadTickList( - (ListTag) Converter.convertTag(chunk.getFluidTicks()), string -> BuiltInRegistries.FLUID.getOptional(ResourceLocation.tryParse(string)), pos - ); + ListTag tag = (ListTag) Converter.convertTag(chunk.getFluidTicks()); + List> fluidList = SavedTick.filterTickListForChunk(FLUID_TICKS_CODEC.parse(NbtOps.INSTANCE, tag).resultOrPartial().orElse(List.of()), pos); + fluidLevelChunkTicks = new LevelChunkTicks<>(fluidList); } else { fluidLevelChunkTicks = new LevelChunkTicks<>(); @@ -178,19 +182,13 @@ static SlimeChunkLevel deserializeSlimeChunk(SlimeLevelInstance instance, SlimeC } public static ListBinaryTag convertSavedFluidTicks(List> ticks) { - ListBinaryTag.Builder builder = ListBinaryTag.builder(); - for (SavedTick tick : ticks) { - builder.add((CompoundBinaryTag) Converter.convertTag(tick.save(fluid -> BuiltInRegistries.FLUID.getKey(fluid).toString()))); - } - return builder.build(); + Tag tag = FLUID_TICKS_CODEC.encodeStart(NbtOps.INSTANCE, ticks).getOrThrow(); + return Converter.convertTag(tag); } public static ListBinaryTag convertSavedBlockTicks(List> ticks) { - ListBinaryTag.Builder builder = ListBinaryTag.builder(); - for (SavedTick tick : ticks) { - builder.add((CompoundBinaryTag) Converter.convertTag(tick.save(block -> BuiltInRegistries.BLOCK.getKey(block).toString()))); - } - return builder.build(); + Tag tag = BLOCK_TICKS_CODEC.encodeStart(NbtOps.INSTANCE, ticks).getOrThrow(); + return Converter.convertTag(tag); } public static CompoundTag createPoiChunk(SlimeChunk chunk) { @@ -212,7 +210,7 @@ public static CompoundBinaryTag toSlimeSections(PoiChunk poiChunk) { public static CompoundBinaryTag getSlimeSectionsFromPoiCompound(CompoundTag save) { if(save == null) return null; - CompoundTag sections = save.getCompound("Sections"); + CompoundTag sections = save.getCompoundOrEmpty("Sections"); return Converter.convertTag(sections); } } diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimeEntityDataLoader.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimeEntityDataLoader.java index 1a3802364..c452c1542 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimeEntityDataLoader.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimeEntityDataLoader.java @@ -31,7 +31,7 @@ public ReadData readData(int chunkX, int chunkZ) { SlimeChunk chunk = instance.getSlimeInstance().getChunk(chunkX, chunkZ); if(chunk == null || chunk.getEntities() == null) { - return new ReadData(ReadData.ReadResult.NO_DATA, null, null); + return new ReadData(ReadData.ReadResult.NO_DATA, null, null, 0); } CompoundTag tag = new CompoundTag(); @@ -44,7 +44,7 @@ public ReadData readData(int chunkX, int chunkZ) { } tag.put("Entities", listTag); - return new ReadData(ReadData.ReadResult.SYNC_READ, null, tag); + return new ReadData(ReadData.ReadResult.SYNC_READ, null, tag, 0); } @Override diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimePoiDataLoader.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimePoiDataLoader.java index 2a5efb69d..8732c4cdc 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimePoiDataLoader.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/moonrise/SlimePoiDataLoader.java @@ -31,12 +31,12 @@ public ReadData readData(int chunkX, int chunkZ) { SlimeChunk chunk = instance.getSlimeInstance().getChunk(chunkX, chunkZ); if(chunk == null || chunk.getPoiChunkSections() == null) { - return new ReadData(ReadData.ReadResult.NO_DATA, null, null); + return new ReadData(ReadData.ReadResult.NO_DATA, null, null, 0); } CompoundTag tag = SlimeChunkConverter.createPoiChunk(chunk); - return new ReadData(ReadData.ReadResult.SYNC_READ, null, tag); + return new ReadData(ReadData.ReadResult.SYNC_READ, null, tag, 0); } @Override diff --git a/gradle.properties b/gradle.properties index 2c6927578..a2a960981 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ apiVersion=4.1.0-SNAPSHOT version=1.21.5-R0.1-SNAPSHOT mcVersion=1.21.5 -paperRef=5f0b82925e06c90400b4069631b15c8f2c47c76d +paperRef=ba7fb23ddd2376079951d1e22f9204d1ed691585 org.gradle.caching=true org.gradle.parallel=true From f0955512289e6a110b00b67dae0faa9d2234c892 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Wed, 11 Jun 2025 18:44:13 +0200 Subject: [PATCH 12/17] fix: compilation problems --nobuild Signed-off-by: David Mayr --- .../java/com/infernalsuite/asp/SimpleDataFixerConverter.java | 1 + .../java/com/infernalsuite/asp/level/SlimeChunkConverter.java | 2 +- gradle.properties | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java index 6838305dd..b309eeba0 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -8,6 +8,7 @@ import ca.spottedleaf.dataconverter.types.nbt.NBTListType; import ca.spottedleaf.dataconverter.types.nbt.NBTMapType; import com.infernalsuite.asp.api.SlimeDataConverter; +import com.infernalsuite.asp.level.SlimeChunkConverter; import com.infernalsuite.asp.serialization.SlimeWorldReader; import com.infernalsuite.asp.skeleton.SkeletonSlimeWorld; import com.infernalsuite.asp.skeleton.SlimeChunkSectionSkeleton; diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java index 93e723678..f48c71ef3 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeChunkConverter.java @@ -192,7 +192,7 @@ public static ListBinaryTag convertSavedBlockTicks(List> ticks) } public static CompoundTag createPoiChunk(SlimeChunk chunk) { - return createPoiChunkFromSlimeSections(chunk.getPoiChunkSections(), SharedConstants.getCurrentVersion().getDataVersion().getVersion()); + return createPoiChunkFromSlimeSections(chunk.getPoiChunkSections(), SharedConstants.getCurrentVersion().dataVersion().version()); } public static CompoundTag createPoiChunkFromSlimeSections(CompoundBinaryTag slimePoiSections, int dataVersion) { diff --git a/gradle.properties b/gradle.properties index e36f74eb3..8fa43c9f6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ group=com.infernalsuite.asp apiVersion=4.1.0-SNAPSHOT version=1.21.6-R0.1-SNAPSHOT -mcVersion=1.21.6-pre3 -paperRef=921c5f936ea7ade002e532bafbe94f1349828d55 +mcVersion=1.21.6-pre4 +paperRef=87d0fdd89edd8e1e8286f7096145fc30ceac99bd org.gradle.caching=true org.gradle.parallel=true From 584d5fad74d9dbb4a34d726ed2e12b15adf9d999 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Wed, 11 Jun 2025 19:16:24 +0200 Subject: [PATCH 13/17] fix: lists with multiple types in conversion Signed-off-by: David Mayr --- .../java/com/infernalsuite/asp/Converter.java | 36 +++++++++---------- gradle/libs.versions.toml | 2 +- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java b/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java index c7a572fcc..27c0f2b68 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/Converter.java @@ -1,21 +1,7 @@ package com.infernalsuite.asp; import com.infernalsuite.asp.api.utils.NibbleArray; -import net.kyori.adventure.nbt.BinaryTag; -import net.kyori.adventure.nbt.ByteArrayBinaryTag; -import net.kyori.adventure.nbt.ByteBinaryTag; -import net.kyori.adventure.nbt.CompoundBinaryTag; -import net.kyori.adventure.nbt.DoubleBinaryTag; -import net.kyori.adventure.nbt.EndBinaryTag; -import net.kyori.adventure.nbt.FloatBinaryTag; -import net.kyori.adventure.nbt.IntArrayBinaryTag; -import net.kyori.adventure.nbt.IntBinaryTag; -import net.kyori.adventure.nbt.ListBinaryTag; -import net.kyori.adventure.nbt.LongArrayBinaryTag; -import net.kyori.adventure.nbt.LongBinaryTag; -import net.kyori.adventure.nbt.ShortBinaryTag; -import net.kyori.adventure.nbt.StringBinaryTag; -import net.kyori.adventure.nbt.TagStringIO; +import net.kyori.adventure.nbt.*; import net.minecraft.nbt.ByteArrayTag; import net.minecraft.nbt.ByteTag; import net.minecraft.nbt.CompoundTag; @@ -37,6 +23,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; public class Converter { @@ -106,15 +93,27 @@ public static T convertTag(Tag base) { case Tag.TAG_FLOAT -> (T) FloatBinaryTag.floatBinaryTag(((FloatTag) base).floatValue()); case Tag.TAG_DOUBLE -> (T) DoubleBinaryTag.doubleBinaryTag(((DoubleTag) base).doubleValue()); case Tag.TAG_BYTE_ARRAY -> (T) ByteArrayBinaryTag.byteArrayBinaryTag(((ByteArrayTag) base).getAsByteArray()); - case Tag.TAG_STRING -> (T) StringBinaryTag.stringBinaryTag(((StringTag) base).asString().orElseThrow()); //TODO(david): Figure out what to do with optional? + case Tag.TAG_STRING -> (T) StringBinaryTag.stringBinaryTag(base.asString().orElseThrow()); //TODO(david): Figure out what to do with optional? case Tag.TAG_LIST -> { ListTag originalList = ((ListTag) base); if(originalList.isEmpty()) { yield (T) ListBinaryTag.empty(); } List list = new ArrayList<>(originalList.size()); - for (Tag entry : originalList) list.add(convertTag(entry)); - yield (T) ListBinaryTag.listBinaryTag(list.getFirst().type(), list); + + BinaryTagType tagType = null; + for (Tag entry : originalList) { + BinaryTag converted = convertTag(entry); + + if(tagType != null && !converted.type().equals(tagType)) { + tagType = BinaryTagTypes.LIST_WILDCARD; + } else if(tagType == null) { + tagType = converted.type(); + } + + list.add(converted); + } + yield (T) ListBinaryTag.listBinaryTag(tagType, list); } case Tag.TAG_COMPOUND -> { CompoundBinaryTag.Builder builder = CompoundBinaryTag.builder(); @@ -127,5 +126,4 @@ public static T convertTag(Tag base) { default -> throw new IllegalArgumentException("Invalid tag type " + base.getId()); }; } - } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8de21f2fe..8d02bab6c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -adventure = "4.20.0" +adventure = "4.21.0" annotations = "26.0.1" autoservice = "1.1.1" blossom = "2.1.0" From b9df68fb6f3fbcbd22e71f33941efe50a12d2559 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Tue, 17 Jun 2025 17:23:32 +0200 Subject: [PATCH 14/17] feat: full 1.21.6 release Signed-off-by: David Mayr --- aspaper-server/build.gradle.kts.patch | 21 ++++++++------------- gradle.properties | 4 ++-- gradle/libs.versions.toml | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/aspaper-server/build.gradle.kts.patch b/aspaper-server/build.gradle.kts.patch index 1544bcbeb..719b5ad37 100644 --- a/aspaper-server/build.gradle.kts.patch +++ b/aspaper-server/build.gradle.kts.patch @@ -1,15 +1,9 @@ --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts -@@ -24,9 +_,20 @@ +@@ -24,6 +_,17 @@ minecraftVersion = providers.gradleProperty("mcVersion") gitFilePatches = false -- updatingMinecraft { -- oldPaperCommit = "a033e3b9ef78cfe85be807ac3fd1dd956274d4db" -+// updatingMinecraft { -+// oldPaperCommit = "a033e3b9ef78cfe85be807ac3fd1dd956274d4db" -+// } -+ + val aspaper = forks.register("aspaper") { + upstream.patchDir("paperServer") { + upstreamPath = "paper-server" @@ -17,13 +11,14 @@ + patchesDir = rootDirectory.dir("aspaper-server/paper-patches") + outputDir = rootDirectory.dir("paper-server") + } - } ++ } + + activeFork = aspaper - ++ spigot { enabled = false -@@ -109,7 +_,19 @@ + buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" +@@ -105,7 +_,19 @@ } } @@ -44,7 +39,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { extendsFrom(configurations.compileClasspath.get()) } -@@ -131,7 +_,8 @@ +@@ -127,7 +_,8 @@ } dependencies { @@ -54,7 +49,7 @@ implementation("ca.spottedleaf:concurrentutil:0.0.3") 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 -@@ -207,14 +_,14 @@ +@@ -203,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -74,7 +69,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -273,7 +_,7 @@ +@@ -269,7 +_,7 @@ jvmArgumentProviders.add(provider) } diff --git a/gradle.properties b/gradle.properties index 8fa43c9f6..044b3eb73 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ group=com.infernalsuite.asp apiVersion=4.1.0-SNAPSHOT version=1.21.6-R0.1-SNAPSHOT -mcVersion=1.21.6-pre4 -paperRef=87d0fdd89edd8e1e8286f7096145fc30ceac99bd +mcVersion=1.21.6 +paperRef=245b5473a02d2e3910f3821ae96a11ce59c2a937 org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8d02bab6c..ffb93c06a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -adventure = "4.21.0" +adventure = "4.22.0" annotations = "26.0.1" autoservice = "1.1.1" blossom = "2.1.0" From 7b31d993c94f69c7d72447ad2f02fdef5d2e8cbe Mon Sep 17 00:00:00 2001 From: David Mayr Date: Tue, 17 Jun 2025 20:22:57 +0200 Subject: [PATCH 15/17] feat: update paper Signed-off-by: David Mayr --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 044b3eb73..5808b850c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ apiVersion=4.1.0-SNAPSHOT version=1.21.6-R0.1-SNAPSHOT mcVersion=1.21.6 -paperRef=245b5473a02d2e3910f3821ae96a11ce59c2a937 +paperRef=8318dcb74b18243caadc1b2824fdef2a2dba7a96 org.gradle.caching=true org.gradle.parallel=true From 0575f17f44a345d729fbe50c0d61fc4afeea7ac0 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Tue, 17 Jun 2025 20:24:07 +0200 Subject: [PATCH 16/17] fix: temporarily downgrade adventure Signed-off-by: David Mayr --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ffb93c06a..8d02bab6c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -adventure = "4.22.0" +adventure = "4.21.0" annotations = "26.0.1" autoservice = "1.1.1" blossom = "2.1.0" From 3e4073bbe28b6b56c01d02dcf9cbda2bfcff3de2 Mon Sep 17 00:00:00 2001 From: David Mayr Date: Thu, 19 Jun 2025 14:05:27 +0200 Subject: [PATCH 17/17] feat: update to newest paper Signed-off-by: David Mayr --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5808b850c..0ab5a4031 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ apiVersion=4.1.0-SNAPSHOT version=1.21.6-R0.1-SNAPSHOT mcVersion=1.21.6 -paperRef=8318dcb74b18243caadc1b2824fdef2a2dba7a96 +paperRef=4781d28b4b23839c125075c6f0d323e9585338e6 org.gradle.caching=true org.gradle.parallel=true