package net.minecraft.client.renderer.tileentity; import com.google.common.collect.Maps; import java.util.Iterator; import java.util.Map; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityBanner; 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.BlockPos; import net.minecraft.util.ReportedException; import net.minecraft.world.World; public class TileEntityRendererDispatcher { private Map mapSpecialRenderers = Maps.newHashMap(); 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 Entity 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 TileEntityPistonRenderer()); this.mapSpecialRenderers.put(TileEntityChest.class, new TileEntityChestRenderer()); this.mapSpecialRenderers.put(TileEntityEnderChest.class, new TileEntityEnderChestRenderer()); this.mapSpecialRenderers.put(TileEntityEnchantmentTable.class, new TileEntityEnchantmentTableRenderer()); this.mapSpecialRenderers.put(TileEntityEndPortal.class, new TileEntityEndPortalRenderer()); this.mapSpecialRenderers.put(TileEntityBeacon.class, new TileEntityBeaconRenderer()); this.mapSpecialRenderers.put(TileEntitySkull.class, new TileEntitySkullRenderer()); this.mapSpecialRenderers.put(TileEntityBanner.class, new TileEntityBannerRenderer()); Iterator var1 = this.mapSpecialRenderers.values().iterator(); while (var1.hasNext()) { TileEntitySpecialRenderer var2 = (TileEntitySpecialRenderer)var1.next(); var2.setRendererDispatcher(this); } } public TileEntitySpecialRenderer getSpecialRendererByClass(Class p_147546_1_) { TileEntitySpecialRenderer var2 = (TileEntitySpecialRenderer)this.mapSpecialRenderers.get(p_147546_1_); if (var2 == null && p_147546_1_ != TileEntity.class) { var2 = this.getSpecialRendererByClass(p_147546_1_.getSuperclass()); this.mapSpecialRenderers.put(p_147546_1_, var2); } return var2; } /** * 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 func_178470_a(World worldIn, TextureManager p_178470_2_, FontRenderer p_178470_3_, Entity p_178470_4_, float p_178470_5_) { if (this.worldObj != worldIn) { this.func_147543_a(worldIn); } this.renderEngine = p_178470_2_; this.field_147551_g = p_178470_4_; this.field_147557_n = p_178470_3_; this.field_147562_h = p_178470_4_.prevRotationYaw + (p_178470_4_.rotationYaw - p_178470_4_.prevRotationYaw) * p_178470_5_; this.field_147563_i = p_178470_4_.prevRotationPitch + (p_178470_4_.rotationPitch - p_178470_4_.prevRotationPitch) * p_178470_5_; this.field_147560_j = p_178470_4_.lastTickPosX + (p_178470_4_.posX - p_178470_4_.lastTickPosX) * (double)p_178470_5_; this.field_147561_k = p_178470_4_.lastTickPosY + (p_178470_4_.posY - p_178470_4_.lastTickPosY) * (double)p_178470_5_; this.field_147558_l = p_178470_4_.lastTickPosZ + (p_178470_4_.posZ - p_178470_4_.lastTickPosZ) * (double)p_178470_5_; } public void func_180546_a(TileEntity p_180546_1_, float p_180546_2_, int p_180546_3_) { if (p_180546_1_.getDistanceSq(this.field_147560_j, this.field_147561_k, this.field_147558_l) < p_180546_1_.getMaxRenderDistanceSquared()) { int var4 = this.worldObj.getCombinedLight(p_180546_1_.getPos(), 0); int var5 = var4 % 65536; int var6 = var4 / 65536; OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var5 / 1.0F, (float)var6 / 1.0F); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); BlockPos var7 = p_180546_1_.getPos(); this.func_178469_a(p_180546_1_, (double)var7.getX() - staticPlayerX, (double)var7.getY() - staticPlayerY, (double)var7.getZ() - staticPlayerZ, p_180546_2_, p_180546_3_); } } /** * 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_) { this.func_178469_a(p_147549_1_, p_147549_2_, p_147549_4_, p_147549_6_, p_147549_8_, -1); } public void func_178469_a(TileEntity p_178469_1_, double p_178469_2_, double p_178469_4_, double p_178469_6_, float p_178469_8_, int p_178469_9_) { TileEntitySpecialRenderer var10 = this.getSpecialRenderer(p_178469_1_); if (var10 != null) { try { var10.renderTileEntityAt(p_178469_1_, p_178469_2_, p_178469_4_, p_178469_6_, p_178469_8_, p_178469_9_); } catch (Throwable var14) { CrashReport var12 = CrashReport.makeCrashReport(var14, "Rendering Block Entity"); CrashReportCategory var13 = var12.makeCategory("Block Entity Details"); p_178469_1_.addInfoToCrashReport(var13); throw new ReportedException(var12); } } } public void func_147543_a(World worldIn) { this.worldObj = worldIn; } public FontRenderer getFontRenderer() { return this.field_147557_n; } }