package gregtech.common.render; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.ItemList; import gregtech.common.items.ItemVolumetricFlask; @SideOnly(Side.CLIENT) public final class FlaskRenderer implements IItemRenderer { public FlaskRenderer() { MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return type != ItemRenderType.FIRST_PERSON_MAP; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { ItemVolumetricFlask cell = (ItemVolumetricFlask) item.getItem(); IIcon icon = item.getIconIndex(); GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_ALPHA_TEST); GTRenderUtil.applyStandardItemTransform(type); FluidStack fs = cell != null ? cell.getFluid(item) : null; if (fs != null) { IIcon iconWindow = cell.iconWindow; Fluid fluid = fs.getFluid(); IIcon fluidIcon = fluid.getIcon(fs); int fluidColor = fluid.getColor(fs); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE); GTRenderUtil.renderItem(type, iconWindow); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDepthFunc(GL11.GL_EQUAL); GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); GTRenderUtil.renderItem(type, fluidIcon); GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); GL11.glDepthFunc(GL11.GL_LEQUAL); } Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GTRenderUtil.renderItem(type, icon); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_BLEND); } }