From e1907245e27f3d3df62c8d207eeda4644859f104 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 23 Sep 2023 11:11:24 -0500 Subject: [PATCH] Replace sodium mixins with an Indium dependency --- build.gradle | 1 + coreSubProjects | 2 +- .../fabric/FabricClientProxy.java | 42 +++++++------------ .../distanthorizons/fabric/FabricMain.java | 21 +++++++--- .../mods/sodium/MixinSodiumRenderer.java | 4 ++ .../DistantHorizons.fabric.mixins.json | 3 +- fabric/src/main/resources/fabric.mod.json | 3 +- versionProperties/1.16.5.properties | 1 + versionProperties/1.17.1.properties | 1 + versionProperties/1.18.2.properties | 1 + versionProperties/1.19.2.properties | 1 + versionProperties/1.19.4.properties | 1 + versionProperties/1.20.1.properties | 1 + 13 files changed, 47 insertions(+), 35 deletions(-) diff --git a/build.gradle b/build.gradle index 1869af0a5..5d07bb5a6 100644 --- a/build.gradle +++ b/build.gradle @@ -398,6 +398,7 @@ subprojects { p -> git_main_branch : git_main_branch, fabric_incompatibility_list : fabric_incompatibility_list, + fabric_recommend_list : fabric_recommend_list, ] // The left side is what gets replaced in the mod info and the right side is where to get it from in the gradle.properties diff --git a/coreSubProjects b/coreSubProjects index 89e92504e..1aa45bd9d 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 89e92504e47f3e1a9639e13da6dda672e5b38a67 +Subproject commit 1aa45bd9d6f79563d7c1fd415a2e290722745983 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index f6ea94b38..ed8bf8af3 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -191,34 +191,24 @@ public class FabricClientProxy // Client Render Level WorldRenderEvents.AFTER_SETUP.register((renderContext) -> { - if (sodiumAccessor != null) + this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()), + McObjectConverter.Convert(renderContext.matrixStack().last().pose()), + McObjectConverter.Convert(renderContext.projectionMatrix()), + renderContext.tickDelta()); + + + // experimental proof-of-concept option + if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) { - sodiumAccessor.levelWrapper = ClientLevelWrapper.getWrapper(renderContext.world()); - sodiumAccessor.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose()); - sodiumAccessor.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix()); - sodiumAccessor.partialTicks = renderContext.tickDelta(); - } - else - { - this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()), - McObjectConverter.Convert(renderContext.matrixStack().last().pose()), - McObjectConverter.Convert(renderContext.projectionMatrix()), - renderContext.tickDelta()); + float[] matrixFloatArray = SeamlessOverdraw.overwriteMinecraftNearFarClipPlanes(renderContext.projectionMatrix(), renderContext.tickDelta()); - - // experimental proof-of-concept option - if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) - { - float[] matrixFloatArray = SeamlessOverdraw.overwriteMinecraftNearFarClipPlanes(renderContext.projectionMatrix(), renderContext.tickDelta()); - - #if MC_1_16_5 - SeamlessOverdraw.applyLegacyProjectionMatrix(matrixFloatArray); - #elif PRE_MC_1_19_4 - renderContext.projectionMatrix().load(FloatBuffer.wrap(matrixFloatArray)); - #else - renderContext.projectionMatrix().set(matrixFloatArray); - #endif - } + #if MC_1_16_5 + SeamlessOverdraw.applyLegacyProjectionMatrix(matrixFloatArray); + #elif PRE_MC_1_19_4 + renderContext.projectionMatrix().load(FloatBuffer.wrap(matrixFloatArray)); + #else + renderContext.projectionMatrix().set(matrixFloatArray); + #endif } }); diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java index f06b7374a..af0e28236 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java @@ -23,6 +23,7 @@ import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDh import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; import com.seibel.distanthorizons.core.config.ConfigBase; import com.seibel.distanthorizons.core.jar.ModGitInfo; +import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*; import com.seibel.distanthorizons.common.LodCommonMain; import com.seibel.distanthorizons.coreapi.ModInfo; @@ -83,26 +84,36 @@ public class FabricMain LOGGER.info("DH Commit: " + ModGitInfo.Git_Main_Commit); LOGGER.info("DH-Core Commit: " + ModGitInfo.Git_Core_Commit); - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium")) + IModChecker modChecker = SingletonInjector.INSTANCE.get(IModChecker.class); + if (modChecker.isModLoaded("sodium")) { ModAccessorInjector.INSTANCE.bind(ISodiumAccessor.class, new SodiumAccessor()); + + // If sodium is installed Indium is also necessary in order to use the Fabric rendering API + if (!modChecker.isModLoaded("indium")) + { + IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + String errorMessage = "loading Distant Horizons. Distant Horizons requires Indium in order to run with Sodium."; + String exceptionError = "Distant Horizons conditional mod Exception"; + mc.crashMinecraft(errorMessage, new Exception(exceptionError)); + } } - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("starlight")) + if (modChecker.isModLoaded("starlight")) { ModAccessorInjector.INSTANCE.bind(IStarlightAccessor.class, new StarlightAccessor()); } - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("optifine")) + if (modChecker.isModLoaded("optifine")) { ModAccessorInjector.INSTANCE.bind(IOptifineAccessor.class, new OptifineAccessor()); } - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("bclib")) + if (modChecker.isModLoaded("bclib")) { ModAccessorInjector.INSTANCE.bind(IBCLibAccessor.class, new BCLibAccessor()); } #if MC_1_16_5 || MC_1_18_2 || MC_1_19_2 || MC_1_19_4 || MC_1_20_1 // 1.17.1 won't support this since there isn't a matching Iris version - if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("iris")) + if (modChecker.isModLoaded("iris")) { ModAccessorInjector.INSTANCE.bind(IIrisAccessor.class, new IrisAccessor()); } diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java index 10de2d8c9..bb9741d58 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java @@ -1,5 +1,7 @@ package com.seibel.distanthorizons.fabric.mixins.mods.sodium; +/* Removed since DH now uses Indium so we can use the Fabric rendering API instead + #if POST_MC_1_20_1 // Sodium 0.5 import com.mojang.blaze3d.vertex.PoseStack; @@ -139,3 +141,5 @@ public class MixinSodiumRenderer } #endif + + */ \ No newline at end of file diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index d306798af..c95eb9786 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -18,8 +18,7 @@ "client.MixinLightmap", "client.MixinOptionsScreen", "client.MixinMinecraft", - "client.MixinTextureUtil", - "mods.sodium.MixinSodiumRenderer" + "client.MixinTextureUtil" ], "server": [], "injectors": { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f311a65bd..7110f74ca 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -56,5 +56,6 @@ "blendium": "*" }, - "breaks": $fabric_incompatibility_list + "breaks": $fabric_incompatibility_list, + "recommends": $fabric_recommend_list } diff --git a/versionProperties/1.16.5.properties b/versionProperties/1.16.5.properties index 4d9b764c6..10cddcc67 100644 --- a/versionProperties/1.16.5.properties +++ b/versionProperties/1.16.5.properties @@ -21,6 +21,7 @@ fabric_api_version=0.42.0+1.16 canvas_version= fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run diff --git a/versionProperties/1.17.1.properties b/versionProperties/1.17.1.properties index 80aab1901..9ef53a826 100644 --- a/versionProperties/1.17.1.properties +++ b/versionProperties/1.17.1.properties @@ -21,6 +21,7 @@ fabric_api_version=0.46.1+1.17 canvas_version= fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run diff --git a/versionProperties/1.18.2.properties b/versionProperties/1.18.2.properties index 6c188d603..802d5f42f 100644 --- a/versionProperties/1.18.2.properties +++ b/versionProperties/1.18.2.properties @@ -22,6 +22,7 @@ fabric_api_version=0.76.0+1.18.2 canvas_version=mc118:1.0.2616 fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run diff --git a/versionProperties/1.19.2.properties b/versionProperties/1.19.2.properties index 5f2da8945..54522c65d 100644 --- a/versionProperties/1.19.2.properties +++ b/versionProperties/1.19.2.properties @@ -21,6 +21,7 @@ fabric_api_version=0.76.0+1.19.2 canvas_version=mc119-1.0.2480 fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run diff --git a/versionProperties/1.19.4.properties b/versionProperties/1.19.4.properties index 5763b87c8..d89f199f5 100644 --- a/versionProperties/1.19.4.properties +++ b/versionProperties/1.19.4.properties @@ -21,6 +21,7 @@ fabric_api_version=0.83.0+1.19.4 canvas_version= fabric_incompatibility_list={ } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run diff --git a/versionProperties/1.20.1.properties b/versionProperties/1.20.1.properties index da1395f4d..79bb4c058 100644 --- a/versionProperties/1.20.1.properties +++ b/versionProperties/1.20.1.properties @@ -21,6 +21,7 @@ fabric_api_version=0.85.0+1.20.1 canvas_version= fabric_incompatibility_list={ "sodium": "<0.5.1" } + fabric_recommend_list={ "indium": "*" } # Fabric mod run # 0 = Don't enable and don't run