package com.jaquadro.minecraft.gardentrees.client.renderer;
import com.jaquadro.minecraft.gardencore.block.BlockGarden;
import com.jaquadro.minecraft.gardentrees.block.BlockThinLog;
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.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
public class ThinLogRenderer implements ISimpleBlockRenderingHandler
{
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
block.setBlockBoundsForItemRender();
renderer.setRenderBoundsFromBlock(block);
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
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, 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));
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));
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));
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));
tessellator.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
@Override
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockThinLog))
return false;
return renderWorldBlock(world, x, y, z, (BlockThinLog) block, modelId, renderer);
}
private boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, BlockThinLog block, int modelId, RenderBlocks renderer) {
float margin = block.getMargin();
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;
boolean connectY = connectYNeg | connectYPos;
boolean connectZ = connectZNeg | connectZPos;
boolean connectX = connectXNeg | connectXPos;
if (!(connectYNeg && connectYPos) && !(connectZNeg && connectZPos) && !(connectXNeg && connectXPos)) {
if (connectY && !connectX && !connectZ)
block.setOrientation(0);
else if (connectZ && !connectY && !connectX)
block.setOrientation(1);
else if (connectX && !connectY && !connectZ)
block.setOrientation(2);
else
block.setOrientation(3);
renderer.setRenderBounds(margin, margin, margin, 1 - margin, 1 - margin, 1 - margin);
renderer.renderStandardBlock(block, x, y, z);
}
if (connectY) {
block.setOrientation(0);
if (connectYNeg && connectYPos)
renderer.setRenderBounds(margin, 0, margin, 1 - margin, 1, 1 - margin);
else if (connectYNeg)
renderer.setRenderBounds(margin, 0, margin, 1 - margin, margin, 1 - margin);
else if (connectYPos)
renderer.setRenderBounds(margin, 1 - margin, margin, 1 - margin, 1, 1 - margin);
renderer.renderStandardBlock(block, x, y, z);
}
if (connectZ) {
block.setOrientation(1);
if (connectZNeg && connectZPos)
renderer.setRenderBounds(margin, margin, 0, 1 - margin, 1 - margin, 1);
else if (connectZNeg)
renderer.setRenderBounds(margin, margin, 0, 1 - margin, 1 - margin, margin);
else if (connectZPos)
renderer.setRenderBounds(margin, margin, 1 - margin, 1 - margin, 1 - margin, 1);
renderer.renderStandardBlock(block, x, y, z);
}
if (connectX) {
block.setOrientation(2);
if (connectXNeg && connectXPos)
renderer.setRenderBounds(0, margin, margin, 1, 1 - margin, 1 - margin);
else if (connectXNeg)
renderer.setRenderBounds(0, margin, margin, margin, 1 - margin, 1 - margin);
else if (connectXPos)
renderer.setRenderBounds(1 - margin, margin, margin, 1, 1 - margin, 1 - margin);
renderer.renderStandardBlock(block, x, y, z);
}
block.setOrientation(0);
//renderer.renderStandardBlock(block, x, y, z);
Block blockUnder = world.getBlock(x, y - 1, z);
if (blockUnder instanceof BlockGarden) {
float yDiff = ((BlockGarden) blockUnder).getSlotProfile().getPlantOffsetY(world, x, y, z, 0);
if (yDiff >= (1 - .0625f) * 2) {
//Tessellator tessellator = Tessellator.instance;
//tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
//tessellator.setColorOpaque_F(1f, 1f, 1f);
// block.setBlockBounds(margin, -.0625f, margin, 1 - margin, 0, 1 - margin);
renderer.setRenderBounds(margin, yDiff, margin, 1 - margin, 1, 1 - margin);
renderer.renderStandardBlock(block, x, y - 1, z);
//IIcon sideIcon = block.getIcon(2, world.getBlockMetadata(x, y, z));
//renderer.renderFaceXNeg(block, x, y - 1, z, sideIcon);
//renderer.renderFaceXPos(block, x, y - 1, z, sideIcon);
//renderer.renderFaceZNeg(block, x, y - 1, z, sideIcon);
//renderer.renderFaceZPos(block, x, y - 1, z, sideIcon);
// block.setBlockBoundsForItemRender();
renderer.setRenderBoundsFromBlock(block);
}
}
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return true;
}
@Override
public int getRenderId () {
return ClientProxy.thinLogRenderID;
}
}