Started work on adding immersive portal support

This commit is contained in:
coolGi
2023-05-02 23:21:09 +09:30
parent f6887ee7d5
commit 5739eb9a85
7 changed files with 87 additions and 23 deletions
+16 -13
View File
@@ -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)
}
*/
}
@@ -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
@@ -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());
}
@@ -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<Runnable> 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
);
}
}
@@ -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;
}
@@ -19,7 +19,8 @@
"client.MixinOptionsScreen",
"client.MixinMinecraft",
"client.MixinTextureUtil",
"mods.sodium.MixinSodiumChunkRenderer"
"mods.sodium.MixinSodiumChunkRenderer",
"mods.imm_ptl_core.MixinImmersivePortalsGameRenderer"
],
"injectors": {
"defaultRequire": 1
+4 -3
View File
@@ -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