1717
1818package com .lambda .mixin .render ;
1919
20+ import com .lambda .module .modules .render .NoRender ;
2021import com .lambda .module .modules .render .WorldColors ;
2122import net .minecraft .client .render .BackgroundRenderer ;
23+ import net .minecraft .entity .Entity ;
24+ import net .minecraft .entity .LivingEntity ;
2225import net .minecraft .util .math .Vec3d ;
2326import net .minecraft .world .biome .Biome ;
27+ import org .spongepowered .asm .mixin .Final ;
2428import org .spongepowered .asm .mixin .Mixin ;
29+ import org .spongepowered .asm .mixin .Shadow ;
2530import org .spongepowered .asm .mixin .injection .At ;
31+ import org .spongepowered .asm .mixin .injection .Inject ;
2632import org .spongepowered .asm .mixin .injection .Redirect ;
33+ import org .spongepowered .asm .mixin .injection .callback .CallbackInfoReturnable ;
34+
35+ import java .util .List ;
36+ import java .util .stream .Stream ;
2737
2838/**
2939 * <pre>{@code
3949// FixMe: This crashes the game
4050@ Mixin (BackgroundRenderer .class )
4151public class BackgroundRendererMixin {
52+ @ Shadow @ Final private static List <BackgroundRenderer .StatusEffectFogModifier > FOG_MODIFIERS ;
53+
4254 @ Redirect (method = "getFogColor" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/util/math/Vec3d;getX()D" ))
4355 private static double redirectRed (Vec3d baseColor ) {
4456 return WorldColors .fogOfWarColor (baseColor ).getX ();
@@ -59,4 +71,15 @@ private static int redirectWaterFogColor(Biome biome) {
5971 return WorldColors .waterFogColor (biome .getWaterFogColor ());
6072 }
6173
74+ @ Inject (method = "getFogModifier(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/client/render/BackgroundRenderer$StatusEffectFogModifier;" , at = @ At ("HEAD" ), cancellable = true )
75+ private static void injectFogModifier (Entity entity , float tickProgress , CallbackInfoReturnable <BackgroundRenderer .StatusEffectFogModifier > cir ){
76+ if (entity instanceof LivingEntity livingEntity ) {
77+ Stream <BackgroundRenderer .StatusEffectFogModifier > modifiers = FOG_MODIFIERS
78+ .stream ()
79+ .filter ((modifier ) ->
80+ modifier .shouldApply (livingEntity , tickProgress ) && NoRender .shouldAcceptFog (modifier )
81+ );
82+ cir .setReturnValue (modifiers .findFirst ().orElse (null ));
83+ }
84+ }
6285}
0 commit comments