package com.jaquadro.minecraft.gardencontainers.client.renderer;
import com.jaquadro.minecraft.gardencontainers.block.BlockLargePot;
import com.jaquadro.minecraft.gardencontainers.block.tile.TileEntityLargePot;
import com.jaquadro.minecraft.gardencontainers.core.ClientProxy;
import com.jaquadro.minecraft.gardencore.client.renderer.support.ModularBoxRenderer;
import com.jaquadro.minecraft.gardencore.util.RenderHelper;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.IIcon;
import net.minecraft.world.ColorizerGrass;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
public class LargePotRenderer implements ISimpleBlockRenderingHandler
{
private ModularBoxRenderer boxRenderer = new ModularBoxRenderer();
private float[] colorScratch = new float[3];
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockLargePot))
return;
renderInventoryBlock((BlockLargePot) block, metadata, modelId, renderer);
}
private void renderInventoryBlock (BlockLargePot block, int metadata, int modelId, RenderBlocks renderer) {
IIcon icon = renderer.getBlockIconFromSideAndMetadata(block, 1, metadata & 15);
boolean blendEnabled = GL11.glIsEnabled(GL11.GL_BLEND);
if (blendEnabled)
GL11.glDisable(GL11.GL_BLEND);
GL11.glDepthMask(true);
boxRenderer.setUnit(.0625);
boxRenderer.setIcon(icon);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
GL11.glRotatef(90, 0, 1, 0);
GL11.glTranslatef(-.5f, -.5f, -.5f);
boxRenderer.renderBox(null, block, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ModularBoxRenderer.CUT_YPOS);
GL11.glEnable(GL11.GL_BLEND);
if ((metadata & 0xFF00) != 0) {
int cutFlags = ModularBoxRenderer.CUT_YPOS | ModularBoxRenderer.CUT_YNEG;
boxRenderer.setUnit(0);
boxRenderer.setIcon(block.getOverlayIcon((metadata >> 8) & 255));
boxRenderer.renderExterior(null, block, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, cutFlags);
}
if (!blendEnabled)
GL11.glDisable(GL11.GL_BLEND);
GL11.glTranslatef(.5f, .5f, .5f);
}
@Override
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockLargePot))
return false;
try {
if (ClientProxy.renderPass == 0)
return renderWorldBlockPass0(world, x, y, z, (BlockLargePot) block, modelId, renderer);
else if (ClientProxy.renderPass == 1)
return renderWorldBlockPass1(world, x, y, z, (BlockLargePot) block, modelId, renderer);
}
catch (Exception e) { }
return false;
}
private boolean renderWorldBlockPass0 (IBlockAccess world, int x, int y, int z, BlockLargePot block, int modelId, RenderBlocks renderer) {
int metadata = world.getBlockMetadata(x, y, z);
boxRenderer.setUnit(.0625);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
for (int i = 0; i < 6; i++)
boxRenderer.setIcon(renderer.getBlockIconFromSideAndMetadata(block, i, metadata), i);
TileEntityLargePot te = block.getTileEntity(world, x, y, z);
int connectFlags = 0;
connectFlags |= te.isAttachedNeighbor(x - 1, y, z - 1) ? ModularBoxRenderer.CONNECT_ZNEG_XNEG : 0;
connectFlags |= te.isAttachedNeighbor(x, y, z - 1) ? ModularBoxRenderer.CONNECT_ZNEG : 0;
connectFlags |= te.isAttachedNeighbor(x + 1, y, z - 1) ? ModularBoxRenderer.CONNECT_ZNEG_XPOS : 0;
connectFlags |= te.isAttachedNeighbor(x - 1, y, z) ? ModularBoxRenderer.CONNECT_XNEG : 0;
connectFlags |= te.isAttachedNeighbor(x + 1, y, z) ? ModularBoxRenderer.CONNECT_XPOS : 0;
connectFlags |= te.isAttachedNeighbor(x - 1, y, z + 1) ? ModularBoxRenderer.CONNECT_ZPOS_XNEG : 0;
connectFlags |= te.isAttachedNeighbor(x, y, z + 1) ? ModularBoxRenderer.CONNECT_ZPOS : 0;
connectFlags |= te.isAttachedNeighbor(x + 1, y, z + 1) ? ModularBoxRenderer.CONNECT_ZPOS_XPOS : 0;
boxRenderer.renderBox(world, block, x, y, z, 0, 0, 0, 1, 1, 1, connectFlags, ModularBoxRenderer.CUT_YPOS);
if (te != null && te.getSubstrate() != null && te.getSubstrate().getItem() instanceof ItemBlock) {
Block substrate = Block.getBlockFromItem(te.getSubstrate().getItem());
int substrateData = te.getSubstrate().getItemDamage();
if (substrate != Blocks.water) {
IIcon substrateIcon = renderer.getBlockIconFromSideAndMetadata(substrate, 1, substrateData);
int color = substrate.colorMultiplier(world, x, y, z);
if (color == Blocks.grass.colorMultiplier(world, x, y, z))
color = ColorizerGrass.getGrassColor(te.getBiomeTemperature(), te.getBiomeHumidity());
RenderHelper.calculateBaseColor(colorScratch, color);
RenderHelper.instance.setRenderBounds(0, 0, 0, 1, 1 - .0625, 1);
RenderHelper.instance.renderFace(RenderHelper.YPOS, world, block, x, y, z, substrateIcon, colorScratch[0], colorScratch[1], colorScratch[2]);
}
}
return true;
}
private boolean renderWorldBlockPass1 (IBlockAccess world, int x, int y, int z, BlockLargePot block, int modelId, RenderBlocks renderer) {
TileEntityLargePot tileEntity = block.getTileEntity(world, x, y, z);
if (tileEntity == null) {
RenderHelper.instance.renderEmptyPlane(x, y, z);
return true;
}
boolean didRender = false;
IIcon icon = block.getOverlayIcon(tileEntity.getCarving());
if (icon != null) {
int connectFlags = 0;
int cutFlags = ModularBoxRenderer.CUT_YPOS | ModularBoxRenderer.CUT_YNEG;
connectFlags |= tileEntity.isAttachedNeighbor(x, y, z - 1) ? ModularBoxRenderer.CONNECT_ZNEG : 0;
connectFlags |= tileEntity.isAttachedNeighbor(x - 1, y, z) ? ModularBoxRenderer.CONNECT_XNEG : 0;
connectFlags |= tileEntity.isAttachedNeighbor(x + 1, y, z) ? ModularBoxRenderer.CONNECT_XPOS : 0;
connectFlags |= tileEntity.isAttachedNeighbor(x, y, z + 1) ? ModularBoxRenderer.CONNECT_ZPOS : 0;
if (connectFlags != (ModularBoxRenderer.CONNECT_XNEG | ModularBoxRenderer.CONNECT_XPOS | ModularBoxRenderer.CONNECT_ZNEG | ModularBoxRenderer.CONNECT_ZPOS)) {
boxRenderer.setUnit(0);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
boxRenderer.setExteriorIcon(icon);
boxRenderer.renderExterior(world, block, x, y, z, 0, 0, 0, 1, 1, 1, connectFlags, cutFlags);
didRender = true;
}
}
if (tileEntity.getSubstrate() != null && tileEntity.getSubstrate().getItem() instanceof ItemBlock) {
Block substrate = Block.getBlockFromItem(tileEntity.getSubstrate().getItem());
int substrateData = tileEntity.getSubstrate().getItemDamage();
if (substrate == Blocks.water) {
IIcon substrateIcon = renderer.getBlockIconFromSideAndMetadata(substrate, 1, substrateData);
RenderHelper.instance.state.setRenderBounds(0, 0, 0, 1, 1 - .0625, 1);
RenderHelper.instance.renderFace(RenderHelper.YPOS, world, block, x, y, z, substrateIcon);
didRender = true;
}
}
if (!didRender)
RenderHelper.instance.renderEmptyPlane(x, y, z);
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return true;
}
@Override
public int getRenderId () {
return ClientProxy.largePotRenderID;
}
}