package crazypants.enderio.material; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; import com.enderio.core.client.render.ConnectedTextureRenderer; import com.enderio.core.client.render.ConnectedTextureRenderer.DefaultTextureCallback; import com.enderio.core.client.render.CustomCubeRenderer; import com.enderio.core.client.render.RenderUtil; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import crazypants.enderio.EnderIO; import crazypants.enderio.conduit.render.ConduitBundleRenderer.FacadeAccessWrapper; import crazypants.enderio.config.Config; import crazypants.enderio.machine.painter.PainterUtil; import crazypants.enderio.machine.painter.TileEntityPaintedBlock; public class FusedQuartzRenderer implements ISimpleBlockRenderingHandler { static int renderPass; private ConnectedTextureRenderer connectedTextureRenderer = new ConnectedTextureRenderer() { @Override public boolean matchesMetadata(int meta1, int meta2) { return super.matchesMetadata(meta1, meta2) || BlockFusedQuartz.Type.byMeta(meta1).connectTo(meta2); } }; public FusedQuartzRenderer() { connectedTextureRenderer.setMatchMeta(!Config.clearGlassConnectToFusedQuartz); } @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { renderer.setOverrideBlockTexture(EnderIO.blockFusedQuartz.getItemIcon(metadata)); renderer.renderBlockAsItem(Blocks.glass, 0, 1); renderer.clearOverrideBlockTexture(); } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return BlockFusedQuartz.renderId; } @Override public boolean renderWorldBlock(IBlockAccess blockAccess, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { int meta = blockAccess.getBlockMetadata(x, y, z); //TODO:1.7 this makes it go splat //if((meta == 0 && renderPass != 0) || (meta == 1 && renderPass == 0)) { TileEntityPaintedBlock tecb = null; TileEntity te = blockAccess.getTileEntity(x, y, z); if(te instanceof TileEntityPaintedBlock) { tecb = (TileEntityPaintedBlock) te; } if(renderer.hasOverrideBlockTexture()) { renderer.renderStandardBlock(block, x, y, z); } else { IBlockAccess origBa = renderer.blockAccess; renderer.blockAccess = new FacadeAccessWrapper(origBa); try { renderFrame(renderer.blockAccess, x, y, z, tecb, false, meta); } finally { renderer.blockAccess = origBa; } } // } return true; } public void renderFrameItem(ItemStack stack) { RenderUtil.bindBlockTexture(); Tessellator.instance.startDrawingQuads(); TileEntityPaintedBlock tecb = new TileEntityPaintedBlock(); tecb.setSourceBlock(PainterUtil.getSourceBlock(stack)); tecb.setSourceBlockMetadata(PainterUtil.getSourceBlockMetadata(stack)); renderFrame(null, 0, 0, 0, tecb, true, stack.getItemDamage()); Tessellator.instance.draw(); } private void renderFrame(IBlockAccess blockAccess, int x, int y, int z, TileEntityPaintedBlock tecb, boolean forceAllEdges, int meta) { if(blockAccess == null) { //No lighting IIcon texture = EnderIO.blockFusedQuartz.getItemIcon(meta); for (ForgeDirection face : ForgeDirection.VALID_DIRECTIONS) { if(tecb != null && tecb.getSourceBlock() != null) { texture = tecb.getSourceBlock().getIcon(face.ordinal(), tecb.getSourceBlockMetadata()); } RenderUtil.renderConnectedTextureFace(blockAccess, EnderIO.blockFusedQuartz, x, y, z, face, texture, forceAllEdges); } return; } CustomCubeRenderer.instance.setOverrideTexture(EnderIO.blockFusedQuartz.getIcon(0, meta)); if(tecb != null && tecb.getSourceBlock() != null) { connectedTextureRenderer.setEdgeTexureCallback(new DefaultTextureCallback(tecb.getSourceBlock(), tecb.getSourceBlockMetadata())); CustomCubeRenderer.instance.renderBlock(blockAccess, EnderIO.blockFusedQuartz, x, y, z, connectedTextureRenderer); } else { connectedTextureRenderer.setEdgeTexture(EnderIO.blockFusedQuartz.getDefaultFrameIcon(meta)); CustomCubeRenderer.instance.renderBlock(blockAccess, EnderIO.blockFusedQuartz, x, y, z, connectedTextureRenderer); } CustomCubeRenderer.instance.setOverrideTexture(null); } }