001package net.minecraft.client.renderer.tileentity;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.gui.FontRenderer;
006import net.minecraft.client.renderer.RenderEngine;
007import net.minecraft.tileentity.TileEntity;
008import net.minecraft.world.World;
009import org.lwjgl.opengl.GL11;
010
011@SideOnly(Side.CLIENT)
012public abstract class TileEntitySpecialRenderer
013{
014    /**
015     * The TileEntityRenderer instance associated with this TileEntitySpecialRenderer
016     */
017    protected TileEntityRenderer tileEntityRenderer;
018
019    public abstract void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f);
020
021    /**
022     * Binds a texture to the renderEngine given a filename from the JAR.
023     */
024    protected void bindTextureByName(String par1Str)
025    {
026        RenderEngine renderengine = this.tileEntityRenderer.renderEngine;
027
028        if (renderengine != null)
029        {
030            renderengine.bindTexture(par1Str);
031        }
032    }
033
034    /**
035     * Binds a texture that Minecraft will attempt to load from the given URL.  (arguments: url, localFallback)
036     */
037    protected void bindTextureByURL(String par1Str, String par2Str)
038    {
039        RenderEngine renderengine = this.tileEntityRenderer.renderEngine;
040
041        if (renderengine != null)
042        {
043            GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderengine.getTextureForDownloadableImage(par1Str, par2Str));
044        }
045
046        renderengine.resetBoundTexture();
047    }
048
049    /**
050     * Associate a TileEntityRenderer with this TileEntitySpecialRenderer
051     */
052    public void setTileEntityRenderer(TileEntityRenderer par1TileEntityRenderer)
053    {
054        this.tileEntityRenderer = par1TileEntityRenderer;
055    }
056
057    /**
058     * Called when the ingame world being rendered changes (e.g. on world -> nether travel) due to using one renderer
059     * per tile entity type, rather than instance
060     */
061    public void onWorldChange(World par1World) {}
062
063    public FontRenderer getFontRenderer()
064    {
065        return this.tileEntityRenderer.getFontRenderer();
066    }
067}