diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/model/quad/BakedQuadView.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/model/quad/BakedQuadView.java index 8acff21468..27673a7f99 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/model/quad/BakedQuadView.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/model/quad/BakedQuadView.java @@ -8,4 +8,6 @@ public interface BakedQuadView extends ModelQuadView { int getFaceNormal(); boolean hasShade(); + + boolean hasAO(); } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/material/RenderMaterialImpl.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/material/RenderMaterialImpl.java index 760f8b4dac..91a202828a 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/material/RenderMaterialImpl.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/material/RenderMaterialImpl.java @@ -17,6 +17,7 @@ package net.caffeinemc.mods.sodium.client.render.frapi.material; import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial; +import net.fabricmc.fabric.api.util.TriState; public class RenderMaterialImpl extends MaterialViewImpl implements RenderMaterial { public static final int VALUE_COUNT = 1 << TOTAL_BIT_LENGTH; @@ -49,4 +50,12 @@ public static RenderMaterialImpl setDisableDiffuse(RenderMaterialImpl material, return material; } + + public static RenderMaterialImpl setAmbientOcclusion(RenderMaterialImpl material, TriState mode) { + if (material.ambientOcclusion() != mode) { + return byIndex((material.bits & ~AO_MASK) | (mode.ordinal() << AO_BIT_OFFSET)); + } + + return material; + } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java index 3ab4bc208f..28f51af336 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java @@ -26,6 +26,7 @@ import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter; import net.fabricmc.fabric.api.renderer.v1.mesh.QuadView; import net.fabricmc.fabric.api.renderer.v1.model.SpriteFinder; +import net.fabricmc.fabric.api.util.TriState; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.Direction; @@ -242,6 +243,10 @@ public final MutableQuadViewImpl fromVanilla(BakedQuad quad, RenderMaterial mate material = RenderMaterialImpl.setDisableDiffuse((RenderMaterialImpl) material, true); } + if (material.ambientOcclusion().orElse(true) && !((BakedQuadView) quad).hasAO()) { + material = RenderMaterialImpl.setAmbientOcclusion((RenderMaterialImpl) material, TriState.FALSE); + } + material(material); tag(0); diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/fabric/core/model/quad/BakedQuadMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/fabric/core/model/quad/BakedQuadMixin.java index bed6b8dec2..f5e81d2cc1 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/fabric/core/model/quad/BakedQuadMixin.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/fabric/core/model/quad/BakedQuadMixin.java @@ -129,4 +129,9 @@ public Direction getLightFace() { public boolean hasShade() { return this.shade; } + + @Override + public boolean hasAO() { + return true; + } } diff --git a/neoforge/src/main/java/net/caffeinemc/mods/sodium/neoforge/mixin/core/model/quad/BakedQuadMixin.java b/neoforge/src/main/java/net/caffeinemc/mods/sodium/neoforge/mixin/core/model/quad/BakedQuadMixin.java index a2682022f0..eb9f341eea 100644 --- a/neoforge/src/main/java/net/caffeinemc/mods/sodium/neoforge/mixin/core/model/quad/BakedQuadMixin.java +++ b/neoforge/src/main/java/net/caffeinemc/mods/sodium/neoforge/mixin/core/model/quad/BakedQuadMixin.java @@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(BakedQuad.class) -public class BakedQuadMixin implements BakedQuadView { +public abstract class BakedQuadMixin implements BakedQuadView { @Shadow @Final protected int[] vertices; @@ -37,6 +37,9 @@ public class BakedQuadMixin implements BakedQuadView { @Final private boolean shade; + @Shadow + public abstract boolean hasAmbientOcclusion(); + @Unique private int flags; @@ -131,4 +134,9 @@ public Direction getLightFace() { public boolean hasShade() { return this.shade; } + + @Override + public boolean hasAO() { + return this.hasAmbientOcclusion(); + } }