Skip to content

Commit

Permalink
fix crash with iris 1.6.5
Browse files Browse the repository at this point in the history
  • Loading branch information
fayer3 committed Aug 5, 2023
1 parent 717bd73 commit 6f68bfa
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 14 deletions.
3 changes: 2 additions & 1 deletion common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -31,7 +35,7 @@ private void resetTextureState(){}
private WorldRenderingPipeline pipeline;
@Shadow(remap = false)
@Final
private Function<DimensionId, WorldRenderingPipeline> pipelineFactory;
private Function<Object, WorldRenderingPipeline> pipelineFactory;

private ShadowRenderTargets shadowRenderTargets;
public ShadowRenderTargets getShadowRenderTargets() {
Expand All @@ -42,13 +46,13 @@ public void setShadowRenderTargets(ShadowRenderTargets targets) {
shadowRenderTargets = targets;
}

private final Map<DimensionId, Map<RenderPass, WorldRenderingPipeline>> vrPipelinesPerDimension = new HashMap<>();
private final Map<Object, Map<RenderPass, WorldRenderingPipeline>> vrPipelinesPerDimension = new HashMap<>();
private WorldRenderingPipeline vanillaPipeline;
private Map<RenderPass, WorldRenderingPipeline> 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<WorldRenderingPipeline> cir) {
private void generateVanillaPipeline(CallbackInfoReturnable<WorldRenderingPipeline> cir) {
// this also runs on game startup, when the renderpassManager isn't initialized yet
if (VRState.vrInitialized && RenderPassManager.INSTANCE != null) {
currentWorldRenderPass = RenderPassManager.wrp;
Expand All @@ -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<WorldRenderingPipeline> 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<WorldRenderingPipeline> 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<WorldRenderingPipeline> cir) {
generateVRPipelines(newDimension);
}

@Unique
private void generateVRPipelines(Object newDimension) {
if (VRState.vrInitialized) {
vanillaPipeline = pipeline;
if (!this.vrPipelinesPerDimension.containsKey(newDimension)) {
Expand Down Expand Up @@ -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<WorldRenderingPipeline> 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<WorldRenderingPipeline> 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<WorldRenderingPipeline> 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) {
Expand Down
8 changes: 4 additions & 4 deletions fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 6f68bfa

Please sign in to comment.