Fix signs being ungodly bright (#2185)

This commit is contained in:
Eclipse-Sol authored and GitHub committed 2026-10-02 22:49:38 +00:00
1 parent 8387b4e9cd
commit bc08e4baed
5 files changed
+51 -12

No files matched your search

@@ -30,6 +30,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import org.embeddedt.embeddium.impl.render.viewport.Viewport;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -368,6 +369,15 @@ public class DynamicLights {
return this.getLightmapWithDynamicLight(this.getDynamicLightLevel(x, y, z), lightmap);
}
public static int addDynamicLight(IBlockAccess world, int x, int y, int z, int lightmap) {
if (!isEnabled()) return lightmap;
final DynamicLights dl = get();
if (!dl.hasLightSources()) return lightmap;
final double dynamicLightLevel = dl.getDynamicLightLevel(x, y, z);
if (dynamicLightLevel > 0 && !world.getBlock(x, y, z).isOpaqueCube()) return dl.getLightmapWithDynamicLight(dynamicLightLevel, lightmap);
return lightmap;
}
public List<IDynamicLightSource> getSourcesForChunk(int chunkMinX, int chunkMinY, int chunkMinZ) {
// Chunk center
final double centerX = chunkMinX + 8.0;
@@ -0,0 +1,20 @@
package com.gtnewhorizons.angelica.rendering.tesr;
import com.gtnewhorizons.angelica.dynamiclights.DynamicLights;
import net.minecraft.block.Block;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
/** Try to replicate modern behavior for when shaderpacks are in use.*/
public final class TileEntityLight {
private TileEntityLight() {}
public static int packedLight(World world, int x, int y, int z, int vanillaLight) {
final Block block = world.getBlock(x, y, z);
if (!block.getUseNeighborBrightness() || block.getLightOpacity() != 0) return vanillaLight;
final int sky = world.provider.hasNoSky ? 0 : world.getSavedLightValue(EnumSkyBlock.Sky, x, y, z);
final int blockLight = Math.max(world.getSavedLightValue(EnumSkyBlock.Block, x, y, z), block.getLightValue(world, x, y, z));
return DynamicLights.addDynamicLight(world, x, y, z, sky << 20 | blockLight << 4);
}
}
@@ -11,6 +11,7 @@ import com.gtnewhorizons.angelica.glsm.profiling.Tracy;
import com.gtnewhorizons.angelica.profiling.RenderClassTimings;
import com.gtnewhorizons.angelica.rendering.tesr.ModelPartBatcher;
import com.gtnewhorizons.angelica.rendering.tesr.TesrBatchRenderer;
import com.gtnewhorizons.angelica.rendering.tesr.TileEntityLight;
import com.gtnewhorizons.angelica.glsm.RenderSystem;
import com.gtnewhorizons.angelica.rendering.PlayerReflectionCapture;
import com.gtnewhorizons.angelica.rendering.RenderingState;
@@ -53,6 +54,7 @@ import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.profiler.Profiler;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import org.embeddedt.embeddium.impl.render.viewport.Viewport;
import org.embeddedt.embeddium.impl.render.viewport.ViewportProvider;
import org.joml.Matrix4f;
@@ -769,7 +771,8 @@ public class ShadowRenderer {
}
}
}
int brightness = tile.getWorldObj().getLightBrightnessForSkyBlocks(tile.xCoord, tile.yCoord, tile.zCoord, 0);
final World world = tile.getWorldObj();
int brightness = TileEntityLight.packedLight(world, tile.xCoord, tile.yCoord, tile.zCoord, world.getLightBrightnessForSkyBlocks(tile.xCoord, tile.yCoord, tile.zCoord, 0));
GLStateManager.setLightmapTextureCoords(GL13.GL_TEXTURE1, (float) brightness % 65536, (float) brightness / 65536);
GLStateManager.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
TileEntityRendererDispatcher.instance.renderTileEntityAt(tile,
@@ -3,11 +3,9 @@ package com.gtnewhorizons.angelica.mixins.early.angelica.dynamiclights;
import com.gtnewhorizons.angelica.dynamiclights.DynamicLights;
import com.gtnewhorizons.angelica.dynamiclights.IDynamicLightSource;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -15,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(World.class)
public abstract class MixinWorld {
@Shadow
public abstract Block getBlock(int p_147439_1_, int p_147439_2_, int p_147439_3_);
@Inject(method = "onEntityRemoved", at = @At("HEAD"))
private void angelica$removeEntity(Entity entity, CallbackInfo ci) {
if (entity.worldObj.isRemote && entity instanceof IDynamicLightSource lightSource) {
@@ -27,12 +22,7 @@ public abstract class MixinWorld {
@ModifyReturnValue(method = "getLightBrightnessForSkyBlocks", at = @At(value = "RETURN"))
private int angelica$dynamiclights_getLightBrightnessForSkyBlocks(int lightmap, int x, int y, int z, int p_72802_4_){
if (!DynamicLights.isEnabled()) return lightmap;
final DynamicLights dl = DynamicLights.get();
if (!dl.hasLightSources()) return lightmap;
final double dynamicLightLevel = dl.getDynamicLightLevel(x, y, z);
if (dynamicLightLevel > 0 && !getBlock(x, y, z).isOpaqueCube()) return dl.getLightmapWithDynamicLight(dynamicLightLevel, lightmap);
return lightmap;
return DynamicLights.addDynamicLight((World) (Object) this, x, y, z, lightmap);
}
}
@@ -7,15 +7,25 @@ import com.gtnewhorizons.angelica.rendering.tesr.PassRebindGate;
import com.gtnewhorizons.angelica.rendering.tesr.TesrAttribution;
import com.gtnewhorizons.angelica.rendering.RenderRecovery;
import com.gtnewhorizons.angelica.rendering.tesr.TesrProviderDispatch;
import com.gtnewhorizons.angelica.rendering.tesr.TileEntityLight;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.sugar.Local;
import com.prupe.mcpatcher.ctm.CTMUtils;
import net.coderbot.iris.uniforms.CapturedRenderingState;
import net.irisshaders.iris.api.v0.IrisApi;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(TileEntityRendererDispatcher.class)
public class MixinTileEntityRendererDispatcher {
@Shadow
public World field_147550_f;
@Surround(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntity;DDDF)V")
private void iris$beginBlockEntity(TileEntity te, double x, double y, double z, float partialTicks) {
RenderRecovery.throwIfCrashTestArmed();
@@ -35,4 +45,10 @@ public class MixinTileEntityRendererDispatcher {
TesrAttribution.currentRenderable = prevRenderable;
GLStateManager.popStateTo(blendDepth);
}
@ModifyExpressionValue(method = "renderTileEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getLightBrightnessForSkyBlocks(IIII)I"))
private int iris$tileEntityLight(int vanillaLight, @Local(argsOnly = true) TileEntity te) {
if (!IrisApi.getInstance().isShaderPackInUse()) return vanillaLight;
return TileEntityLight.packedLight(field_147550_f, te.xCoord, te.yCoord, te.zCoord, vanillaLight);
}
}