diff --git a/common/mekanism/client/render/RenderPartTransmitter.java b/common/mekanism/client/render/RenderPartTransmitter.java index 111ab6969..031191c3e 100644 --- a/common/mekanism/client/render/RenderPartTransmitter.java +++ b/common/mekanism/client/render/RenderPartTransmitter.java @@ -23,6 +23,7 @@ import mekanism.common.util.MekanismUtils.ResourceType; import mekanism.common.util.TransporterUtils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.texture.IconRegister; @@ -42,13 +43,17 @@ import org.lwjgl.opengl.GL11; import codechicken.lib.colour.Colour; import codechicken.lib.colour.ColourRGBA; +import codechicken.lib.lighting.LazyLightMatrix; +import codechicken.lib.lighting.LightMatrix; import codechicken.lib.lighting.LightModel; import codechicken.lib.render.CCModel; import codechicken.lib.render.CCRenderState; import codechicken.lib.render.ColourMultiplier; +import codechicken.lib.render.IVertexModifier; import codechicken.lib.render.IconTransformation; import codechicken.lib.render.TextureUtils; import codechicken.lib.render.TextureUtils.IIconRegister; +import codechicken.lib.render.UV; import codechicken.lib.vec.Translation; import codechicken.lib.vec.Vector3; @@ -458,7 +463,7 @@ public class RenderPartTransmitter implements IIconRegister GL11.glPopMatrix(); } - public void renderStatic(PartSidedPipe transmitter) + public void renderStatic(PartSidedPipe transmitter, LazyLightMatrix olm) { TextureUtils.bindAtlas(0); CCRenderState.reset(); @@ -467,11 +472,11 @@ public class RenderPartTransmitter implements IIconRegister for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - renderSide(side, transmitter); + renderSide(side, transmitter, olm); } } - public void renderSide(ForgeDirection side, PartSidedPipe transmitter) + public void renderSide(ForgeDirection side, PartSidedPipe transmitter, LazyLightMatrix olm) { boolean connected = PartTransmitter.connectionMapContainsSide(transmitter.getAllCurrentConnections(), side); Icon renderIcon = transmitter.getIconForSide(side); @@ -483,7 +488,7 @@ public class RenderPartTransmitter implements IIconRegister c = new ColourRGBA(transmitter.getRenderColor().getColor(0), transmitter.getRenderColor().getColor(1), transmitter.getRenderColor().getColor(2), 1); } - renderPart(renderIcon, transmitter.getModelForSide(side, false), transmitter.x(), transmitter.y(), transmitter.z(), c); + renderPart(renderIcon, transmitter.getModelForSide(side, false), transmitter.x(), transmitter.y(), transmitter.z(), c, olm); } public void renderEnergySide(ForgeDirection side, PartUniversalCable cable) @@ -498,9 +503,9 @@ public class RenderPartTransmitter implements IIconRegister renderTransparency(tube.getTransmitterNetwork().refGas.getIcon(), tube.getModelForSide(side, true), new ColourRGBA(1.0, 1.0, 1.0, tube.currentScale)); } - public void renderPart(Icon icon, CCModel cc, double x, double y, double z, Colour color) + public void renderPart(Icon icon, CCModel cc, double x, double y, double z, Colour color, LazyLightMatrix olm) { - cc.render(0, cc.verts.length, new Translation(x, y, z), new IconTransformation(icon), color != null ? new ColourMultiplier(color) : null); + cc.render(0, cc.verts.length, new Translation(x, y, z), new IconTransformation(icon), new TransmitterTransformation(color, null)); } public void renderTransparency(Icon icon, CCModel cc, Colour colour) @@ -658,4 +663,43 @@ public class RenderPartTransmitter implements IIconRegister return display; } + + public static class TransmitterTransformation implements IVertexModifier + { + public ColourMultiplier colour; + public LightMatrix lightMatrix; + + public TransmitterTransformation(Colour color, LazyLightMatrix olm) + { + if(color != null) + { + colour = new ColourMultiplier(color); + } + + if(olm != null) + { + lightMatrix = olm.lightMatrix(); + } + } + + @Override + public void applyModifiers(CCModel m, Tessellator tess, Vector3 vec, UV uv, Vector3 normal, int i) + { + if(colour != null) + { + colour.applyModifiers(m, tess, vec, uv, normal, i); + } + + if(lightMatrix != null) + { + lightMatrix.applyModifiers(m, tess, vec, uv, normal, i); + } + } + + @Override + public boolean needsNormals() + { + return true; + } + } } diff --git a/common/mekanism/common/multipart/PartLogisticalTransporter.java b/common/mekanism/common/multipart/PartLogisticalTransporter.java index 5356189f2..bb3026d09 100644 --- a/common/mekanism/common/multipart/PartLogisticalTransporter.java +++ b/common/mekanism/common/multipart/PartLogisticalTransporter.java @@ -86,7 +86,10 @@ public class PartLogisticalTransporter extends PartSidedPipe implements ILogisti @SideOnly(Side.CLIENT) public void renderDynamic(Vector3 pos, float f, int pass) { - RenderPartTransmitter.getInstance().renderContents(this, f, pos); + if(pass == 1) + { + RenderPartTransmitter.getInstance().renderContents(this, f, pos); + } } @Override diff --git a/common/mekanism/common/multipart/PartMechanicalPipe.java b/common/mekanism/common/multipart/PartMechanicalPipe.java index d1bd3f63d..ac97f76c8 100644 --- a/common/mekanism/common/multipart/PartMechanicalPipe.java +++ b/common/mekanism/common/multipart/PartMechanicalPipe.java @@ -201,7 +201,10 @@ public class PartMechanicalPipe extends PartTransmitter implements @SideOnly(Side.CLIENT) public void renderDynamic(Vector3 pos, float f, int pass) { - RenderPartTransmitter.getInstance().renderContents(this, pos); + if(pass == 1) + { + RenderPartTransmitter.getInstance().renderContents(this, pos); + } } @Override diff --git a/common/mekanism/common/multipart/PartPressurizedTube.java b/common/mekanism/common/multipart/PartPressurizedTube.java index ec9efd4d5..3c33d72ae 100644 --- a/common/mekanism/common/multipart/PartPressurizedTube.java +++ b/common/mekanism/common/multipart/PartPressurizedTube.java @@ -207,7 +207,10 @@ public class PartPressurizedTube extends PartTransmitter @SideOnly(Side.CLIENT) public void renderDynamic(Vector3 pos, float f, int pass) { - RenderPartTransmitter.getInstance().renderContents(this, pos); + if(pass == 1) + { + RenderPartTransmitter.getInstance().renderContents(this, pos); + } } @Override diff --git a/common/mekanism/common/multipart/PartSidedPipe.java b/common/mekanism/common/multipart/PartSidedPipe.java index 4b697395e..07e72d4aa 100644 --- a/common/mekanism/common/multipart/PartSidedPipe.java +++ b/common/mekanism/common/multipart/PartSidedPipe.java @@ -291,7 +291,10 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, @SideOnly(Side.CLIENT) public void renderStatic(Vector3 pos, LazyLightMatrix olm, int pass) { - RenderPartTransmitter.getInstance().renderStatic(this); + if(pass == 1) + { + RenderPartTransmitter.getInstance().renderStatic(this, olm); + } } @Override