From b0cfd425ccb47e8eced7d78b37b462dcde71652b Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Sat, 25 Apr 2026 17:42:10 +0200 Subject: [PATCH] Skybox V iris doesn't explode, at least --- common/build.gradle.kts | 1 + .../crystalline_sky/compat/Mods.java | 1 + .../compat/iris/SodiumProgramsMixin.java | 26 +++++++++++++++++++ .../compat/iris/WorldRenderingPhaseMixin.java | 21 +++++++++++++++ .../crystalline_sky-common.mixins.json | 2 ++ fabric/build.gradle.kts | 8 ++++++ gradle.properties | 1 + libs.versions.toml | 5 ++++ neoforge/build.gradle.kts | 8 ++++++ 9 files changed, 73 insertions(+) create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/SodiumProgramsMixin.java create mode 100644 common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/WorldRenderingPhaseMixin.java diff --git a/common/build.gradle.kts b/common/build.gradle.kts index c97718e..02b9505 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -18,6 +18,7 @@ dependencies { compileOnly(libs.jsr305) modCompileOnly(libs.sodium.fabric) + modCompileOnly(libs.iris.fabric) compileOnly(annotationProcessor(libs.mixinextras.common.get())!!)!! } diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/compat/Mods.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/compat/Mods.java index 3243aa1..3919103 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/compat/Mods.java +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/compat/Mods.java @@ -7,6 +7,7 @@ import java.util.function.Supplier; public enum Mods { SODIUM("sodium"), + IRIS("iris"), AXIOM("axiom"); public final String id; diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/SodiumProgramsMixin.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/SodiumProgramsMixin.java new file mode 100644 index 0000000..2f09c50 --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/SodiumProgramsMixin.java @@ -0,0 +1,26 @@ +package io.github.slimeistdev.crystalline_sky.mixin.client.compat.iris; + +import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin; +import io.github.slimeistdev.crystalline_sky.compat.Mods; +import io.github.slimeistdev.crystalline_sky.mixin.client.compat.sodium.TerrainRenderPassAccessor; +import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; +import net.irisshaders.iris.pipeline.programs.SodiumPrograms; +import net.irisshaders.iris.shadows.ShadowRenderingState; +import net.minecraft.client.renderer.RenderType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@ConditionalMixin(mods = Mods.IRIS) +@Mixin(SodiumPrograms.class) +public class SodiumProgramsMixin { + @Inject(method = "mapTerrainRenderPass", at = @At(value = "NEW", target = "(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;"), cancellable = true) + private static void customRenderTypes(TerrainRenderPass pass, CallbackInfoReturnable cir) { + RenderType renderType = ((TerrainRenderPassAccessor) pass).crystalline_sky$getRenderLayer(); + if (renderType == CrystallineRenderTypes.SKY || renderType == CrystallineRenderTypes.SKYBOX) { + cir.setReturnValue(ShadowRenderingState.areShadowsCurrentlyBeingRendered() ? SodiumPrograms.Pass.SHADOW : SodiumPrograms.Pass.TERRAIN); + } + } +} diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/WorldRenderingPhaseMixin.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/WorldRenderingPhaseMixin.java new file mode 100644 index 0000000..0498f5f --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/compat/iris/WorldRenderingPhaseMixin.java @@ -0,0 +1,21 @@ +package io.github.slimeistdev.crystalline_sky.mixin.client.compat.iris; + +import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin; +import io.github.slimeistdev.crystalline_sky.compat.Mods; +import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes; +import net.irisshaders.iris.pipeline.WorldRenderingPhase; +import net.minecraft.client.renderer.RenderType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@ConditionalMixin(mods = Mods.IRIS) +@Mixin(WorldRenderingPhase.class) +public class WorldRenderingPhaseMixin { + @Inject(method = "fromTerrainRenderType", at = @At(value = "NEW", target = "(Ljava/lang/String;)Ljava/lang/IllegalStateException;"), cancellable = true) + private static void customRenderTypes(RenderType renderType, CallbackInfoReturnable cir) { + if (renderType == CrystallineRenderTypes.SKY || renderType == CrystallineRenderTypes.SKYBOX) + cir.setReturnValue(WorldRenderingPhase.TERRAIN_SOLID); + } +} diff --git a/common/src/main/resources/crystalline_sky-common.mixins.json b/common/src/main/resources/crystalline_sky-common.mixins.json index 5b409d4..9c04a2d 100644 --- a/common/src/main/resources/crystalline_sky-common.mixins.json +++ b/common/src/main/resources/crystalline_sky-common.mixins.json @@ -26,6 +26,8 @@ "client.ModelBlockRendererMixin", "client.RenderTargetMixin", "client.SimpleBakedModelMixin", + "client.compat.iris.SodiumProgramsMixin", + "client.compat.iris.WorldRenderingPhaseMixin", "client.compat.sodium.CompactChunkVertexMixin", "client.compat.sodium.DefaultMaterialsMixin", "client.compat.sodium.DefaultTerrainRenderPassesMixin", diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 83c750a..08bde9d 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -32,6 +32,14 @@ dependencies { modLocalRuntime(libs.sodium.fabric) } + modCompileOnly(libs.iris.fabric) + if (!inCI && "enable_iris"().toBoolean()) { + modLocalRuntime(libs.iris.fabric) + modLocalRuntime("org.antlr:antlr4-runtime:4.13.1") + modLocalRuntime("io.github.douira:glsl-transformer:2.0.1") + modLocalRuntime("org.anarres:jcpp:1.4.14") + } + modCompileOnly(libs.axiom) if (!inCI && "enable_axiom"().toBoolean()) { modLocalRuntime(libs.axiom) diff --git a/gradle.properties b/gradle.properties index 4f61ea4..d0f639a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,4 +27,5 @@ compatibleVersions=1.21.1 # mod compat enable_sodium=true +enable_iris=true enable_axiom=false diff --git a/libs.versions.toml b/libs.versions.toml index d3c3317..1e31b70 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -14,6 +14,8 @@ mixinextras = "0.5.0" mm = "11.0.4" sodium-fabric = "mc1.21.1-0.6.13-fabric" sodium-neoforge = "mc1.21.1-0.6.13-neoforge" +iris-fabric = "1.8.8+1.21.1-fabric" +iris-neoforge = "1.8.8+1.21.1-neoforge" axiom = "jTdCyf2H" # these have to be manually extracted from the jar and put in the flatDir libs folder (only if the enable_axiom property is true) axiom-axiomclientapi = "1.0.0" @@ -46,6 +48,9 @@ mm = { group = "com.terraformersmc", name = "modmenu", version.ref = "mm" } sodium-fabric = { group = "maven.modrinth", name = "sodium", version.ref = "sodium-fabric" } sodium-neoforge = { group = "maven.modrinth", name = "sodium", version.ref = "sodium-neoforge" } +iris-fabric = { group = "maven.modrinth", name = "iris", version.ref = "iris-fabric" } +iris-neoforge = { group = "maven.modrinth", name = "iris", version.ref = "iris-neoforge" } + axiom = { group = "maven.modrinth", name = "axiom", version.ref = "axiom" } axiom-axiomclientapi = { group = "local", name = "axiomclientapi", version.ref = "axiom-axiomclientapi" } axiom-lattice = { group = "local", name = "lattice", version.ref = "axiom-lattice" } diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index e051b67..a636d7d 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -26,6 +26,14 @@ dependencies { modLocalRuntime(libs.sodium.neoforge) }*/ + modCompileOnly(libs.iris.neoforge) + if (!inCI && "enable_iris"().toBoolean()) { // this doesn't work, because of jar-in-jar + modLocalRuntime(libs.iris.neoforge) + modLocalRuntime("org.antlr:antlr4-runtime:4.13.1") + modLocalRuntime("io.github.douira:glsl-transformer:2.0.1") + modLocalRuntime("org.anarres:jcpp:1.4.14") + } + compileOnly(annotationProcessor(libs.mixinextras.common.get())!!)!! implementation(include(libs.mixinextras.neoforge.get())!!)!! }