package com.jaquadro.minecraft.gardenstuff.renderer;
import com.jaquadro.minecraft.gardencore.client.renderer.support.ModularBoxRenderer;
import com.jaquadro.minecraft.gardenstuff.block.BlockFence;
import com.jaquadro.minecraft.gardenstuff.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.world.IBlockAccess;
public class FenceRenderer implements ISimpleBlockRenderingHandler
{
private static final float UN4 = .0625f * -4;
private static final float U1 = .0625f * 1 - .001f;
private static final float U7 = .0625f * 7 + .001f;
private static final float U8 = .0625f * 8;
private static final float U9 = .0625f * 9 - .001f;
private static final float U15 = .0625f * 15 + .001f;
private static final float U20 = .0625f * 20;
private ModularBoxRenderer boxRenderer = new ModularBoxRenderer();
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
}
@Override
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockFence))
return false;
return renderWorldBlock(world, x, y, z, (BlockFence) block, modelId, renderer);
}
private boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, BlockFence block, int modelId, RenderBlocks renderer) {
int meta = world.getBlockMetadata(x, y, z);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
boxRenderer.setUnit(0);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
boxRenderer.setIcon(block.getIcon(meta));
boxRenderer.flipOpposite = false;
int connectFlags = block.calcConnectionFlags(world, x, y, z);
boolean connectYNeg = (connectFlags & 1) != 0;
boolean connectYPos = (connectFlags & 2) != 0;
boolean connectZNeg = (connectFlags & 4) != 0;
boolean connectZPos = (connectFlags & 8) != 0;
boolean connectXNeg = (connectFlags & 16) != 0;
boolean connectXPos = (connectFlags & 32) != 0;
boxRenderer.renderSolidBox(world, block, x, y, z, U7, 0, U7, U9, 1, U9);
if (block.getPostInterval(meta) == 8) {
if (connectZNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, 0, 0, U9, 1, U1);
if (connectZPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, 0, U15, U9, 1, 1);
if (connectXNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, 0, 0, U7, U1, 1, U9);
if (connectXPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U15, 0, U7, 1, 1, U9);
}
boxRenderer.flipOpposite = true;
boolean fenceBelow = block.isFenceBelow(world, x, y, z);
boolean abNN = connectYNeg && !fenceBelow && !connectYPos;
boolean abYY = connectYNeg && fenceBelow && connectYPos;
if (abNN)
boxRenderer.setIcon(block.getIconTB(meta));
float yN = 0;
float yP = 1;
if (!(abNN || abYY)) {
if (connectYPos)
yN = U8;
else if (connectYNeg)
yP = U8;
}
if (connectZNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, 0, U8, yP, U8);
if (connectZPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, U8, U8, yP, 1);
if (connectXNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, 0, yN, U8, U8, yP, U8);
if (connectXPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, U8, 1, yP, U8);
if (!(abNN || abYY)) {
if (connectYPos) {
yN = 0;
yP = U8;
}
else if (connectYNeg) {
yN = U8;
yP = 1;
}
boxRenderer.setIcon(block.getIconTB(meta));
if (connectZNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, 0, U8, yP, U8);
if (connectZPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, U8, U8, yP, 1);
if (connectXNeg)
boxRenderer.renderSolidBox(world, block, x, y, z, 0, yN, U8, U8, yP, U8);
if (connectXPos)
boxRenderer.renderSolidBox(world, block, x, y, z, U8, yN, U8, 1, yP, U8);
}
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return false;
}
@Override
public int getRenderId () {
return ClientProxy.fenceRenderID;
}
}