package crazypants.enderio.machine; import java.util.List; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; import com.enderio.core.api.client.render.IRenderFace; import com.enderio.core.client.render.CustomCubeRenderer; import com.enderio.core.client.render.CustomRenderBlocks; import com.enderio.core.client.render.RenderUtil; import com.enderio.core.common.util.BlockCoord; import com.enderio.core.common.util.ForgeDirectionOffsets; import com.enderio.core.common.vecmath.Vector3d; import com.enderio.core.common.vecmath.Vertex; public class OverlayRenderer implements IRenderFace { private static final CustomCubeRenderer ccr = CustomCubeRenderer.instance; private AbstractMachineEntity te; public void setTile(AbstractMachineEntity te) { this.te = te; } @SuppressWarnings("unchecked") @Override public void renderFace(CustomRenderBlocks rb, ForgeDirection face, Block par1Block, double x, double y, double z, IIcon texture, List<Vertex> refVertices, boolean translateToXyz) { if(te != null && par1Block instanceof AbstractMachineBlock) { BlockCoord bc = new BlockCoord(x, y, z); if(par1Block.isOpaqueCube()) { bc = bc.getLocation(face); } RenderUtil.setTesselatorBrightness(Minecraft.getMinecraft().theWorld, bc.x, bc.y, bc.z); Vector3d offset = ForgeDirectionOffsets.offsetScaled(face, 0.001); Tessellator.instance.addTranslation((float) offset.x, (float) offset.y, (float) offset.z); IoMode mode = te.getIoMode(face); IIcon tex = ((AbstractMachineBlock<AbstractMachineEntity>) par1Block).getOverlayIconForMode(te, face, mode); if(tex != null) { ccr.getCustomRenderBlocks().setRenderBoundsFromBlock(par1Block); ccr.getCustomRenderBlocks().doDefaultRenderFace(face, par1Block, x, y, z, tex); } Tessellator.instance.addTranslation(-(float) offset.x, -(float) offset.y, -(float) offset.z); } } }