package com.jaquadro.minecraft.gardencontainers.client.renderer;
import com.jaquadro.minecraft.gardencontainers.block.BlockWindowBox;
import com.jaquadro.minecraft.gardencontainers.block.tile.TileEntityWindowBox;
import com.jaquadro.minecraft.gardencontainers.core.ClientProxy;
import com.jaquadro.minecraft.gardencore.block.support.Slot5Profile;
import com.jaquadro.minecraft.gardencore.block.tile.TileEntityGarden;
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.client.renderer.Tessellator;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
public class WindowBoxRenderer implements ISimpleBlockRenderingHandler
{
private float[] baseColor = new float[3];
private float[] activeRimColor = new float[3];
private float[] activeInWallColor = new float[3];
private float[] activeBottomColor = new float[3];
private float[] activeSubstrateColor = new float[3];
private ModularBoxRenderer boxRenderer = new ModularBoxRenderer();
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
if (!(block instanceof BlockWindowBox))
return;
renderInventoryBlock((BlockWindowBox) block, metadata, modelId, renderer);
}
private void renderInventoryBlock (BlockWindowBox block, int metadata, int modelId, RenderBlocks renderer) {
Tessellator tessellator = Tessellator.instance;
IIcon icon = renderer.getBlockIconFromSideAndMetadata(block, 1, metadata);
float unit = .0625f;
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 * unit, 4 * unit, 4 * unit, 16 * unit, 12 * unit, 12 * unit, 0, ModularBoxRenderer.CUT_YPOS);
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 BlockWindowBox))
return false;
return renderWorldBlock(world, x, y, z, (BlockWindowBox) block, modelId, renderer);
}
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, BlockWindowBox block, int modelId, RenderBlocks renderer) {
int data = world.getBlockMetadata(x, y, z);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
IIcon icon = renderer.getBlockIconFromSideAndMetadata(block, 1, data);
RenderHelper.calculateBaseColor(baseColor, block.colorMultiplier(world, x, y, z));
RenderHelper.scaleColor(activeRimColor, baseColor, .8f);
RenderHelper.scaleColor(activeInWallColor, baseColor, .7f);
RenderHelper.scaleColor(activeBottomColor, baseColor, .6f);
boxRenderer.setIcon(icon);
boxRenderer.setExteriorColor(baseColor);
boxRenderer.setInteriorColor(activeInWallColor);
boxRenderer.setInteriorColor(activeBottomColor, ModularBoxRenderer.FACE_YNEG);
boxRenderer.setCutColor(activeRimColor);
TileEntityWindowBox te = block.getTileEntity(world, x, y, z);
boolean validNE = te.isSlotValid(Slot5Profile.SLOT_NE);
boolean validNW = te.isSlotValid(Slot5Profile.SLOT_NW);
boolean validSE = te.isSlotValid(Slot5Profile.SLOT_SE);
boolean validSW = te.isSlotValid(Slot5Profile.SLOT_SW);
if (validNW) {
int connect = 0 | (validNE ? ModularBoxRenderer.CONNECT_XPOS : 0) | (validSW ? ModularBoxRenderer.CONNECT_ZPOS : 0);
boxRenderer.renderOctant(world, block, x, y + (te.isUpper() ? .5 : 0), z, connect, ModularBoxRenderer.CUT_YPOS);
}
if (validNE) {
int connect = 0 | (validNW ? ModularBoxRenderer.CONNECT_XNEG : 0) | (validSE ? ModularBoxRenderer.CONNECT_ZPOS : 0);
boxRenderer.renderOctant(world, block, x + .5, y + (te.isUpper() ? .5 : 0), z, connect, ModularBoxRenderer.CUT_YPOS);
}
if (validSW) {
int connect = 0 | (validSE ? ModularBoxRenderer.CONNECT_XPOS : 0) | (validNW ? ModularBoxRenderer.CONNECT_ZNEG : 0);
boxRenderer.renderOctant(world, block, x, y + (te.isUpper() ? .5 : 0), z + .5, connect, ModularBoxRenderer.CUT_YPOS);
}
if (validSE) {
int connect = 0 | (validSW ? ModularBoxRenderer.CONNECT_XNEG : 0) | (validNE ? ModularBoxRenderer.CONNECT_ZNEG : 0);
boxRenderer.renderOctant(world, block, x + .5, y + (te.isUpper() ? .5 : 0), z + .5, connect, ModularBoxRenderer.CUT_YPOS);
}
ItemStack substrateItem = block.getGardenSubstrate(world, x, y, z, TileEntityGarden.SLOT_INVALID);
if (substrateItem != null && substrateItem.getItem() instanceof ItemBlock) {
Block substrate = Block.getBlockFromItem(substrateItem.getItem());
IIcon substrateIcon = renderer.getBlockIconFromSideAndMetadata(substrate, 1, substrateItem.getItemDamage());
RenderHelper.calculateBaseColor(activeSubstrateColor, substrate.getBlockColor());
RenderHelper.scaleColor(activeSubstrateColor, activeSubstrateColor, .8f);
RenderHelper.setTessellatorColor(tessellator, activeSubstrateColor);
double ySubstrate = (te.isUpper() ? 1 : .5) - .0625;
if (validNW) {
renderer.setRenderBounds(0, 0, 0, .5, ySubstrate, .5);
renderer.renderFaceYPos(block, x, y, z, substrateIcon);
}
if (validNE) {
renderer.setRenderBounds(.5, 0, 0, 1, ySubstrate, .5);
renderer.renderFaceYPos(block, x, y, z, substrateIcon);
}
if (validSW) {
renderer.setRenderBounds(0, 0, .5, .5, ySubstrate, 1);
renderer.renderFaceYPos(block, x, y, z, substrateIcon);
}
if (validSE) {
renderer.setRenderBounds(.5, 0, .5, 1, ySubstrate, 1);
renderer.renderFaceYPos(block, x, y, z, substrateIcon);
}
}
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return true;
}
@Override
public int getRenderId () {
return ClientProxy.windowBoxRenderID;
}
}