diff --git a/common/src/main/java/net/irisshaders/iris/mixin/AbstractSignRendererMixin.java b/common/src/main/java/net/irisshaders/iris/mixin/AbstractSignRendererMixin.java new file mode 100644 index 0000000000..f533296da1 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/AbstractSignRendererMixin.java @@ -0,0 +1,19 @@ +package net.irisshaders.iris.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.irisshaders.iris.apiimpl.IrisApiV0Impl; +import net.minecraft.client.renderer.blockentity.AbstractSignRenderer; + +@Mixin(AbstractSignRenderer.class) +public abstract class AbstractSignRendererMixin { + // maDU59_ was here =D + // Sign text does not need to be rendered during the shadow pass as it's not visible in the shadow anyway + @Inject(method = "submitSignText", at = @At("HEAD"), cancellable = true) + public void fism$cancelSignTextRendering(CallbackInfo ci){ + if(IrisApiV0Impl.INSTANCE.isRenderingShadowPass()) ci.cancel(); + } +} diff --git a/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererAccessor.java b/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererAccessor.java new file mode 100644 index 0000000000..fc843a6c77 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererAccessor.java @@ -0,0 +1,22 @@ +package net.irisshaders.iris.mixin; + +import org.jspecify.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import com.mojang.blaze3d.vertex.PoseStack; + +import net.minecraft.client.model.Model; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.blockentity.BannerRenderer; +import net.minecraft.client.renderer.feature.ModelFeatureRenderer; +import net.minecraft.client.resources.model.sprite.SpriteGetter; +import net.minecraft.client.resources.model.sprite.SpriteId; +import net.minecraft.world.item.DyeColor; + +@Mixin(BannerRenderer.class) +public interface BannerRendererAccessor { + // maDU59_ was here =D + @Invoker("submitPatternLayer") + static void fism$submitPatternLayerInvoke(final SpriteGetter sprites, final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final int lightCoords, final int overlayCoords, final Model model, final S state, final SpriteId sprite, final DyeColor color, final ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress){}; +} diff --git a/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererMixin.java b/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererMixin.java new file mode 100644 index 0000000000..163aeaec81 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/BannerRendererMixin.java @@ -0,0 +1,32 @@ +package net.irisshaders.iris.mixin; + +import org.jspecify.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.blaze3d.vertex.PoseStack; + +import net.irisshaders.iris.apiimpl.IrisApiV0Impl; +import net.minecraft.client.model.Model; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.blockentity.BannerRenderer; +import net.minecraft.client.renderer.feature.ModelFeatureRenderer; +import net.minecraft.client.resources.model.sprite.SpriteGetter; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.level.block.entity.BannerPatternLayers; + +@Mixin(BannerRenderer.class) +public abstract class BannerRendererMixin { + // maDU59_ was here =D + // Banner patterns do not need to be rendered during the shadow pass as they are not visible anyway + @Inject(method = "submitPatterns", at = @At("HEAD"), cancellable = true) + private static void fism$cancelSubmitPatterns(final SpriteGetter sprites, final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final int lightCoords, final int overlayCoords, final Model model, final S state, final boolean banner, final DyeColor baseColor, final BannerPatternLayers patterns, final ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress, CallbackInfo ci) { + if(IrisApiV0Impl.INSTANCE.isRenderingShadowPass()) { + BannerRendererAccessor.fism$submitPatternLayerInvoke(sprites, poseStack, submitNodeCollector, lightCoords, overlayCoords, model, state, banner ? Sheets.BANNER_PATTERN_BASE : Sheets.SHIELD_PATTERN_BASE, baseColor, breakProgress); + ci.cancel(); + } + } +} diff --git a/common/src/main/java/net/irisshaders/iris/mixin/ItemStackMixin.java b/common/src/main/java/net/irisshaders/iris/mixin/ItemStackMixin.java new file mode 100644 index 0000000000..424a793650 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/ItemStackMixin.java @@ -0,0 +1,19 @@ +package net.irisshaders.iris.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.irisshaders.iris.apiimpl.IrisApiV0Impl; +import net.minecraft.world.item.ItemStack; + +@Mixin(ItemStack.class) +public abstract class ItemStackMixin { + // maDU59_ was here =D + // Enchantment glint does not need to be rendered during the shadow pass as it's not visible in the shadow anyway + @Inject(method = "hasFoil", at = @At("HEAD"), cancellable = true) + private void fism$cancelGlintRendering(CallbackInfoReturnable cir){ + if(IrisApiV0Impl.INSTANCE.isRenderingShadowPass()) cir.setReturnValue(false); + } +} diff --git a/common/src/main/java/net/irisshaders/iris/mixin/MapRendererMixin.java b/common/src/main/java/net/irisshaders/iris/mixin/MapRendererMixin.java new file mode 100644 index 0000000000..0c0ca5836b --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/MapRendererMixin.java @@ -0,0 +1,21 @@ +package net.irisshaders.iris.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.irisshaders.iris.apiimpl.IrisApiV0Impl; +import net.minecraft.client.renderer.MapRenderer; + +@Mixin(MapRenderer.class) +public abstract class MapRendererMixin { + // maDU59_ was here =D + // Maps in item frames do not need to be rendered during the shadow pass as they are not visible in the shadow anyway + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + public void fism$cancelMapRendering(CallbackInfo ci) { + if(IrisApiV0Impl.INSTANCE.isRenderingShadowPass()) { + ci.cancel(); + } + } +} diff --git a/common/src/main/resources/mixins.iris.json b/common/src/main/resources/mixins.iris.json index c36a71d177..68198c6866 100644 --- a/common/src/main/resources/mixins.iris.json +++ b/common/src/main/resources/mixins.iris.json @@ -99,6 +99,11 @@ "entity_render_context.MixinModelStorageTrigger", "entity_render_context.ItemStackStateMixin", "entity_render_context.ItemStackStateLayerMixin", + "AbstractSignRendererMixin", + "BannerRendererAccessor", + "BannerRendererMixin", + "MapRendererMixin", + "ItemStackMixin", "fabulous.MixinDisableFabulousGraphics", "gui.MixinGui", "gui.MixinVideoSettingsScreen",