From aa42aedecd2d2842351088085e8fd9d69ec79565 Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Fri, 14 Apr 2017 07:58:16 +0300 Subject: Colourful lights --- ihl/model/TileEntityRendererDispatcherExt.java | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ihl/model/TileEntityRendererDispatcherExt.java (limited to 'ihl/model/TileEntityRendererDispatcherExt.java') diff --git a/ihl/model/TileEntityRendererDispatcherExt.java b/ihl/model/TileEntityRendererDispatcherExt.java new file mode 100644 index 0000000..d051a3b --- /dev/null +++ b/ihl/model/TileEntityRendererDispatcherExt.java @@ -0,0 +1,58 @@ +package ihl.model; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ihl.ClientProxy; +import ihl.IHLMod; +import ihl.enviroment.LightSource; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.tileentity.TileEntity; + +@SideOnly(Side.CLIENT) +public class TileEntityRendererDispatcherExt extends TileEntityRendererDispatcher { + + @Override + public void renderTileEntity(TileEntity tile, float partialTick) { + if (tile.getDistanceFrom(this.field_147560_j, this.field_147561_k, this.field_147558_l) < tile + .getMaxRenderDistanceSquared()) { + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + int brightnessBase = this.field_147550_f.getLightBrightnessForSkyBlocks(x, y, z, 0); + float red = 1f; + float green = 1f; + float blue = 1f; + int[] baseColour = new int[3]; + boolean lightAffected = false; + for (LightSource lightSource : ((ClientProxy) IHLMod.proxy).getLightHandler().lightSources) { + if (lightSource.isBlockIlluminated(x, y, z)) { + lightAffected = true; + int[] lightValue = lightSource.getLightValue(x, y, z, RenderBlocksExt.NULL_NORMAL[0]); + if ((brightnessBase & 240) < lightValue[0]) { + int colourFactor = lightValue[0] - (brightnessBase & 240); + brightnessBase &= RenderBlocksExt.MASK; + brightnessBase |= lightValue[0]; + baseColour[0] += lightValue[1] * colourFactor / 255; + baseColour[1] += lightValue[2] * colourFactor / 255; + baseColour[2] += lightValue[3] * colourFactor / 255; + } + } + } + if (lightAffected) { + RenderBlocksExt.normalizeColour(baseColour); + red = RenderBlocksExt.mixLightColour(red, baseColour[0]); + green = RenderBlocksExt.mixLightColour(green, baseColour[1]); + blue = RenderBlocksExt.mixLightColour(blue, baseColour[2]); + } + int j = brightnessBase % 65536; + int k = brightnessBase / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F); + GL11.glColor4f(red, green, blue, 1.0F); + this.renderTileEntityAt(tile, (double) x - staticPlayerX, (double) y - staticPlayerY, + (double) z - staticPlayerZ, partialTick); + } + } +} -- cgit v1.2.3