package advancedsystemsmanager.client.render;
import advancedsystemsmanager.blocks.BlockTileElement;
import advancedsystemsmanager.registry.ClusterRegistry;
import advancedsystemsmanager.tileentities.TileEntityCamouflage;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderCamouflage implements ISimpleBlockRenderingHandler
{
private int id;
public RenderCamouflage()
{
id = RenderingRegistry.getNextAvailableRenderId();
BlockTileElement.RENDER_ID = id;
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
{
block.setBlockBoundsForItemRender();
renderer.setRenderBoundsFromBlock(block);
GL11.glPushMatrix();
GL11.glRotatef(90, 0, 1, 0);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, metadata));
tessellator.setNormal(0F, 1F, 0F);
renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(1, metadata));
tessellator.setNormal(0.0F, 0.0F, -1.0F);
renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, metadata));
tessellator.setNormal(0.0F, 0.0F, 1.0F);
renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, metadata));
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(4, metadata));
tessellator.setNormal(1.0F, 0.0F, 0.0F);
renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, metadata));
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
{
Tessellator.instance.setColorOpaque_F(1F, 1F, 1F);
if (block instanceof BlockTileElement)
{
TileEntityCamouflage camouflage = ClusterRegistry.CAMO.getTileEntity(world, x, y, z);
if (camouflage != null)
{
block.setBlockBoundsBasedOnState(world, x, y, z);
double maxX = block.getBlockBoundsMaxX();
double maxY = block.getBlockBoundsMaxY();
double maxZ = block.getBlockBoundsMaxZ();
double minX = block.getBlockBoundsMinX();
double minY = block.getBlockBoundsMinY();
double minZ = block.getBlockBoundsMinZ();
IBlockAccess renderWorld = renderer.blockAccess;
// for (int i = 0; i< 6; i++)
int i = 0;
{
setBlockBounds(renderer, minX, minY, minZ, maxX, maxY, maxZ, i);
if (camouflage.hasSideBlock(i))
{
renderer.blockAccess = new CamouflageBlockAccess(i, camouflage, renderWorld);
renderer.renderBlockByRenderType(camouflage.getSideBlock(i), x, y, z);
} else
{
renderer.renderStandardBlock(block, x, y, z);
}
}
if (camouflage.getCamouflageType().useDoubleRendering())
{
setBlockBounds(renderer, minX + 0.0015D, minY + 0.0015D, minZ + 0.0015D, maxX - 0.0015D, maxY - 0.0015D, maxZ - 0.0015D, i);
if (camouflage.hasSideBlock(1))
{
if (renderer.blockAccess == renderWorld)
{
renderer.blockAccess = new CamouflageBlockAccess(1, camouflage, renderWorld);
}
renderer.renderBlockByRenderType(camouflage.getSideBlock(1), x, y, z);
}
}
renderer.unlockBlockBounds();
renderer.blockAccess = renderWorld;
} else
{
block.setBlockBoundsForItemRender();
renderer.setRenderBoundsFromBlock(block);
renderer.renderStandardBlock(block, x, y, z);
}
return true;
}
return false;
}
private static void setBlockBounds(RenderBlocks renderer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, int side)
{
renderer.overrideBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
}
@Override
public boolean shouldRender3DInInventory(int modelId)
{
return true;
}
@Override
public int getRenderId()
{
return id;
}
}