mirror of
https://github.com/GTNewHorizons/Angelica.git
synced 2026-10-25 20:22:22 +00:00
Fix signs being ungodly bright (#2185)
This commit is contained in:
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,
|
||||
|
||||
+1
-11
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+16
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user