diff --git a/aspaper-api/build.gradle.kts.patch b/aspaper-api/build.gradle.kts.patch index 33a97d1b5..69ef72411 100644 --- a/aspaper-api/build.gradle.kts.patch +++ b/aspaper-api/build.gradle.kts.patch @@ -1,27 +1,26 @@ --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts -@@ -39,7 +_,7 @@ +@@ -40,6 +_,7 @@ } dependencies { -- + api(project(":api")) //ASP // 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") } --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()) -@@ -103,6 +_,18 @@ + generatedSourceDirs.add(generatedDir.toFile()) +@@ -100,6 +_,18 @@ main { java { - srcDir(generatedApiPath) + srcDir(generatedDir) + srcDir(file("../paper-api/src/main/java")) + } + resources { @@ -37,7 +36,7 @@ } } } -@@ -169,7 +_,7 @@ +@@ -166,7 +_,7 @@ tasks.withType { val options = options as StandardJavadocDocletOptions @@ -46,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 35b337a9e..719b5ad37 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 +@@ -24,6 +_,17 @@ + minecraftVersion = providers.gradleProperty("mcVersion") + gitFilePatches = false + 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 @@ + enabled = false + buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" +@@ -105,7 +_,19 @@ } } @@ -33,25 +33,23 @@ + 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()) } -@@ -119,7 +_,9 @@ +@@ -127,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 @@ +@@ -203,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -71,3 +69,12 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, +@@ -269,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/minecraft-patches/features/0001-Disable-dragon-battle.patch b/aspaper-server/minecraft-patches/features/0001-Disable-dragon-battle.patch index a48979525..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 c5ddf6c0f0ff795da2f7aec8915a081b334423ec..a373f5b8e03f4179a4d9f63d79abc19a38f952b6 100644 +index 53ec0565a76663de74bb228c23c3d74a640a20f9..2c85ace929aeb9078fe868bcc56a2be08ac2f7ba 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 +@@ -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 d7db4aa7f..e520cc593 100644 --- a/aspaper-server/minecraft-patches/features/0002-World-overrides.patch +++ b/aspaper-server/minecraft-patches/features/0002-World-overrides.patch @@ -5,7 +5,7 @@ Subject: [PATCH] World overrides diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 1509c96ae9247d1d5ddd0fc50210f88da10bf3de..bbc4be3c3811ee19bd791cb6626474038d35a298 100644 +index 3349baa2ab971db435b88083688bd0f99474607e..610e58bede7e1482fc861ab6559f4f3a6e7e3633 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..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 60608cea4e564c1ce47f8a4de2c1a48986bbdecb..1b5d65136421b63353b1c6cd8ae5d413ec070b92 100644 +index 939605ce630ab66b7236962dec3ae61ed23dc222..51cfeb87385b7e40922049a197a417a3892c2fce 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 +@@ -609,7 +609,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ) { //ASP end // CraftBukkit start @@ -16,17 +16,17 @@ 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 e4b9a564aad3d9b673808caa18265b06592ceab8..8bb30eba86b74f155ef9580dc6c01d761e23dd5a 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 +@@ -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 - 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/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/paper/PaperHooks.java.patch b/aspaper-server/minecraft-patches/sources/ca/spottedleaf/moonrise/paper/PaperHooks.java.patch index 9a93c6ef0..68303fee9 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 @@ +@@ -206,6 +_,7 @@ @Override public boolean forceNoSave(final ChunkAccess chunk) { 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/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 009431185..d5af1d380 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,6 +1,6 @@ --- a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java +++ b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/NewChunkHolder.java -@@ -910,13 +_,24 @@ +@@ -912,13 +_,24 @@ } if (chunk instanceof LevelChunk levelChunk) { @@ -26,7 +26,7 @@ // yes this is a hack to pass the compound tag through... final CompoundTag lastEntityUnload = this.lastEntityUnload; this.lastEntityUnload = null; -@@ -1715,6 +_,12 @@ +@@ -1717,6 +_,12 @@ boolean canSaveChunk = !forceNoSaveChunk && (chunk != null && ((shutdown || chunk instanceof LevelChunk) && chunk.isUnsaved())); boolean canSavePOI = !forceNoSaveChunk && (poi != null && poi.isDirty()); boolean canSaveEntities = entities != null; 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..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 -@@ -570,7 +_,32 @@ +@@ -565,7 +_,32 @@ } // Paper end - chunk tick iteration @@ -34,7 +34,7 @@ MinecraftServer server, Executor dispatcher, LevelStorageSource.LevelStorageAccess levelStorageAccess, -@@ -587,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(); -@@ -614,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 -@@ -695,6 +_,12 @@ +@@ -689,6 +_,12 @@ public void setDragonFight(@Nullable EndDragonFight dragonFight) { this.dragonFight = dragonFight; } diff --git a/aspaper-server/paper-patches/features/0003-Branding.patch b/aspaper-server/paper-patches/features/0003-Branding.patch index 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 cfc9b2ac4..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 4b4dc5ff38f74a008b5b0bebe312fbbf0ace7b7c..c0358d9291b8b569cd234f9a3e64f5ad60054377 100644 +index 5cfa6d499ca812ae9d88c337c45b6251b968f0af..3fbc64a70ecf186b69fe2abc2a677dcf0794a44c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1519,6 +1519,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/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..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,15 +5,15 @@ 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 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 { } } + // 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) { @@ -21,7 +21,7 @@ index e0d4222a99f22d7130d95cf29b034a98f2f3b76e..776440ec20c7bf0acac8678773b0a5d2 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 { @@ -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 { 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 0c0940ad1..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 -@@ -1509,6 +_,8 @@ +@@ -1475,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..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 { @@ -99,27 +86,39 @@ 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(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(); 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()); @@ -127,5 +126,4 @@ public static T convertTag(Tag base) { default -> throw new IllegalArgumentException("Invalid tag type " + base.getId()); }; } - } 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 0c09db51b..b309eeba0 100644 --- a/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java +++ b/aspaper-server/src/main/java/com/infernalsuite/asp/SimpleDataFixerConverter.java @@ -2,6 +2,7 @@ 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; @@ -31,7 +32,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) { @@ -131,7 +132,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); @@ -173,7 +174,6 @@ public List convertTileEntities(List input @Override public ListBinaryTag convertBlockPalette(ListBinaryTag input, int from, int to) { - long encodedNewVersion = DataConverter.encodeVersions(to, Integer.MAX_VALUE); long encodedCurrentVersion = DataConverter.encodeVersions(from, Integer.MAX_VALUE); @@ -181,7 +181,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 65f812185..9c1360173 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.SlimeDataConverter; import com.infernalsuite.asp.api.SlimeNMSBridge; import com.infernalsuite.asp.api.world.SlimeWorld; @@ -167,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 5d74ee98e..99fbb336c 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 @@ -22,7 +22,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; @@ -30,15 +32,13 @@ 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.material.Fluid; import net.minecraft.world.ticks.SavedTick; import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.storage.TagValueOutput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -199,13 +199,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/ReadOnlyDimensionDataStorage.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/ReadOnlyDimensionDataStorage.java index f58a673d0..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 @@ -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,14 +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); + public @Nullable T get(SavedDataType type) { + Optional optional = this.cache.get(type); if(optional == null) { return null; } 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..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 @@ -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,23 +182,17 @@ 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) { - return createPoiChunkFromSlimeSections(chunk.getPoiChunkSections(), SharedConstants.getCurrentVersion().getDataVersion().getVersion()); + return createPoiChunkFromSlimeSections(chunk.getPoiChunkSections(), SharedConstants.getCurrentVersion().dataVersion().version()); } public static CompoundTag createPoiChunkFromSlimeSections(CompoundBinaryTag slimePoiSections, int dataVersion) { @@ -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/SlimeInMemoryWorld.java b/aspaper-server/src/main/java/com/infernalsuite/asp/level/SlimeInMemoryWorld.java index ac12dcf49..deb15e5dd 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 @@ -242,7 +242,7 @@ public SlimeWorld getSerializableCopy() { 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(), @@ -300,7 +300,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 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 7b436574e..0ab5a4031 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group=com.infernalsuite.asp apiVersion=4.1.0-SNAPSHOT -version=1.21.4-R0.1-SNAPSHOT +version=1.21.6-R0.1-SNAPSHOT -mcVersion=1.21.4 -paperRef=af71568bb3f80370c9cc594dbf2ce81228cb449c +mcVersion=1.21.6 +paperRef=4781d28b4b23839c125075c6f0d323e9585338e6 org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8662e1580..8d02bab6c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -adventure = "4.17.0" +adventure = "4.21.0" annotations = "26.0.1" autoservice = "1.1.1" blossom = "2.1.0" @@ -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