diff --git a/build.gradle.kts b/build.gradle.kts index a8a497a85f..67b22ccb55 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,6 +15,7 @@ allprojects { tasks.withType().configureEach { options.isFork = true options.isIncremental = true + options.release.set(21) } tasks.withType().configureEach { @@ -44,7 +45,7 @@ afterEvaluate { } project(":platforms:bukkit:common").configureDistribution() forSubProjects(":common:addons") { - apply(plugin = "com.github.johnrengelman.shadow") + apply(plugin = "com.gradleup.shadow") tasks.named("build") { finalizedBy(tasks.named("shadowJar")) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 3d319e8c73..cec2d002d2 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -16,11 +16,11 @@ repositories { dependencies { //TODO Allow pulling from Versions.kt - implementation("com.github.johnrengelman", "shadow", "8.1.1") - implementation("io.papermc.paperweight.userdev", "io.papermc.paperweight.userdev.gradle.plugin", "1.7.1") + implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.1") + implementation("io.papermc.paperweight.userdev", "io.papermc.paperweight.userdev.gradle.plugin", "1.7.2") implementation("org.ow2.asm", "asm", "9.7") implementation("org.ow2.asm", "asm-tree", "9.7") implementation("com.dfsek.tectonic", "common", "4.2.1") - implementation("org.yaml", "snakeyaml", "2.2") + implementation("org.yaml", "snakeyaml", "2.3") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/DependencyConfig.kt b/buildSrc/src/main/kotlin/DependencyConfig.kt index 0778808d84..0df8e29f20 100644 --- a/buildSrc/src/main/kotlin/DependencyConfig.kt +++ b/buildSrc/src/main/kotlin/DependencyConfig.kt @@ -48,6 +48,9 @@ fun Project.configureDependencies() { maven("https://jitpack.io") { name = "JitPack" } + maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { + name = "Sonatype Snapshots" + } } dependencies { diff --git a/buildSrc/src/main/kotlin/DistributionConfig.kt b/buildSrc/src/main/kotlin/DistributionConfig.kt index 80e59104e9..12ebd8376b 100644 --- a/buildSrc/src/main/kotlin/DistributionConfig.kt +++ b/buildSrc/src/main/kotlin/DistributionConfig.kt @@ -21,7 +21,7 @@ import kotlin.io.path.exists fun Project.configureDistribution() { - apply(plugin = "com.github.johnrengelman.shadow") + apply(plugin = "com.gradleup.shadow") val downloadDefaultPacks = tasks.create("downloadDefaultPacks") { group = "terra" diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index f6e2606e0a..d1b7f40247 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -8,23 +8,23 @@ object Versions { const val paralithic = "0.7.1" const val strata = "1.3.2" - const val cloud = "2.0.0-rc.2" - const val cloudPaper = "2.0.0-beta.9" - const val cloudFabric = "2.0.0-beta.7" + const val cloud = "2.0.0" + const val cloudPaper = "2.0.0-beta.10" + const val cloudFabric = "2.0.0-beta.9" const val caffeine = "3.1.8" - const val slf4j = "2.0.13" + const val slf4j = "2.0.16" object Internal { - const val shadow = "8.1.1" + const val shadow = "8.3.1" const val apacheText = "1.12.0" const val apacheIO = "2.16.1" - const val guava = "33.1.0-jre" + const val guava = "33.3.0-jre" const val asm = "9.7" - const val snakeYml = "2.2" + const val snakeYml = "2.3" const val jetBrainsAnnotations = "24.1.0" - const val junit = "5.10.2" + const val junit = "5.11.0" } } @@ -38,14 +38,14 @@ object Versions { // } object Mod { - const val mixin = "0.12.5+mixin.0.8.5" + const val mixin = "0.15.3+mixin.0.8.7" const val minecraft = "1.20.6" const val yarn = "$minecraft+build.1" - const val fabricLoader = "0.15.10" + const val fabricLoader = "0.16.5" - const val architecuryLoom = "1.6.395" - const val architecturyPlugin = "3.4.155" + const val architecuryLoom = "1.7.413" + const val architecturyPlugin = "3.4.159" } // // object Forge { @@ -54,14 +54,14 @@ object Versions { // } object Bukkit { - const val minecraft = "1.21" - const val paperBuild = "$minecraft-R0.1-SNAPSHOT" + const val minecraft = "1.21.1" + const val paperBuild = "$minecraft-R0.1-20240917.151311-80" const val paper = paperBuild const val paperLib = "1.0.8" const val reflectionRemapper = "0.1.1" const val paperDevBundle = paperBuild - const val runPaper = "2.3.0" - const val paperWeight = "1.7.1" + const val runPaper = "2.3.1" + const val paperWeight = "1.7.2" } // @@ -73,6 +73,6 @@ object Versions { // object CLI { const val nbt = "6.1" - const val logback = "1.4.14" + const val logback = "1.5.8" } } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd49177..e6441136f3 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 381baa9cef..8e876e1c55 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionSha256Sum=1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4269..b740cf1339 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f13..25da30dbde 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 95924dadde..08a75dc125 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -2,12 +2,6 @@ plugins { id("xyz.jpenilla.run-paper") version Versions.Bukkit.runPaper } -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { - name = "Sonatype" - } -} - dependencies { shaded(project(":platforms:bukkit:common")) shaded(project(":platforms:bukkit:nms:v1_21", configuration = "reobf")) diff --git a/platforms/bukkit/nms/v1_21/build.gradle.kts b/platforms/bukkit/nms/v1_21/build.gradle.kts index 6881c96ca1..d52f1d1691 100644 --- a/platforms/bukkit/nms/v1_21/build.gradle.kts +++ b/platforms/bukkit/nms/v1_21/build.gradle.kts @@ -1,9 +1,5 @@ apply(plugin = "io.papermc.paperweight.userdev") -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - dependencies { api(project(":platforms:bukkit:common")) paperDevBundle(Versions.Bukkit.paperDevBundle) diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java index d16bbbf30a..fc5cc03672 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java @@ -10,6 +10,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.biome.Biome; import org.bukkit.NamespacedKey; import org.slf4j.Logger; diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 58e892e991..6314246998 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -10,12 +10,6 @@ architectury { loader("fabric") } -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { - name = "Sonatype Snapshots" - } -} - dependencies { shadedApi(project(":common:implementation:base")) @@ -51,10 +45,6 @@ loom { addonDir(project.file("./run/config/Terra/addons"), tasks.named("configureLaunch").get()) tasks { - compileJava { - options.release.set(17) - } - remapJar { dependsOn("installAddons") diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index 8b67c7b547..bc53194528 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -26,9 +26,9 @@ "terra.common.mixins.json" ], "depends": { - "fabricloader": ">=0.15.1", - "java": ">=17", - "minecraft": ">=1.20.4", + "fabricloader": ">=0.16.5", + "java": ">=21", + "minecraft": ">=1.20.6", "fabric": "*" } } \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.fabric.mixins.json b/platforms/fabric/src/main/resources/terra.fabric.mixins.json index f97889f6d9..4778acf1b3 100644 --- a/platforms/fabric/src/main/resources/terra.fabric.mixins.json +++ b/platforms/fabric/src/main/resources/terra.fabric.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.fabric.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ diff --git a/platforms/forge/src/main/resources/terra.forge.mixins.json b/platforms/forge/src/main/resources/terra.forge.mixins.json index 25c1c470ed..095ea92348 100644 --- a/platforms/forge/src/main/resources/terra.forge.mixins.json +++ b/platforms/forge/src/main/resources/terra.forge.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.forge.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ "lifecycle.NoiseConfigMixin" ], diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java index 541e764aba..f260ba3f25 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java @@ -25,10 +25,13 @@ import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryWrapper; +import net.minecraft.registry.RegistryWrapper.Impl; import net.minecraft.util.Identifier; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.inventory.Item; @@ -43,8 +46,13 @@ public Item createItem(String data) { try { return (Item) new ItemStackArgumentType(new CommandRegistryAccess() { @Override - public RegistryWrapper createWrapper(RegistryKey> registryRef) { - return CommonPlatform.get().getServer().getRegistryManager().getWrapperOrThrow(registryRef); + public Stream>> streamAllRegistryKeys() { + return CommonPlatform.get().getServer().getRegistryManager().streamAllRegistryKeys(); + } + + @Override + public Optional> getOptionalWrapper(RegistryKey> registryRef) { + return Optional.of(CommonPlatform.get().getServer().getRegistryManager().getWrapperOrThrow(registryRef)); } }).parse(new StringReader(data)).getItem(); } catch(CommandSyntaxException e) { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java index 2ec582417f..ccc8b738a5 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java @@ -50,7 +50,7 @@ private MobSpawnerBlockEntityMixin(BlockEntityType type, BlockPos pos, BlockS public abstract MobSpawnerLogic getLogic(); @Shadow - public abstract void setEntityType(net.minecraft.entity.EntityType entityType, Random random); + public abstract void method_46408(net.minecraft.entity.EntityType entityType, Random random); public EntityType terra$getSpawnedType() { return (EntityType) Registries.ENTITY_TYPE.get( @@ -64,7 +64,7 @@ private MobSpawnerBlockEntityMixin(BlockEntityType type, BlockPos pos, BlockS } else { rand = Random.create(); } - setEntityType((net.minecraft.entity.EntityType) creatureType, rand); + method_46408((net.minecraft.entity.EntityType) creatureType, rand); } public int terra$getDelay() { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java index 78593ecb1a..e8832c2149 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java @@ -30,7 +30,7 @@ @Implements(@Interface(iface = com.dfsek.terra.api.inventory.Item.class, prefix = "terra$")) public abstract class ItemMixin { @Shadow - public abstract int getMaxDamage(); + public abstract net.minecraft.item.ItemStack getDefaultStack(); @SuppressWarnings("ConstantConditions") public ItemStack terra$newItemStack(int amount) { @@ -38,6 +38,7 @@ public abstract class ItemMixin { } public double terra$getMaxDurability() { - return getMaxDamage(); + //TODO verify this is correct + return getDefaultStack().getMaxDamage(); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java index 089a6db1dc..1558368375 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java @@ -17,9 +17,15 @@ package com.dfsek.terra.mod.mixin.implementations.terra.inventory.item; +import net.minecraft.component.Component; +import net.minecraft.component.ComponentChanges; +import net.minecraft.component.ComponentMap; +import net.minecraft.component.ComponentMapImpl; +import net.minecraft.component.DataComponentType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Intrinsic; @@ -46,7 +52,11 @@ public abstract class ItemStackMixin { public abstract boolean isDamageable(); @Shadow - public abstract void setNbt(@Nullable NbtCompound tag); + public abstract ComponentMap getComponents(); + + @Shadow + @Final + private ComponentMapImpl components; public int terra$getAmount() { return getCount(); @@ -66,7 +76,13 @@ public abstract class ItemStackMixin { @SuppressWarnings("ConstantConditions") public void terra$setItemMeta(ItemMeta meta) { - setNbt(((ItemStack) (Object) meta).getNbt()); + ComponentChanges.Builder builder = ComponentChanges.builder(); + this.getComponents().getTypes().forEach(builder::remove); + + ComponentMap components = ((ItemStack) (Object) meta).getComponents(); + components.forEach(builder::add); + + this.components.applyChanges(builder.build()); } @Intrinsic diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java index a6307b02ca..5617f494c0 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java @@ -17,6 +17,7 @@ package com.dfsek.terra.mod.mixin.implementations.terra.inventory.meta; +import net.minecraft.component.type.ItemEnchantmentsComponent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtList; @@ -42,7 +43,7 @@ public abstract class ItemStackMetaMixin { public abstract boolean hasEnchantments(); @Shadow - public abstract NbtList getEnchantments(); + public abstract ItemEnchantmentsComponent getEnchantments(); @Shadow public abstract void addEnchantment(net.minecraft.enchantment.Enchantment enchantment, int level); @@ -56,9 +57,10 @@ public abstract class ItemStackMetaMixin { if(!hasEnchantments()) return Collections.emptyMap(); Map map = new HashMap<>(); - getEnchantments().forEach(enchantment -> { - NbtCompound eTag = (NbtCompound) enchantment; - map.put((Enchantment) Registries.ENCHANTMENT.get(eTag.getInt("id")), eTag.getInt("lvl")); + ItemEnchantmentsComponent enchantments = getEnchantments(); + enchantments.getEnchantments().forEach(enchantment -> { + net.minecraft.enchantment.Enchantment enchantmentValue = enchantment.value(); + map.put((Enchantment) enchantmentValue, enchantments.getLevel(enchantmentValue)); }); return map; } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java index 82080579ba..1a0e9e0df0 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java @@ -17,6 +17,8 @@ package com.dfsek.terra.mod.mixin.implementations.terra.world; +import com.dfsek.terra.mod.mixin.invoke.FluidBlockInvoker; + import net.minecraft.block.FluidBlock; import net.minecraft.fluid.Fluid; import net.minecraft.util.math.BlockPos; @@ -88,7 +90,7 @@ public void injectConstructor(net.minecraft.server.world.ServerWorld world, List ((ChunkRegion) (Object) this).setBlockState(pos, (net.minecraft.block.BlockState) data, physics ? 3 : 1042); if(physics && ((net.minecraft.block.BlockState) data).getBlock() instanceof FluidBlock) { fluidTickScheduler.scheduleTick( - OrderedTick.create(((FluidBlock) ((net.minecraft.block.BlockState) data).getBlock()).getFluidState( + OrderedTick.create((((FluidBlockInvoker) ((net.minecraft.block.BlockState) data).getBlock())).invokeGetFluidState( (net.minecraft.block.BlockState) data).getFluid(), pos)); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/FluidBlockInvoker.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/FluidBlockInvoker.java new file mode 100644 index 0000000000..a6b50409c3 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/FluidBlockInvoker.java @@ -0,0 +1,14 @@ +package com.dfsek.terra.mod.mixin.invoke; + +import net.minecraft.block.BlockState; +import net.minecraft.block.FluidBlock; +import net.minecraft.fluid.FluidState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + + +@Mixin(FluidBlock.class) +public interface FluidBlockInvoker { + @Invoker("getFluidState") + public FluidState invokeGetFluidState(BlockState state); +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java index 48ea985192..305f7f024c 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java @@ -3,9 +3,12 @@ import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.ReloadableRegistries; import net.minecraft.server.DataPackContents; import net.minecraft.world.biome.Biome; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -16,11 +19,15 @@ @Mixin(DataPackContents.class) public class DataPackContentsMixin { + @Shadow + @Final + private ReloadableRegistries.Lookup reloadableRegistries; /* * #refresh populates all tags in the registries */ - @Inject(method = "refresh(Lnet/minecraft/registry/DynamicRegistryManager;)V", at = @At("RETURN")) - private void injectReload(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) { + @Inject(method = "refresh()V", at = @At("RETURN")) + private void injectReload(CallbackInfo ci) { + DynamicRegistryManager.Immutable dynamicRegistryManager = this.reloadableRegistries.getRegistryManager(); TagUtil.registerWorldPresetTags(dynamicRegistryManager.get(RegistryKeys.WORLD_PRESET)); Registry biomeRegistry = dynamicRegistryManager.get(RegistryKeys.BIOME); diff --git a/platforms/mixin-common/src/main/resources/terra.accesswidener b/platforms/mixin-common/src/main/resources/terra.accesswidener index 50cba4f7d0..46f1b986e5 100644 --- a/platforms/mixin-common/src/main/resources/terra.accesswidener +++ b/platforms/mixin-common/src/main/resources/terra.accesswidener @@ -1,4 +1,4 @@ accessWidener v1 named accessible class net/minecraft/world/biome/Biome$Weather accessible class net/minecraft/world/gen/WorldPresets$Registrar -accessible method net/minecraft/block/FluidBlock getFluidState (Lnet/minecraft/block/BlockState;)Lnet/minecraft/fluid/FluidState +accessible class net/minecraft/registry/RegistryLoader$Loader \ No newline at end of file diff --git a/platforms/mixin-common/src/main/resources/terra.common.mixins.json b/platforms/mixin-common/src/main/resources/terra.common.mixins.json index d4402241c5..f8d0718e48 100644 --- a/platforms/mixin-common/src/main/resources/terra.common.mixins.json +++ b/platforms/mixin-common/src/main/resources/terra.common.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.mod.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ "access.BiomeAccessor", "access.MobSpawnerLogicAccessor", diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index 824d3cb46c..b7d209b7ff 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -30,10 +30,6 @@ loom { } tasks { - compileJava { - options.release.set(17) - } - remapJar { inputFile.set(shadowJar.get().archiveFile) } diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java index 7815367735..65d86febf1 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java @@ -1,6 +1,8 @@ package com.dfsek.terra.lifecycle; import net.minecraft.server.command.ServerCommandSource; +import org.incendo.cloud.SenderMapper; +import org.incendo.cloud.execution.ExecutionCoordinator; import org.incendo.cloud.fabric.FabricServerCommandManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,9 +18,10 @@ public static void initialize(String modName, LifecyclePlatform platform) { logger.info("Initializing Terra {} mod...", modName); FabricServerCommandManager manager = new FabricServerCommandManager<>( - CommandExecutionCoordinator.simpleCoordinator(), + ExecutionCoordinator.simpleCoordinator(), + SenderMapper.create( serverCommandSource -> (CommandSender) serverCommandSource, - commandSender -> (ServerCommandSource) commandSender + commandSender -> (ServerCommandSource) commandSender) ); diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java index be845eb191..41a57b4483 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java @@ -69,7 +69,7 @@ public boolean reload() { if(server != null) { BiomeUtil.registerBiomes(server.getRegistryManager().get(RegistryKeys.BIOME)); - server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> { + server.reloadResources(server.getDataPackManager().getEnabledIds()).exceptionally(throwable -> { LOGGER.warn("Failed to execute reload", throwable); return null; }).join(); diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java index 052598ac25..b54ee9a022 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java @@ -1,11 +1,14 @@ package com.dfsek.terra.lifecycle.mixin.lifecycle; import com.mojang.datafixers.util.Pair; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.DynamicRegistryManager.Immutable; import net.minecraft.registry.MutableRegistry; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryLoader; +import net.minecraft.registry.RegistryLoader.Loader; import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.gen.WorldPreset; @@ -14,7 +17,9 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import java.util.List; @@ -25,48 +30,61 @@ import com.dfsek.terra.lifecycle.util.LifecycleUtil; import com.dfsek.terra.lifecycle.util.RegistryHack; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + @Mixin(RegistryLoader.class) public class RegistryLoaderMixin { + private static boolean initialized = false; @Shadow @Final private static Logger LOGGER; - +// @Inject( +// method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Lnet/minecraft/registry/DynamicRegistryManager;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", +// at = @At( +// value = "INVOKE", +// target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", +// ordinal = 1 // we want right after the first forEach +// ) +// ) +// private static void grabRegiestry(RegistryLoader.RegistryLoadable loadable, DynamicRegistryManager baseRegistryManager, +// List> entries, CallbackInfoReturnable cir) { +// entries.forEach((loader) -> { +// Registry registry = loader.registry(); +// } @Redirect( - method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/registry/DynamicRegistryManager;Ljava/util/List;)" + - "Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", + method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Lnet/minecraft/registry/DynamicRegistryManager;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", at = @At( value = "INVOKE", target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", ordinal = 1 // we want right after the first forEach ) ) - private static void grabManager(List, Object>> instance, Consumer, Object>> consumer) { - instance.forEach(mutableRegistryObjectPair -> LOGGER.debug("{}: {} entries", - mutableRegistryObjectPair.getFirst().toString(), - mutableRegistryObjectPair.getFirst().size()) - ); - extractRegistry(instance, RegistryKeys.BIOME).ifPresent( - biomes -> { // this redirect triggers twice, second time only with dimension registry. don't try extraction second time - MutableRegistry dimensionTypes = extractRegistry(instance, RegistryKeys.DIMENSION_TYPE).orElseThrow(); - MutableRegistry worldPresets = extractRegistry(instance, RegistryKeys.WORLD_PRESET).orElseThrow(); - MutableRegistry chunkGeneratorSettings = extractRegistry(instance, - RegistryKeys.CHUNK_GENERATOR_SETTINGS).orElseThrow(); - MutableRegistry multiNoiseBiomeSourceParameterLists = extractRegistry(instance, - RegistryKeys.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST).orElseThrow(); + private static void grabManager(List> instance, Consumer> consumer) { + if (!initialized) { + extractRegistry(instance, RegistryKeys.BIOME).ifPresent( + biomes -> { // this redirect triggers twice, second time only with dimension registry. don't try extraction second time + MutableRegistry dimensionTypes = extractRegistry(instance, RegistryKeys.DIMENSION_TYPE).orElseThrow(); + MutableRegistry worldPresets = extractRegistry(instance, RegistryKeys.WORLD_PRESET).orElseThrow(); + MutableRegistry chunkGeneratorSettings = extractRegistry(instance, + RegistryKeys.CHUNK_GENERATOR_SETTINGS).orElseThrow(); + MutableRegistry multiNoiseBiomeSourceParameterLists = extractRegistry(instance, + RegistryKeys.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST).orElseThrow(); - LifecyclePlatform.setRegistries(biomes, dimensionTypes, chunkGeneratorSettings, multiNoiseBiomeSourceParameterLists); - LifecycleUtil.initialize(biomes, worldPresets); - }); + LifecyclePlatform.setRegistries(biomes, dimensionTypes, chunkGeneratorSettings, multiNoiseBiomeSourceParameterLists); + LifecycleUtil.initialize(biomes, worldPresets); + }); + initialized = true; + } instance.forEach(consumer); } + @Unique @SuppressWarnings("unchecked") - private static Optional> extractRegistry(List, Object>> instance, + private static Optional> extractRegistry(List> instance, RegistryKey> key) { List> matches = instance - .stream() - .map(Pair::getFirst) + .stream().map(RegistryLoader.Loader::registry) .filter(r -> r.getKey().equals(key)) .toList(); if(matches.size() > 1) { @@ -74,7 +92,7 @@ private static Optional> extractRegistry(List registry = (MutableRegistry) matches.get(0); + MutableRegistry registry = (MutableRegistry) matches.getFirst(); ((RegistryHack) registry).terra_bind(); return Optional.of(registry); } diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java index 6f373130fe..0bf675fc25 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java @@ -13,18 +13,14 @@ @Mixin(SaveLoading.class) public class SaveLoadingMixin { @ModifyArg( - method = "method_42097(Lnet/minecraft/registry/DynamicRegistryManager$Immutable;" + - "Lnet/minecraft/server/SaveLoading$SaveApplierFactory;Lnet/minecraft/resource/LifecycledResourceManager;" + - "Lnet/minecraft/registry/CombinedDynamicRegistries;Lnet/minecraft/server/SaveLoading$LoadContext;" + - "Lnet/minecraft/server/DataPackContents;)Ljava/lang/Object;", + method = "load(Lnet/minecraft/server/SaveLoading$ServerConfig;Lnet/minecraft/server/SaveLoading$LoadContextSupplier;Lnet/minecraft/server/SaveLoading$SaveApplierFactory;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", at = @At( value = "INVOKE", - target = "Lnet/minecraft/server/DataPackContents;refresh(Lnet/minecraft/registry/DynamicRegistryManager;)V" - ), - index = 0 + target = "Lnet/minecraft/registry/RegistryLoader;loadFromResource(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/registry/DynamicRegistryManager;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;" ), + index = 1 ) - private static DynamicRegistryManager grabManager(DynamicRegistryManager in) { - MinecraftUtil.registerFlora(in.get(RegistryKeys.BIOME)); - return in; + private static DynamicRegistryManager grabManager(DynamicRegistryManager registryManager) { + MinecraftUtil.registerFlora(registryManager.get(RegistryKeys.BIOME)); + return registryManager; } } diff --git a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json index 33695db0eb..2e4708bd49 100644 --- a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json +++ b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.lifecycle.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ "NoiseConfigMixin", "RegistryEntryReferenceInvoker", diff --git a/platforms/quilt/src/main/resources/terra.quilt.mixins.json b/platforms/quilt/src/main/resources/terra.quilt.mixins.json index 91f51b3445..84ca8264ae 100644 --- a/platforms/quilt/src/main/resources/terra.quilt.mixins.json +++ b/platforms/quilt/src/main/resources/terra.quilt.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.quilt.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [