package net.minecraft.client.renderer.tileentity;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderEnchantmentTable;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityBeacon;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.tileentity.TileEntityEnchantmentTable;
import net.minecraft.tileentity.TileEntityEndPortal;
import net.minecraft.tileentity.TileEntityEnderChest;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.tileentity.TileEntityPiston;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.tileentity.TileEntitySkull;
import net.minecraft.util.ReportedException;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class TileEntityRendererDispatcher
{
public Map mapSpecialRenderers = new HashMap();
public static TileEntityRendererDispatcher instance = new TileEntityRendererDispatcher();
private FontRenderer field_147557_n;
/** The player's current X position (same as playerX) */
public static double staticPlayerX;
/** The player's current Y position (same as playerY) */
public static double staticPlayerY;
/** The player's current Z position (same as playerZ) */
public static double staticPlayerZ;
public TextureManager renderEngine;
public World worldObj;
public EntityLivingBase field_147551_g;
public float field_147562_h;
public float field_147563_i;
public double field_147560_j;
public double field_147561_k;
public double field_147558_l;
private static final String __OBFID = "CL_00000963";
private TileEntityRendererDispatcher()
{
this.mapSpecialRenderers.put(TileEntitySign.class, new TileEntitySignRenderer());
this.mapSpecialRenderers.put(TileEntityMobSpawner.class, new TileEntityMobSpawnerRenderer());
this.mapSpecialRenderers.put(TileEntityPiston.class, new TileEntityRendererPiston());
this.mapSpecialRenderers.put(TileEntityChest.class, new TileEntityChestRenderer());
this.mapSpecialRenderers.put(TileEntityEnderChest.class, new TileEntityEnderChestRenderer());
this.mapSpecialRenderers.put(TileEntityEnchantmentTable.class, new RenderEnchantmentTable());
this.mapSpecialRenderers.put(TileEntityEndPortal.class, new RenderEndPortal());
this.mapSpecialRenderers.put(TileEntityBeacon.class, new TileEntityBeaconRenderer());
this.mapSpecialRenderers.put(TileEntitySkull.class, new TileEntitySkullRenderer());
Iterator iterator = this.mapSpecialRenderers.values().iterator();
while (iterator.hasNext())
{
TileEntitySpecialRenderer tileentityspecialrenderer = (TileEntitySpecialRenderer)iterator.next();
tileentityspecialrenderer.func_147497_a(this);
}
}
public TileEntitySpecialRenderer getSpecialRendererByClass(Class p_147546_1_)
{
TileEntitySpecialRenderer tileentityspecialrenderer = (TileEntitySpecialRenderer)this.mapSpecialRenderers.get(p_147546_1_);
if (tileentityspecialrenderer == null && p_147546_1_ != TileEntity.class)
{
tileentityspecialrenderer = this.getSpecialRendererByClass(p_147546_1_.getSuperclass());
this.mapSpecialRenderers.put(p_147546_1_, tileentityspecialrenderer);
}
return tileentityspecialrenderer;
}
/**
* Returns true if this TileEntity instance has a TileEntitySpecialRenderer associated with it, false otherwise.
*/
public boolean hasSpecialRenderer(TileEntity p_147545_1_)
{
return this.getSpecialRenderer(p_147545_1_) != null;
}
public TileEntitySpecialRenderer getSpecialRenderer(TileEntity p_147547_1_)
{
return p_147547_1_ == null ? null : this.getSpecialRendererByClass(p_147547_1_.getClass());
}
public void cacheActiveRenderInfo(World p_147542_1_, TextureManager p_147542_2_, FontRenderer p_147542_3_, EntityLivingBase p_147542_4_, float p_147542_5_)
{
if (this.worldObj != p_147542_1_)
{
this.func_147543_a(p_147542_1_);
}
this.renderEngine = p_147542_2_;
this.field_147551_g = p_147542_4_;
this.field_147557_n = p_147542_3_;
this.field_147562_h = p_147542_4_.prevRotationYaw + (p_147542_4_.rotationYaw - p_147542_4_.prevRotationYaw) * p_147542_5_;
this.field_147563_i = p_147542_4_.prevRotationPitch + (p_147542_4_.rotationPitch - p_147542_4_.prevRotationPitch) * p_147542_5_;
this.field_147560_j = p_147542_4_.lastTickPosX + (p_147542_4_.posX - p_147542_4_.lastTickPosX) * (double)p_147542_5_;
this.field_147561_k = p_147542_4_.lastTickPosY + (p_147542_4_.posY - p_147542_4_.lastTickPosY) * (double)p_147542_5_;
this.field_147558_l = p_147542_4_.lastTickPosZ + (p_147542_4_.posZ - p_147542_4_.lastTickPosZ) * (double)p_147542_5_;
}
/**
* Render this TileEntity at its current position from the player
*/
public void renderTileEntity(TileEntity p_147544_1_, float p_147544_2_)
{
if (p_147544_1_.getDistanceSq(this.field_147560_j, this.field_147561_k, this.field_147558_l) < p_147544_1_.getMaxRenderDistanceSquared())
{
int i = this.worldObj.getLightBrightnessForSkyBlocks(p_147544_1_.xCoord, p_147544_1_.yCoord, p_147544_1_.zCoord, 0);
int j = i % 65536;
int k = i / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.renderTileEntityAt(p_147544_1_, (double)p_147544_1_.xCoord - staticPlayerX, (double)p_147544_1_.yCoord - staticPlayerY, (double)p_147544_1_.zCoord - staticPlayerZ, p_147544_2_);
}
}
/**
* Render this TileEntity at a given set of coordinates
*/
public void renderTileEntityAt(TileEntity p_147549_1_, double p_147549_2_, double p_147549_4_, double p_147549_6_, float p_147549_8_)
{
TileEntitySpecialRenderer tileentityspecialrenderer = this.getSpecialRenderer(p_147549_1_);
if (tileentityspecialrenderer != null)
{
try
{
tileentityspecialrenderer.renderTileEntityAt(p_147549_1_, p_147549_2_, p_147549_4_, p_147549_6_, p_147549_8_);
}
catch (Throwable throwable)
{
CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering Block Entity");
CrashReportCategory crashreportcategory = crashreport.makeCategory("Block Entity Details");
p_147549_1_.addInfoToCrashReport(crashreportcategory);
throw new ReportedException(crashreport);
}
}
}
public void func_147543_a(World p_147543_1_)
{
this.worldObj = p_147543_1_;
Iterator iterator = this.mapSpecialRenderers.values().iterator();
while (iterator.hasNext())
{
TileEntitySpecialRenderer tileentityspecialrenderer = (TileEntitySpecialRenderer)iterator.next();
if (tileentityspecialrenderer != null)
{
tileentityspecialrenderer.onWorldChange(p_147543_1_);
}
}
}
public FontRenderer getFontRenderer()
{
return this.field_147557_n;
}
}