package crazypants.enderio.machine.painter;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.render.RenderUtil;
import crazypants.enderio.EnderIO;
public class PaintedItemRenderer implements IItemRenderer {
@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) {
if(data != null && data.length > 0) {
if(type == ItemRenderType.EQUIPPED_FIRST_PERSON || type == ItemRenderType.EQUIPPED) {
renderEquipped(item, (RenderBlocks) data[0]);
} else {
renderToInventory(item, (RenderBlocks) data[0]);
}
}
}
public void renderEquipped(ItemStack item, RenderBlocks renderBlocks) {
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
renderToInventory(item, renderBlocks);
GL11.glPopMatrix();
}
public void renderToInventory(ItemStack item, RenderBlocks renderBlocks) {
if(item.getItem() == Item.getItemFromBlock(EnderIO.blockPaintedGlowstone) || item.getItem() == Item.getItemFromBlock(EnderIO.blockTravelPlatform)) {
Block block = PainterUtil.getSourceBlock(item);
int meta;
RenderUtil.bindBlockTexture();
boolean renderOverlay = true;
if(block != null) {
meta = PainterUtil.getSourceBlockMetadata(item);
} else {
block = Block.getBlockFromItem(item.getItem());
meta = item.getItemDamage();
renderOverlay = false;
}
renderBlocks.renderBlockAsItem(block, meta, 1.0F);
if(renderOverlay) {
renderOverlay(block, meta, renderBlocks);
}
renderBlocks.clearOverrideBlockTexture();
return;
}
Block block = PainterUtil.getSourceBlock(item);
if(block != null) {
int meta = PainterUtil.getSourceBlockMetadata(item);
if(block == EnderIO.blockFusedQuartz && meta == 1) {
renderBlocks.setOverrideBlockTexture(EnderIO.blockPainter.getInvisibleIcon());
} else {
renderBlocks.setOverrideBlockTexture(renderBlocks.getBlockIconFromSideAndMetadata(block, 2, meta));
}
}
Item i = item.getItem();
if(i instanceof ItemBlock) {
Block blk = ((ItemBlock) i).field_150939_a;
int meta = item.getItemDamage();
renderBlocks.renderBlockAsItem(blk, meta, 1.0f);
renderOverlay(blk, meta, renderBlocks);
}
renderBlocks.clearOverrideBlockTexture();
}
protected void renderOverlay(Block block, int meta, RenderBlocks renderBlocks) {
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
GL11.glPolygonOffset(-1.0f, -1.0f);
RenderUtil.bindItemTexture();
renderBlocks.setOverrideBlockTexture(EnderIO.itemConduitFacade.getOverlayIcon());
renderBlocks.renderBlockAsItem(block, meta, 1.0f);
GL11.glPopAttrib();
}
}