package com.jaquadro.minecraft.gardentrees.client.renderer;
import com.jaquadro.minecraft.gardentrees.block.BlockThinLogFence;
import com.jaquadro.minecraft.gardentrees.core.ClientProxy;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
public class ThinLogFenceRenderer implements ISimpleBlockRenderingHandler
{
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockThinLogFence))
return;
renderInventoryBlock((BlockThinLogFence) block, metadata, modelId, renderer);
}
public void renderInventoryBlock (BlockThinLogFence block, int metadata, int modelId, RenderBlocks renderer) {
block.setBlockBoundsForItemRender();
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
Tessellator tessellator = Tessellator.instance;
GL11.glTranslatef(-0.5f, 0, 0);
renderer.setRenderBoundsFromBlock(block);
renderPostAtOrigin(block, metadata, renderer, tessellator);
renderSideAtOrigin(block, metadata, renderer, tessellator, .5f, 1);
GL11.glTranslatef(1f, 0, 0);
renderer.setRenderBoundsFromBlock(block);
renderPostAtOrigin(block, metadata, renderer, tessellator);
renderSideAtOrigin(block, metadata, renderer, tessellator, 0, .5f);
GL11.glTranslatef(-.5f, 0, 0);
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
private void renderSideAtOrigin (BlockThinLogFence block, int metadata, RenderBlocks renderer, Tessellator tessellator, float xs, float xe) {
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1.0F);
renderer.setRenderBounds(xs, 0, 0, xe, 1, 1);
renderer.renderFaceZNeg(block, 0, 0, .5f, block.getSideIcon());
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, 1.0F);
renderer.setRenderBounds(xs, 0, 0, xe, 1, 1);
renderer.renderFaceZPos(block, 0, 0, -.5f, block.getSideIcon());
tessellator.draw();
}
private void renderPostAtOrigin (BlockThinLogFence block, int metadata, RenderBlocks renderer, Tessellator tessellator) {
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 1.0F, 0.0F);
renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata));
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1.0F);
renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata));
renderer.renderFaceZNeg(block, 0, 0, .5f, block.getSideIcon());
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, 1.0F);
renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata));
renderer.renderFaceZPos(block, 0, 0, -.5f, block.getSideIcon());
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata));
renderer.renderFaceXNeg(block, .5f, 0, 0, block.getSideIcon());
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(1.0F, 0.0F, 0.0F);
renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata));
renderer.renderFaceXPos(block, -.5f, 0, 0, block.getSideIcon());
tessellator.draw();
}
@Override
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockThinLogFence))
return false;
return renderWorldBlock(world, x, y, z, (BlockThinLogFence) block, modelId, renderer);
}
private boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, BlockThinLogFence block, int modelId, RenderBlocks renderer) {
float margin = block.getMargin();
renderer.setRenderBounds(margin, 0, margin, 1 - margin, 1, 1 - margin);
renderer.renderStandardBlock(block, x, y, z);
IIcon sideIcon = block.getSideIcon();
boolean connectedZNeg = block.canConnectFenceTo(world, x, y, z - 1);
boolean connectedZPos = block.canConnectFenceTo(world, x, y, z + 1);
boolean connectedXNeg = block.canConnectFenceTo(world, x - 1, y, z);
boolean connectedXPos = block.canConnectFenceTo(world, x + 1, y, z);
if (connectedXNeg || connectedXPos) {
if (connectedXNeg && connectedXPos)
renderer.setRenderBounds(0, 0, .5, 1, 1, .5);
else if (connectedXNeg)
renderer.setRenderBounds(0, 0, .5, .5, 1, .5);
else if (connectedXPos)
renderer.setRenderBounds(.5, 0, .5, 1, 1, .5);
renderer.flipTexture = true;
renderer.renderFaceZNeg(block, x, y, z, sideIcon);
renderer.flipTexture = false;
renderer.renderFaceZPos(block, x, y, z, sideIcon);
}
if (connectedZNeg || connectedZPos) {
if (connectedZNeg && connectedZPos)
renderer.setRenderBounds(.5, 0, 0, .5, 1, 1);
else if (connectedZNeg)
renderer.setRenderBounds(.5, 0, 0, .5, 1, .5f);
else if (connectedZPos)
renderer.setRenderBounds(.5, 0, .5f, .5, 1, 1);
renderer.flipTexture = true;
renderer.renderFaceXPos(block, x, y, z, sideIcon);
renderer.flipTexture = false;
renderer.renderFaceXNeg(block, x, y, z, sideIcon);
}
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return true;
}
@Override
public int getRenderId () {
return ClientProxy.thinLogFenceRenderID;
}
}