package com.jaquadro.minecraft.gardenstuff.renderer.item;
import com.jaquadro.minecraft.gardenapi.api.component.ILanternSource;
import com.jaquadro.minecraft.gardenapi.internal.Api;
import com.jaquadro.minecraft.gardencore.util.RenderHelper;
import com.jaquadro.minecraft.gardenstuff.block.BlockLantern;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
public class LanternItemRenderer implements IItemRenderer
{
private RenderHelper renderHelper = new RenderHelper();
private float[] colorScratch = new float[3];
@Override
public boolean handleRenderType (ItemStack item, ItemRenderType type) {
return true;
}
@Override
public boolean shouldUseRenderHelper (ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return true;
}
@Override
public void renderItem (ItemRenderType type, ItemStack item, Object... data) {
RenderBlocks renderer = getRenderer(data);
if (renderer == null)
return;
Block block = Block.getBlockFromItem(item.getItem());
if (!(block instanceof BlockLantern))
return;
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
renderLantern((BlockLantern)block, item, renderer, type);
}
private void renderLantern (BlockLantern block, ItemStack item, RenderBlocks renderer, ItemRenderType renderType) {
GL11.glEnable(GL11.GL_ALPHA_TEST);
if (renderType == ItemRenderType.INVENTORY) {
GL11.glScalef(1.2f, 1.2f, 1.2f);
}
block.setBlockBoundsForItemRender();
renderHelper.setRenderBounds(block);
renderHelper.renderBlock(null, block, item.getItemDamage());
if (renderType != ItemRenderType.INVENTORY) {
renderHelper.state.renderFromInside = true;
renderHelper.state.renderMinY = .005f;
renderHelper.renderBlock(null, block, item.getItemDamage());
renderHelper.state.renderFromInside = false;
}
else {
renderHelper.state.renderMaxY = .005f;
renderHelper.renderFace(RenderHelper.YPOS, null, block, block.getIcon(0, item.getItemDamage()), 0);
}
renderHelper.setRenderBounds(0, 0, 0, 1, 1, 1);
renderHelper.renderCrossedSquares(block, item.getItemDamage(), block.getIconTopCross());
ILanternSource lanternSource = Api.instance.registries().lanternSources().getLanternSource(block.getLightSource(item));
if (lanternSource != null)
lanternSource.renderItem(renderer, renderType, block.getLightSourceMeta(item));
if (block.isGlass(item)) {
GL11.glEnable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_NORMALIZE);
RenderHelper.calculateBaseColor(colorScratch, block.getBlockColor());
RenderHelper.setTessellatorColor(Tessellator.instance, colorScratch);
Tessellator.instance.setBrightness(RenderHelper.FULL_BRIGHTNESS);
IIcon glass = block.getIconStainedGlass(item.getItemDamage());
renderHelper.setRenderBounds(block);
renderHelper.state.renderMinX += .01;
renderHelper.state.renderMinZ += .01;
renderHelper.state.renderMaxX -= .01;
renderHelper.state.renderMaxZ -= .01;
renderHelper.state.renderMaxY -= .01;
renderHelper.renderFace(RenderHelper.XNEG, null, block, glass, 0);
renderHelper.renderFace(RenderHelper.XPOS, null, block, glass, 0);
renderHelper.renderFace(RenderHelper.ZNEG, null, block, glass, 0);
renderHelper.renderFace(RenderHelper.ZPOS, null, block, glass, 0);
renderHelper.renderFace(RenderHelper.YPOS, null, block, glass, 0);
GL11.glDisable(GL11.GL_BLEND);
}
}
private RenderBlocks getRenderer (Object[] data) {
for (Object obj : data) {
if (obj instanceof RenderBlocks)
return (RenderBlocks)obj;
}
return null;
}
}