From 5739eb9a85c397bd975ac872dea252911c3fb2af Mon Sep 17 00:00:00 2001 From: coolGi Date: Tue, 2 May 2023 23:21:09 +0930 Subject: [PATCH] Started work on adding immersive portal support --- fabric/build.gradle | 29 +++++++------- .../seibel/lod/fabric/FabricClientProxy.java | 12 +++++- .../com/seibel/lod/fabric/FabricMain.java | 8 ++-- .../MixinImmersivePortalsGameRenderer.java | 39 +++++++++++++++++++ .../modAccessor/ImmersivePortalsAccessor.java | 12 ++++++ .../DistantHorizons.fabric.mixins.json | 3 +- versionProperties/1.18.2.properties | 7 ++-- 7 files changed, 87 insertions(+), 23 deletions(-) create mode 100644 fabric/src/main/java/com/seibel/lod/fabric/mixins/mods/imm_ptl_core/MixinImmersivePortalsGameRenderer.java create mode 100644 fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/ImmersivePortalsAccessor.java diff --git a/fabric/build.gradle b/fabric/build.gradle index bfbd6f04b..b445f5f4f 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -93,20 +93,23 @@ dependencies { addMod("io.vram:canvas-fabric-${project.canvas_version}", rootProject.enable_canvas) // Immersive Portals - /* - modImplementation("com.github.qouteall.ImmersivePortalsMod:build:${rootProject.immersive_portals_version}") { - exclude(group: "net.fabricmc.fabric-api") - transitive(false) + if (rootProject.enable_immersive_portals == "2") { + modImplementation ("com.github.iPortalTeam.ImmersivePortalsMod:imm_ptl_core:${project.immersive_portals_version}"){ + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + modImplementation ("com.github.iPortalTeam.ImmersivePortalsMod:q_misc_util:${project.immersive_portals_version}"){ + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + modImplementation ("com.github.iPortalTeam.ImmersivePortalsMod:build:${project.immersive_portals_version}"){ + exclude(group: "net.fabricmc.fabric-api") + transitive(false) + } + modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}") + api("com.github.LlamaLad7:MixinExtras:0.2.0-beta.4") + annotationProcessor("com.github.LlamaLad7:MixinExtras:0.2.0-beta.4") } - modImplementation("com.github.qouteall.ImmersivePortalsMod:imm_ptl_core:${rootProject.immersive_portals_version}") { - exclude(group: "net.fabricmc.fabric-api") - transitive(false) - } - modImplementation("com.github.qouteall.ImmersivePortalsMod:q_misc_util:${rootProject.immersive_portals_version}") { - exclude(group: "net.fabricmc.fabric-api") - transitive(false) - } - */ } diff --git a/fabric/src/main/java/com/seibel/lod/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/lod/fabric/FabricClientProxy.java index 088269be5..847e8f1bb 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/FabricClientProxy.java @@ -29,7 +29,9 @@ import com.seibel.lod.core.dependencyInjection.ModAccessorInjector; import com.seibel.lod.core.dependencyInjection.SingletonInjector; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IImmersivePortalsAccessor; import com.seibel.lod.core.wrapperInterfaces.modAccessor.ISodiumAccessor; +import com.seibel.lod.fabric.wrappers.modAccessor.ImmersivePortalsAccessor; import com.seibel.lod.fabric.wrappers.modAccessor.SodiumAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -170,9 +172,10 @@ public class FabricClientProxy // RendererStartupEvent - Done in MixinGameRenderer // RendererShutdownEvent - Done in MixinGameRenderer - + SodiumAccessor sodiumAccessor = (SodiumAccessor) ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class); - + ImmersivePortalsAccessor immersiveAccessor = (ImmersivePortalsAccessor) ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class); + // ClientRenderLevelTerrainEvent WorldRenderEvents.AFTER_SETUP.register((renderContext) -> { @@ -190,6 +193,11 @@ public class FabricClientProxy McObjectConverter.Convert(renderContext.projectionMatrix()), renderContext.tickDelta()); } + + if (immersiveAccessor != null) + { + immersiveAccessor.partialTicks = renderContext.tickDelta(); + } }); // Debug keyboard event diff --git a/fabric/src/main/java/com/seibel/lod/fabric/FabricMain.java b/fabric/src/main/java/com/seibel/lod/fabric/FabricMain.java index ae82c0eea..c3460a2d7 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/FabricMain.java @@ -29,10 +29,7 @@ import com.seibel.lod.core.dependencyInjection.ModAccessorInjector; import com.seibel.lod.core.dependencyInjection.SingletonInjector; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.wrapperInterfaces.modAccessor.*; -import com.seibel.lod.fabric.wrappers.modAccessor.BCLibAccessor; -import com.seibel.lod.fabric.wrappers.modAccessor.OptifineAccessor; -import com.seibel.lod.fabric.wrappers.modAccessor.SodiumAccessor; -import com.seibel.lod.fabric.wrappers.modAccessor.StarlightAccessor; +import com.seibel.lod.fabric.wrappers.modAccessor.*; import com.seibel.lod.fabric.wrappers.FabricDependencySetup; import org.apache.logging.log4j.Logger; @@ -74,6 +71,9 @@ public class FabricMain if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium")) { ModAccessorInjector.INSTANCE.bind(ISodiumAccessor.class, new SodiumAccessor()); } + if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("imm_ptl_core")) { + ModAccessorInjector.INSTANCE.bind(IImmersivePortalsAccessor.class, new ImmersivePortalsAccessor()); + } if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("starlight")) { ModAccessorInjector.INSTANCE.bind(IStarlightAccessor.class, new StarlightAccessor()); } diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/mods/imm_ptl_core/MixinImmersivePortalsGameRenderer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/mods/imm_ptl_core/MixinImmersivePortalsGameRenderer.java new file mode 100644 index 000000000..722f571ad --- /dev/null +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/mods/imm_ptl_core/MixinImmersivePortalsGameRenderer.java @@ -0,0 +1,39 @@ +package com.seibel.lod.fabric.mixins.mods.imm_ptl_core; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.seibel.lod.common.wrappers.McObjectConverter; +import com.seibel.lod.common.wrappers.world.ClientLevelWrapper; +import com.seibel.lod.core.api.internal.ClientApi; +import com.seibel.lod.core.dependencyInjection.ModAccessorInjector; +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IImmersivePortalsAccessor; +import com.seibel.lod.fabric.wrappers.modAccessor.ImmersivePortalsAccessor; +import org.spongepowered.asm.mixin.Mixin; +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.callback.CallbackInfo; +import qouteall.imm_ptl.core.render.MyGameRenderer; +import qouteall.imm_ptl.core.render.context_management.WorldRenderInfo; + +import java.util.function.Consumer; + +@Mixin(MyGameRenderer.class) +public class MixinImmersivePortalsGameRenderer { +// @Unique +// static ImmersivePortalsAccessor accessor = null; + @Inject(remap = false, method = "renderWorldNew", at = @At(value = "INVOKE", target = "Lqouteall/imm_ptl/core/render/MyGameRenderer;switchAndRenderTheWorld(Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Ljava/util/function/Consumer;IZ)V", shift = At.Shift.AFTER)) + private static void injectDHLoDRendering(WorldRenderInfo worldRenderInfo, Consumer invokeWrapper, CallbackInfo ci) { + // TODO: Move this out of the function to not run it every frame + ImmersivePortalsAccessor accessor = null; + + if (accessor == null) { + accessor = (ImmersivePortalsAccessor) ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class); + } + ClientApi.INSTANCE.renderLods( + ClientLevelWrapper.getWrapper(worldRenderInfo.world), + McObjectConverter.Convert(RenderSystem.getProjectionMatrix()), + McObjectConverter.Convert(RenderSystem.getProjectionMatrix()), + accessor.partialTicks + ); + } +} diff --git a/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/ImmersivePortalsAccessor.java b/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/ImmersivePortalsAccessor.java new file mode 100644 index 000000000..9653624ae --- /dev/null +++ b/fabric/src/main/java/com/seibel/lod/fabric/wrappers/modAccessor/ImmersivePortalsAccessor.java @@ -0,0 +1,12 @@ +package com.seibel.lod.fabric.wrappers.modAccessor; + +import com.seibel.lod.core.wrapperInterfaces.modAccessor.IImmersivePortalsAccessor; + +public class ImmersivePortalsAccessor implements IImmersivePortalsAccessor { + @Override + public String getModName() { + return "ImmersivePortals-Fabric"; + } + + public float partialTicks; +} diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index 4113ef197..326176c9c 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -19,7 +19,8 @@ "client.MixinOptionsScreen", "client.MixinMinecraft", "client.MixinTextureUtil", - "mods.sodium.MixinSodiumChunkRenderer" + "mods.sodium.MixinSodiumChunkRenderer", + "mods.imm_ptl_core.MixinImmersivePortalsGameRenderer" ], "injectors": { "defaultRequire": 1 diff --git a/versionProperties/1.18.2.properties b/versionProperties/1.18.2.properties index 011da8d7a..d746db0c7 100644 --- a/versionProperties/1.18.2.properties +++ b/versionProperties/1.18.2.properties @@ -7,8 +7,8 @@ accessWidenerVersion=1_18 builds_for=["fabric", "forge"] # Fabric loader -fabric_loader_version=0.14.14 -fabric_api_version=0.67.1+1.18.2 +fabric_loader_version=0.14.19 +fabric_api_version=0.76.0+1.18.2 # Fabric mod versions modmenu_version=3.2.5 #architectury_version=4.4.59 @@ -18,7 +18,7 @@ fabric_api_version=0.67.1+1.18.2 sodium_version=mc1.18.2-0.4.1 iris_version=1.18.x-v1.2.5 bclib_version=1.4.5 - immersive_portals_version = v1.4.9-1.18 + immersive_portals_version=v1.4.11-1.18 canvas_version=mc118:1.0.2397 # Fabric mod run @@ -31,6 +31,7 @@ fabric_api_version=0.67.1+1.18.2 enable_lithium=0 enable_iris=0 enable_bclib=1 + enable_immersive_portals=2 enable_canvas=0 quilt_loader_version=0.19.0-beta.13