From 6f68bfa59549005b630dfc967e344330e9238eaf Mon Sep 17 00:00:00 2001 From: fayer3 Date: Sat, 5 Aug 2023 20:54:29 +0200 Subject: [PATCH] fix crash with iris 1.6.5 --- common/build.gradle | 3 +- .../mixin/IrisPipelineManagerVRMixin.java | 48 +++++++++++++++---- fabric/build.gradle | 8 ++-- gradle.properties | 2 +- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index d3280a147..1ef8502eb 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -14,12 +14,13 @@ dependencies { modApi("dev.architectury:architectury-fabric:${rootProject.architectury_version}") // for sodium compat + modCompileOnly "maven.modrinth:sodium:mc1.20.1-0.5.0" modCompileOnly "maven.modrinth:sodium:mc1.20-0.4.10" modCompileOnly "883067831485366304:1080535317733462076:sodium-fabric-mc1.19.4-pre2-0.4.11rev.9a2a2ea-dirty:jar" modCompileOnly("maven.modrinth:rubidium:0.6.4") // for iris compat - modCompileOnly "maven.modrinth:iris:1.6.4+1.20" + modCompileOnly "maven.modrinth:iris:1.6.5+1.20.1" // for REI compat modCompileOnly "me.shedaniel:RoughlyEnoughItems-fabric:12.0.634" diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java index 3fb1537c0..873fd10ff 100644 --- a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/mixin/IrisPipelineManagerVRMixin.java @@ -1,11 +1,15 @@ package org.vivecraft.mod_compat_vr.iris.mixin; import net.coderbot.iris.Iris; +import net.coderbot.iris.pipeline.PipelineManager; import net.coderbot.iris.pipeline.WorldRenderingPipeline; import net.coderbot.iris.shaderpack.DimensionId; +import net.coderbot.iris.shaderpack.materialmap.NamespacedId; import net.coderbot.iris.shadows.ShadowRenderTargets; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Desc; +import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -31,7 +35,7 @@ private void resetTextureState(){} private WorldRenderingPipeline pipeline; @Shadow(remap = false) @Final - private Function pipelineFactory; + private Function pipelineFactory; private ShadowRenderTargets shadowRenderTargets; public ShadowRenderTargets getShadowRenderTargets() { @@ -42,13 +46,13 @@ public void setShadowRenderTargets(ShadowRenderTargets targets) { shadowRenderTargets = targets; } - private final Map> vrPipelinesPerDimension = new HashMap<>(); + private final Map> vrPipelinesPerDimension = new HashMap<>(); private WorldRenderingPipeline vanillaPipeline; private Map vrPipelinesCurrentDimension; private WorldRenderPass currentWorldRenderPass = null; @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/function/Function;apply(Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.BEFORE), remap = false) - private void generateVanillaPipeline(DimensionId newDimension, CallbackInfoReturnable cir) { + private void generateVanillaPipeline(CallbackInfoReturnable cir) { // this also runs on game startup, when the renderpassManager isn't initialized yet if (VRState.vrInitialized && RenderPassManager.INSTANCE != null) { currentWorldRenderPass = RenderPassManager.wrp; @@ -57,8 +61,21 @@ private void generateVanillaPipeline(DimensionId newDimension, CallbackInfoRetur ClientDataHolderVR.getInstance().currentPass = currentRenderPass; } } - @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false) - private void generateVRPipelines(DimensionId newDimension, CallbackInfoReturnable cir) { + + @Group(name = "generateVRPipelines", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = DimensionId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false, expect = 0) + private void generateVRPipelines164(DimensionId newDimension, CallbackInfoReturnable cir) { + generateVRPipelines(newDimension); + } + + @Group(name = "generateVRPipelines", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = NamespacedId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false, expect = 0) + private void generateVRPipelines165(NamespacedId newDimension, CallbackInfoReturnable cir) { + generateVRPipelines(newDimension); + } + + @Unique + private void generateVRPipelines(Object newDimension) { if (VRState.vrInitialized) { vanillaPipeline = pipeline; if (!this.vrPipelinesPerDimension.containsKey(newDimension)) { @@ -113,14 +130,29 @@ private void generateVRPipelines(DimensionId newDimension, CallbackInfoReturnabl } } - @Inject(method = "preparePipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true) - private void returnCurrentVRPipeline(DimensionId newDimension, CallbackInfoReturnable cir) { + @Group(name = "returnCurrentVRPipeline", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = DimensionId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true, expect = 0) + private void returnCurrentVRPipeline164(DimensionId newDimension, CallbackInfoReturnable cir) { + if (!RenderPassType.isVanilla()) { + pipeline = getCurrentVRPipeline(newDimension); + cir.setReturnValue(pipeline); + } + } + + @Group(name = "returnCurrentVRPipeline", min = 1, max = 1) + @Inject(target = @Desc(value = "preparePipeline", owner = PipelineManager.class, ret = WorldRenderingPipeline.class, args = NamespacedId.class), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;"), remap = false, cancellable = true, expect = 0) + private void returnCurrentVRPipeline165(NamespacedId newDimension, CallbackInfoReturnable cir) { if (!RenderPassType.isVanilla()) { - pipeline = vrPipelinesPerDimension.get(newDimension).get(ClientDataHolderVR.getInstance().currentPass); + pipeline = getCurrentVRPipeline(newDimension); cir.setReturnValue(pipeline); } } + @Unique + private WorldRenderingPipeline getCurrentVRPipeline(Object key) { + return vrPipelinesPerDimension.get(key).get(ClientDataHolderVR.getInstance().currentPass); + } + @Inject(method = "destroyPipeline", at = @At(value = "INVOKE", target = "Ljava/util/Map;clear()V"), remap = false) private void destroyVRPipelines(CallbackInfo ci) { if (VRState.vrInitialized) { diff --git a/fabric/build.gradle b/fabric/build.gradle index 8930318ae..5701160b9 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -29,10 +29,10 @@ dependencies { modApi("dev.architectury:architectury-fabric:${rootProject.architectury_version}") // for sodium compat - modRuntimeOnly "maven.modrinth:sodium:mc1.20-0.4.10" + modRuntimeOnly "maven.modrinth:sodium:mc1.20.1-0.5.0" // for iris compat - modRuntimeOnly "maven.modrinth:iris:1.6.4+1.20" + modRuntimeOnly "maven.modrinth:iris:1.6.5+1.20.1" modRuntimeOnly 'org.anarres:jcpp:1.4.14' //temp iris modRuntimeOnly 'io.github.douira:glsl-transformer:2.0.0-pre13' //temp iris @@ -44,8 +44,8 @@ dependencies { // other mods // modRuntimeOnly("com.simibubi.create:create-fabric-1.19.2:0.5.0.i-969+1.19.2") - modRuntimeOnly "maven.modrinth:lithium:mc1.20.1-0.11.2" - modRuntimeOnly "maven.modrinth:indium:1.0.21+mc1.20.1" + modCompileOnly "maven.modrinth:lithium:mc1.20.1-0.11.2" + modCompileOnly "maven.modrinth:indium:1.0.21+mc1.20.1" /* // for immersive portals compat diff --git a/gradle.properties b/gradle.properties index 6a591efd1..eb54a91d7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=vivecraft -mod_version=1.0.0 +mod_version=1.0.1 maven_group=org.vivecraft architectury_version=9.0.5