From 0d165860fb3734898f54223758326fa72cf92fc1 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 19:24:42 -0600 Subject: [PATCH 01/22] Merge branch 'distant-horizons-main' --- .../wrappers/block/BlockStateWrapper.java | 118 +++++++++++++++++- coreSubProjects | 2 +- .../fabric/FabricClientProxy.java | 12 +- .../mixins/client/MixinLevelRenderer.java | 23 ++-- .../mixins/client/MixinLevelRenderer.java | 15 ++- 5 files changed, 144 insertions(+), 26 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 23e635044..c39e8a69b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -24,7 +24,10 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrappe import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; import org.apache.logging.log4j.Logger; @@ -85,6 +88,8 @@ public class BlockStateWrapper implements IBlockStateWrapper * Should be between {@link IBlockStateWrapper#FULLY_OPAQUE} and {@link IBlockStateWrapper#FULLY_OPAQUE} */ private int opacity = -1; + /** used by the Iris shader mod to determine how each LOD should be rendered */ + private byte irisBlockMaterialId = 0; @@ -116,7 +121,8 @@ public class BlockStateWrapper implements IBlockStateWrapper { this.blockState = blockState; this.serialString = this.serialize(levelWrapper); - LOGGER.trace("Created BlockStateWrapper ["+this.serialString+"] for ["+blockState+"]"); + this.irisBlockMaterialId = this.calculateIrisBlockMaterialId(); + LOGGER.trace("Created BlockStateWrapper ["+this.serialString+"] for ["+blockState+"] with material ID ["+this.irisBlockMaterialId+"]"); } @@ -274,6 +280,9 @@ public class BlockStateWrapper implements IBlockStateWrapper #endif } + @Override + public byte getIrisBlockMaterialId() { return this.irisBlockMaterialId; } + @Override public String toString() { return this.getSerialString(); } @@ -457,4 +466,111 @@ public class BlockStateWrapper implements IBlockStateWrapper + //==============// + // Iris methods // + //==============// + + private byte calculateIrisBlockMaterialId() + { + if (this.blockState == null) + { + return 0; + } + + + String serialString = this.getSerialString(); + if (this.blockState.is(BlockTags.LEAVES)) + { + return 1; + } + else if (serialString.contains("water") && this.isLiquid()) + { + return 12; + } + else if (this.blockState.getSoundType() == SoundType.WOOD + #if MC_VER >= MC_1_19_2 + || this.blockState.getSoundType() == SoundType.CHERRY_WOOD + #endif + ) + { + return 3; + } + else if (this.blockState.getSoundType() == SoundType.METAL + #if MC_VER >= MC_1_19_2 + || this.blockState.getSoundType() == SoundType.COPPER + #endif + #if MC_VER >= MC_1_20_4 + || this.blockState.getSoundType() == SoundType.COPPER_BULB + || this.blockState.getSoundType() == SoundType.COPPER_GRATE + #endif + ) + { + return 4; + } + else if ( + #if MC_VER >= MC_1_18_2 + this.blockState.is(BlockTags.DIRT) + #else + state.is(Blocks.DIRT) + || state.is(Blocks.PODZOL) + || state.is(Blocks.COARSE_DIRT) + || state.is(Blocks.GRASS_BLOCK) + #endif + ) + { + return 5; + } + else if (this.blockState.is(Blocks.LAVA)) + { + return 6; + } + #if MC_VER >= MC_1_17_1 + else if (this.blockState.getSoundType() == SoundType.DEEPSLATE + || this.blockState.getSoundType() == SoundType.DEEPSLATE_BRICKS + || this.blockState.getSoundType() == SoundType.DEEPSLATE_TILES + || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE) + { + return 7; + } + #endif + else if (this.blockState.getSoundType() == SoundType.SNOW + #if MC_VER >= MC_1_17_1 + || this.blockState.getSoundType() == SoundType.POWDER_SNOW + #endif + ) + { + return 8; + } + else if (this.blockState.is(BlockTags.SAND)) + { + return 9; + } + else if ( + #if MC_VER >= MC_1_18_2 + this.blockState.is(BlockTags.TERRACOTTA) + #else + serialString.contains("terracotta") + #endif + ) + { + return 10; + } + else if (this.blockState.is(BlockTags.BASE_STONE_NETHER)) + { + return 11; + } + else if (serialString.contains("stone")) + { + return 2; + } + else if (this.blockState.getLightEmission() > 0) + { + return 15; + } + else + { + return 0; + } + } + } diff --git a/coreSubProjects b/coreSubProjects index 1c90270eb..0efa4c3de 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1c90270eb61e65354af86ea07b5c2db6914196fe +Subproject commit 0efa4c3de33b0d2650e0bb99f2e42add066adf6a 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 2fd788b6a..218f4cd5e 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,7 +47,6 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; -import java.nio.FloatBuffer; import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; @@ -181,9 +180,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy // render event // //==============// - //Define this in the MixinLevelRenderer so that it works with sodium without any changes to the code - // TODO: If all else is fine, can we remove these commented code - // Client Render Level WorldRenderEvents.AFTER_SETUP.register((renderContext) -> { this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()), @@ -206,6 +202,14 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy #endif } }); + + WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) -> + { + this.clientApi.renderDeferredLods(ClientLevelWrapper.getWrapper(renderContext.world()), + McObjectConverter.Convert(renderContext.matrixStack().last().pose()), + McObjectConverter.Convert(renderContext.projectionMatrix()), + renderContext.tickDelta()); + }); // Debug keyboard event // FIXME: Use better hooks so it doesn't trigger key press events in text boxes diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index f6223c099..558696d27 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -35,40 +35,29 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; -import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.level.lighting.LevelLightEngine; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.nio.FloatBuffer; - #if MC_VER < MC_1_17_1 import org.lwjgl.opengl.GL15; #endif /** - * This class is used to mix in my rendering code + * This class is used to mix in DH's rendering code * before Minecraft starts rendering blocks. * If this wasn't done, and we used Forge's * render last event, the LODs would render on top * of the normal terrain.

* * This is also the mixin for rendering the clouds - * - * @author coolGi - * @author James Seibel - * @version 12-31-2021 */ @Mixin(LevelRenderer.class) public class MixinLevelRenderer @@ -92,13 +81,15 @@ public class MixinLevelRenderer public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) #endif { + // FIXME this is only called when clouds are enabled and vanilla render distance is far enough + // not having the parital ticks doesn't appear to be critical currently, but might cause weird issues down the line + // get the partial ticks since renderBlockLayer doesn't // have access to them previousPartialTicks = partialTicks; } - // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", @@ -142,7 +133,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -157,6 +148,10 @@ public class MixinLevelRenderer projectionMatrix.set(matrixFloatArray); #endif } + } + else if (renderType.equals(RenderType.translucent())) + { + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index 6c54ed6db..ad7ca6cbc 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -51,17 +51,13 @@ import org.lwjgl.opengl.GL15; /** - * This class is used to mix in my rendering code + * This class is used to mix in DH's rendering code * before Minecraft starts rendering blocks. * If this wasn't done, and we used Forge's * render last event, the LODs would render on top * of the normal terrain.

* * This is also the mixin for rendering the clouds - * - * @author coolGi - * @author James Seibel - * @version 12-31-2021 */ @Mixin(LevelRenderer.class) public class MixinLevelRenderer @@ -88,6 +84,9 @@ public class MixinLevelRenderer public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float partialTicks, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) #endif { + // FIXME this is only called when clouds are enabled and vanilla render distance is far enough + // not having the partial ticks doesn't appear to be critical currently, but might cause weird issues down the line + // get the partial ticks since renderBlockLayer doesn't // have access to them previousPartialTicks = partialTicks; @@ -138,7 +137,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderOpaqueLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -153,6 +152,10 @@ public class MixinLevelRenderer projectionMatrix.set(matrixFloatArray); #endif } + } + else if (renderType.equals(RenderType.translucent())) + { + ClientApi.INSTANCE.renderTranslucentLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From 9390b8bc4d779b5bf956a4b1b0a85372790521ea Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 21:36:12 -0600 Subject: [PATCH 02/22] Fix several Block materials --- .../wrappers/block/BlockStateWrapper.java | 75 +++++++++---------- coreSubProjects | 2 +- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index c39e8a69b..79d3a9139 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -474,26 +474,31 @@ public class BlockStateWrapper implements IBlockStateWrapper { if (this.blockState == null) { - return 0; + return IrisBlockMaterial.AIR; } - String serialString = this.getSerialString(); - if (this.blockState.is(BlockTags.LEAVES)) + String serialString = this.getSerialString().toLowerCase(); + + if (this.blockState.is(BlockTags.LEAVES) + || serialString.contains("bamboo") + || serialString.contains("cactus") + ) { - return 1; + return IrisBlockMaterial.LEAVES; } - else if (serialString.contains("water") && this.isLiquid()) + else if (this.isLiquid() || this.blockState.is(Blocks.WATER)) { - return 12; + return IrisBlockMaterial.WATER; } else if (this.blockState.getSoundType() == SoundType.WOOD + || serialString.contains("root") #if MC_VER >= MC_1_19_2 || this.blockState.getSoundType() == SoundType.CHERRY_WOOD #endif ) { - return 3; + return IrisBlockMaterial.WOOD; } else if (this.blockState.getSoundType() == SoundType.METAL #if MC_VER >= MC_1_19_2 @@ -505,71 +510,59 @@ public class BlockStateWrapper implements IBlockStateWrapper #endif ) { - return 4; + return IrisBlockMaterial.METAL; } else if ( - #if MC_VER >= MC_1_18_2 - this.blockState.is(BlockTags.DIRT) - #else - state.is(Blocks.DIRT) - || state.is(Blocks.PODZOL) - || state.is(Blocks.COARSE_DIRT) - || state.is(Blocks.GRASS_BLOCK) - #endif + serialString.contains("dirt") + || serialString.contains("grass_block") + || serialString.contains("gravel") + || serialString.contains("mud") ) { - return 5; + return IrisBlockMaterial.DIRT; } else if (this.blockState.is(Blocks.LAVA)) { - return 6; + return IrisBlockMaterial.LAVA; } #if MC_VER >= MC_1_17_1 else if (this.blockState.getSoundType() == SoundType.DEEPSLATE || this.blockState.getSoundType() == SoundType.DEEPSLATE_BRICKS || this.blockState.getSoundType() == SoundType.DEEPSLATE_TILES - || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE) + || this.blockState.getSoundType() == SoundType.POLISHED_DEEPSLATE + || serialString.contains("deepslate") ) { - return 7; + return IrisBlockMaterial.DEEPSLATE; } #endif - else if (this.blockState.getSoundType() == SoundType.SNOW - #if MC_VER >= MC_1_17_1 - || this.blockState.getSoundType() == SoundType.POWDER_SNOW - #endif - ) + else if (this.serialString.contains("snow")) { - return 8; + return IrisBlockMaterial.SNOW; } - else if (this.blockState.is(BlockTags.SAND)) + else if (serialString.contains("sand")) { - return 9; + return IrisBlockMaterial.SAND; } - else if ( - #if MC_VER >= MC_1_18_2 - this.blockState.is(BlockTags.TERRACOTTA) - #else - serialString.contains("terracotta") - #endif - ) + else if (serialString.contains("terracotta")) { - return 10; + return IrisBlockMaterial.TERRACOTTA; } else if (this.blockState.is(BlockTags.BASE_STONE_NETHER)) { - return 11; + return IrisBlockMaterial.NETHER_STONE; } - else if (serialString.contains("stone")) + else if (serialString.contains("stone") + || serialString.contains("ore")) { - return 2; + return IrisBlockMaterial.STONE; } else if (this.blockState.getLightEmission() > 0) { - return 15; + return IrisBlockMaterial.ILLUMINATED; } else { - return 0; + return IrisBlockMaterial.UNKOWN; } } diff --git a/coreSubProjects b/coreSubProjects index 0efa4c3de..9c8d77a4f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 0efa4c3de33b0d2650e0bb99f2e42add066adf6a +Subproject commit 9c8d77a4f3a979bfa537c6fb633764509a09e0cc From 8d32ab9bdbcb9ef3b8251ac3073a778d7c25a7cc Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 21 Jan 2024 21:48:06 -0600 Subject: [PATCH 03/22] Fix method names in neoForge mixinLevelRenderer --- coreSubProjects | 2 +- .../neoforge/mixins/client/MixinLevelRenderer.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/coreSubProjects b/coreSubProjects index 9c8d77a4f..d7eb8d941 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 9c8d77a4f3a979bfa537c6fb633764509a09e0cc +Subproject commit d7eb8d9416a0d2fe4f7a332ea708e28ffc5fd299 diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index ad7ca6cbc..a6940f748 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -93,7 +93,6 @@ public class MixinLevelRenderer } - // TODO: Can we move this to forge's client proxy similarly to how fabric does it #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), method = "renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDD)V", @@ -137,7 +136,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderOpaqueLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -155,7 +154,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderTranslucentLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From 038073d34d92c56c4428ce19ab859e2442c23071 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 08:37:27 -0800 Subject: [PATCH 04/22] Minor fixes for translucency and block ID's --- .../common/wrappers/block/BlockStateWrapper.java | 3 +++ .../distanthorizons/fabric/FabricClientProxy.java | 8 -------- .../fabric/mixins/client/MixinLevelRenderer.java | 11 +++++++++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 79d3a9139..b7ff6ebcd 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -483,6 +483,7 @@ public class BlockStateWrapper implements IBlockStateWrapper if (this.blockState.is(BlockTags.LEAVES) || serialString.contains("bamboo") || serialString.contains("cactus") + || serialString.contains("chorus_flower") ) { return IrisBlockMaterial.LEAVES; @@ -517,6 +518,8 @@ public class BlockStateWrapper implements IBlockStateWrapper || serialString.contains("grass_block") || serialString.contains("gravel") || serialString.contains("mud") + || serialString.contains("podzol") + || serialString.contains("mycelium") ) { return IrisBlockMaterial.DIRT; 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 218f4cd5e..6c35bcf5d 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -202,14 +202,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy #endif } }); - - WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) -> - { - this.clientApi.renderDeferredLods(ClientLevelWrapper.getWrapper(renderContext.world()), - McObjectConverter.Convert(renderContext.matrixStack().last().pose()), - McObjectConverter.Convert(renderContext.projectionMatrix()), - renderContext.tickDelta()); - }); // Debug keyboard event // FIXME: Use better hooks so it doesn't trigger key press events in text boxes diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 4d2f041a2..786453348 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -23,7 +23,11 @@ import com.mojang.blaze3d.vertex.PoseStack; #if MC_VER < MC_1_19_4 import com.mojang.math.Matrix4f; #else +import com.seibel.distanthorizons.common.wrappers.McObjectConverter; +import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; +import com.seibel.distanthorizons.core.api.internal.ClientApi; import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -106,6 +110,13 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { + if (renderType.equals(RenderType.translucent())) { + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), + McObjectConverter.Convert(modelViewMatrixStack.last().pose()), + McObjectConverter.Convert(projectionMatrix), + previousPartialTicks); + } + // FIXME completely disables rendering when sodium is installed if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { From 9b4276c29b74b7ca0ae16f70c2c0fa3c45685fab Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 08:49:00 -0800 Subject: [PATCH 05/22] Add mushroom --- .../distanthorizons/common/wrappers/block/BlockStateWrapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index b7ff6ebcd..a8289775f 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -484,6 +484,7 @@ public class BlockStateWrapper implements IBlockStateWrapper || serialString.contains("bamboo") || serialString.contains("cactus") || serialString.contains("chorus_flower") + || serialString.contains("mushroom") ) { return IrisBlockMaterial.LEAVES; From 200ad05f4cb170ba03d33a4091bd5e9e7f24e0ef Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 17:52:51 -0800 Subject: [PATCH 06/22] Fix suspicious frame time code --- .../mixins/client/MixinLevelRenderer.java | 23 +------------------ .../mixins/client/MixinLevelRenderer.java | 5 ++-- .../mixins/client/MixinLevelRenderer.java | 5 ++-- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 786453348..517ddbe44 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -66,27 +66,6 @@ public class MixinLevelRenderer { @Shadow private ClientLevel level; - @Unique - private static float previousPartialTicks = 0; - - // Inject rendering at first call to renderChunkLayer - // HEAD or RETURN - #if MC_VER < MC_1_17_1 - @Inject(at = @At("RETURN"), method = "renderSky(Lcom/mojang/blaze3d/vertex/PoseStack;F)V") - private void renderSky(PoseStack matrixStackIn, float partialTicks, CallbackInfo callback) - { - // get the partial ticks since renderBlockLayer doesn't - // have access to them - previousPartialTicks = partialTicks; - } - #else - @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) - public void renderClouds(PoseStack poseStack, Matrix4f projectionMatrix, float tickDelta, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) { - // get the partial ticks since renderChunkLayer doesn't - // have access to them - previousPartialTicks = tickDelta; - } - #endif #if MC_VER < MC_1_17_1 @Inject(at = @At("HEAD"), @@ -114,7 +93,7 @@ public class MixinLevelRenderer ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), McObjectConverter.Convert(modelViewMatrixStack.last().pose()), McObjectConverter.Convert(projectionMatrix), - previousPartialTicks); + Minecraft.getInstance().getFrameTime()); } // FIXME completely disables rendering when sodium is installed diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index 558696d27..ce1ab1ea5 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -24,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; #else import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -133,7 +134,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -151,7 +152,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index a6940f748..ad0dc6d61 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -24,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; #else import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; import org.joml.Matrix4f; @@ -136,7 +137,7 @@ public class MixinLevelRenderer // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); // experimental proof-of-concept option if (Config.Client.Advanced.Graphics.AdvancedGraphics.seamlessOverdraw.get()) @@ -154,7 +155,7 @@ public class MixinLevelRenderer } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, previousPartialTicks); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From e809429a8c1f0df6703d9e2f2ac27c8d6d90b9ec Mon Sep 17 00:00:00 2001 From: IMS212 Date: Mon, 22 Jan 2024 17:59:59 -0800 Subject: [PATCH 07/22] Fix 1.16 support --- .../mixins/client/MixinLevelRenderer.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 517ddbe44..75bb8c02b 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -23,16 +23,17 @@ import com.mojang.blaze3d.vertex.PoseStack; #if MC_VER < MC_1_19_4 import com.mojang.math.Matrix4f; #else +import org.joml.Matrix4f; +#endif +import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.McObjectConverter; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.coreapi.util.math.Mat4f; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LightTexture; -import org.joml.Matrix4f; -#endif -import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.core.config.Config; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; @@ -41,6 +42,7 @@ import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.level.lighting.LevelLightEngine; +import org.lwjgl.opengl.GL15; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -89,10 +91,25 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, CallbackInfo callback) #endif { + #if MC_VER == MC_1_16_5 + // get the matrices from the OpenGL fixed pipeline + float[] mcProjMatrixRaw = new float[16]; + GL15.glGetFloatv(GL15.GL_PROJECTION_MATRIX, mcProjMatrixRaw); + Mat4f mcProjectionMatrix = new Mat4f(mcProjMatrixRaw); + mcProjectionMatrix.transpose(); + + Mat4f mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose()); + + #else + // get the matrices directly from MC + Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose()); + Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix); + #endif + if (renderType.equals(RenderType.translucent())) { ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), - McObjectConverter.Convert(modelViewMatrixStack.last().pose()), - McObjectConverter.Convert(projectionMatrix), + mcModelViewMatrix, + mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); } From 297c8a1a1e89be1b4c4b0b6a77410de2c0a9ae49 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Tue, 23 Jan 2024 07:47:43 -0800 Subject: [PATCH 08/22] Actually fix 1.16 --- .../forge/mixins/client/MixinLevelRenderer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index ce1ab1ea5..22c938e6c 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -36,8 +36,12 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; From d868b8fc72ebda4d4b100d1ee84d0af22cc532fb Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 27 Jan 2024 13:32:35 -0600 Subject: [PATCH 09/22] Fix missing imports --- .../com/seibel/distanthorizons/fabric/FabricClientProxy.java | 1 + .../forge/mixins/client/MixinLevelRenderer.java | 5 +++++ 2 files changed, 6 insertions(+) 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 218f4cd5e..62d7d4135 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,6 +47,7 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; +import java.nio.FloatBuffer; import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index 558696d27..32a1fe843 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -35,8 +35,11 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.coreapi.util.math.Mat4f; +import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -45,6 +48,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.nio.FloatBuffer; + #if MC_VER < MC_1_17_1 import org.lwjgl.opengl.GL15; #endif From a887e35285df371fb24c3532a877ff15e4f2be03 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 31 Jan 2024 21:49:59 -0600 Subject: [PATCH 10/22] Add Iris API events --- .../common/wrappers/minecraft/MinecraftRenderWrapper.java | 6 ------ coreSubProjects | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 6a8ae1318..30eb60581 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -261,12 +261,6 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper @Override public int getTargetFrameBuffer() { - int frameBufferOverrideId = DhApiRenderProxy.INSTANCE.targetFrameBufferOverride; - if (frameBufferOverrideId != -1) - { - return frameBufferOverrideId; - } - // used so we can access the framebuffer shaders end up rendering to if (AbstractOptifineAccessor.optifinePresent()) { diff --git a/coreSubProjects b/coreSubProjects index d7eb8d941..15ee6a951 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit d7eb8d9416a0d2fe4f7a332ea708e28ffc5fd299 +Subproject commit 15ee6a9512ba5850b606fcd46651cfa2144b9999 From 982bf951e1087833fe4fd15a71f1df1bc956bf50 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 1 Feb 2024 07:39:16 -0600 Subject: [PATCH 11/22] Fix 1.19.2 compiling --- .../common/wrappers/block/BlockStateWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index a8289775f..3e3fbd24e 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -495,7 +495,7 @@ public class BlockStateWrapper implements IBlockStateWrapper } else if (this.blockState.getSoundType() == SoundType.WOOD || serialString.contains("root") - #if MC_VER >= MC_1_19_2 + #if MC_VER >= MC_1_19_4 || this.blockState.getSoundType() == SoundType.CHERRY_WOOD #endif ) From 32c1cc29f87dc3cc20c487375b99d27189b74bca Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 19:21:52 -0600 Subject: [PATCH 12/22] Fix Render Buffer count F3 menu not closing --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 15ee6a951..30055805d 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 15ee6a9512ba5850b606fcd46651cfa2144b9999 +Subproject commit 30055805d8fc90687f71aab20ab86f8cbcbc6ba3 From b878faac96ed9e48cc4e93019952a5569613ab26 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 20:31:05 -0600 Subject: [PATCH 13/22] Improve StepFeatures logging --- .../worldGeneration/step/StepFeatures.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java index 65092f701..dcd46c044 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/step/StepFeatures.java @@ -19,24 +19,24 @@ package com.seibel.distanthorizons.common.wrappers.worldGeneration.step; -import java.util.ArrayList; - import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.distanthorizons.common.wrappers.worldGeneration.ThreadedParameters; import com.seibel.distanthorizons.common.wrappers.worldGeneration.mimicObject.DhLitWorldGenRegion; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.util.gridList.ArrayGridList; -import net.minecraft.ReportedException; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.ProtoChunk; import net.minecraft.world.level.levelgen.Heightmap; -#if MC_VER >= MC_1_18_2 -#endif +import org.apache.logging.log4j.Logger; + public final class StepFeatures { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + public static final ChunkStatus STATUS = ChunkStatus.FEATURES; private final BatchGenerationEnvironment environment; @@ -51,36 +51,44 @@ public final class StepFeatures ThreadedParameters tParams, DhLitWorldGenRegion worldGenRegion, ArrayGridList chunkWrappers) { - ArrayList chunksToDo = new ArrayList(); - for (ChunkWrapper chunkWrapper : chunkWrappers) { ChunkAccess chunk = chunkWrapper.getChunk(); - if (chunk.getStatus().isOrAfter(STATUS)) continue; - ((ProtoChunk) chunk).setStatus(STATUS); - chunksToDo.add(chunk); - } - - for (ChunkAccess chunk : chunksToDo) - { + if (chunk.getStatus().isOrAfter(STATUS)) + { + continue; + } + + if (chunk instanceof ProtoChunk) + { + ((ProtoChunk) chunk).setStatus(STATUS); + } + + try { #if MC_VER < MC_1_18_2 worldGenRegion.setOverrideCenter(chunk.getPos()); environment.params.generator.applyBiomeDecoration(worldGenRegion, tParams.structFeat); #else - environment.params.generator.applyBiomeDecoration(worldGenRegion, chunk, - tParams.structFeat.forWorldGenRegion(worldGenRegion)); + if (worldGenRegion.hasChunk(chunkWrapper.getChunkPos().x, chunkWrapper.getChunkPos().z)) + { + this.environment.params.generator.applyBiomeDecoration(worldGenRegion, chunk, tParams.structFeat.forWorldGenRegion(worldGenRegion)); + } + else + { + LOGGER.warn("Unable to generate features for chunk at pos ["+chunkWrapper.getChunkPos()+"], world gen region doesn't contain the chunk."); + } #endif Heightmap.primeHeightmaps(chunk, STATUS.heightmapsAfter()); BatchGenerationEnvironment.clearDistantGenerationMixinData(); } - catch (ReportedException e) + catch (Exception e) { - e.printStackTrace(); + LOGGER.warn("Unexpected issue when generating features for chunk at pos ["+chunkWrapper.getChunkPos()+"], error: ["+e.getMessage()+"].", e); // FIXME: Features concurrent modification issue. Something about cocobeans might just - // error out. For now just retry. + // error out. For now just retry. } } } From 42bcc28d3e02d5512204339c93335bb2b0ad7049 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 5 Feb 2024 21:38:46 -0600 Subject: [PATCH 14/22] Merge branch 'minecraft-lod-mod-frustum.culling' --- .../common/wrappers/McObjectConverter.java | 6 ++++- .../minecraft/MinecraftRenderWrapper.java | 25 ++++++++++++++++--- coreSubProjects | 2 +- .../fabric/FabricClientProxy.java | 2 ++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index b37282f4d..f9422eba4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -77,7 +77,11 @@ public class McObjectConverter #endif } - /** 4x4 float matrix converter */ + /** + * 4x4 float matrix converter + * TODO this should be moved into Mat4f's constructor + */ + @Deprecated public static Mat4f Convert(Matrix4f mcMatrix) { FloatBuffer buffer = FloatBuffer.allocate(16); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 30eb60581..9c4a13f74 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -21,6 +21,7 @@ package com.seibel.distanthorizons.common.wrappers.minecraft; import java.awt.Color; import java.lang.invoke.MethodHandles; +import java.nio.FloatBuffer; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -40,8 +41,9 @@ import com.seibel.distanthorizons.core.render.DhApiRenderProxy; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; #if MC_VER < MC_1_19_4 -import com.mojang.math.Vector3f; +import org.joml.Vector3f; #else +import org.joml.Matrix4f; import org.joml.Vector3f; #endif #if MC_VER >= MC_1_20_2 @@ -78,6 +80,7 @@ import net.minecraft.world.level.material.FogType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.apache.logging.log4j.Logger; +import org.joml.Matrix4f; /** @@ -116,8 +119,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper public Vec3f getLookAtVector() { Camera camera = MC.gameRenderer.getMainCamera(); - Vector3f cameraDir = camera.getLookVector(); - return new Vec3f(cameraDir.x(), cameraDir.y(), cameraDir.z()); + return new Vec3f(camera.getLookVector().x(), camera.getLookVector().y(), camera.getLookVector().z()); } @Override @@ -148,6 +150,23 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return new Vec3d(projectedView.x, projectedView.y, projectedView.z); } + @Override + public Mat4f getWorldViewMatrix() + { + Camera camera = MC.gameRenderer.getMainCamera(); + Vector3f cameraVec3 = new Vector3f( + (float)camera.getPosition().x, + (float)camera.getPosition().y, + (float)camera.getPosition().z); + cameraVec3 = cameraVec3.negate(); + + Matrix4f matWorldView = new Matrix4f() + .rotateX((float)Math.toRadians(camera.getXRot())) + .rotateY((float)Math.toRadians(camera.getYRot() + 180f)) + .translate(cameraVec3); + return McObjectConverter.Convert(matWorldView); + } + @Override public Mat4f getDefaultProjectionMatrix(float partialTicks) { diff --git a/coreSubProjects b/coreSubProjects index 30055805d..06b43d662 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 30055805d8fc90687f71aab20ab86f8cbcbc6ba3 +Subproject commit 06b43d6627914062be3af752e04a4e8e1099bb8c 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 a632c4b3f..931113d95 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -47,7 +47,9 @@ import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; +#if MC_VER < MC_1_19_4 import java.nio.FloatBuffer; +#endif import java.util.HashSet; import net.minecraft.client.multiplayer.ClientLevel; From 41f8c8cfa45adcf70588be2a7ee84638ab4c5b6c Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 07:17:43 -0600 Subject: [PATCH 15/22] Fix compiling on MC 1.19.2 and below --- .../common/wrappers/McObjectConverter.java | 45 +++++++++---------- .../minecraft/MinecraftRenderWrapper.java | 2 +- coreSubProjects | 2 +- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index f9422eba4..ebcab8af8 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -23,12 +23,6 @@ import java.nio.FloatBuffer; import java.util.function.BiConsumer; import java.util.function.Consumer; -#if MC_VER < MC_1_19_4 -import com.mojang.math.Matrix4f; -#else -import org.joml.Matrix4f; -#endif - import com.seibel.distanthorizons.core.enums.EDhDirection; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.pos.DhChunkPos; @@ -51,8 +45,29 @@ public class McObjectConverter { return y * 4 + x; } + + + /** 4x4 float matrix converter */ + @Deprecated + public static Mat4f Convert( + #if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f + #else org.joml.Matrix4f #endif + mcMatrix) + { + FloatBuffer buffer = FloatBuffer.allocate(16); + storeMatrix(mcMatrix, buffer); + Mat4f matrix = new Mat4f(buffer); + #if MC_VER < MC_1_19_4 + matrix.transpose(); // In 1.19.3 and later, we no longer need to transpose it + #endif + return matrix; + } /** Taken from Minecraft's com.mojang.math.Matrix4f class from 1.18.2 */ - private static void storeMatrix(Matrix4f matrix, FloatBuffer buffer) + private static void storeMatrix( + #if MC_VER < MC_1_19_4 com.mojang.math.Matrix4f + #else org.joml.Matrix4f #endif + matrix, + FloatBuffer buffer) { #if MC_VER < MC_1_19_4 matrix.store(buffer); @@ -77,22 +92,6 @@ public class McObjectConverter #endif } - /** - * 4x4 float matrix converter - * TODO this should be moved into Mat4f's constructor - */ - @Deprecated - public static Mat4f Convert(Matrix4f mcMatrix) - { - FloatBuffer buffer = FloatBuffer.allocate(16); - storeMatrix(mcMatrix, buffer); - Mat4f matrix = new Mat4f(buffer); - #if MC_VER < MC_1_19_4 - matrix.transpose(); // In 1.19.3 and later, we no longer need to transpose it - #endif - return matrix; - } - static final Direction[] directions; static final EDhDirection[] lodDirections; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 9c4a13f74..b1a2a0604 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -164,7 +164,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper .rotateX((float)Math.toRadians(camera.getXRot())) .rotateY((float)Math.toRadians(camera.getYRot() + 180f)) .translate(cameraVec3); - return McObjectConverter.Convert(matWorldView); + return new Mat4f(matWorldView); } @Override diff --git a/coreSubProjects b/coreSubProjects index 06b43d662..bc1a4ec13 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 06b43d6627914062be3af752e04a4e8e1099bb8c +Subproject commit bc1a4ec1389aebab233961cfe8e2be8879e15ee8 From 4764f0969abc33a066045bb5f4210febd4342271 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 17:49:08 -0600 Subject: [PATCH 16/22] Fix assertion errors in the end --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index bc1a4ec13..f6e2f2f52 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit bc1a4ec1389aebab233961cfe8e2be8879e15ee8 +Subproject commit f6e2f2f52ac4ffa5dabc280db97202fb566d0406 From 733fb8e8714a1554a458ef7a096fe3e661ac7d62 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 19:23:56 -0600 Subject: [PATCH 17/22] Merge branch 'minecraft-lod-mod-shadow.frustum.culling' --- coreSubProjects | 2 +- .../java/com/seibel/distanthorizons/fabric/FabricMain.java | 4 ++-- .../fabric/wrappers/modAccessor/IrisAccessor.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/coreSubProjects b/coreSubProjects index f6e2f2f52..9392decd3 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit f6e2f2f52ac4ffa5dabc280db97202fb566d0406 +Subproject commit 9392decd3502c2d1e00cc0085e3156f82b9dfcf5 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 2de23a193..73ef942b3 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricMain.java @@ -87,8 +87,8 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti this.tryCreateModCompatAccessor("starlight", IStarlightAccessor.class, StarlightAccessor::new); this.tryCreateModCompatAccessor("optifine", IOptifineAccessor.class, OptifineAccessor::new); this.tryCreateModCompatAccessor("bclib", IBCLibAccessor.class, BCLibAccessor::new); - #if MC_VER != MC_1_17_1 && MC_VER <= MC_1_20_1 - // 1.17.1 won't support this since there isn't a matching Iris version + #if MC_VER >= MC_1_19_4 + // 1.19.4 is the lowest version Iris supports DH this.tryCreateModCompatAccessor("iris", IIrisAccessor.class, IrisAccessor::new); #endif } diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java index 53edafd5e..cc0a7216a 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/IrisAccessor.java @@ -19,7 +19,7 @@ package com.seibel.distanthorizons.fabric.wrappers.modAccessor; -#if MC_VER != MC_1_17_1 && MC_VER <= MC_1_20_1 +#if MC_VER >= MC_1_19_4 import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IIrisAccessor; import net.coderbot.iris.Iris; From dd341c9a22e939f98086a3adb78a377e8d7a1ff6 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 6 Feb 2024 21:45:12 -0600 Subject: [PATCH 18/22] Add frustum culling config control to the API --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 9392decd3..223326afe 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 9392decd3502c2d1e00cc0085e3156f82b9dfcf5 +Subproject commit 223326afe2ace97164d5984459ea9e0a2e9e42f5 From 08c31e5999dbde96033c72d5dda32eedb6fd9ca5 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 7 Feb 2024 23:23:07 +1030 Subject: [PATCH 19/22] Fixed mod auto-updating on quilt --- coreSubProjects | 2 +- .../fabric/wrappers/modAccessor/ModChecker.java | 8 ++++++++ .../forge/wrappers/modAccessor/ModChecker.java | 8 ++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 223326afe..556550fea 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 223326afe2ace97164d5984459ea9e0a2e9e42f5 +Subproject commit 556550fea802c5e7ad526204a40916ba9b698ad0 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java index 1e4d15622..dcd7d7fd7 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/ModChecker.java @@ -22,6 +22,8 @@ package com.seibel.distanthorizons.fabric.wrappers.modAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import net.fabricmc.loader.api.FabricLoader; +import java.io.File; + public class ModChecker implements IModChecker { public static final ModChecker INSTANCE = new ModChecker(); @@ -32,4 +34,10 @@ public class ModChecker implements IModChecker return FabricLoader.getInstance().isModLoaded(modid); } + @Override + public File modLocation(String modid) + { + return new File(FabricLoader.getInstance().getModContainer(modid).get().getOrigin().getPaths().get(0).toUri()); + } + } diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java b/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java index 4475c6900..1125b4240 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/wrappers/modAccessor/ModChecker.java @@ -22,6 +22,8 @@ package com.seibel.distanthorizons.forge.wrappers.modAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import net.minecraftforge.fml.ModList; +import java.io.File; + public class ModChecker implements IModChecker { public static final ModChecker INSTANCE = new ModChecker(); @@ -32,4 +34,10 @@ public class ModChecker implements IModChecker return ModList.get().isLoaded(modid); } + @Override + public File modLocation(String modid) + { + return ModList.get().getModFileById(modid).getFile().getFilePath().toFile(); + } + } From f17bc1eccd65f803b41b352351645e87a1ce68d0 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 7 Feb 2024 23:32:33 +1030 Subject: [PATCH 20/22] Fixed JOML not being shadowed (not being included in the jar) --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f6a938675..d995fbf11 100644 --- a/build.gradle +++ b/build.gradle @@ -200,7 +200,7 @@ subprojects { p -> implementation("org.apache.logging.log4j:log4j-core:${rootProject.log4j_version}") // JOML - implementation("org.joml:joml:${rootProject.joml_version}") + forgeShadowMe("org.joml:joml:${rootProject.joml_version}") // JUnit tests implementation("org.junit.jupiter:junit-jupiter:5.8.2") @@ -298,6 +298,9 @@ subprojects { p -> // Sqlite Database //At the moment, there is a bug in this library which doesnt allow it to be relocated // relocate "org.sqlite", "${librariesLocation}.sqlite" + + // JOML + relocate "org.joml", "${librariesLocation}.joml" // NightConfig (includes Toml & Json) relocate "com.electronwill.nightconfig", "${librariesLocation}.electronwill.nightconfig" From c578ae0fa458a1784ba4dd95848f15e5ae80aff3 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 7 Feb 2024 07:06:39 -0600 Subject: [PATCH 21/22] Add Lod Shading to the api config --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 556550fea..b255e0ac6 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 556550fea802c5e7ad526204a40916ba9b698ad0 +Subproject commit b255e0ac686a10a1486513eaf491e489d31682cf From aa084c885d61abbff1009604dc18142254bf5070 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 7 Feb 2024 07:34:49 -0600 Subject: [PATCH 22/22] Attempt to reduce queuing duplicate world gen tasks --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index b255e0ac6..2651e3d43 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit b255e0ac686a10a1486513eaf491e489d31682cf +Subproject commit 2651e3d43590637914e068e4a53a62b6407ed84d