package com.jaquadro.minecraft.gardenstuff.renderer;
import com.jaquadro.minecraft.gardenapi.api.GardenAPI;
import com.jaquadro.minecraft.gardenapi.api.connect.IAttachable;
import com.jaquadro.minecraft.gardencore.client.renderer.support.ModularBoxRenderer;
import com.jaquadro.minecraft.gardencore.util.RenderHelper;
import com.jaquadro.minecraft.gardenstuff.block.BlockLattice;
import com.jaquadro.minecraft.gardenstuff.core.ClientProxy;
import com.jaquadro.minecraft.gardenstuff.core.ModBlocks;
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.init.Blocks;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import static com.jaquadro.minecraft.gardentrees.core.ModBlocks.*;
public class LatticeRenderer implements ISimpleBlockRenderingHandler
{
private static final float UN4 = .0625f * -4;
private static final float U7 = .0625f * 7;
private static final float U8 = .0625f * 8;
private static final float U9 = .0625f * 9;
private static final float U20 = .0625f * 20;
private ModularBoxRenderer boxRenderer = new ModularBoxRenderer();
@Override
public void renderInventoryBlock (Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glRotatef(90, 0, 1, 0);
GL11.glScalef(1.5f, 1.5f, 1.5f);
GL11.glTranslatef(-.5f, -.5f, -.5f);
boxRenderer.setUnit(.0625);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
boxRenderer.setIcon(block.getIcon(0, metadata));
boxRenderer.renderSolidBox(null, block, 0, 0, 0, 0, U7 + .01, U7 + .01, 1, U9 - .01, U9 - .01);
boxRenderer.renderSolidBox(null, block, 0, 0, 0, U7 + .01, 0, U7 + .01, U9 - .01, 1, U9 - .01);
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 BlockLattice))
return false;
return renderWorldBlock(world, x, y, z, (BlockLattice) block, modelId, renderer);
}
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, BlockLattice block, int modelId, RenderBlocks renderer) {
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
boxRenderer.setUnit(.0625);
boxRenderer.setColor(ModularBoxRenderer.COLOR_WHITE);
boxRenderer.setIcon(block.getIcon(world, x, y, z, 0));
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 extYNeg = (connectFlags & 64) != 0;
boolean extYPos = (connectFlags & 128) != 0;
boolean extZNeg = (connectFlags & 256) != 0;
boolean extZPos = (connectFlags & 512) != 0;
boolean extXNeg = (connectFlags & 1024) != 0;
boolean extXPos = (connectFlags & 2048) != 0;
boxRenderer.renderSolidBox(world, block, x, y, z, U7, U7, U7, U9, U9, U9);
float yMin = extYNeg ? UN4 : (connectYNeg ? 0 : U7);
float yMax = extYPos ? U20 : (connectYPos ? 1 : U9);
IAttachable attachableYN = GardenAPI.instance().registries().attachable().getAttachable(world.getBlock(x, y - 1, z), world.getBlockMetadata(x, y - 1, z));
if (attachableYN != null && attachableYN.isAttachable(world, x, y - 1, z, 1))
yMin = (float)attachableYN.getAttachDepth(world, x, y - 1, z, 1) - 1;
IAttachable attachableYP = GardenAPI.instance().registries().attachable().getAttachable(world.getBlock(x, y + 1, z), world.getBlockMetadata(x, y + 1, z));
if (attachableYP != null && attachableYP.isAttachable(world, x, y + 1, z, 0))
yMax = (float)attachableYP.getAttachDepth(world, x, y + 1, z, 0) + 1;
if (yMin < U7)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, yMin, U7, U9, U7, U9);
if (yMax > U9)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, U9, U7, U9, yMax, U9);
float zMin = extZNeg ? UN4 : (connectZNeg ? 0 : U7);
float zMax = extZPos ? U20 : (connectZPos ? 1 : U9);
if (zMin < U7)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, U7, zMin, U9, U9, U7);
if (zMax > U9)
boxRenderer.renderSolidBox(world, block, x, y, z, U7, U7, U9, U9, U9, zMax);
float xMin = extXNeg ? UN4 : (connectXNeg ? 0 : U7);
float xMax = extXPos ? U20 : (connectXPos ? 1 : U9);
if (xMin < U7)
boxRenderer.renderSolidBox(world, block, x, y, z, xMin, U7, U7, U7, U9, U9);
if (xMax > U9)
boxRenderer.renderSolidBox(world, block, x, y, z, U9, U7, U7, xMax, U9, U9);
IIcon vineIcon = Blocks.vine.getIcon(0, 0);
/*boxRenderer.setUnit(0);
boxRenderer.flipOpposite = true;
boxRenderer.setIcon(Blocks.glass_pane.getIcon(4, 0));
int cutX = ModularBoxRenderer.CUT_YNEG | ModularBoxRenderer.CUT_YPOS | ModularBoxRenderer.CUT_ZNEG | ModularBoxRenderer.CUT_ZPOS;
RenderHelper.instance.setTextureOffset(.5, .5);
if (connectZNeg) {
if (connectYPos)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U7, U9, 0, U9, 1, U7, 0, cutX);
if (connectYNeg)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U7, 0, 0, U9, U7, U7, 0, cutX);
}
if (connectZPos) {
if (connectYPos)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U7, U9, U9, U9, 1, 1, 0, cutX);
if (connectYNeg)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U7, 0, U9, U9, U7, 1, 0, cutX);
}
RenderHelper.instance.clearTextureOffset();
int cutZ = ModularBoxRenderer.CUT_YNEG | ModularBoxRenderer.CUT_YPOS | ModularBoxRenderer.CUT_XNEG | ModularBoxRenderer.CUT_XPOS;
RenderHelper.instance.setTextureOffset(.5, .5);
if (connectXNeg) {
if (connectYPos)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, 0, U9, U7, U7, 1, U9, 0, cutZ);
if (connectYNeg)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, 0, 0, U7, U7, U7, U9, 0, cutZ);
}
if (connectXPos) {
if (connectYPos)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U9, U9, U7, 1, 1, U9, 0, cutZ);
if (connectYNeg)
boxRenderer.renderExterior(renderer, Blocks.glass_pane, x, y, z, U9, 0, U7, 1, U7, U9, 0, cutZ);
}
RenderHelper.instance.clearTextureOffset();
boxRenderer.flipOpposite = false;*/
/*RenderHelper.instance.state.colorMultYNeg = 0.8f;
renderer.setRenderBounds(0, .40625, 0, 1, .59375, 1);
RenderHelper.instance.renderFace(RenderHelper.YNEG, renderer, ivy, x, y, z, vineIcon);
RenderHelper.instance.renderFace(RenderHelper.YPOS, renderer, ivy, x, y, z, vineIcon);
renderer.setRenderBounds(0, .59375, 0, 1, 1, 1);
RenderHelper.instance.setTextureOffset(.5, .5);
RenderHelper.instance.renderFace(RenderHelper.YNEG, renderer, ivy, x, y, z, vineIcon);
RenderHelper.instance.renderFace(RenderHelper.YPOS, renderer, ivy, x, y, z, vineIcon);
RenderHelper.instance.clearTextureOffset();
vineIcon = ModBlocks.rootCover.getIcon(world, x, y, z, 0); // Blocks.vine.getIcon(0, 0);
renderer.setRenderBounds(0, .375, 0, 1, .625, 1);
RenderHelper.instance.renderFace(RenderHelper.YNEG, renderer, ModBlocks.rootCover, x, y, z, vineIcon);
RenderHelper.instance.renderFace(RenderHelper.YPOS, renderer, ModBlocks.rootCover, x, y, z, vineIcon);
vineIcon = ModBlocks.rootCover.getIcon(world, x + 1, y, z + 1, 0);
renderer.setRenderBounds(0, .625, 0, 1, 1, 1);
RenderHelper.instance.renderFace(RenderHelper.YNEG, renderer, ModBlocks.rootCover, x, y, z, vineIcon);
//RenderHelper.instance.renderFace(RenderHelper.YPOS, renderer, ModBlocks.rootCover, x, y, z, vineIcon);
RenderHelper.instance.state.resetColorMult();*/
return true;
}
@Override
public boolean shouldRender3DInInventory (int modelId) {
return true;
}
@Override
public int getRenderId () {
return ClientProxy.latticeRenderID;
}
}