Skip to content

Commit 89c4427

Browse files
committed
noDarkness improvement and noBlindness
1 parent 44a7307 commit 89c4427

File tree

4 files changed

+53
-1
lines changed

4 files changed

+53
-1
lines changed

src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,23 @@
1717

1818
package com.lambda.mixin.render;
1919

20+
import com.lambda.module.modules.render.NoRender;
2021
import com.lambda.module.modules.render.WorldColors;
2122
import net.minecraft.client.render.BackgroundRenderer;
23+
import net.minecraft.entity.Entity;
24+
import net.minecraft.entity.LivingEntity;
2225
import net.minecraft.util.math.Vec3d;
2326
import net.minecraft.world.biome.Biome;
27+
import org.spongepowered.asm.mixin.Final;
2428
import org.spongepowered.asm.mixin.Mixin;
29+
import org.spongepowered.asm.mixin.Shadow;
2530
import org.spongepowered.asm.mixin.injection.At;
31+
import org.spongepowered.asm.mixin.injection.Inject;
2632
import 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
@@ -39,6 +49,8 @@
3949
// FixMe: This crashes the game
4050
@Mixin(BackgroundRenderer.class)
4151
public 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
}

src/main/java/com/lambda/mixin/render/WorldRendererMixin.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,18 @@
1919

2020
import com.lambda.module.modules.player.Freecam;
2121
import com.lambda.module.modules.render.CameraTweaks;
22+
import com.lambda.module.modules.render.NoRender;
2223
import net.minecraft.client.render.Camera;
2324
import net.minecraft.client.render.WorldRenderer;
25+
import net.minecraft.entity.Entity;
26+
import net.minecraft.entity.LivingEntity;
27+
import net.minecraft.entity.effect.StatusEffects;
2428
import org.spongepowered.asm.mixin.Mixin;
2529
import org.spongepowered.asm.mixin.injection.At;
30+
import org.spongepowered.asm.mixin.injection.Inject;
2631
import org.spongepowered.asm.mixin.injection.ModifyArg;
2732
import org.spongepowered.asm.mixin.injection.Redirect;
33+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2834

2935
@Mixin(WorldRenderer.class)
3036
public class WorldRendererMixin {
@@ -37,4 +43,14 @@ private boolean renderIsThirdPerson(Camera camera) {
3743
private boolean renderSetupTerrainModifyArg(boolean hasForcedFrustum) {
3844
return Freecam.INSTANCE.isEnabled() || CameraTweaks.INSTANCE.isEnabled() || hasForcedFrustum;
3945
}
46+
47+
@Inject(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z", at = @At(value = "HEAD"), cancellable = true)
48+
private void modifyEffectCheck(Camera camera, CallbackInfoReturnable<Boolean> cir) {
49+
Entity entity = camera.getFocusedEntity();
50+
if (entity instanceof LivingEntity livingEntity && NoRender.INSTANCE.isEnabled()) {
51+
boolean blind = livingEntity.hasStatusEffect(StatusEffects.BLINDNESS) && !NoRender.getNoBlindness();
52+
boolean dark = livingEntity.hasStatusEffect(StatusEffects.DARKNESS) && !NoRender.getNoDarkness();
53+
cir.setReturnValue(blind || dark);
54+
}
55+
}
4056
}

src/main/kotlin/com/lambda/module/modules/render/NoRender.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,29 @@ package com.lambda.module.modules.render
1919

2020
import com.lambda.module.Module
2121
import com.lambda.module.tag.ModuleTag
22+
import net.minecraft.client.render.BackgroundRenderer.StatusEffectFogModifier
23+
import net.minecraft.entity.effect.StatusEffects
2224

2325
object NoRender : Module(
2426
name = "NoRender",
2527
description = "Disables rendering of certain things",
2628
tag = ModuleTag.RENDER,
2729
) {
30+
@JvmStatic val noBlindness by setting("No Blindness", true)
2831
@JvmStatic val noDarkness by setting("No Darkness", true)
2932
@JvmStatic val noBurning by setting("No Burning Overlay", true)
3033
@JvmStatic val fireOverlayYOffset by setting("Fire Overlay Y Offset", -0.3, -0.8..0.0, 0.1) { !noBurning }
3134
@JvmStatic val noUnderwater by setting("No Underwater Overlay", true)
3235
@JvmStatic val noInWall by setting("No In Wall Overlay", true)
3336
@JvmStatic val noChatVerificationToast by setting("No Chat Verification Toast", true)
3437
@JvmStatic val noExplosion by setting("No Explosions", true)
35-
}
38+
39+
@JvmStatic
40+
fun shouldAcceptFog(modifier: StatusEffectFogModifier) =
41+
when {
42+
isDisabled -> true
43+
modifier.statusEffect == StatusEffects.BLINDNESS && noBlindness -> false
44+
modifier.statusEffect == StatusEffects.DARKNESS && noDarkness -> false
45+
else -> true
46+
}
47+
}

src/main/resources/lambda.accesswidener

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ transitive-accessible method net/minecraft/item/BlockItem placeFromNbt (Lnet/min
2626
transitive-accessible method net/minecraft/item/BlockItem postPlacement (Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/World;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;Lnet/minecraft/block/BlockState;)Z
2727
transitive-accessible method net/minecraft/item/BlockItem getPlaceSound (Lnet/minecraft/block/BlockState;)Lnet/minecraft/sound/SoundEvent;
2828
transitive-accessible field net/minecraft/state/State owner Ljava/lang/Object;
29+
accessible class net/minecraft/client/render/BackgroundRenderer$StatusEffectFogModifier
2930

3031
# Entity
3132
transitive-accessible field net/minecraft/entity/projectile/FireworkRocketEntity shooter Lnet/minecraft/entity/LivingEntity;

0 commit comments

Comments
 (0)