CrushedPixel

noof

Nov 8th, 2016
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 131.72 KB | None | 0 0
  1. /*
  2.  * Decompiled with CFR 0_118.
  3.  *
  4.  * Could not load the following classes:
  5.  *  DynamicLights
  6.  *  RenderInfoLazy
  7.  *  com.google.common.collect.Lists
  8.  *  com.google.common.collect.Maps
  9.  *  com.google.common.collect.Sets
  10.  *  javax.vecmath.Matrix4f
  11.  *  javax.vecmath.Tuple4f
  12.  *  javax.vecmath.Vector3d
  13.  *  javax.vecmath.Vector3f
  14.  *  javax.vecmath.Vector4f
  15.  *  net.minecraft.client.renderer.DestroyBlockProgress
  16.  *  net.minecraft.client.renderer.RenderGlobal$SwitchEnumUsage
  17.  *  net.minecraft.client.renderer.chunk.VboChunkFactory
  18.  *  org.apache.logging.log4j.LogManager
  19.  *  org.apache.logging.log4j.Logger
  20.  *  org.lwjgl.input.Keyboard
  21.  *  org.lwjgl.opengl.GL11
  22.  *  org.spongepowered.asm.mixin.injection.callback.CallbackInfo
  23.  *  org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
  24.  *  org.spongepowered.asm.mixin.transformer.meta.MixinMerged
  25.  */
  26. package net.minecraft.client.renderer;
  27.  
  28. import com.google.common.collect.Lists;
  29. import com.google.common.collect.Maps;
  30. import com.google.common.collect.Sets;
  31. import com.google.gson.JsonSyntaxException;
  32. import com.replaymod.compat.shaders.ShaderReflection;
  33. import com.replaymod.recording.handler.RecordingEventHandler;
  34. import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
  35. import java.io.IOException;
  36. import java.lang.reflect.Field;
  37. import java.nio.ByteBuffer;
  38. import java.util.ArrayDeque;
  39. import java.util.ArrayList;
  40. import java.util.Arrays;
  41. import java.util.Collection;
  42. import java.util.Collections;
  43. import java.util.Deque;
  44. import java.util.EnumSet;
  45. import java.util.HashSet;
  46. import java.util.Iterator;
  47. import java.util.LinkedHashSet;
  48. import java.util.List;
  49. import java.util.Map;
  50. import java.util.Random;
  51. import java.util.Set;
  52. import java.util.concurrent.BlockingQueue;
  53. import java.util.concurrent.Callable;
  54. import javax.vecmath.Matrix4f;
  55. import javax.vecmath.Tuple4f;
  56. import javax.vecmath.Vector3d;
  57. import javax.vecmath.Vector3f;
  58. import javax.vecmath.Vector4f;
  59. import net.minecraft.block.Block;
  60. import net.minecraft.block.BlockChest;
  61. import net.minecraft.block.BlockEnderChest;
  62. import net.minecraft.block.BlockLeaves;
  63. import net.minecraft.block.BlockSign;
  64. import net.minecraft.block.BlockSkull;
  65. import net.minecraft.block.material.Material;
  66. import net.minecraft.block.state.IBlockState;
  67. import net.minecraft.client.Minecraft;
  68. import net.minecraft.client.audio.ISound;
  69. import net.minecraft.client.audio.PositionedSoundRecord;
  70. import net.minecraft.client.audio.SoundHandler;
  71. import net.minecraft.client.entity.EntityPlayerSP;
  72. import net.minecraft.client.gui.FontRenderer;
  73. import net.minecraft.client.gui.GuiIngame;
  74. import net.minecraft.client.multiplayer.WorldClient;
  75. import net.minecraft.client.particle.EffectRenderer;
  76. import net.minecraft.client.particle.EntityFX;
  77. import net.minecraft.client.renderer.BlockModelRenderer;
  78. import net.minecraft.client.renderer.BlockRendererDispatcher;
  79. import net.minecraft.client.renderer.ChunkRenderContainer;
  80. import net.minecraft.client.renderer.DestroyBlockProgress;
  81. import net.minecraft.client.renderer.EntityRenderer;
  82. import net.minecraft.client.renderer.GLAllocation;
  83. import net.minecraft.client.renderer.GlStateManager;
  84. import net.minecraft.client.renderer.OpenGlHelper;
  85. import net.minecraft.client.renderer.RenderGlobal;
  86. import net.minecraft.client.renderer.RenderHelper;
  87. import net.minecraft.client.renderer.RenderList;
  88. import net.minecraft.client.renderer.Tessellator;
  89. import net.minecraft.client.renderer.VboRenderList;
  90. import net.minecraft.client.renderer.ViewFrustum;
  91. import net.minecraft.client.renderer.WorldRenderer;
  92. import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator;
  93. import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
  94. import net.minecraft.client.renderer.chunk.CompiledChunk;
  95. import net.minecraft.client.renderer.chunk.IRenderChunkFactory;
  96. import net.minecraft.client.renderer.chunk.ListChunkFactory;
  97. import net.minecraft.client.renderer.chunk.RenderChunk;
  98. import net.minecraft.client.renderer.chunk.VboChunkFactory;
  99. import net.minecraft.client.renderer.chunk.VisGraph;
  100. import net.minecraft.client.renderer.culling.ClippingHelper;
  101. import net.minecraft.client.renderer.culling.ClippingHelperImpl;
  102. import net.minecraft.client.renderer.culling.Frustum;
  103. import net.minecraft.client.renderer.culling.ICamera;
  104. import net.minecraft.client.renderer.entity.RenderManager;
  105. import net.minecraft.client.renderer.texture.TextureAtlasSprite;
  106. import net.minecraft.client.renderer.texture.TextureManager;
  107. import net.minecraft.client.renderer.texture.TextureMap;
  108. import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
  109. import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
  110. import net.minecraft.client.renderer.vertex.VertexBuffer;
  111. import net.minecraft.client.renderer.vertex.VertexFormat;
  112. import net.minecraft.client.renderer.vertex.VertexFormatElement;
  113. import net.minecraft.client.resources.IResourceManager;
  114. import net.minecraft.client.resources.IResourceManagerReloadListener;
  115. import net.minecraft.client.settings.GameSettings;
  116. import net.minecraft.client.settings.KeyBinding;
  117. import net.minecraft.client.shader.Framebuffer;
  118. import net.minecraft.client.shader.ShaderGroup;
  119. import net.minecraft.client.shader.ShaderLinkHelper;
  120. import net.minecraft.crash.CrashReport;
  121. import net.minecraft.crash.CrashReportCategory;
  122. import net.minecraft.entity.Entity;
  123. import net.minecraft.entity.EntityLivingBase;
  124. import net.minecraft.entity.item.EntityItemFrame;
  125. import net.minecraft.entity.player.EntityPlayer;
  126. import net.minecraft.entity.projectile.EntityWitherSkull;
  127. import net.minecraft.init.Blocks;
  128. import net.minecraft.init.Items;
  129. import net.minecraft.item.Item;
  130. import net.minecraft.item.ItemDye;
  131. import net.minecraft.item.ItemPotion;
  132. import net.minecraft.item.ItemRecord;
  133. import net.minecraft.profiler.Profiler;
  134. import net.minecraft.tileentity.TileEntity;
  135. import net.minecraft.tileentity.TileEntityChest;
  136. import net.minecraft.tileentity.TileEntitySign;
  137. import net.minecraft.util.AxisAlignedBB;
  138. import net.minecraft.util.BlockPos;
  139. import net.minecraft.util.BlockPos$MutableBlockPos;
  140. import net.minecraft.util.ClassInheritanceMultiMap;
  141. import net.minecraft.util.EnumFacing;
  142. import net.minecraft.util.EnumParticleTypes;
  143. import net.minecraft.util.EnumWorldBlockLayer;
  144. import net.minecraft.util.MathHelper;
  145. import net.minecraft.util.MovingObjectPosition;
  146. import net.minecraft.util.ReportedException;
  147. import net.minecraft.util.ResourceLocation;
  148. import net.minecraft.util.Vec3;
  149. import net.minecraft.world.IBlockAccess;
  150. import net.minecraft.world.IWorldAccess;
  151. import net.minecraft.world.World;
  152. import net.minecraft.world.WorldProvider;
  153. import net.minecraft.world.border.EnumBorderStatus;
  154. import net.minecraft.world.border.WorldBorder;
  155. import net.minecraft.world.chunk.Chunk;
  156. import org.apache.logging.log4j.LogManager;
  157. import org.apache.logging.log4j.Logger;
  158. import org.lwjgl.input.Keyboard;
  159. import org.lwjgl.opengl.GL11;
  160. import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
  161. import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
  162. import org.spongepowered.asm.mixin.transformer.meta.MixinMerged;
  163. import shadersmod.client.Shaders;
  164. import shadersmod.client.ShadersRender;
  165.  
  166. public class RenderGlobal
  167. implements IWorldAccess,
  168. IResourceManagerReloadListener,
  169. RecordingEventHandler.RecordingEventSender {
  170.     private static final Logger field_147599_m = LogManager.getLogger();
  171.     private static final ResourceLocation field_110927_h = new ResourceLocation("textures/environment/moon_phases.png");
  172.     private static final ResourceLocation field_110928_i = new ResourceLocation("textures/environment/sun.png");
  173.     private static final ResourceLocation field_110925_j = new ResourceLocation("textures/environment/clouds.png");
  174.     private static final ResourceLocation field_110926_k = new ResourceLocation("textures/environment/end_sky.png");
  175.     private static final ResourceLocation field_175006_g = new ResourceLocation("textures/misc/forcefield.png");
  176.     public final Minecraft field_72777_q;
  177.     private final TextureManager field_72770_i;
  178.     private final RenderManager field_175010_j;
  179.     private WorldClient field_72769_h;
  180.     public Set field_175009_l = Sets.newLinkedHashSet();
  181.     public List field_72755_R = Lists.newArrayListWithCapacity((int)69696);
  182.     private ViewFrustum field_175008_n;
  183.     private int field_72772_v = -1;
  184.     private int field_72771_w = -1;
  185.     private int field_72781_x = -1;
  186.     private VertexFormat field_175014_r;
  187.     private VertexBuffer field_175013_s;
  188.     private VertexBuffer field_175012_t;
  189.     private VertexBuffer field_175011_u;
  190.     private int field_72773_u;
  191.     public final Map field_72738_E = Maps.newHashMap();
  192.     private final Map field_147593_P = Maps.newHashMap();
  193.     private final TextureAtlasSprite[] field_94141_F = new TextureAtlasSprite[10];
  194.     private Framebuffer field_175015_z;
  195.     private ShaderGroup field_174991_A;
  196.     private double field_174992_B = Double.MIN_VALUE;
  197.     private double field_174993_C = Double.MIN_VALUE;
  198.     private double field_174987_D = Double.MIN_VALUE;
  199.     private int field_174988_E = Integer.MIN_VALUE;
  200.     private int field_174989_F = Integer.MIN_VALUE;
  201.     private int field_174990_G = Integer.MIN_VALUE;
  202.     private double field_174997_H = Double.MIN_VALUE;
  203.     private double field_174998_I = Double.MIN_VALUE;
  204.     private double field_174999_J = Double.MIN_VALUE;
  205.     private double field_175000_K = Double.MIN_VALUE;
  206.     private double field_174994_L = Double.MIN_VALUE;
  207.     public final ChunkRenderDispatcher field_174995_M = new ChunkRenderDispatcher();
  208.     private ChunkRenderContainer field_174996_N;
  209.     private int field_72739_F = -1;
  210.     public int field_72740_G = 2;
  211.     private int field_72748_H;
  212.     private int field_72749_I;
  213.     private int field_72750_J;
  214.     private boolean field_175002_T = false;
  215.     private ClippingHelper field_175001_U;
  216.     private final Vector4f[] field_175004_V = new Vector4f[8];
  217.     private final Vector3d field_175003_W = new Vector3d();
  218.     private boolean field_175005_X = false;
  219.     IRenderChunkFactory field_175007_a;
  220.     private double field_147596_f;
  221.     private double field_147597_g;
  222.     private double field_147602_h;
  223.     public boolean field_147595_R = true;
  224.     private static final String __OBFID = "CL_00000954";
  225.     private CloudRenderer cloudRenderer;
  226.     public Entity renderedEntity;
  227.     public Set chunksToResortTransparency = new LinkedHashSet();
  228.     public Set chunksToUpdateForced = new LinkedHashSet();
  229.     private Deque visibilityDeque = new ArrayDeque();
  230.     private List renderInfosEntities = new ArrayList(1024);
  231.     private List renderInfosTileEntities = new ArrayList(1024);
  232.     private List renderInfosNormal = new ArrayList(1024);
  233.     private List renderInfosEntitiesNormal = new ArrayList(1024);
  234.     private List renderInfosTileEntitiesNormal = new ArrayList(1024);
  235.     private List renderInfosShadow = new ArrayList(1024);
  236.     private List renderInfosEntitiesShadow = new ArrayList(1024);
  237.     private List renderInfosTileEntitiesShadow = new ArrayList(1024);
  238.     private int renderDistance = 0;
  239.     private int renderDistanceSq = 0;
  240.     private static final Set SET_ALL_FACINGS = Collections.unmodifiableSet(new HashSet<EnumFacing>(Arrays.asList(EnumFacing.field_82609_l)));
  241.     private int countTileEntitiesRendered;
  242.     private RecordingEventHandler recordingEventHandler;
  243.     public ChunkLoadingRenderGlobal replayModRender_hook;
  244.     private boolean replayModRender_passThroughSetupTerrain;
  245.  
  246.     public RenderGlobal(Minecraft mcIn) {
  247.         this.cloudRenderer = new CloudRenderer(mcIn);
  248.         this.field_72777_q = mcIn;
  249.         this.field_175010_j = mcIn.func_175598_ae();
  250.         this.field_72770_i = mcIn.func_110434_K();
  251.         this.field_72770_i.func_110577_a(field_175006_g);
  252.         GL11.glTexParameteri((int)3553, (int)10242, (int)10497);
  253.         GL11.glTexParameteri((int)3553, (int)10243, (int)10497);
  254.         GlStateManager.func_179144_i(0);
  255.         this.func_174971_n();
  256.         this.field_175005_X = OpenGlHelper.func_176075_f();
  257.         if (this.field_175005_X) {
  258.             this.field_174996_N = new VboRenderList();
  259.             this.field_175007_a = new VboChunkFactory();
  260.         } else {
  261.             this.field_174996_N = new RenderList();
  262.             this.field_175007_a = new ListChunkFactory();
  263.         }
  264.         this.field_175014_r = new VertexFormat();
  265.         this.field_175014_r.func_177349_a(new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.POSITION, 3));
  266.         this.func_174963_q();
  267.         this.func_174980_p();
  268.         this.func_174964_o();
  269.     }
  270.  
  271.     @Override
  272.     public void func_110549_a(IResourceManager resourceManager) {
  273.         this.func_174971_n();
  274.     }
  275.  
  276.     private void func_174971_n() {
  277.         TextureMap var1 = this.field_72777_q.func_147117_R();
  278.         for (int var2 = 0; var2 < this.field_94141_F.length; ++var2) {
  279.             this.field_94141_F[var2] = var1.func_110572_b("minecraft:blocks/destroy_stage_" + var2);
  280.         }
  281.     }
  282.  
  283.     public void func_174966_b() {
  284.         if (OpenGlHelper.field_148824_g) {
  285.             if (ShaderLinkHelper.func_148074_b() == null) {
  286.                 ShaderLinkHelper.func_148076_a();
  287.             }
  288.             ResourceLocation var1 = new ResourceLocation("shaders/post/entity_outline.json");
  289.             try {
  290.                 this.field_174991_A = new ShaderGroup(this.field_72777_q.func_110434_K(), this.field_72777_q.func_110442_L(), this.field_72777_q.func_147110_a(), var1);
  291.                 this.field_174991_A.func_148026_a(this.field_72777_q.field_71443_c, this.field_72777_q.field_71440_d);
  292.                 this.field_175015_z = this.field_174991_A.func_177066_a("final");
  293.             }
  294.             catch (IOException var3) {
  295.                 field_147599_m.warn("Failed to load shader: " + var1, (Throwable)var3);
  296.                 this.field_174991_A = null;
  297.                 this.field_175015_z = null;
  298.             }
  299.             catch (JsonSyntaxException var4) {
  300.                 field_147599_m.warn("Failed to load shader: " + var1, (Throwable)var4);
  301.                 this.field_174991_A = null;
  302.                 this.field_175015_z = null;
  303.             }
  304.         } else {
  305.             this.field_174991_A = null;
  306.             this.field_175015_z = null;
  307.         }
  308.     }
  309.  
  310.     public void func_174975_c() {
  311.         if (this.func_174985_d()) {
  312.             GlStateManager.func_179147_l();
  313.             GlStateManager.func_179120_a(770, 771, 0, 1);
  314.             this.field_175015_z.func_178038_a(this.field_72777_q.field_71443_c, this.field_72777_q.field_71440_d, false);
  315.             GlStateManager.func_179084_k();
  316.         }
  317.     }
  318.  
  319.     //isRenderEntityOutlines
  320.     protected boolean func_174985_d() {
  321.         if (Config.isFastRender() || Config.isShaders() || Config.isAntialiasing()) {
  322.             return false;
  323.         }
  324.         return this.field_175015_z != null && this.field_174991_A != null && this.field_72777_q.field_71439_g != null && this.field_72777_q.field_71439_g.func_175149_v() && this.field_72777_q.field_71474_y.field_178883_an.func_151470_d();
  325.     }
  326.  
  327.     private void func_174964_o() {
  328.         Tessellator var1 = Tessellator.func_178181_a();
  329.         WorldRenderer var2 = var1.func_178180_c();
  330.         if (this.field_175011_u != null) {
  331.             this.field_175011_u.func_177362_c();
  332.         }
  333.         if (this.field_72781_x >= 0) {
  334.             GLAllocation.func_74523_b(this.field_72781_x);
  335.             this.field_72781_x = -1;
  336.         }
  337.         if (this.field_175005_X) {
  338.             this.field_175011_u = new VertexBuffer(this.field_175014_r);
  339.             this.func_174968_a(var2, -16.0f, true);
  340.             var2.func_178977_d();
  341.             var2.func_178965_a();
  342.             this.field_175011_u.func_177360_a(var2.func_178966_f(), var2.func_178976_e());
  343.         } else {
  344.             this.field_72781_x = GLAllocation.func_74526_a(1);
  345.             GL11.glNewList((int)this.field_72781_x, (int)4864);
  346.             this.func_174968_a(var2, -16.0f, true);
  347.             var1.func_78381_a();
  348.             GL11.glEndList();
  349.         }
  350.     }
  351.  
  352.     private void func_174980_p() {
  353.         Tessellator var1 = Tessellator.func_178181_a();
  354.         WorldRenderer var2 = var1.func_178180_c();
  355.         if (this.field_175012_t != null) {
  356.             this.field_175012_t.func_177362_c();
  357.         }
  358.         if (this.field_72771_w >= 0) {
  359.             GLAllocation.func_74523_b(this.field_72771_w);
  360.             this.field_72771_w = -1;
  361.         }
  362.         if (this.field_175005_X) {
  363.             this.field_175012_t = new VertexBuffer(this.field_175014_r);
  364.             this.func_174968_a(var2, 16.0f, false);
  365.             var2.func_178977_d();
  366.             var2.func_178965_a();
  367.             this.field_175012_t.func_177360_a(var2.func_178966_f(), var2.func_178976_e());
  368.         } else {
  369.             this.field_72771_w = GLAllocation.func_74526_a(1);
  370.             GL11.glNewList((int)this.field_72771_w, (int)4864);
  371.             this.func_174968_a(var2, 16.0f, false);
  372.             var1.func_78381_a();
  373.             GL11.glEndList();
  374.         }
  375.     }
  376.  
  377.     private void func_174968_a(WorldRenderer worldRendererIn, float p_174968_2_, boolean p_174968_3_) {
  378.         boolean var4 = true;
  379.         boolean var5 = true;
  380.         worldRendererIn.func_178970_b();
  381.         for (int var6 = -384; var6 <= 384; var6 += 64) {
  382.             for (int var7 = -384; var7 <= 384; var7 += 64) {
  383.                 float var8 = var6;
  384.                 float var9 = var6 + 64;
  385.                 if (p_174968_3_) {
  386.                     var9 = var6;
  387.                     var8 = var6 + 64;
  388.                 }
  389.                 worldRendererIn.func_178984_b(var8, p_174968_2_, var7);
  390.                 worldRendererIn.func_178984_b(var9, p_174968_2_, var7);
  391.                 worldRendererIn.func_178984_b(var9, p_174968_2_, var7 + 64);
  392.                 worldRendererIn.func_178984_b(var8, p_174968_2_, var7 + 64);
  393.             }
  394.         }
  395.     }
  396.  
  397.     private void func_174963_q() {
  398.         Tessellator var1 = Tessellator.func_178181_a();
  399.         WorldRenderer var2 = var1.func_178180_c();
  400.         if (this.field_175013_s != null) {
  401.             this.field_175013_s.func_177362_c();
  402.         }
  403.         if (this.field_72772_v >= 0) {
  404.             GLAllocation.func_74523_b(this.field_72772_v);
  405.             this.field_72772_v = -1;
  406.         }
  407.         if (this.field_175005_X) {
  408.             this.field_175013_s = new VertexBuffer(this.field_175014_r);
  409.             this.func_180444_a(var2);
  410.             var2.func_178977_d();
  411.             var2.func_178965_a();
  412.             this.field_175013_s.func_177360_a(var2.func_178966_f(), var2.func_178976_e());
  413.         } else {
  414.             this.field_72772_v = GLAllocation.func_74526_a(1);
  415.             GlStateManager.func_179094_E();
  416.             GL11.glNewList((int)this.field_72772_v, (int)4864);
  417.             this.func_180444_a(var2);
  418.             var1.func_78381_a();
  419.             GL11.glEndList();
  420.             GlStateManager.func_179121_F();
  421.         }
  422.     }
  423.  
  424.     private void func_180444_a(WorldRenderer worldRendererIn) {
  425.         Random var2 = new Random(10842);
  426.         worldRendererIn.func_178970_b();
  427.         for (int var3 = 0; var3 < 1500; ++var3) {
  428.             double var4 = var2.nextFloat() * 2.0f - 1.0f;
  429.             double var6 = var2.nextFloat() * 2.0f - 1.0f;
  430.             double var8 = var2.nextFloat() * 2.0f - 1.0f;
  431.             double var10 = 0.15f + var2.nextFloat() * 0.1f;
  432.             double var12 = var4 * var4 + var6 * var6 + var8 * var8;
  433.             if (var12 >= 1.0 || var12 <= 0.01) continue;
  434.             var12 = 1.0 / Math.sqrt(var12);
  435.             double var14 = (var4 *= var12) * 100.0;
  436.             double var16 = (var6 *= var12) * 100.0;
  437.             double var18 = (var8 *= var12) * 100.0;
  438.             double var20 = Math.atan2(var4, var8);
  439.             double var22 = Math.sin(var20);
  440.             double var24 = Math.cos(var20);
  441.             double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6);
  442.             double var28 = Math.sin(var26);
  443.             double var30 = Math.cos(var26);
  444.             double var32 = var2.nextDouble() * 3.141592653589793 * 2.0;
  445.             double var34 = Math.sin(var32);
  446.             double var36 = Math.cos(var32);
  447.             for (int var38 = 0; var38 < 4; ++var38) {
  448.                 double var39 = 0.0;
  449.                 double var41 = (double)((var38 & 2) - 1) * var10;
  450.                 double var43 = (double)((var38 + 1 & 2) - 1) * var10;
  451.                 double var45 = 0.0;
  452.                 double var47 = var41 * var36 - var43 * var34;
  453.                 double var49 = var43 * var36 + var41 * var34;
  454.                 double var53 = var47 * var28 + 0.0 * var30;
  455.                 double var55 = 0.0 * var28 - var47 * var30;
  456.                 double var57 = var55 * var22 - var49 * var24;
  457.                 double var61 = var49 * var22 + var55 * var24;
  458.                 worldRendererIn.func_178984_b(var14 + var57, var16 + var53, var18 + var61);
  459.             }
  460.         }
  461.     }
  462.  
  463.     public void func_72732_a(WorldClient worldClientIn) {
  464.         if (this.field_72769_h != null) {
  465.             this.field_72769_h.func_72848_b(this);
  466.         }
  467.         this.field_174992_B = Double.MIN_VALUE;
  468.         this.field_174993_C = Double.MIN_VALUE;
  469.         this.field_174987_D = Double.MIN_VALUE;
  470.         this.field_174988_E = Integer.MIN_VALUE;
  471.         this.field_174989_F = Integer.MIN_VALUE;
  472.         this.field_174990_G = Integer.MIN_VALUE;
  473.         this.field_175010_j.func_78717_a(worldClientIn);
  474.         this.field_72769_h = worldClientIn;
  475.         if (Config.isDynamicLights()) {
  476.             DynamicLights.clear();
  477.         }
  478.         if (worldClientIn != null) {
  479.             worldClientIn.func_72954_a(this);
  480.             this.func_72712_a();
  481.         }
  482.     }
  483.  
  484.     public void func_72712_a() {
  485.         if (this.field_72769_h != null) {
  486.             Entity var2;
  487.             this.field_147595_R = true;
  488.             Blocks.field_150362_t.func_150122_b(Config.isTreesFancy());
  489.             Blocks.field_150361_u.func_150122_b(Config.isTreesFancy());
  490.             BlockModelRenderer.updateAoLightValue();
  491.             if (Config.isDynamicLights()) {
  492.                 DynamicLights.clear();
  493.             }
  494.             this.field_72739_F = this.field_72777_q.field_71474_y.field_151451_c;
  495.             this.renderDistance = this.field_72739_F * 16;
  496.             this.renderDistanceSq = this.renderDistance * this.renderDistance;
  497.             boolean var1 = this.field_175005_X;
  498.             this.field_175005_X = OpenGlHelper.func_176075_f();
  499.             if (var1 && !this.field_175005_X) {
  500.                 this.field_174996_N = new RenderList();
  501.                 this.field_175007_a = new ListChunkFactory();
  502.             } else if (!var1 && this.field_175005_X) {
  503.                 this.field_174996_N = new VboRenderList();
  504.                 this.field_175007_a = new VboChunkFactory();
  505.             }
  506.             if (var1 != this.field_175005_X) {
  507.                 this.func_174963_q();
  508.                 this.func_174980_p();
  509.                 this.func_174964_o();
  510.             }
  511.             if (this.field_175008_n != null) {
  512.                 this.field_175008_n.func_178160_a();
  513.             }
  514.             this.func_174986_e();
  515.             this.field_175008_n = new ViewFrustum(this.field_72769_h, this.field_72777_q.field_71474_y.field_151451_c, this, this.field_175007_a);
  516.             if (this.field_72769_h != null && (var2 = this.field_72777_q.func_175606_aa()) != null) {
  517.                 this.field_175008_n.func_178163_a(var2.field_70165_t, var2.field_70161_v);
  518.             }
  519.             this.field_72740_G = 2;
  520.         }
  521.     }
  522.  
  523.     protected void func_174986_e() {
  524.         this.field_175009_l.clear();
  525.         this.field_174995_M.func_178514_b();
  526.     }
  527.  
  528.     public void func_72720_a(int p_72720_1_, int p_72720_2_) {
  529.         if (OpenGlHelper.field_148824_g && this.field_174991_A != null) {
  530.             this.field_174991_A.func_148026_a(p_72720_1_, p_72720_2_);
  531.         }
  532.     }
  533.  
  534.     //renderEntities
  535.     public void func_180446_a(Entity p_180446_1_, ICamera p_180446_2_, float partialTicks) {
  536.         int pass = 0;
  537.         if (Reflector.MinecraftForgeClient_getRenderPass.exists()) {
  538.             pass = Reflector.callInt(Reflector.MinecraftForgeClient_getRenderPass, new Object[0]);
  539.         }
  540.         if (this.field_72740_G > 0) {
  541.             if (pass > 0) {
  542.                 return;
  543.             }
  544.             --this.field_72740_G;
  545.         } else {
  546.             int var18;
  547.             Entity var19;
  548.             double var4 = p_180446_1_.field_70169_q + (p_180446_1_.field_70165_t - p_180446_1_.field_70169_q) * (double)partialTicks;
  549.             double var6 = p_180446_1_.field_70167_r + (p_180446_1_.field_70163_u - p_180446_1_.field_70167_r) * (double)partialTicks;
  550.             double var8 = p_180446_1_.field_70166_s + (p_180446_1_.field_70161_v - p_180446_1_.field_70166_s) * (double)partialTicks;
  551.             this.field_72769_h.field_72984_F.func_76320_a("prepare");
  552.             TileEntityRendererDispatcher.field_147556_a.func_178470_a(this.field_72769_h, this.field_72777_q.func_110434_K(), this.field_72777_q.field_71466_p, this.field_72777_q.func_175606_aa(), partialTicks);
  553.             this.field_175010_j.func_180597_a(this.field_72769_h, this.field_72777_q.field_71466_p, this.field_72777_q.func_175606_aa(), this.field_72777_q.field_147125_j, this.field_72777_q.field_71474_y, partialTicks);
  554.             if (pass == 0) {
  555.                 this.field_72748_H = 0;
  556.                 this.field_72749_I = 0;
  557.                 this.field_72750_J = 0;
  558.                 this.countTileEntitiesRendered = 0;
  559.             }
  560.             Entity var10 = this.field_72777_q.func_175606_aa();
  561.             double var11 = var10.field_70142_S + (var10.field_70165_t - var10.field_70142_S) * (double)partialTicks;
  562.             double var13 = var10.field_70137_T + (var10.field_70163_u - var10.field_70137_T) * (double)partialTicks;
  563.             double var15 = var10.field_70136_U + (var10.field_70161_v - var10.field_70136_U) * (double)partialTicks;
  564.             TileEntityRendererDispatcher.field_147554_b = var11;
  565.             TileEntityRendererDispatcher.field_147555_c = var13;
  566.             TileEntityRendererDispatcher.field_147552_d = var15;
  567.             this.field_175010_j.func_178628_a(var11, var13, var15);
  568.             this.field_72777_q.field_71460_t.func_180436_i();
  569.             this.field_72769_h.field_72984_F.func_76318_c("global");
  570.             List var17 = this.field_72769_h.func_72910_y();
  571.             if (pass == 0) {
  572.                 this.field_72748_H = var17.size();
  573.             }
  574.             if (Config.isFogOff() && this.field_72777_q.field_71460_t.fogStandard) {
  575.                 GlStateManager.func_179106_n();
  576.             }
  577.             boolean forgeEntityPass = Reflector.ForgeEntity_shouldRenderInPass.exists();
  578.             boolean forgeTileEntityPass = Reflector.ForgeTileEntity_shouldRenderInPass.exists();
  579.             for (var18 = 0; var18 < this.field_72769_h.field_73007_j.size(); ++var18) {
  580.                 var19 = (Entity)this.field_72769_h.field_73007_j.get(var18);
  581.                 if (forgeEntityPass && !Reflector.callBoolean(var19, Reflector.ForgeEntity_shouldRenderInPass, pass)) continue;
  582.                 ++this.field_72749_I;
  583.                 if (!var19.func_145770_h(var4, var6, var8)) continue;
  584.                 this.field_175010_j.func_147937_a(var19, partialTicks);
  585.             }
  586.             if (this.func_174985_d()) {
  587.                 GlStateManager.func_179143_c(519);
  588.                 GlStateManager.func_179106_n();
  589.                 this.field_175015_z.func_147614_f();
  590.                 this.field_175015_z.func_147610_a(false);
  591.                 this.field_72769_h.field_72984_F.func_76318_c("entityOutlines");
  592.                 RenderHelper.func_74518_a();
  593.                 this.field_175010_j.func_178632_c(true);
  594.                 for (var18 = 0; var18 < var17.size(); ++var18) {
  595.                     boolean var21;
  596.                     var19 = (Entity)var17.get(var18);
  597.                     if (forgeEntityPass && !Reflector.callBoolean(var19, Reflector.ForgeEntity_shouldRenderInPass, pass)) continue;
  598.                     boolean var20 = this.field_72777_q.func_175606_aa() instanceof EntityLivingBase && ((EntityLivingBase)this.field_72777_q.func_175606_aa()).func_70608_bn();
  599.                     boolean bl = var21 = var19.func_145770_h(var4, var6, var8) && (var19.field_70158_ak || p_180446_2_.func_78546_a(var19.func_174813_aQ()) || var19.field_70153_n == this.field_72777_q.field_71439_g) && var19 instanceof EntityPlayer;
  600.                     if (var19 == this.field_72777_q.func_175606_aa() && this.field_72777_q.field_71474_y.field_74320_O == 0 && !var20 || !var21) continue;
  601.                     this.field_175010_j.func_147937_a(var19, partialTicks);
  602.                 }
  603.                 this.field_175010_j.func_178632_c(false);
  604.                 RenderHelper.func_74519_b();
  605.                 GlStateManager.func_179132_a(false);
  606.                 this.field_174991_A.func_148018_a(partialTicks);
  607.                 GlStateManager.func_179132_a(true);
  608.                 this.field_72777_q.func_147110_a().func_147610_a(false);
  609.                 GlStateManager.func_179127_m();
  610.                 GlStateManager.func_179143_c(515);
  611.                 GlStateManager.func_179126_j();
  612.                 GlStateManager.func_179141_d();
  613.             }
  614.             this.field_72769_h.field_72984_F.func_76318_c("entities");
  615.             boolean isShaders = Config.isShaders();
  616.             if (isShaders) {
  617.                 Shaders.beginEntities();
  618.             }
  619.             Iterator var25 = this.renderInfosEntities.iterator();
  620.             boolean oldFancyGraphics = this.field_72777_q.field_71474_y.field_74347_j;
  621.             this.field_72777_q.field_71474_y.field_74347_j = Config.isDroppedItemsFancy();
  622.             while (var25.hasNext()) {
  623.                 ContainerLocalRenderInformation var26 = (ContainerLocalRenderInformation)var25.next();
  624.                 Chunk var28 = this.field_72769_h.func_175726_f(var26.field_178036_a.func_178568_j());
  625.                 for (Entity var22 : var28.func_177429_s()[var26.field_178036_a.func_178568_j().func_177956_o() / 16]) {
  626.                     boolean var23;
  627.                     if (forgeEntityPass && !Reflector.callBoolean(var22, Reflector.ForgeEntity_shouldRenderInPass, pass)) continue;
  628.                     boolean bl = var23 = this.field_175010_j.func_178635_a(var22, p_180446_2_, var4, var6, var8) || var22.field_70153_n == this.field_72777_q.field_71439_g;
  629.                     if (var23) {
  630.                         boolean var24;
  631.                         boolean bl2 = var24 = this.field_72777_q.func_175606_aa() instanceof EntityLivingBase ? ((EntityLivingBase)this.field_72777_q.func_175606_aa()).func_70608_bn() : false;
  632.                         if (var22 == this.field_72777_q.func_175606_aa() && this.field_72777_q.field_71474_y.field_74320_O == 0 && !var24 || var22.field_70163_u >= 0.0 && var22.field_70163_u < 256.0 && !this.field_72769_h.func_175667_e(new BlockPos(var22))) continue;
  633.                         ++this.field_72749_I;
  634.                         if (var22.getClass() == EntityItemFrame.class) {
  635.                             var22.field_70155_l = 0.06;
  636.                         }
  637.                         this.renderedEntity = var22;
  638.                         if (isShaders) {
  639.                             Shaders.nextEntity(var22);
  640.                         }
  641.                         this.field_175010_j.func_147937_a(var22, partialTicks);
  642.                         this.renderedEntity = null;
  643.                     }
  644.                     if (var23 || !(var22 instanceof EntityWitherSkull)) continue;
  645.                     if (isShaders) {
  646.                         Shaders.nextEntity(var22);
  647.                     }
  648.                     this.field_72777_q.func_175598_ae().func_178630_b(var22, partialTicks);
  649.                 }
  650.             }
  651.             this.field_72777_q.field_71474_y.field_74347_j = oldFancyGraphics;
  652.             FontRenderer fontRenderer = TileEntityRendererDispatcher.field_147556_a.func_147548_a();
  653.             if (isShaders) {
  654.                 Shaders.endEntities();
  655.                 Shaders.beginBlockEntities();
  656.             }
  657.             this.field_72769_h.field_72984_F.func_76318_c("blockentities");
  658.             RenderHelper.func_74519_b();
  659.             if (Reflector.ForgeTileEntityRendererDispatcher_preDrawBatch.exists()) {
  660.                 Reflector.call(TileEntityRendererDispatcher.field_147556_a, Reflector.ForgeTileEntityRendererDispatcher_preDrawBatch, new Object[0]);
  661.             }
  662.             for (ContainerLocalRenderInformation var26 : this.renderInfosTileEntities) {
  663.                 for (TileEntity var32 : var26.field_178036_a.func_178571_g().func_178485_b()) {
  664.                     AxisAlignedBB aabb;
  665.                     if (forgeTileEntityPass && (!Reflector.callBoolean(var32, Reflector.ForgeTileEntity_shouldRenderInPass, pass) || (aabb = (AxisAlignedBB)Reflector.call(var32, Reflector.ForgeTileEntity_getRenderBoundingBox, new Object[0])) != null && !p_180446_2_.func_78546_a(aabb))) continue;
  666.                     TileEntity te = var32;
  667.                     Class teClass = te.getClass();
  668.                     if (teClass == TileEntitySign.class && !Config.zoomMode) {
  669.                         EntityPlayerSP pl = this.field_72777_q.field_71439_g;
  670.                         double distSq = te.func_145835_a(pl.field_70165_t, pl.field_70163_u, pl.field_70161_v);
  671.                         if (distSq > 256.0) {
  672.                             fontRenderer.enabled = false;
  673.                         }
  674.                     }
  675.                     if (isShaders) {
  676.                         Shaders.nextBlockEntity(var32);
  677.                     }
  678.                     TileEntityRendererDispatcher.field_147556_a.func_180546_a(var32, partialTicks, -1);
  679.                     ++this.countTileEntitiesRendered;
  680.                     fontRenderer.enabled = true;
  681.                 }
  682.             }
  683.             if (Reflector.ForgeTileEntityRendererDispatcher_drawBatch.exists()) {
  684.                 Reflector.call(TileEntityRendererDispatcher.field_147556_a, Reflector.ForgeTileEntityRendererDispatcher_drawBatch, pass);
  685.             }
  686.             this.func_180443_s();
  687.             for (DestroyBlockProgress var27 : this.field_72738_E.values()) {
  688.                 TileEntity var32;
  689.                 boolean shouldRender;
  690.                 BlockPos var30 = var27.func_180246_b();
  691.                 var32 = this.field_72769_h.func_175625_s(var30);
  692.                 if (var32 instanceof TileEntityChest) {
  693.                     TileEntityChest var33 = (TileEntityChest)var32;
  694.                     if (var33.field_145991_k != null) {
  695.                         var30 = var30.func_177972_a(EnumFacing.WEST);
  696.                         var32 = this.field_72769_h.func_175625_s(var30);
  697.                     } else if (var33.field_145992_i != null) {
  698.                         var30 = var30.func_177972_a(EnumFacing.NORTH);
  699.                         var32 = this.field_72769_h.func_175625_s(var30);
  700.                     }
  701.                 }
  702.                 Block var34 = this.field_72769_h.func_180495_p(var30).func_177230_c();
  703.                 if (forgeTileEntityPass) {
  704.                     AxisAlignedBB aabb;
  705.                     TileEntity tileEntity = var32;
  706.                     shouldRender = false;
  707.                     if (tileEntity != null && Reflector.callBoolean(tileEntity, Reflector.ForgeTileEntity_shouldRenderInPass, pass) && Reflector.callBoolean(tileEntity, Reflector.ForgeTileEntity_canRenderBreaking, new Object[0]) && (aabb = (AxisAlignedBB)Reflector.call(tileEntity, Reflector.ForgeTileEntity_getRenderBoundingBox, new Object[0])) != null) {
  708.                         shouldRender = p_180446_2_.func_78546_a(aabb);
  709.                     }
  710.                 } else {
  711.                     boolean bl = shouldRender = var32 != null && (var34 instanceof BlockChest || var34 instanceof BlockEnderChest || var34 instanceof BlockSign || var34 instanceof BlockSkull);
  712.                 }
  713.                 if (!shouldRender) continue;
  714.                 if (isShaders) {
  715.                     Shaders.nextBlockEntity(var32);
  716.                 }
  717.                 TileEntityRendererDispatcher.field_147556_a.func_180546_a(var32, partialTicks, var27.func_73106_e());
  718.             }
  719.             this.func_174969_t();
  720.             this.field_72777_q.field_71460_t.func_175072_h();
  721.             this.field_72777_q.field_71424_I.func_76319_b();
  722.         }
  723.     }
  724.  
  725.     public String func_72735_c() {
  726.         int var1 = this.field_175008_n.field_178164_f.length;
  727.         int var2 = 0;
  728.         for (ContainerLocalRenderInformation var4 : this.field_72755_R) {
  729.             CompiledChunk var5 = var4.field_178036_a.field_178590_b;
  730.             if (var5 == CompiledChunk.field_178502_a || var5.func_178489_a()) continue;
  731.             ++var2;
  732.         }
  733.         Object[] arrobject = new Object[5];
  734.         arrobject[0] = var2;
  735.         arrobject[1] = var1;
  736.         arrobject[2] = this.field_72777_q.field_175612_E ? "(s) " : "";
  737.         arrobject[3] = this.field_72739_F;
  738.         arrobject[4] = this.field_174995_M.func_178504_a();
  739.         return String.format("C: %d/%d %sD: %d, %s", arrobject);
  740.     }
  741.  
  742.     public String func_72723_d() {
  743.         return "E: " + this.field_72749_I + "/" + this.field_72748_H + ", B: " + this.field_72750_J + ", I: " + (this.field_72748_H - this.field_72750_J - this.field_72749_I) + ", " + Config.getVersionDebug();
  744.     }
  745.  
  746.     //setupTerrain
  747.     public void func_174970_a(Entity entity, double d, ICamera iCamera, int n, boolean bl) {
  748.         void partialTicks;
  749.         ContainerLocalRenderInformation var39;
  750.         Frustum camera;
  751.         RenderGlobal renderGlobal;
  752.         void viewEntity;
  753.         CallbackInfo callbackInfo = new CallbackInfo("func_174970_a", true);
  754.         renderGlobal.replayModRender_setupTerrain(entity, d, iCamera, n, bl, callbackInfo);
  755.         if (callbackInfo.isCancelled()) {
  756.             return;
  757.         }
  758.         if (this.field_72777_q.field_71474_y.field_151451_c != this.field_72739_F) {
  759.             this.func_72712_a();
  760.         }
  761.         this.field_72769_h.field_72984_F.func_76320_a("camera");
  762.         double var7 = viewEntity.field_70165_t - this.field_174992_B;
  763.         double var9 = viewEntity.field_70163_u - this.field_174993_C;
  764.         double var11 = viewEntity.field_70161_v - this.field_174987_D;
  765.         if (this.field_174988_E != viewEntity.field_70176_ah || this.field_174989_F != viewEntity.field_70162_ai || this.field_174990_G != viewEntity.field_70164_aj || var7 * var7 + var9 * var9 + var11 * var11 > 16.0) {
  766.             this.field_174992_B = viewEntity.field_70165_t;
  767.             this.field_174993_C = viewEntity.field_70163_u;
  768.             this.field_174987_D = viewEntity.field_70161_v;
  769.             this.field_174988_E = viewEntity.field_70176_ah;
  770.             this.field_174989_F = viewEntity.field_70162_ai;
  771.             this.field_174990_G = viewEntity.field_70164_aj;
  772.             this.field_175008_n.func_178163_a(viewEntity.field_70165_t, viewEntity.field_70161_v);
  773.         }
  774.         if (Config.isDynamicLights()) {
  775.             DynamicLights.update((RenderGlobal)this);
  776.         }
  777.         this.field_72769_h.field_72984_F.func_76318_c("renderlistcamera");
  778.         double var13 = viewEntity.field_70142_S + (viewEntity.field_70165_t - viewEntity.field_70142_S) * partialTicks;
  779.         double var15 = viewEntity.field_70137_T + (viewEntity.field_70163_u - viewEntity.field_70137_T) * partialTicks;
  780.         double var17 = viewEntity.field_70136_U + (viewEntity.field_70161_v - viewEntity.field_70136_U) * partialTicks;
  781.         this.field_174996_N.func_178004_a(var13, var15, var17);
  782.         this.field_72769_h.field_72984_F.func_76318_c("cull");
  783.         if (this.field_175001_U != null) {
  784.             Frustum var19 = new Frustum(this.field_175001_U);
  785.             var19.func_78547_a(this.field_175003_W.x, this.field_175003_W.y, this.field_175003_W.z);
  786.             camera = var19;
  787.         }
  788.         this.field_72777_q.field_71424_I.func_76318_c("culling");
  789.         BlockPos var35 = new BlockPos(var13, var15 + (double)viewEntity.func_70047_e(), var17);
  790.         RenderChunk var20 = this.field_175008_n.func_178161_a(var35);
  791.         BlockPos var21 = new BlockPos(MathHelper.func_76128_c(var13) / 16 * 16, MathHelper.func_76128_c(var15) / 16 * 16, MathHelper.func_76128_c(var17) / 16 * 16);
  792.         this.field_147595_R = this.field_147595_R || !this.field_175009_l.isEmpty() || viewEntity.field_70165_t != this.field_174997_H || viewEntity.field_70163_u != this.field_174998_I || viewEntity.field_70161_v != this.field_174999_J || (double)viewEntity.field_70125_A != this.field_175000_K || (double)viewEntity.field_70177_z != this.field_174994_L;
  793.         this.field_174997_H = viewEntity.field_70165_t;
  794.         this.field_174998_I = viewEntity.field_70163_u;
  795.         this.field_174999_J = viewEntity.field_70161_v;
  796.         this.field_175000_K = viewEntity.field_70125_A;
  797.         this.field_174994_L = viewEntity.field_70177_z;
  798.         boolean var22 = this.field_175001_U != null;
  799.         Lagometer.timerVisibility.start();
  800.         if (Shaders.isShadowPass) {
  801.             this.field_72755_R = this.renderInfosShadow;
  802.             this.renderInfosEntities = this.renderInfosEntitiesShadow;
  803.             this.renderInfosTileEntities = this.renderInfosTileEntitiesShadow;
  804.             if (!var22 && this.field_147595_R) {
  805.                 this.field_72755_R.clear();
  806.                 this.renderInfosEntities.clear();
  807.                 this.renderInfosTileEntities.clear();
  808.                 RenderInfoLazy infoLazy = new RenderInfoLazy();
  809.                 for (int i = 0; i < this.field_175008_n.field_178164_f.length; ++i) {
  810.                     BlockPos pos;
  811.                     RenderChunk chunk = this.field_175008_n.field_178164_f[i];
  812.                     infoLazy.setRenderChunk(chunk);
  813.                     if (!chunk.field_178590_b.func_178489_a() || chunk.func_178569_m()) {
  814.                         this.field_72755_R.add(infoLazy.getRenderInfo());
  815.                     }
  816.                     if (ChunkUtils.hasEntities(this.field_72769_h.func_175726_f(pos = chunk.func_178568_j()))) {
  817.                         this.renderInfosEntities.add(infoLazy.getRenderInfo());
  818.                     }
  819.                     if (chunk.func_178571_g().func_178485_b().size() <= 0) continue;
  820.                     this.renderInfosTileEntities.add(infoLazy.getRenderInfo());
  821.                 }
  822.             }
  823.         } else {
  824.             this.field_72755_R = this.renderInfosNormal;
  825.             this.renderInfosEntities = this.renderInfosEntitiesNormal;
  826.             this.renderInfosTileEntities = this.renderInfosTileEntitiesNormal;
  827.         }
  828.         if (!var22 && this.field_147595_R && !Shaders.isShadowPass) {
  829.             void frameCount;
  830.             this.field_147595_R = false;
  831.             this.field_72755_R.clear();
  832.             this.renderInfosEntities.clear();
  833.             this.renderInfosTileEntities.clear();
  834.             this.visibilityDeque.clear();
  835.             Deque var23 = this.visibilityDeque;
  836.             boolean var24 = this.field_72777_q.field_175612_E;
  837.             if (var20 == null) {
  838.                 int var25 = var35.func_177956_o() > 0 ? 248 : 8;
  839.                 for (int var26 = - this.field_72739_F; var26 <= this.field_72739_F; ++var26) {
  840.                     for (int var27 = - this.field_72739_F; var27 <= this.field_72739_F; ++var27) {
  841.                         RenderChunk var28 = this.field_175008_n.func_178161_a(new BlockPos((var26 << 4) + 8, var25, (var27 << 4) + 8));
  842.                         if (var28 == null || !camera.func_78546_a(var28.field_178591_c)) continue;
  843.                         var28.func_178577_a((int)frameCount);
  844.                         var23.add(new ContainerLocalRenderInformation(var28, null, 0, null));
  845.                     }
  846.                 }
  847.             } else {
  848.                 void playerSpectator;
  849.                 boolean var38 = false;
  850.                 ContainerLocalRenderInformation var40 = new ContainerLocalRenderInformation(var20, null, 0, null);
  851.                 Set var42 = SET_ALL_FACINGS;
  852.                 if (!var42.isEmpty() && var42.size() == 1) {
  853.                     Vector3f var44 = this.func_174962_a((Entity)viewEntity, (double)partialTicks);
  854.                     EnumFacing var29 = EnumFacing.func_176737_a(var44.x, var44.y, var44.z).func_176734_d();
  855.                     var42.remove(var29);
  856.                 }
  857.                 if (var42.isEmpty()) {
  858.                     var38 = true;
  859.                 }
  860.                 if (var38 && playerSpectator == false) {
  861.                     this.field_72755_R.add(var40);
  862.                 } else {
  863.                     if (playerSpectator != false && this.field_72769_h.func_180495_p(var35).func_177230_c().func_149662_c()) {
  864.                         var24 = false;
  865.                     }
  866.                     var20.func_178577_a((int)frameCount);
  867.                     var23.add(var40);
  868.                 }
  869.             }
  870.             EnumFacing[] var46 = EnumFacing.field_82609_l;
  871.             int var30 = var46.length;
  872.             while (!var23.isEmpty()) {
  873.                 var39 = (ContainerLocalRenderInformation)var23.poll();
  874.                 RenderChunk var41 = var39.field_178036_a;
  875.                 EnumFacing var43 = var39.field_178034_b;
  876.                 BlockPos var45 = var41.func_178568_j();
  877.                 if (!var41.field_178590_b.func_178489_a() || var41.func_178569_m()) {
  878.                     this.field_72755_R.add(var39);
  879.                 }
  880.                 if (ChunkUtils.hasEntities(this.field_72769_h.func_175726_f(var45))) {
  881.                     this.renderInfosEntities.add(var39);
  882.                 }
  883.                 if (var41.func_178571_g().func_178485_b().size() > 0) {
  884.                     this.renderInfosTileEntities.add(var39);
  885.                 }
  886.                 for (int var31 = 0; var31 < var30; ++var31) {
  887.                     RenderChunk var33;
  888.                     EnumFacing var32 = var46[var31];
  889.                     if (var24 && var39.field_178035_c.contains(var32.func_176734_d()) || var24 && var43 != null && !var41.func_178571_g().func_178495_a(var43.func_176734_d(), var32) || (var33 = this.getRenderChunkOffset(var35, var41, var32)) == null || !var33.func_178577_a((int)frameCount) || !camera.func_78546_a(var33.field_178591_c)) continue;
  890.                     ContainerLocalRenderInformation var34 = new ContainerLocalRenderInformation(var33, var32, var39.field_178032_d + 1, null);
  891.                     var34.field_178035_c.addAll(var39.field_178035_c);
  892.                     var34.field_178035_c.add(var32);
  893.                     var23.add(var34);
  894.                 }
  895.             }
  896.         }
  897.         if (this.field_175002_T) {
  898.             this.func_174984_a(var13, var15, var17);
  899.             this.field_175002_T = false;
  900.         }
  901.         Lagometer.timerVisibility.end();
  902.         if (Shaders.isShadowPass) {
  903.             Shaders.mcProfilerEndSection();
  904.             return;
  905.         }
  906.         this.field_174995_M.func_178513_e();
  907.         Set var36 = this.field_175009_l;
  908.         this.field_175009_l = Sets.newLinkedHashSet();
  909.         Iterator var37 = this.field_72755_R.iterator();
  910.         Lagometer.timerChunkUpdate.start();
  911.         while (var37.hasNext()) {
  912.             var39 = (ContainerLocalRenderInformation)var37.next();
  913.             RenderChunk var41 = var39.field_178036_a;
  914.             if (!var41.func_178569_m() && !var36.contains(var41)) continue;
  915.             this.field_147595_R = true;
  916.             if (this.func_174983_a(var21, var39.field_178036_a)) {
  917.                 if (!var41.isPlayerUpdate()) {
  918.                     this.chunksToUpdateForced.add(var41);
  919.                     continue;
  920.                 }
  921.                 this.field_72777_q.field_71424_I.func_76320_a("build near");
  922.                 this.field_174995_M.func_178505_b(var41);
  923.                 var41.func_178575_a(false);
  924.                 this.field_72777_q.field_71424_I.func_76319_b();
  925.                 continue;
  926.             }
  927.             this.field_175009_l.add(var41);
  928.         }
  929.         Lagometer.timerChunkUpdate.end();
  930.         this.field_175009_l.addAll(var36);
  931.         this.field_72777_q.field_71424_I.func_76319_b();
  932.     }
  933.  
  934.     private boolean func_174983_a(BlockPos blockPos, RenderChunk renderChunk) {
  935.         void p_174983_2_;
  936.         void p_174983_1_;
  937.         RenderGlobal renderGlobal;
  938.         CallbackInfoReturnable callbackInfoReturnable = new CallbackInfoReturnable("func_174983_a", true);
  939.         renderGlobal.replayModRender_isPositionInRenderChunk(blockPos, renderChunk, callbackInfoReturnable);
  940.         if (callbackInfoReturnable.isCancelled()) {
  941.             return callbackInfoReturnable.getReturnValueZ();
  942.         }
  943.         BlockPos var3 = p_174983_2_.func_178568_j();
  944.         return MathHelper.func_76130_a(p_174983_1_.func_177958_n() - var3.func_177958_n()) > 16 ? false : (MathHelper.func_76130_a(p_174983_1_.func_177956_o() - var3.func_177956_o()) > 16 ? false : MathHelper.func_76130_a(p_174983_1_.func_177952_p() - var3.func_177952_p()) <= 16);
  945.     }
  946.  
  947.     private Set func_174978_c(BlockPos p_174978_1_) {
  948.         VisGraph var2 = new VisGraph();
  949.         BlockPos var3 = new BlockPos(p_174978_1_.func_177958_n() >> 4 << 4, p_174978_1_.func_177956_o() >> 4 << 4, p_174978_1_.func_177952_p() >> 4 << 4);
  950.         Chunk var4 = this.field_72769_h.func_175726_f(var3);
  951.         for (BlockPos$MutableBlockPos var6 : BlockPos.func_177975_b(var3, var3.func_177982_a(15, 15, 15))) {
  952.             if (!var4.func_177428_a(var6).func_149662_c()) continue;
  953.             var2.func_178606_a(var6);
  954.         }
  955.         return var2.func_178609_b(p_174978_1_);
  956.     }
  957.  
  958.     private RenderChunk getRenderChunkOffset(BlockPos p_174973_1_, RenderChunk renderChunk, EnumFacing p_174973_3_) {
  959.         int distSq;
  960.         BlockPos var4 = renderChunk.getPositionOffset16(p_174973_3_);
  961.         if (var4.func_177956_o() < 0 || var4.func_177956_o() >= 256) {
  962.             return null;
  963.         }
  964.         int dx = MathHelper.func_76130_a(p_174973_1_.func_177958_n() - var4.func_177958_n());
  965.         int dz = MathHelper.func_76130_a(p_174973_1_.func_177952_p() - var4.func_177952_p());
  966.         if (Config.isFogOff() ? dx > this.renderDistance || dz > this.renderDistance : (distSq = dx * dx + dz * dz) > this.renderDistanceSq) {
  967.             return null;
  968.         }
  969.         return this.field_175008_n.func_178161_a(var4);
  970.     }
  971.  
  972.     private void func_174984_a(double p_174984_1_, double p_174984_3_, double p_174984_5_) {
  973.         this.field_175001_U = new ClippingHelperImpl();
  974.         ((ClippingHelperImpl)this.field_175001_U).func_78560_b();
  975.         Matrix4f var7 = new Matrix4f(this.field_175001_U.field_178626_c);
  976.         var7.transpose();
  977.         Matrix4f var8 = new Matrix4f(this.field_175001_U.field_178625_b);
  978.         var8.transpose();
  979.         Matrix4f var9 = new Matrix4f();
  980.         var9.mul(var8, var7);
  981.         var9.invert();
  982.         this.field_175003_W.x = p_174984_1_;
  983.         this.field_175003_W.y = p_174984_3_;
  984.         this.field_175003_W.z = p_174984_5_;
  985.         this.field_175004_V[0] = new Vector4f(-1.0f, -1.0f, -1.0f, 1.0f);
  986.         this.field_175004_V[1] = new Vector4f(1.0f, -1.0f, -1.0f, 1.0f);
  987.         this.field_175004_V[2] = new Vector4f(1.0f, 1.0f, -1.0f, 1.0f);
  988.         this.field_175004_V[3] = new Vector4f(-1.0f, 1.0f, -1.0f, 1.0f);
  989.         this.field_175004_V[4] = new Vector4f(-1.0f, -1.0f, 1.0f, 1.0f);
  990.         this.field_175004_V[5] = new Vector4f(1.0f, -1.0f, 1.0f, 1.0f);
  991.         this.field_175004_V[6] = new Vector4f(1.0f, 1.0f, 1.0f, 1.0f);
  992.         this.field_175004_V[7] = new Vector4f(-1.0f, 1.0f, 1.0f, 1.0f);
  993.         for (int var10 = 0; var10 < 8; ++var10) {
  994.             var9.transform((Tuple4f)this.field_175004_V[var10]);
  995.             this.field_175004_V[var10].x /= this.field_175004_V[var10].w;
  996.             this.field_175004_V[var10].y /= this.field_175004_V[var10].w;
  997.             this.field_175004_V[var10].z /= this.field_175004_V[var10].w;
  998.             this.field_175004_V[var10].w = 1.0f;
  999.         }
  1000.     }
  1001.  
  1002.     protected Vector3f func_174962_a(Entity entityIn, double partialTicks) {
  1003.         float var4 = (float)((double)entityIn.field_70127_C + (double)(entityIn.field_70125_A - entityIn.field_70127_C) * partialTicks);
  1004.         float var5 = (float)((double)entityIn.field_70126_B + (double)(entityIn.field_70177_z - entityIn.field_70126_B) * partialTicks);
  1005.         if (Minecraft.func_71410_x().field_71474_y.field_74320_O == 2) {
  1006.             var4 += 180.0f;
  1007.         }
  1008.         float var6 = MathHelper.func_76134_b((- var5) * 0.017453292f - 3.1415927f);
  1009.         float var7 = MathHelper.func_76126_a((- var5) * 0.017453292f - 3.1415927f);
  1010.         float var8 = - MathHelper.func_76134_b((- var4) * 0.017453292f);
  1011.         float var9 = MathHelper.func_76126_a((- var4) * 0.017453292f);
  1012.         return new Vector3f(var7 * var8, var9, var6 * var8);
  1013.     }
  1014.  
  1015.     public int func_174977_a(EnumWorldBlockLayer blockLayerIn, double partialTicks, int pass, Entity entityIn) {
  1016.         RenderHelper.func_74518_a();
  1017.         if (blockLayerIn == EnumWorldBlockLayer.TRANSLUCENT) {
  1018.             this.field_72777_q.field_71424_I.func_76320_a("translucent_sort");
  1019.             double var6 = entityIn.field_70165_t - this.field_147596_f;
  1020.             double var8 = entityIn.field_70163_u - this.field_147597_g;
  1021.             double var10 = entityIn.field_70161_v - this.field_147602_h;
  1022.             if (var6 * var6 + var8 * var8 + var10 * var10 > 1.0) {
  1023.                 this.field_147596_f = entityIn.field_70165_t;
  1024.                 this.field_147597_g = entityIn.field_70163_u;
  1025.                 this.field_147602_h = entityIn.field_70161_v;
  1026.                 int var12 = 0;
  1027.                 Iterator var13 = this.field_72755_R.iterator();
  1028.                 this.chunksToResortTransparency.clear();
  1029.                 while (var13.hasNext()) {
  1030.                     ContainerLocalRenderInformation var14 = (ContainerLocalRenderInformation)var13.next();
  1031.                     if (!var14.field_178036_a.field_178590_b.func_178492_d(blockLayerIn) || var12++ >= 15) continue;
  1032.                     this.chunksToResortTransparency.add(var14.field_178036_a);
  1033.                 }
  1034.             }
  1035.             this.field_72777_q.field_71424_I.func_76319_b();
  1036.         }
  1037.         this.field_72777_q.field_71424_I.func_76320_a("filterempty");
  1038.         int var15 = 0;
  1039.         boolean var7 = blockLayerIn == EnumWorldBlockLayer.TRANSLUCENT;
  1040.         int var16 = var7 ? this.field_72755_R.size() - 1 : 0;
  1041.         int var9 = var7 ? -1 : this.field_72755_R.size();
  1042.         int var17 = var7 ? -1 : 1;
  1043.         for (int var11 = var16; var11 != var9; var11 += var17) {
  1044.             RenderChunk var18 = ((ContainerLocalRenderInformation)this.field_72755_R.get((int)var11)).field_178036_a;
  1045.             if (var18.func_178571_g().func_178491_b(blockLayerIn)) continue;
  1046.             ++var15;
  1047.             this.field_174996_N.func_178002_a(var18, blockLayerIn);
  1048.         }
  1049.         if (var15 == 0) {
  1050.             this.field_72777_q.field_71424_I.func_76319_b();
  1051.             return var15;
  1052.         }
  1053.         if (Config.isFogOff() && this.field_72777_q.field_71460_t.fogStandard) {
  1054.             GlStateManager.func_179106_n();
  1055.         }
  1056.         this.field_72777_q.field_71424_I.func_76318_c("render_" + (Object)((Object)blockLayerIn));
  1057.         this.func_174982_a(blockLayerIn);
  1058.         this.field_72777_q.field_71424_I.func_76319_b();
  1059.         return var15;
  1060.     }
  1061.  
  1062.     private void func_174982_a(EnumWorldBlockLayer blockLayerIn) {
  1063.         this.field_72777_q.field_71460_t.func_180436_i();
  1064.         if (OpenGlHelper.func_176075_f()) {
  1065.             GL11.glEnableClientState((int)32884);
  1066.             OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a);
  1067.             GL11.glEnableClientState((int)32888);
  1068.             OpenGlHelper.func_77472_b(OpenGlHelper.field_77476_b);
  1069.             GL11.glEnableClientState((int)32888);
  1070.             OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a);
  1071.             GL11.glEnableClientState((int)32886);
  1072.         }
  1073.         if (Config.isShaders()) {
  1074.             ShadersRender.preRenderChunkLayer();
  1075.         }
  1076.         this.field_174996_N.func_178001_a(blockLayerIn);
  1077.         if (Config.isShaders()) {
  1078.             ShadersRender.postRenderChunkLayer();
  1079.         }
  1080.         if (OpenGlHelper.func_176075_f()) {
  1081.             List var2 = DefaultVertexFormats.field_176600_a.func_177343_g();
  1082.             for (VertexFormatElement var4 : var2) {
  1083.                 VertexFormatElement.EnumUsage var5 = var4.func_177375_c();
  1084.                 int var6 = var4.func_177369_e();
  1085.                 switch (SwitchEnumUsage.field_178037_a[var5.ordinal()]) {
  1086.                     case 1: {
  1087.                         GL11.glDisableClientState((int)32884);
  1088.                         break;
  1089.                     }
  1090.                     case 2: {
  1091.                         OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a + var6);
  1092.                         GL11.glDisableClientState((int)32888);
  1093.                         OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a);
  1094.                         break;
  1095.                     }
  1096.                     case 3: {
  1097.                         GL11.glDisableClientState((int)32886);
  1098.                         GlStateManager.func_179117_G();
  1099.                     }
  1100.                 }
  1101.             }
  1102.         }
  1103.         this.field_72777_q.field_71460_t.func_175072_h();
  1104.     }
  1105.  
  1106.     private void func_174965_a(Iterator p_174965_1_) {
  1107.         while (p_174965_1_.hasNext()) {
  1108.             DestroyBlockProgress var2 = (DestroyBlockProgress)p_174965_1_.next();
  1109.             int var3 = var2.func_82743_f();
  1110.             if (this.field_72773_u - var3 <= 400) continue;
  1111.             p_174965_1_.remove();
  1112.         }
  1113.     }
  1114.  
  1115.     public void func_72734_e() {
  1116.         if (Config.isShaders() && Keyboard.isKeyDown((int)61) && Keyboard.isKeyDown((int)19)) {
  1117.             Shaders.uninit();
  1118.         }
  1119.         ++this.field_72773_u;
  1120.         if (this.field_72773_u % 20 == 0) {
  1121.             this.func_174965_a(this.field_72738_E.values().iterator());
  1122.         }
  1123.     }
  1124.  
  1125.     private void func_180448_r() {
  1126.         if (!Config.isSkyEnabled()) {
  1127.             return;
  1128.         }
  1129.         GlStateManager.func_179106_n();
  1130.         GlStateManager.func_179118_c();
  1131.         GlStateManager.func_179147_l();
  1132.         GlStateManager.func_179120_a(770, 771, 1, 0);
  1133.         RenderHelper.func_74518_a();
  1134.         GlStateManager.func_179132_a(false);
  1135.         this.field_72770_i.func_110577_a(field_110926_k);
  1136.         Tessellator var1 = Tessellator.func_178181_a();
  1137.         WorldRenderer var2 = var1.func_178180_c();
  1138.         for (int var3 = 0; var3 < 6; ++var3) {
  1139.             GlStateManager.func_179094_E();
  1140.             if (var3 == 1) {
  1141.                 GlStateManager.func_179114_b(90.0f, 1.0f, 0.0f, 0.0f);
  1142.             }
  1143.             if (var3 == 2) {
  1144.                 GlStateManager.func_179114_b(-90.0f, 1.0f, 0.0f, 0.0f);
  1145.             }
  1146.             if (var3 == 3) {
  1147.                 GlStateManager.func_179114_b(180.0f, 1.0f, 0.0f, 0.0f);
  1148.             }
  1149.             if (var3 == 4) {
  1150.                 GlStateManager.func_179114_b(90.0f, 0.0f, 0.0f, 1.0f);
  1151.             }
  1152.             if (var3 == 5) {
  1153.                 GlStateManager.func_179114_b(-90.0f, 0.0f, 0.0f, 1.0f);
  1154.             }
  1155.             var2.func_178970_b();
  1156.             var2.func_178991_c(2631720);
  1157.             var2.func_178985_a(-100.0, -100.0, -100.0, 0.0, 0.0);
  1158.             var2.func_178985_a(-100.0, -100.0, 100.0, 0.0, 16.0);
  1159.             var2.func_178985_a(100.0, -100.0, 100.0, 16.0, 16.0);
  1160.             var2.func_178985_a(100.0, -100.0, -100.0, 16.0, 0.0);
  1161.             var1.func_78381_a();
  1162.             GlStateManager.func_179121_F();
  1163.         }
  1164.         GlStateManager.func_179132_a(true);
  1165.         GlStateManager.func_179098_w();
  1166.         GlStateManager.func_179141_d();
  1167.     }
  1168.  
  1169.     public void func_174976_a(float partialTicks, int pass) {
  1170.         WorldProvider wp;
  1171.         Object skyRenderer;
  1172.         if (Reflector.ForgeWorldProvider_getSkyRenderer.exists() && (skyRenderer = Reflector.call(wp = this.field_72777_q.field_71441_e.field_73011_w, Reflector.ForgeWorldProvider_getSkyRenderer, new Object[0])) != null) {
  1173.             Reflector.callVoid(skyRenderer, Reflector.IRenderHandler_render, Float.valueOf(partialTicks), this.field_72769_h, this.field_72777_q);
  1174.             return;
  1175.         }
  1176.         if (this.field_72777_q.field_71441_e.field_73011_w.func_177502_q() == 1) {
  1177.             this.func_180448_r();
  1178.         } else if (this.field_72777_q.field_71441_e.field_73011_w.func_76569_d()) {
  1179.             float var11;
  1180.             float var10;
  1181.             float var12;
  1182.             float var22;
  1183.             float var14;
  1184.             float var13;
  1185.             GlStateManager.func_179090_x();
  1186.             boolean isShaders = Config.isShaders();
  1187.             if (isShaders) {
  1188.                 Shaders.disableTexture2D();
  1189.             }
  1190.             Vec3 var3 = this.field_72769_h.func_72833_a(this.field_72777_q.func_175606_aa(), partialTicks);
  1191.             var3 = CustomColors.getSkyColor(var3, this.field_72777_q.field_71441_e, this.field_72777_q.func_175606_aa().field_70165_t, this.field_72777_q.func_175606_aa().field_70163_u + 1.0, this.field_72777_q.func_175606_aa().field_70161_v);
  1192.             if (isShaders) {
  1193.                 Shaders.setSkyColor(var3);
  1194.             }
  1195.             float var4 = (float)var3.field_72450_a;
  1196.             float var5 = (float)var3.field_72448_b;
  1197.             float var6 = (float)var3.field_72449_c;
  1198.             if (pass != 2) {
  1199.                 float var7 = (var4 * 30.0f + var5 * 59.0f + var6 * 11.0f) / 100.0f;
  1200.                 float var8 = (var4 * 30.0f + var5 * 70.0f) / 100.0f;
  1201.                 float var9 = (var4 * 30.0f + var6 * 70.0f) / 100.0f;
  1202.                 var4 = var7;
  1203.                 var5 = var8;
  1204.                 var6 = var9;
  1205.             }
  1206.             GlStateManager.func_179124_c(var4, var5, var6);
  1207.             Tessellator var23 = Tessellator.func_178181_a();
  1208.             WorldRenderer var24 = var23.func_178180_c();
  1209.             GlStateManager.func_179132_a(false);
  1210.             GlStateManager.func_179127_m();
  1211.             if (isShaders) {
  1212.                 Shaders.enableFog();
  1213.             }
  1214.             GlStateManager.func_179124_c(var4, var5, var6);
  1215.             if (isShaders) {
  1216.                 Shaders.preSkyList();
  1217.             }
  1218.             if (Config.isSkyEnabled()) {
  1219.                 if (this.field_175005_X) {
  1220.                     this.field_175012_t.func_177359_a();
  1221.                     GL11.glEnableClientState((int)32884);
  1222.                     GL11.glVertexPointer((int)3, (int)5126, (int)12, (long)0);
  1223.                     this.field_175012_t.func_177358_a(7);
  1224.                     this.field_175012_t.func_177361_b();
  1225.                     GL11.glDisableClientState((int)32884);
  1226.                 } else {
  1227.                     GlStateManager.func_179148_o(this.field_72771_w);
  1228.                 }
  1229.             }
  1230.             GlStateManager.func_179106_n();
  1231.             if (isShaders) {
  1232.                 Shaders.disableFog();
  1233.             }
  1234.             GlStateManager.func_179118_c();
  1235.             GlStateManager.func_179147_l();
  1236.             GlStateManager.func_179120_a(770, 771, 1, 0);
  1237.             RenderHelper.func_74518_a();
  1238.             float[] var25 = this.field_72769_h.field_73011_w.func_76560_a(this.field_72769_h.func_72826_c(partialTicks), partialTicks);
  1239.             if (var25 != null && Config.isSunMoonEnabled()) {
  1240.                 float var15;
  1241.                 GlStateManager.func_179090_x();
  1242.                 if (isShaders) {
  1243.                     Shaders.disableTexture2D();
  1244.                 }
  1245.                 GlStateManager.func_179103_j(7425);
  1246.                 GlStateManager.func_179094_E();
  1247.                 GlStateManager.func_179114_b(90.0f, 1.0f, 0.0f, 0.0f);
  1248.                 GlStateManager.func_179114_b(MathHelper.func_76126_a(this.field_72769_h.func_72929_e(partialTicks)) < 0.0f ? 180.0f : 0.0f, 0.0f, 0.0f, 1.0f);
  1249.                 GlStateManager.func_179114_b(90.0f, 0.0f, 0.0f, 1.0f);
  1250.                 var10 = var25[0];
  1251.                 var11 = var25[1];
  1252.                 var12 = var25[2];
  1253.                 if (pass != 2) {
  1254.                     var13 = (var10 * 30.0f + var11 * 59.0f + var12 * 11.0f) / 100.0f;
  1255.                     var14 = (var10 * 30.0f + var11 * 70.0f) / 100.0f;
  1256.                     var15 = (var10 * 30.0f + var12 * 70.0f) / 100.0f;
  1257.                     var10 = var13;
  1258.                     var11 = var14;
  1259.                     var12 = var15;
  1260.                 }
  1261.                 var24.func_178964_a(6);
  1262.                 var24.func_178960_a(var10, var11, var12, var25[3]);
  1263.                 var24.func_178984_b(0.0, 100.0, 0.0);
  1264.                 boolean var27 = true;
  1265.                 var24.func_178960_a(var25[0], var25[1], var25[2], 0.0f);
  1266.                 for (int var28 = 0; var28 <= 16; ++var28) {
  1267.                     var15 = (float)var28 * 3.1415927f * 2.0f / 16.0f;
  1268.                     float var16 = MathHelper.func_76126_a(var15);
  1269.                     float var17 = MathHelper.func_76134_b(var15);
  1270.                     var24.func_178984_b(var16 * 120.0f, var17 * 120.0f, (- var17) * 40.0f * var25[3]);
  1271.                 }
  1272.                 var23.func_78381_a();
  1273.                 GlStateManager.func_179121_F();
  1274.                 GlStateManager.func_179103_j(7424);
  1275.             }
  1276.             GlStateManager.func_179098_w();
  1277.             if (isShaders) {
  1278.                 Shaders.enableTexture2D();
  1279.             }
  1280.             GlStateManager.func_179120_a(770, 1, 1, 0);
  1281.             GlStateManager.func_179094_E();
  1282.             var10 = 1.0f - this.field_72769_h.func_72867_j(partialTicks);
  1283.             var11 = 0.0f;
  1284.             var12 = 0.0f;
  1285.             var13 = 0.0f;
  1286.             GlStateManager.func_179131_c(1.0f, 1.0f, 1.0f, var10);
  1287.             GlStateManager.func_179109_b(0.0f, 0.0f, 0.0f);
  1288.             GlStateManager.func_179114_b(-90.0f, 0.0f, 1.0f, 0.0f);
  1289.             CustomSky.renderSky(this.field_72769_h, this.field_72770_i, this.field_72769_h.func_72826_c(partialTicks), var10);
  1290.             if (isShaders) {
  1291.                 Shaders.preCelestialRotate();
  1292.             }
  1293.             GlStateManager.func_179114_b(this.field_72769_h.func_72826_c(partialTicks) * 360.0f, 1.0f, 0.0f, 0.0f);
  1294.             if (isShaders) {
  1295.                 Shaders.postCelestialRotate();
  1296.             }
  1297.             if (Config.isSunMoonEnabled()) {
  1298.                 var14 = 30.0f;
  1299.                 this.field_72770_i.func_110577_a(field_110928_i);
  1300.                 var24.func_178970_b();
  1301.                 var24.func_178985_a(- var14, 100.0, - var14, 0.0, 0.0);
  1302.                 var24.func_178985_a(var14, 100.0, - var14, 1.0, 0.0);
  1303.                 var24.func_178985_a(var14, 100.0, var14, 1.0, 1.0);
  1304.                 var24.func_178985_a(- var14, 100.0, var14, 0.0, 1.0);
  1305.                 var23.func_78381_a();
  1306.                 var14 = 20.0f;
  1307.                 this.field_72770_i.func_110577_a(field_110927_h);
  1308.                 int var29 = this.field_72769_h.func_72853_d();
  1309.                 int var30 = var29 % 4;
  1310.                 int var31 = var29 / 4 % 2;
  1311.                 float var18 = (float)(var30 + 0) / 4.0f;
  1312.                 float var19 = (float)(var31 + 0) / 2.0f;
  1313.                 float var20 = (float)(var30 + 1) / 4.0f;
  1314.                 float var21 = (float)(var31 + 1) / 2.0f;
  1315.                 var24.func_178970_b();
  1316.                 var24.func_178985_a(- var14, -100.0, var14, var20, var21);
  1317.                 var24.func_178985_a(var14, -100.0, var14, var18, var21);
  1318.                 var24.func_178985_a(var14, -100.0, - var14, var18, var19);
  1319.                 var24.func_178985_a(- var14, -100.0, - var14, var20, var19);
  1320.                 var23.func_78381_a();
  1321.             }
  1322.             GlStateManager.func_179090_x();
  1323.             if (isShaders) {
  1324.                 Shaders.disableTexture2D();
  1325.             }
  1326.             if ((var22 = this.field_72769_h.func_72880_h(partialTicks) * var10) > 0.0f && Config.isStarsEnabled() && !CustomSky.hasSkyLayers(this.field_72769_h)) {
  1327.                 GlStateManager.func_179131_c(var22, var22, var22, var22);
  1328.                 if (this.field_175005_X) {
  1329.                     this.field_175013_s.func_177359_a();
  1330.                     GL11.glEnableClientState((int)32884);
  1331.                     GL11.glVertexPointer((int)3, (int)5126, (int)12, (long)0);
  1332.                     this.field_175013_s.func_177358_a(7);
  1333.                     this.field_175013_s.func_177361_b();
  1334.                     GL11.glDisableClientState((int)32884);
  1335.                 } else {
  1336.                     GlStateManager.func_179148_o(this.field_72772_v);
  1337.                 }
  1338.             }
  1339.             GlStateManager.func_179131_c(1.0f, 1.0f, 1.0f, 1.0f);
  1340.             GlStateManager.func_179084_k();
  1341.             GlStateManager.func_179141_d();
  1342.             GlStateManager.func_179127_m();
  1343.             if (isShaders) {
  1344.                 Shaders.enableFog();
  1345.             }
  1346.             GlStateManager.func_179121_F();
  1347.             GlStateManager.func_179090_x();
  1348.             if (isShaders) {
  1349.                 Shaders.disableTexture2D();
  1350.             }
  1351.             GlStateManager.func_179124_c(0.0f, 0.0f, 0.0f);
  1352.             double var26 = this.field_72777_q.field_71439_g.func_174824_e((float)partialTicks).field_72448_b - this.field_72769_h.func_72919_O();
  1353.             if (var26 < 0.0) {
  1354.                 GlStateManager.func_179094_E();
  1355.                 GlStateManager.func_179109_b(0.0f, 12.0f, 0.0f);
  1356.                 if (this.field_175005_X) {
  1357.                     this.field_175011_u.func_177359_a();
  1358.                     GL11.glEnableClientState((int)32884);
  1359.                     GL11.glVertexPointer((int)3, (int)5126, (int)12, (long)0);
  1360.                     this.field_175011_u.func_177358_a(7);
  1361.                     this.field_175011_u.func_177361_b();
  1362.                     GL11.glDisableClientState((int)32884);
  1363.                 } else {
  1364.                     GlStateManager.func_179148_o(this.field_72781_x);
  1365.                 }
  1366.                 GlStateManager.func_179121_F();
  1367.                 var12 = 1.0f;
  1368.                 var13 = - (float)(var26 + 65.0);
  1369.                 var14 = -1.0f;
  1370.                 var24.func_178970_b();
  1371.                 var24.func_178974_a(0, 255);
  1372.                 var24.func_178984_b(-1.0, var13, 1.0);
  1373.                 var24.func_178984_b(1.0, var13, 1.0);
  1374.                 var24.func_178984_b(1.0, -1.0, 1.0);
  1375.                 var24.func_178984_b(-1.0, -1.0, 1.0);
  1376.                 var24.func_178984_b(-1.0, -1.0, -1.0);
  1377.                 var24.func_178984_b(1.0, -1.0, -1.0);
  1378.                 var24.func_178984_b(1.0, var13, -1.0);
  1379.                 var24.func_178984_b(-1.0, var13, -1.0);
  1380.                 var24.func_178984_b(1.0, -1.0, -1.0);
  1381.                 var24.func_178984_b(1.0, -1.0, 1.0);
  1382.                 var24.func_178984_b(1.0, var13, 1.0);
  1383.                 var24.func_178984_b(1.0, var13, -1.0);
  1384.                 var24.func_178984_b(-1.0, var13, -1.0);
  1385.                 var24.func_178984_b(-1.0, var13, 1.0);
  1386.                 var24.func_178984_b(-1.0, -1.0, 1.0);
  1387.                 var24.func_178984_b(-1.0, -1.0, -1.0);
  1388.                 var24.func_178984_b(-1.0, -1.0, -1.0);
  1389.                 var24.func_178984_b(-1.0, -1.0, 1.0);
  1390.                 var24.func_178984_b(1.0, -1.0, 1.0);
  1391.                 var24.func_178984_b(1.0, -1.0, -1.0);
  1392.                 var23.func_78381_a();
  1393.             }
  1394.             if (this.field_72769_h.field_73011_w.func_76561_g()) {
  1395.                 GlStateManager.func_179124_c(var4 * 0.2f + 0.04f, var5 * 0.2f + 0.04f, var6 * 0.6f + 0.1f);
  1396.             } else {
  1397.                 GlStateManager.func_179124_c(var4, var5, var6);
  1398.             }
  1399.             if (this.field_72777_q.field_71474_y.field_151451_c <= 4) {
  1400.                 GlStateManager.func_179124_c(this.field_72777_q.field_71460_t.field_175080_Q, this.field_72777_q.field_71460_t.field_175082_R, this.field_72777_q.field_71460_t.field_175081_S);
  1401.             }
  1402.             GlStateManager.func_179094_E();
  1403.             GlStateManager.func_179109_b(0.0f, - (float)(var26 - 16.0), 0.0f);
  1404.             if (Config.isSkyEnabled()) {
  1405.                 GlStateManager.func_179148_o(this.field_72781_x);
  1406.             }
  1407.             GlStateManager.func_179121_F();
  1408.             GlStateManager.func_179098_w();
  1409.             if (isShaders) {
  1410.                 Shaders.enableTexture2D();
  1411.             }
  1412.             GlStateManager.func_179132_a(true);
  1413.         }
  1414.     }
  1415.  
  1416.     public void func_180447_b(float p_180447_1_, int p_180447_2_) {
  1417.         WorldProvider wp;
  1418.         Object cloudRenderer;
  1419.         if (Config.isCloudsOff()) {
  1420.             return;
  1421.         }
  1422.         if (Reflector.ForgeWorldProvider_getCloudRenderer.exists() && (cloudRenderer = Reflector.call(wp = this.field_72777_q.field_71441_e.field_73011_w, Reflector.ForgeWorldProvider_getCloudRenderer, new Object[0])) != null) {
  1423.             Reflector.callVoid(cloudRenderer, Reflector.IRenderHandler_render, Float.valueOf(p_180447_1_), this.field_72769_h, this.field_72777_q);
  1424.             return;
  1425.         }
  1426.         if (this.field_72777_q.field_71441_e.field_73011_w.func_76569_d()) {
  1427.             if (Config.isShaders()) {
  1428.                 Shaders.beginClouds();
  1429.             }
  1430.             if (Config.isCloudsFancy()) {
  1431.                 this.func_180445_c(p_180447_1_, p_180447_2_);
  1432.             } else {
  1433.                 float partialTicks = p_180447_1_;
  1434.                 this.cloudRenderer.prepareToRender(false, this.field_72773_u, partialTicks);
  1435.                 p_180447_1_ = 0.0f;
  1436.                 GlStateManager.func_179129_p();
  1437.                 float var3 = (float)(this.field_72777_q.func_175606_aa().field_70137_T + (this.field_72777_q.func_175606_aa().field_70163_u - this.field_72777_q.func_175606_aa().field_70137_T) * (double)p_180447_1_);
  1438.                 boolean var4 = true;
  1439.                 boolean var5 = true;
  1440.                 Tessellator var6 = Tessellator.func_178181_a();
  1441.                 WorldRenderer var7 = var6.func_178180_c();
  1442.                 this.field_72770_i.func_110577_a(field_110925_j);
  1443.                 GlStateManager.func_179147_l();
  1444.                 GlStateManager.func_179120_a(770, 771, 1, 0);
  1445.                 if (this.cloudRenderer.shouldUpdateGlList()) {
  1446.                     float var12;
  1447.                     this.cloudRenderer.startUpdateGlList();
  1448.                     Vec3 var8 = this.field_72769_h.func_72824_f(p_180447_1_);
  1449.                     float var9 = (float)var8.field_72450_a;
  1450.                     float var10 = (float)var8.field_72448_b;
  1451.                     float var11 = (float)var8.field_72449_c;
  1452.                     if (p_180447_2_ != 2) {
  1453.                         var12 = (var9 * 30.0f + var10 * 59.0f + var11 * 11.0f) / 100.0f;
  1454.                         float var13 = (var9 * 30.0f + var10 * 70.0f) / 100.0f;
  1455.                         float var14 = (var9 * 30.0f + var11 * 70.0f) / 100.0f;
  1456.                         var9 = var12;
  1457.                         var10 = var13;
  1458.                         var11 = var14;
  1459.                     }
  1460.                     var12 = 4.8828125E-4f;
  1461.                     double var26 = (float)this.field_72773_u + p_180447_1_;
  1462.                     double var15 = this.field_72777_q.func_175606_aa().field_70169_q + (this.field_72777_q.func_175606_aa().field_70165_t - this.field_72777_q.func_175606_aa().field_70169_q) * (double)p_180447_1_ + var26 * 0.029999999329447746;
  1463.                     double var17 = this.field_72777_q.func_175606_aa().field_70166_s + (this.field_72777_q.func_175606_aa().field_70161_v - this.field_72777_q.func_175606_aa().field_70166_s) * (double)p_180447_1_;
  1464.                     int var19 = MathHelper.func_76128_c(var15 / 2048.0);
  1465.                     int var20 = MathHelper.func_76128_c(var17 / 2048.0);
  1466.                     float var21 = this.field_72769_h.field_73011_w.func_76571_f() - var3 + 0.33f;
  1467.                     var21 += this.field_72777_q.field_71474_y.ofCloudsHeight * 128.0f;
  1468.                     float var22 = (float)((var15 -= (double)(var19 * 2048)) * 4.8828125E-4);
  1469.                     float var23 = (float)((var17 -= (double)(var20 * 2048)) * 4.8828125E-4);
  1470.                     var7.func_178970_b();
  1471.                     var7.func_178960_a(var9, var10, var11, 0.8f);
  1472.                     for (int var24 = -256; var24 < 256; var24 += 32) {
  1473.                         for (int var25 = -256; var25 < 256; var25 += 32) {
  1474.                             var7.func_178985_a(var24 + 0, var21, var25 + 32, (float)(var24 + 0) * 4.8828125E-4f + var22, (float)(var25 + 32) * 4.8828125E-4f + var23);
  1475.                             var7.func_178985_a(var24 + 32, var21, var25 + 32, (float)(var24 + 32) * 4.8828125E-4f + var22, (float)(var25 + 32) * 4.8828125E-4f + var23);
  1476.                             var7.func_178985_a(var24 + 32, var21, var25 + 0, (float)(var24 + 32) * 4.8828125E-4f + var22, (float)(var25 + 0) * 4.8828125E-4f + var23);
  1477.                             var7.func_178985_a(var24 + 0, var21, var25 + 0, (float)(var24 + 0) * 4.8828125E-4f + var22, (float)(var25 + 0) * 4.8828125E-4f + var23);
  1478.                         }
  1479.                     }
  1480.                     var6.func_78381_a();
  1481.                     this.cloudRenderer.endUpdateGlList();
  1482.                 }
  1483.                 this.cloudRenderer.renderGlList();
  1484.                 GlStateManager.func_179131_c(1.0f, 1.0f, 1.0f, 1.0f);
  1485.                 GlStateManager.func_179084_k();
  1486.                 GlStateManager.func_179089_o();
  1487.             }
  1488.             if (Config.isShaders()) {
  1489.                 Shaders.endClouds();
  1490.             }
  1491.         }
  1492.     }
  1493.  
  1494.     public boolean func_72721_a(double p_72721_1_, double p_72721_3_, double p_72721_5_, float p_72721_7_) {
  1495.         return false;
  1496.     }
  1497.  
  1498.     private void func_180445_c(float p_180445_1_, int p_180445_2_) {
  1499.         float var22;
  1500.         float var23;
  1501.         float var21;
  1502.         float partialTicks = p_180445_1_;
  1503.         this.cloudRenderer.prepareToRender(true, this.field_72773_u, partialTicks);
  1504.         p_180445_1_ = 0.0f;
  1505.         GlStateManager.func_179129_p();
  1506.         float var3 = (float)(this.field_72777_q.func_175606_aa().field_70137_T + (this.field_72777_q.func_175606_aa().field_70163_u - this.field_72777_q.func_175606_aa().field_70137_T) * (double)p_180445_1_);
  1507.         Tessellator var4 = Tessellator.func_178181_a();
  1508.         WorldRenderer var5 = var4.func_178180_c();
  1509.         float var6 = 12.0f;
  1510.         float var7 = 4.0f;
  1511.         double var8 = (float)this.field_72773_u + p_180445_1_;
  1512.         double var10 = (this.field_72777_q.func_175606_aa().field_70169_q + (this.field_72777_q.func_175606_aa().field_70165_t - this.field_72777_q.func_175606_aa().field_70169_q) * (double)p_180445_1_ + var8 * 0.029999999329447746) / 12.0;
  1513.         double var12 = (this.field_72777_q.func_175606_aa().field_70166_s + (this.field_72777_q.func_175606_aa().field_70161_v - this.field_72777_q.func_175606_aa().field_70166_s) * (double)p_180445_1_) / 12.0 + 0.33000001311302185;
  1514.         float var14 = this.field_72769_h.field_73011_w.func_76571_f() - var3 + 0.33f;
  1515.         var14 += this.field_72777_q.field_71474_y.ofCloudsHeight * 128.0f;
  1516.         int var15 = MathHelper.func_76128_c(var10 / 2048.0);
  1517.         int var16 = MathHelper.func_76128_c(var12 / 2048.0);
  1518.         var10 -= (double)(var15 * 2048);
  1519.         var12 -= (double)(var16 * 2048);
  1520.         this.field_72770_i.func_110577_a(field_110925_j);
  1521.         GlStateManager.func_179147_l();
  1522.         GlStateManager.func_179120_a(770, 771, 1, 0);
  1523.         Vec3 var17 = this.field_72769_h.func_72824_f(p_180445_1_);
  1524.         float var18 = (float)var17.field_72450_a;
  1525.         float var19 = (float)var17.field_72448_b;
  1526.         float var20 = (float)var17.field_72449_c;
  1527.         if (p_180445_2_ != 2) {
  1528.             var21 = (var18 * 30.0f + var19 * 59.0f + var20 * 11.0f) / 100.0f;
  1529.             var22 = (var18 * 30.0f + var19 * 70.0f) / 100.0f;
  1530.             var23 = (var18 * 30.0f + var20 * 70.0f) / 100.0f;
  1531.             var18 = var21;
  1532.             var19 = var22;
  1533.             var20 = var23;
  1534.         }
  1535.         var21 = 0.00390625f;
  1536.         var22 = (float)MathHelper.func_76128_c(var10) * 0.00390625f;
  1537.         var23 = (float)MathHelper.func_76128_c(var12) * 0.00390625f;
  1538.         float var24 = (float)(var10 - (double)MathHelper.func_76128_c(var10));
  1539.         float var25 = (float)(var12 - (double)MathHelper.func_76128_c(var12));
  1540.         boolean var26 = true;
  1541.         boolean var27 = true;
  1542.         float var28 = 9.765625E-4f;
  1543.         GlStateManager.func_179152_a(12.0f, 1.0f, 12.0f);
  1544.         for (int var29 = 0; var29 < 2; ++var29) {
  1545.             if (var29 == 0) {
  1546.                 GlStateManager.func_179135_a(false, false, false, false);
  1547.             } else {
  1548.                 switch (p_180445_2_) {
  1549.                     case 0: {
  1550.                         GlStateManager.func_179135_a(false, true, true, true);
  1551.                         break;
  1552.                     }
  1553.                     case 1: {
  1554.                         GlStateManager.func_179135_a(true, false, false, true);
  1555.                         break;
  1556.                     }
  1557.                     case 2: {
  1558.                         GlStateManager.func_179135_a(true, true, true, true);
  1559.                     }
  1560.                 }
  1561.             }
  1562.             this.cloudRenderer.renderGlList();
  1563.         }
  1564.         if (this.cloudRenderer.shouldUpdateGlList()) {
  1565.             this.cloudRenderer.startUpdateGlList();
  1566.             for (int var30 = -3; var30 <= 4; ++var30) {
  1567.                 for (int var31 = -3; var31 <= 4; ++var31) {
  1568.                     int var36;
  1569.                     var5.func_178970_b();
  1570.                     float var32 = var30 * 8;
  1571.                     float var33 = var31 * 8;
  1572.                     float var34 = var32 - var24;
  1573.                     float var35 = var33 - var25;
  1574.                     if (var14 > -5.0f) {
  1575.                         var5.func_178960_a(var18 * 0.7f, var19 * 0.7f, var20 * 0.7f, 0.8f);
  1576.                         var5.func_178980_d(0.0f, -1.0f, 0.0f);
  1577.                         var5.func_178985_a(var34 + 0.0f, var14 + 0.0f, var35 + 8.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1578.                         var5.func_178985_a(var34 + 8.0f, var14 + 0.0f, var35 + 8.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1579.                         var5.func_178985_a(var34 + 8.0f, var14 + 0.0f, var35 + 0.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1580.                         var5.func_178985_a(var34 + 0.0f, var14 + 0.0f, var35 + 0.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1581.                     }
  1582.                     if (var14 <= 5.0f) {
  1583.                         var5.func_178960_a(var18, var19, var20, 0.8f);
  1584.                         var5.func_178980_d(0.0f, 1.0f, 0.0f);
  1585.                         var5.func_178985_a(var34 + 0.0f, var14 + 4.0f - 9.765625E-4f, var35 + 8.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1586.                         var5.func_178985_a(var34 + 8.0f, var14 + 4.0f - 9.765625E-4f, var35 + 8.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1587.                         var5.func_178985_a(var34 + 8.0f, var14 + 4.0f - 9.765625E-4f, var35 + 0.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1588.                         var5.func_178985_a(var34 + 0.0f, var14 + 4.0f - 9.765625E-4f, var35 + 0.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1589.                     }
  1590.                     var5.func_178960_a(var18 * 0.9f, var19 * 0.9f, var20 * 0.9f, 0.8f);
  1591.                     if (var30 > -1) {
  1592.                         var5.func_178980_d(-1.0f, 0.0f, 0.0f);
  1593.                         for (var36 = 0; var36 < 8; ++var36) {
  1594.                             var5.func_178985_a(var34 + (float)var36 + 0.0f, var14 + 0.0f, var35 + 8.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1595.                             var5.func_178985_a(var34 + (float)var36 + 0.0f, var14 + 4.0f, var35 + 8.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1596.                             var5.func_178985_a(var34 + (float)var36 + 0.0f, var14 + 4.0f, var35 + 0.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1597.                             var5.func_178985_a(var34 + (float)var36 + 0.0f, var14 + 0.0f, var35 + 0.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1598.                         }
  1599.                     }
  1600.                     if (var30 <= 1) {
  1601.                         var5.func_178980_d(1.0f, 0.0f, 0.0f);
  1602.                         for (var36 = 0; var36 < 8; ++var36) {
  1603.                             var5.func_178985_a(var34 + (float)var36 + 1.0f - 9.765625E-4f, var14 + 0.0f, var35 + 8.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1604.                             var5.func_178985_a(var34 + (float)var36 + 1.0f - 9.765625E-4f, var14 + 4.0f, var35 + 8.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 8.0f) * 0.00390625f + var23);
  1605.                             var5.func_178985_a(var34 + (float)var36 + 1.0f - 9.765625E-4f, var14 + 4.0f, var35 + 0.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1606.                             var5.func_178985_a(var34 + (float)var36 + 1.0f - 9.765625E-4f, var14 + 0.0f, var35 + 0.0f, (var32 + (float)var36 + 0.5f) * 0.00390625f + var22, (var33 + 0.0f) * 0.00390625f + var23);
  1607.                         }
  1608.                     }
  1609.                     var5.func_178960_a(var18 * 0.8f, var19 * 0.8f, var20 * 0.8f, 0.8f);
  1610.                     if (var31 > -1) {
  1611.                         var5.func_178980_d(0.0f, 0.0f, -1.0f);
  1612.                         for (var36 = 0; var36 < 8; ++var36) {
  1613.                             var5.func_178985_a(var34 + 0.0f, var14 + 4.0f, var35 + (float)var36 + 0.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1614.                             var5.func_178985_a(var34 + 8.0f, var14 + 4.0f, var35 + (float)var36 + 0.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1615.                             var5.func_178985_a(var34 + 8.0f, var14 + 0.0f, var35 + (float)var36 + 0.0f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1616.                             var5.func_178985_a(var34 + 0.0f, var14 + 0.0f, var35 + (float)var36 + 0.0f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1617.                         }
  1618.                     }
  1619.                     if (var31 <= 1) {
  1620.                         var5.func_178980_d(0.0f, 0.0f, 1.0f);
  1621.                         for (var36 = 0; var36 < 8; ++var36) {
  1622.                             var5.func_178985_a(var34 + 0.0f, var14 + 4.0f, var35 + (float)var36 + 1.0f - 9.765625E-4f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1623.                             var5.func_178985_a(var34 + 8.0f, var14 + 4.0f, var35 + (float)var36 + 1.0f - 9.765625E-4f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1624.                             var5.func_178985_a(var34 + 8.0f, var14 + 0.0f, var35 + (float)var36 + 1.0f - 9.765625E-4f, (var32 + 8.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1625.                             var5.func_178985_a(var34 + 0.0f, var14 + 0.0f, var35 + (float)var36 + 1.0f - 9.765625E-4f, (var32 + 0.0f) * 0.00390625f + var22, (var33 + (float)var36 + 0.5f) * 0.00390625f + var23);
  1626.                         }
  1627.                     }
  1628.                     var4.func_78381_a();
  1629.                 }
  1630.             }
  1631.             this.cloudRenderer.endUpdateGlList();
  1632.         }
  1633.         GlStateManager.func_179131_c(1.0f, 1.0f, 1.0f, 1.0f);
  1634.         GlStateManager.func_179084_k();
  1635.         GlStateManager.func_179089_o();
  1636.     }
  1637.  
  1638.     //updateChunks
  1639.     public void func_174967_a(long l) {
  1640.         void p_174967_1_;
  1641.         RenderChunk renderChunk;
  1642.         Iterator itTransparency;
  1643.         RenderChunk var4;
  1644.         RenderGlobal renderGlobal;
  1645.         CallbackInfo callbackInfo = new CallbackInfo("func_174967_a", true);
  1646.         renderGlobal.replayModRender_updateChunks(l, callbackInfo);
  1647.         if (callbackInfo.isCancelled()) {
  1648.             return;
  1649.         }
  1650.         this.field_147595_R |= this.field_174995_M.func_178516_a((long)p_174967_1_);
  1651.         if (this.chunksToUpdateForced.size() > 0) {
  1652.             RenderChunk rc;
  1653.             Iterator itForced = this.chunksToUpdateForced.iterator();
  1654.             while (itForced.hasNext() && this.field_174995_M.func_178507_a(rc = (RenderChunk)itForced.next())) {
  1655.                 rc.func_178575_a(false);
  1656.                 itForced.remove();
  1657.                 this.field_175009_l.remove(rc);
  1658.                 this.chunksToResortTransparency.remove(rc);
  1659.             }
  1660.         }
  1661.         if (this.chunksToResortTransparency.size() > 0 && (itTransparency = this.chunksToResortTransparency.iterator()).hasNext() && this.field_174995_M.func_178509_c(renderChunk = (RenderChunk)itTransparency.next())) {
  1662.             itTransparency.remove();
  1663.         }
  1664.         int countUpdated = 0;
  1665.         int updatesPerFrame = Config.getUpdatesPerFrame();
  1666.         int maxUpdatesPerFrame = updatesPerFrame * 2;
  1667.         Iterator var3 = this.field_175009_l.iterator();
  1668.         while (var3.hasNext() && this.field_174995_M.func_178507_a(var4 = (RenderChunk)var3.next())) {
  1669.             var4.func_178575_a(false);
  1670.             var3.remove();
  1671.             if (var4.func_178571_g().func_178489_a() && updatesPerFrame < maxUpdatesPerFrame) {
  1672.                 ++updatesPerFrame;
  1673.             }
  1674.             if (++countUpdated < updatesPerFrame) continue;
  1675.             break;
  1676.         }
  1677.     }
  1678.  
  1679.     public void func_180449_a(Entity p_180449_1_, float p_180449_2_) {
  1680.         Tessellator var3 = Tessellator.func_178181_a();
  1681.         WorldRenderer var4 = var3.func_178180_c();
  1682.         WorldBorder var5 = this.field_72769_h.func_175723_af();
  1683.         double var6 = this.field_72777_q.field_71474_y.field_151451_c * 16;
  1684.         if (p_180449_1_.field_70165_t >= var5.func_177728_d() - var6 || p_180449_1_.field_70165_t <= var5.func_177726_b() + var6 || p_180449_1_.field_70161_v >= var5.func_177733_e() - var6 || p_180449_1_.field_70161_v <= var5.func_177736_c() + var6) {
  1685.             float var28;
  1686.             double var29;
  1687.             float var33;
  1688.             double var31;
  1689.             double var8 = 1.0 - var5.func_177745_a(p_180449_1_) / var6;
  1690.             var8 = Math.pow(var8, 4.0);
  1691.             double var10 = p_180449_1_.field_70142_S + (p_180449_1_.field_70165_t - p_180449_1_.field_70142_S) * (double)p_180449_2_;
  1692.             double var12 = p_180449_1_.field_70137_T + (p_180449_1_.field_70163_u - p_180449_1_.field_70137_T) * (double)p_180449_2_;
  1693.             double var14 = p_180449_1_.field_70136_U + (p_180449_1_.field_70161_v - p_180449_1_.field_70136_U) * (double)p_180449_2_;
  1694.             GlStateManager.func_179147_l();
  1695.             GlStateManager.func_179120_a(770, 1, 1, 0);
  1696.             this.field_72770_i.func_110577_a(field_175006_g);
  1697.             GlStateManager.func_179132_a(false);
  1698.             GlStateManager.func_179094_E();
  1699.             int var16 = var5.func_177734_a().func_177766_a();
  1700.             float var17 = (float)(var16 >> 16 & 255) / 255.0f;
  1701.             float var18 = (float)(var16 >> 8 & 255) / 255.0f;
  1702.             float var19 = (float)(var16 & 255) / 255.0f;
  1703.             GlStateManager.func_179131_c(var17, var18, var19, (float)var8);
  1704.             GlStateManager.func_179136_a(-3.0f, -3.0f);
  1705.             GlStateManager.func_179088_q();
  1706.             GlStateManager.func_179092_a(516, 0.1f);
  1707.             GlStateManager.func_179141_d();
  1708.             GlStateManager.func_179129_p();
  1709.             float var20 = (float)(Minecraft.func_71386_F() % 3000) / 3000.0f;
  1710.             float var21 = 0.0f;
  1711.             float var22 = 0.0f;
  1712.             float var23 = 128.0f;
  1713.             var4.func_178970_b();
  1714.             var4.func_178969_c(- var10, - var12, - var14);
  1715.             var4.func_78914_f();
  1716.             double var24 = Math.max((double)MathHelper.func_76128_c(var14 - var6), var5.func_177736_c());
  1717.             double var26 = Math.min((double)MathHelper.func_76143_f(var14 + var6), var5.func_177733_e());
  1718.             if (var10 > var5.func_177728_d() - var6) {
  1719.                 var28 = 0.0f;
  1720.                 var29 = var24;
  1721.                 while (var29 < var26) {
  1722.                     var31 = Math.min(1.0, var26 - var29);
  1723.                     var33 = (float)var31 * 0.5f;
  1724.                     var4.func_178985_a(var5.func_177728_d(), 256.0, var29, var20 + var28, var20 + 0.0f);
  1725.                     var4.func_178985_a(var5.func_177728_d(), 256.0, var29 + var31, var20 + var33 + var28, var20 + 0.0f);
  1726.                     var4.func_178985_a(var5.func_177728_d(), 0.0, var29 + var31, var20 + var33 + var28, var20 + 128.0f);
  1727.                     var4.func_178985_a(var5.func_177728_d(), 0.0, var29, var20 + var28, var20 + 128.0f);
  1728.                     var29 += 1.0;
  1729.                     var28 += 0.5f;
  1730.                 }
  1731.             }
  1732.             if (var10 < var5.func_177726_b() + var6) {
  1733.                 var28 = 0.0f;
  1734.                 var29 = var24;
  1735.                 while (var29 < var26) {
  1736.                     var31 = Math.min(1.0, var26 - var29);
  1737.                     var33 = (float)var31 * 0.5f;
  1738.                     var4.func_178985_a(var5.func_177726_b(), 256.0, var29, var20 + var28, var20 + 0.0f);
  1739.                     var4.func_178985_a(var5.func_177726_b(), 256.0, var29 + var31, var20 + var33 + var28, var20 + 0.0f);
  1740.                     var4.func_178985_a(var5.func_177726_b(), 0.0, var29 + var31, var20 + var33 + var28, var20 + 128.0f);
  1741.                     var4.func_178985_a(var5.func_177726_b(), 0.0, var29, var20 + var28, var20 + 128.0f);
  1742.                     var29 += 1.0;
  1743.                     var28 += 0.5f;
  1744.                 }
  1745.             }
  1746.             var24 = Math.max((double)MathHelper.func_76128_c(var10 - var6), var5.func_177726_b());
  1747.             var26 = Math.min((double)MathHelper.func_76143_f(var10 + var6), var5.func_177728_d());
  1748.             if (var14 > var5.func_177733_e() - var6) {
  1749.                 var28 = 0.0f;
  1750.                 var29 = var24;
  1751.                 while (var29 < var26) {
  1752.                     var31 = Math.min(1.0, var26 - var29);
  1753.                     var33 = (float)var31 * 0.5f;
  1754.                     var4.func_178985_a(var29, 256.0, var5.func_177733_e(), var20 + var28, var20 + 0.0f);
  1755.                     var4.func_178985_a(var29 + var31, 256.0, var5.func_177733_e(), var20 + var33 + var28, var20 + 0.0f);
  1756.                     var4.func_178985_a(var29 + var31, 0.0, var5.func_177733_e(), var20 + var33 + var28, var20 + 128.0f);
  1757.                     var4.func_178985_a(var29, 0.0, var5.func_177733_e(), var20 + var28, var20 + 128.0f);
  1758.                     var29 += 1.0;
  1759.                     var28 += 0.5f;
  1760.                 }
  1761.             }
  1762.             if (var14 < var5.func_177736_c() + var6) {
  1763.                 var28 = 0.0f;
  1764.                 var29 = var24;
  1765.                 while (var29 < var26) {
  1766.                     var31 = Math.min(1.0, var26 - var29);
  1767.                     var33 = (float)var31 * 0.5f;
  1768.                     var4.func_178985_a(var29, 256.0, var5.func_177736_c(), var20 + var28, var20 + 0.0f);
  1769.                     var4.func_178985_a(var29 + var31, 256.0, var5.func_177736_c(), var20 + var33 + var28, var20 + 0.0f);
  1770.                     var4.func_178985_a(var29 + var31, 0.0, var5.func_177736_c(), var20 + var33 + var28, var20 + 128.0f);
  1771.                     var4.func_178985_a(var29, 0.0, var5.func_177736_c(), var20 + var28, var20 + 128.0f);
  1772.                     var29 += 1.0;
  1773.                     var28 += 0.5f;
  1774.                 }
  1775.             }
  1776.             var3.func_78381_a();
  1777.             var4.func_178969_c(0.0, 0.0, 0.0);
  1778.             GlStateManager.func_179089_o();
  1779.             GlStateManager.func_179118_c();
  1780.             GlStateManager.func_179136_a(0.0f, 0.0f);
  1781.             GlStateManager.func_179113_r();
  1782.             GlStateManager.func_179141_d();
  1783.             GlStateManager.func_179084_k();
  1784.             GlStateManager.func_179121_F();
  1785.             GlStateManager.func_179132_a(true);
  1786.         }
  1787.     }
  1788.  
  1789.     private void func_180443_s() {
  1790.         GlStateManager.func_179120_a(774, 768, 1, 0);
  1791.         GlStateManager.func_179147_l();
  1792.         GlStateManager.func_179131_c(1.0f, 1.0f, 1.0f, 0.5f);
  1793.         GlStateManager.func_179136_a(-3.0f, -3.0f);
  1794.         GlStateManager.func_179088_q();
  1795.         GlStateManager.func_179092_a(516, 0.1f);
  1796.         GlStateManager.func_179141_d();
  1797.         GlStateManager.func_179094_E();
  1798.         if (Config.isShaders()) {
  1799.             ShadersRender.beginBlockDamage();
  1800.         }
  1801.     }
  1802.  
  1803.     private void func_174969_t() {
  1804.         GlStateManager.func_179118_c();
  1805.         GlStateManager.func_179136_a(0.0f, 0.0f);
  1806.         GlStateManager.func_179113_r();
  1807.         GlStateManager.func_179141_d();
  1808.         GlStateManager.func_179132_a(true);
  1809.         GlStateManager.func_179121_F();
  1810.         if (Config.isShaders()) {
  1811.             ShadersRender.endBlockDamage();
  1812.         }
  1813.     }
  1814.  
  1815.     public void func_174981_a(Tessellator p_174981_1_, WorldRenderer p_174981_2_, Entity p_174981_3_, float p_174981_4_) {
  1816.         double var5 = p_174981_3_.field_70142_S + (p_174981_3_.field_70165_t - p_174981_3_.field_70142_S) * (double)p_174981_4_;
  1817.         double var7 = p_174981_3_.field_70137_T + (p_174981_3_.field_70163_u - p_174981_3_.field_70137_T) * (double)p_174981_4_;
  1818.         double var9 = p_174981_3_.field_70136_U + (p_174981_3_.field_70161_v - p_174981_3_.field_70136_U) * (double)p_174981_4_;
  1819.         if (!this.field_72738_E.isEmpty()) {
  1820.             this.field_72770_i.func_110577_a(TextureMap.field_110575_b);
  1821.             this.func_180443_s();
  1822.             p_174981_2_.func_178970_b();
  1823.             p_174981_2_.func_178967_a(DefaultVertexFormats.field_176600_a);
  1824.             p_174981_2_.func_178969_c(- var5, - var7, - var9);
  1825.             p_174981_2_.func_78914_f();
  1826.             Iterator var11 = this.field_72738_E.values().iterator();
  1827.             while (var11.hasNext()) {
  1828.                 boolean renderBreaking;
  1829.                 DestroyBlockProgress var12 = (DestroyBlockProgress)var11.next();
  1830.                 BlockPos var13 = var12.func_180246_b();
  1831.                 double var14 = (double)var13.func_177958_n() - var5;
  1832.                 double var16 = (double)var13.func_177956_o() - var7;
  1833.                 double var18 = (double)var13.func_177952_p() - var9;
  1834.                 Block var20 = this.field_72769_h.func_180495_p(var13).func_177230_c();
  1835.                 if (Reflector.ForgeTileEntity_canRenderBreaking.exists()) {
  1836.                     boolean tileEntityRenderBreaking;
  1837.                     TileEntity te;
  1838.                     Block block = var20;
  1839.                     boolean bl = tileEntityRenderBreaking = block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull;
  1840.                     if (!tileEntityRenderBreaking && (te = this.field_72769_h.func_175625_s(var13)) != null) {
  1841.                         tileEntityRenderBreaking = Reflector.callBoolean(te, Reflector.ForgeTileEntity_canRenderBreaking, new Object[0]);
  1842.                     }
  1843.                     renderBreaking = !tileEntityRenderBreaking;
  1844.                 } else {
  1845.                     boolean bl = renderBreaking = !(var20 instanceof BlockChest) && !(var20 instanceof BlockEnderChest) && !(var20 instanceof BlockSign) && !(var20 instanceof BlockSkull);
  1846.                 }
  1847.                 if (!renderBreaking) continue;
  1848.                 if (var14 * var14 + var16 * var16 + var18 * var18 > 1024.0) {
  1849.                     var11.remove();
  1850.                     continue;
  1851.                 }
  1852.                 IBlockState var21 = this.field_72769_h.func_180495_p(var13);
  1853.                 if (var21.func_177230_c().func_149688_o() == Material.field_151579_a) continue;
  1854.                 int var22 = var12.func_73106_e();
  1855.                 TextureAtlasSprite var23 = this.field_94141_F[var22];
  1856.                 BlockRendererDispatcher var24 = this.field_72777_q.func_175602_ab();
  1857.                 var24.func_175020_a(var21, var13, var23, this.field_72769_h);
  1858.             }
  1859.             p_174981_1_.func_78381_a();
  1860.             p_174981_2_.func_178969_c(0.0, 0.0, 0.0);
  1861.             this.func_174969_t();
  1862.         }
  1863.     }
  1864.  
  1865.     public void func_72731_b(EntityPlayer p_72731_1_, MovingObjectPosition p_72731_2_, int p_72731_3_, float p_72731_4_) {
  1866.         if (p_72731_3_ == 0 && p_72731_2_.field_72313_a == MovingObjectPosition.MovingObjectType.BLOCK) {
  1867.             GlStateManager.func_179147_l();
  1868.             GlStateManager.func_179120_a(770, 771, 1, 0);
  1869.             GlStateManager.func_179131_c(0.0f, 0.0f, 0.0f, 0.4f);
  1870.             GL11.glLineWidth((float)2.0f);
  1871.             GlStateManager.func_179090_x();
  1872.             if (Config.isShaders()) {
  1873.                 Shaders.disableTexture2D();
  1874.             }
  1875.             GlStateManager.func_179132_a(false);
  1876.             float var5 = 0.002f;
  1877.             BlockPos var6 = p_72731_2_.func_178782_a();
  1878.             Block var7 = this.field_72769_h.func_180495_p(var6).func_177230_c();
  1879.             if (var7.func_149688_o() != Material.field_151579_a && this.field_72769_h.func_175723_af().func_177746_a(var6)) {
  1880.                 var7.func_180654_a(this.field_72769_h, var6);
  1881.                 double var8 = p_72731_1_.field_70142_S + (p_72731_1_.field_70165_t - p_72731_1_.field_70142_S) * (double)p_72731_4_;
  1882.                 double var10 = p_72731_1_.field_70137_T + (p_72731_1_.field_70163_u - p_72731_1_.field_70137_T) * (double)p_72731_4_;
  1883.                 double var12 = p_72731_1_.field_70136_U + (p_72731_1_.field_70161_v - p_72731_1_.field_70136_U) * (double)p_72731_4_;
  1884.                 RenderGlobal.func_147590_a(var7.func_180646_a(this.field_72769_h, var6).func_72314_b(0.0020000000949949026, 0.0020000000949949026, 0.0020000000949949026).func_72317_d(- var8, - var10, - var12), -1);
  1885.             }
  1886.             GlStateManager.func_179132_a(true);
  1887.             GlStateManager.func_179098_w();
  1888.             if (Config.isShaders()) {
  1889.                 Shaders.enableTexture2D();
  1890.             }
  1891.             GlStateManager.func_179084_k();
  1892.         }
  1893.     }
  1894.  
  1895.     public static void func_147590_a(AxisAlignedBB p_147590_0_, int p_147590_1_) {
  1896.         Tessellator var2 = Tessellator.func_178181_a();
  1897.         WorldRenderer var3 = var2.func_178180_c();
  1898.         var3.func_178964_a(3);
  1899.         if (p_147590_1_ != -1) {
  1900.             var3.func_178991_c(p_147590_1_);
  1901.         }
  1902.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72338_b, p_147590_0_.field_72339_c);
  1903.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72338_b, p_147590_0_.field_72339_c);
  1904.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72338_b, p_147590_0_.field_72334_f);
  1905.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72338_b, p_147590_0_.field_72334_f);
  1906.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72338_b, p_147590_0_.field_72339_c);
  1907.         var2.func_78381_a();
  1908.         var3.func_178964_a(3);
  1909.         if (p_147590_1_ != -1) {
  1910.             var3.func_178991_c(p_147590_1_);
  1911.         }
  1912.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72337_e, p_147590_0_.field_72339_c);
  1913.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72337_e, p_147590_0_.field_72339_c);
  1914.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72337_e, p_147590_0_.field_72334_f);
  1915.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72337_e, p_147590_0_.field_72334_f);
  1916.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72337_e, p_147590_0_.field_72339_c);
  1917.         var2.func_78381_a();
  1918.         var3.func_178964_a(1);
  1919.         if (p_147590_1_ != -1) {
  1920.             var3.func_178991_c(p_147590_1_);
  1921.         }
  1922.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72338_b, p_147590_0_.field_72339_c);
  1923.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72337_e, p_147590_0_.field_72339_c);
  1924.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72338_b, p_147590_0_.field_72339_c);
  1925.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72337_e, p_147590_0_.field_72339_c);
  1926.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72338_b, p_147590_0_.field_72334_f);
  1927.         var3.func_178984_b(p_147590_0_.field_72336_d, p_147590_0_.field_72337_e, p_147590_0_.field_72334_f);
  1928.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72338_b, p_147590_0_.field_72334_f);
  1929.         var3.func_178984_b(p_147590_0_.field_72340_a, p_147590_0_.field_72337_e, p_147590_0_.field_72334_f);
  1930.         var2.func_78381_a();
  1931.     }
  1932.  
  1933.     private void func_72725_b(int p_72725_1_, int p_72725_2_, int p_72725_3_, int p_72725_4_, int p_72725_5_, int p_72725_6_) {
  1934.         this.field_175008_n.func_178162_a(p_72725_1_, p_72725_2_, p_72725_3_, p_72725_4_, p_72725_5_, p_72725_6_);
  1935.     }
  1936.  
  1937.     @Override
  1938.     public void func_174960_a(BlockPos pos) {
  1939.         int var2 = pos.func_177958_n();
  1940.         int var3 = pos.func_177956_o();
  1941.         int var4 = pos.func_177952_p();
  1942.         this.func_72725_b(var2 - 1, var3 - 1, var4 - 1, var2 + 1, var3 + 1, var4 + 1);
  1943.     }
  1944.  
  1945.     @Override
  1946.     public void func_174959_b(BlockPos pos) {
  1947.         int var2 = pos.func_177958_n();
  1948.         int var3 = pos.func_177956_o();
  1949.         int var4 = pos.func_177952_p();
  1950.         this.func_72725_b(var2 - 1, var3 - 1, var4 - 1, var2 + 1, var3 + 1, var4 + 1);
  1951.     }
  1952.  
  1953.     @Override
  1954.     public void func_147585_a(int x1, int y1, int z1, int x2, int y2, int z2) {
  1955.         this.func_72725_b(x1 - 1, y1 - 1, z1 - 1, x2 + 1, y2 + 1, z2 + 1);
  1956.     }
  1957.  
  1958.     @Override
  1959.     public void func_174961_a(String p_174961_1_, BlockPos p_174961_2_) {
  1960.         ISound var3 = (ISound)this.field_147593_P.get(p_174961_2_);
  1961.         if (var3 != null) {
  1962.             this.field_72777_q.func_147118_V().func_147683_b(var3);
  1963.             this.field_147593_P.remove(p_174961_2_);
  1964.         }
  1965.         if (p_174961_1_ != null) {
  1966.             ItemRecord var4 = ItemRecord.func_150926_b(p_174961_1_);
  1967.             if (var4 != null) {
  1968.                 this.field_72777_q.field_71456_v.func_73833_a(var4.func_150927_i());
  1969.             }
  1970.             ResourceLocation resource = null;
  1971.             if (Reflector.ForgeItemRecord_getRecordResource.exists() && var4 != null) {
  1972.                 resource = (ResourceLocation)Reflector.call(var4, Reflector.ForgeItemRecord_getRecordResource, p_174961_1_);
  1973.             }
  1974.             if (resource == null) {
  1975.                 resource = new ResourceLocation(p_174961_1_);
  1976.             }
  1977.             PositionedSoundRecord var5 = PositionedSoundRecord.func_147675_a(resource, p_174961_2_.func_177958_n(), p_174961_2_.func_177956_o(), p_174961_2_.func_177952_p());
  1978.             this.field_147593_P.put(p_174961_2_, var5);
  1979.             this.field_72777_q.func_147118_V().func_147682_a(var5);
  1980.         }
  1981.     }
  1982.  
  1983.     @Override
  1984.     public void func_72704_a(String soundName, double x, double y, double z, float volume, float pitch) {
  1985.     }
  1986.  
  1987.     @Override
  1988.     public void func_85102_a(EntityPlayer except, String soundName, double x, double y, double z, float volume, float pitch) {
  1989.     }
  1990.  
  1991.     @Override
  1992.     public /* varargs */ void func_180442_a(int p_180442_1_, boolean p_180442_2_, final double p_180442_3_, final double p_180442_5_, final double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int ... p_180442_15_) {
  1993.         try {
  1994.             this.func_174974_b(p_180442_1_, p_180442_2_, p_180442_3_, p_180442_5_, p_180442_7_, p_180442_9_, p_180442_11_, p_180442_13_, p_180442_15_);
  1995.         }
  1996.         catch (Throwable var19) {
  1997.             CrashReport var17 = CrashReport.func_85055_a(var19, "Exception while adding particle");
  1998.             CrashReportCategory var18 = var17.func_85058_a("Particle being added");
  1999.             var18.func_71507_a("ID", p_180442_1_);
  2000.             if (p_180442_15_ != null) {
  2001.                 var18.func_71507_a("Parameters", p_180442_15_);
  2002.             }
  2003.             var18.func_71500_a("Position", new Callable(){
  2004.                 private static final String __OBFID = "CL_00000955";
  2005.  
  2006.                 public String call() {
  2007.                     return CrashReportCategory.func_85074_a(p_180442_3_, p_180442_5_, p_180442_7_);
  2008.                 }
  2009.             });
  2010.             throw new ReportedException(var17);
  2011.         }
  2012.     }
  2013.  
  2014.     private /* varargs */ void func_174972_a(EnumParticleTypes p_174972_1_, double p_174972_2_, double p_174972_4_, double p_174972_6_, double p_174972_8_, double p_174972_10_, double p_174972_12_, int ... p_174972_14_) {
  2015.         this.func_180442_a(p_174972_1_.func_179348_c(), p_174972_1_.func_179344_e(), p_174972_2_, p_174972_4_, p_174972_6_, p_174972_8_, p_174972_10_, p_174972_12_, p_174972_14_);
  2016.     }
  2017.  
  2018.     private /* varargs */ EntityFX func_174974_b(int p_174974_1_, boolean p_174974_2_, double p_174974_3_, double p_174974_5_, double p_174974_7_, double p_174974_9_, double p_174974_11_, double p_174974_13_, int ... p_174974_15_) {
  2019.         if (this.field_72777_q != null && this.field_72777_q.func_175606_aa() != null && this.field_72777_q.field_71452_i != null) {
  2020.             int var16 = this.field_72777_q.field_71474_y.field_74362_aa;
  2021.             if (var16 == 1 && this.field_72769_h.field_73012_v.nextInt(3) == 0) {
  2022.                 var16 = 2;
  2023.             }
  2024.             double var17 = this.field_72777_q.func_175606_aa().field_70165_t - p_174974_3_;
  2025.             double var19 = this.field_72777_q.func_175606_aa().field_70163_u - p_174974_5_;
  2026.             double var21 = this.field_72777_q.func_175606_aa().field_70161_v - p_174974_7_;
  2027.             int id = p_174974_1_;
  2028.             if (id == EnumParticleTypes.EXPLOSION_HUGE.func_179348_c() && !Config.isAnimatedExplosion()) {
  2029.                 return null;
  2030.             }
  2031.             if (id == EnumParticleTypes.EXPLOSION_LARGE.func_179348_c() && !Config.isAnimatedExplosion()) {
  2032.                 return null;
  2033.             }
  2034.             if (id == EnumParticleTypes.EXPLOSION_NORMAL.func_179348_c() && !Config.isAnimatedExplosion()) {
  2035.                 return null;
  2036.             }
  2037.             if (id == EnumParticleTypes.SUSPENDED.func_179348_c() && !Config.isWaterParticles()) {
  2038.                 return null;
  2039.             }
  2040.             if (id == EnumParticleTypes.SUSPENDED_DEPTH.func_179348_c() && !Config.isVoidParticles()) {
  2041.                 return null;
  2042.             }
  2043.             if (id == EnumParticleTypes.SMOKE_NORMAL.func_179348_c() && !Config.isAnimatedSmoke()) {
  2044.                 return null;
  2045.             }
  2046.             if (id == EnumParticleTypes.SMOKE_LARGE.func_179348_c() && !Config.isAnimatedSmoke()) {
  2047.                 return null;
  2048.             }
  2049.             if (id == EnumParticleTypes.SPELL_MOB.func_179348_c() && !Config.isPotionParticles()) {
  2050.                 return null;
  2051.             }
  2052.             if (id == EnumParticleTypes.SPELL_MOB_AMBIENT.func_179348_c() && !Config.isPotionParticles()) {
  2053.                 return null;
  2054.             }
  2055.             if (id == EnumParticleTypes.SPELL.func_179348_c() && !Config.isPotionParticles()) {
  2056.                 return null;
  2057.             }
  2058.             if (id == EnumParticleTypes.SPELL_INSTANT.func_179348_c() && !Config.isPotionParticles()) {
  2059.                 return null;
  2060.             }
  2061.             if (id == EnumParticleTypes.SPELL_WITCH.func_179348_c() && !Config.isPotionParticles()) {
  2062.                 return null;
  2063.             }
  2064.             if (id == EnumParticleTypes.PORTAL.func_179348_c() && !Config.isAnimatedPortal()) {
  2065.                 return null;
  2066.             }
  2067.             if (id == EnumParticleTypes.FLAME.func_179348_c() && !Config.isAnimatedFlame()) {
  2068.                 return null;
  2069.             }
  2070.             if (id == EnumParticleTypes.REDSTONE.func_179348_c() && !Config.isAnimatedRedstone()) {
  2071.                 return null;
  2072.             }
  2073.             if (id == EnumParticleTypes.DRIP_WATER.func_179348_c() && !Config.isDrippingWaterLava()) {
  2074.                 return null;
  2075.             }
  2076.             if (id == EnumParticleTypes.DRIP_LAVA.func_179348_c() && !Config.isDrippingWaterLava()) {
  2077.                 return null;
  2078.             }
  2079.             if (id == EnumParticleTypes.FIREWORKS_SPARK.func_179348_c() && !Config.isFireworkParticles()) {
  2080.                 return null;
  2081.             }
  2082.             if (p_174974_2_) {
  2083.                 return this.field_72777_q.field_71452_i.func_178927_a(p_174974_1_, p_174974_3_, p_174974_5_, p_174974_7_, p_174974_9_, p_174974_11_, p_174974_13_, p_174974_15_);
  2084.             }
  2085.             double var23 = 16.0;
  2086.             double maxDistSq = 256.0;
  2087.             if (id == EnumParticleTypes.CRIT.func_179348_c()) {
  2088.                 maxDistSq = 38416.0;
  2089.             }
  2090.             if (var17 * var17 + var19 * var19 + var21 * var21 > maxDistSq) {
  2091.                 return null;
  2092.             }
  2093.             if (var16 > 1) {
  2094.                 return null;
  2095.             }
  2096.             EntityFX entityFx = this.field_72777_q.field_71452_i.func_178927_a(p_174974_1_, p_174974_3_, p_174974_5_, p_174974_7_, p_174974_9_, p_174974_11_, p_174974_13_, p_174974_15_);
  2097.             if (id == EnumParticleTypes.WATER_BUBBLE.func_179348_c()) {
  2098.                 CustomColors.updateWaterFX(entityFx, this.field_72769_h, p_174974_3_, p_174974_5_, p_174974_7_);
  2099.             }
  2100.             if (id == EnumParticleTypes.WATER_SPLASH.func_179348_c()) {
  2101.                 CustomColors.updateWaterFX(entityFx, this.field_72769_h, p_174974_3_, p_174974_5_, p_174974_7_);
  2102.             }
  2103.             if (id == EnumParticleTypes.WATER_DROP.func_179348_c()) {
  2104.                 CustomColors.updateWaterFX(entityFx, this.field_72769_h, p_174974_3_, p_174974_5_, p_174974_7_);
  2105.             }
  2106.             if (id == EnumParticleTypes.TOWN_AURA.func_179348_c()) {
  2107.                 CustomColors.updateMyceliumFX(entityFx);
  2108.             }
  2109.             if (id == EnumParticleTypes.PORTAL.func_179348_c()) {
  2110.                 CustomColors.updatePortalFX(entityFx);
  2111.             }
  2112.             if (id == EnumParticleTypes.REDSTONE.func_179348_c()) {
  2113.                 CustomColors.updateReddustFX(entityFx, this.field_72769_h, p_174974_3_, p_174974_5_, p_174974_7_);
  2114.             }
  2115.             return entityFx;
  2116.         }
  2117.         return null;
  2118.     }
  2119.  
  2120.     @Override
  2121.     public void func_72703_a(Entity entityIn) {
  2122.         RandomMobs.entityLoaded(entityIn, this.field_72769_h);
  2123.         if (Config.isDynamicLights()) {
  2124.             DynamicLights.entityAdded((Entity)entityIn, (RenderGlobal)this);
  2125.         }
  2126.     }
  2127.  
  2128.     @Override
  2129.     public void func_72709_b(Entity entityIn) {
  2130.         if (Config.isDynamicLights()) {
  2131.             DynamicLights.entityRemoved((Entity)entityIn, (RenderGlobal)this);
  2132.         }
  2133.     }
  2134.  
  2135.     public void func_72728_f() {
  2136.     }
  2137.  
  2138.     @Override
  2139.     public void func_180440_a(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {
  2140.         switch (p_180440_1_) {
  2141.             case 1013:
  2142.             case 1018: {
  2143.                 if (this.field_72777_q.func_175606_aa() == null) break;
  2144.                 double var4 = (double)p_180440_2_.func_177958_n() - this.field_72777_q.func_175606_aa().field_70165_t;
  2145.                 double var6 = (double)p_180440_2_.func_177956_o() - this.field_72777_q.func_175606_aa().field_70163_u;
  2146.                 double var8 = (double)p_180440_2_.func_177952_p() - this.field_72777_q.func_175606_aa().field_70161_v;
  2147.                 double var10 = Math.sqrt(var4 * var4 + var6 * var6 + var8 * var8);
  2148.                 double var12 = this.field_72777_q.func_175606_aa().field_70165_t;
  2149.                 double var14 = this.field_72777_q.func_175606_aa().field_70163_u;
  2150.                 double var16 = this.field_72777_q.func_175606_aa().field_70161_v;
  2151.                 if (var10 > 0.0) {
  2152.                     var12 += var4 / var10 * 2.0;
  2153.                     var14 += var6 / var10 * 2.0;
  2154.                     var16 += var8 / var10 * 2.0;
  2155.                 }
  2156.                 if (p_180440_1_ == 1013) {
  2157.                     this.field_72769_h.func_72980_b(var12, var14, var16, "mob.wither.spawn", 1.0f, 1.0f, false);
  2158.                     break;
  2159.                 }
  2160.                 this.field_72769_h.func_72980_b(var12, var14, var16, "mob.enderdragon.end", 5.0f, 1.0f, false);
  2161.             }
  2162.         }
  2163.     }
  2164.  
  2165.     @Override
  2166.     public void func_180439_a(EntityPlayer p_180439_1_, int p_180439_2_, BlockPos p_180439_3_, int p_180439_4_) {
  2167.         Random var5 = this.field_72769_h.field_73012_v;
  2168.         switch (p_180439_2_) {
  2169.             case 1000: {
  2170.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.click", 1.0f, 1.0f, false);
  2171.                 break;
  2172.             }
  2173.             case 1001: {
  2174.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.click", 1.0f, 1.2f, false);
  2175.                 break;
  2176.             }
  2177.             case 1002: {
  2178.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.bow", 1.0f, 1.2f, false);
  2179.                 break;
  2180.             }
  2181.             case 1003: {
  2182.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.door_open", 1.0f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2183.                 break;
  2184.             }
  2185.             case 1004: {
  2186.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.fizz", 0.5f, 2.6f + (var5.nextFloat() - var5.nextFloat()) * 0.8f, false);
  2187.                 break;
  2188.             }
  2189.             case 1005: {
  2190.                 if (Item.func_150899_d(p_180439_4_) instanceof ItemRecord) {
  2191.                     this.field_72769_h.func_175717_a(p_180439_3_, "records." + ((ItemRecord)Item.func_150899_d((int)p_180439_4_)).field_150929_a);
  2192.                     break;
  2193.                 }
  2194.                 this.field_72769_h.func_175717_a(p_180439_3_, null);
  2195.                 break;
  2196.             }
  2197.             case 1006: {
  2198.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.door_close", 1.0f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2199.                 break;
  2200.             }
  2201.             case 1007: {
  2202.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.ghast.charge", 10.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2203.                 break;
  2204.             }
  2205.             case 1008: {
  2206.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.ghast.fireball", 10.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2207.                 break;
  2208.             }
  2209.             case 1009: {
  2210.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.ghast.fireball", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2211.                 break;
  2212.             }
  2213.             case 1010: {
  2214.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.zombie.wood", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2215.                 break;
  2216.             }
  2217.             case 1011: {
  2218.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.zombie.metal", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2219.                 break;
  2220.             }
  2221.             case 1012: {
  2222.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.zombie.woodbreak", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2223.                 break;
  2224.             }
  2225.             case 1014: {
  2226.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.wither.shoot", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2227.                 break;
  2228.             }
  2229.             case 1015: {
  2230.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.bat.takeoff", 0.05f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2231.                 break;
  2232.             }
  2233.             case 1016: {
  2234.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.zombie.infect", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2235.                 break;
  2236.             }
  2237.             case 1017: {
  2238.                 this.field_72769_h.func_175731_a(p_180439_3_, "mob.zombie.unfect", 2.0f, (var5.nextFloat() - var5.nextFloat()) * 0.2f + 1.0f, false);
  2239.                 break;
  2240.             }
  2241.             case 1020: {
  2242.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.anvil_break", 1.0f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2243.                 break;
  2244.             }
  2245.             case 1021: {
  2246.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.anvil_use", 1.0f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2247.                 break;
  2248.             }
  2249.             case 1022: {
  2250.                 this.field_72769_h.func_175731_a(p_180439_3_, "random.anvil_land", 0.3f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2251.                 break;
  2252.             }
  2253.             case 2000: {
  2254.                 int var31 = p_180439_4_ % 3 - 1;
  2255.                 int var8 = p_180439_4_ / 3 % 3 - 1;
  2256.                 double var9 = (double)p_180439_3_.func_177958_n() + (double)var31 * 0.6 + 0.5;
  2257.                 double var11 = (double)p_180439_3_.func_177956_o() + 0.5;
  2258.                 double var32 = (double)p_180439_3_.func_177952_p() + (double)var8 * 0.6 + 0.5;
  2259.                 for (int var33 = 0; var33 < 10; ++var33) {
  2260.                     double var34 = var5.nextDouble() * 0.2 + 0.01;
  2261.                     double var35 = var9 + (double)var31 * 0.01 + (var5.nextDouble() - 0.5) * (double)var8 * 0.5;
  2262.                     double var20 = var11 + (var5.nextDouble() - 0.5) * 0.5;
  2263.                     double var22 = var32 + (double)var8 * 0.01 + (var5.nextDouble() - 0.5) * (double)var31 * 0.5;
  2264.                     double var24 = (double)var31 * var34 + var5.nextGaussian() * 0.01;
  2265.                     double var26 = -0.03 + var5.nextGaussian() * 0.01;
  2266.                     double var28 = (double)var8 * var34 + var5.nextGaussian() * 0.01;
  2267.                     this.func_174972_a(EnumParticleTypes.SMOKE_NORMAL, var35, var20, var22, var24, var26, var28, new int[0]);
  2268.                 }
  2269.                 return;
  2270.             }
  2271.             case 2001: {
  2272.                 Block var6 = Block.func_149729_e(p_180439_4_ & 4095);
  2273.                 if (var6.func_149688_o() != Material.field_151579_a) {
  2274.                     this.field_72777_q.func_147118_V().func_147682_a(new PositionedSoundRecord(new ResourceLocation(var6.field_149762_H.func_150495_a()), (var6.field_149762_H.func_150497_c() + 1.0f) / 2.0f, var6.field_149762_H.func_150494_d() * 0.8f, (float)p_180439_3_.func_177958_n() + 0.5f, (float)p_180439_3_.func_177956_o() + 0.5f, (float)p_180439_3_.func_177952_p() + 0.5f));
  2275.                 }
  2276.                 this.field_72777_q.field_71452_i.func_180533_a(p_180439_3_, var6.func_176203_a(p_180439_4_ >> 12 & 255));
  2277.                 break;
  2278.             }
  2279.             case 2002: {
  2280.                 int var13;
  2281.                 double var7 = p_180439_3_.func_177958_n();
  2282.                 double var9 = p_180439_3_.func_177956_o();
  2283.                 double var11 = p_180439_3_.func_177952_p();
  2284.                 for (var13 = 0; var13 < 8; ++var13) {
  2285.                     this.func_174972_a(EnumParticleTypes.ITEM_CRACK, var7, var9, var11, var5.nextGaussian() * 0.15, var5.nextDouble() * 0.2, var5.nextGaussian() * 0.15, Item.func_150891_b(Items.field_151068_bn), p_180439_4_);
  2286.                 }
  2287.                 var13 = Items.field_151068_bn.func_77620_a(p_180439_4_);
  2288.                 float var14 = (float)(var13 >> 16 & 255) / 255.0f;
  2289.                 float var15 = (float)(var13 >> 8 & 255) / 255.0f;
  2290.                 float var16 = (float)(var13 >> 0 & 255) / 255.0f;
  2291.                 EnumParticleTypes var17 = EnumParticleTypes.SPELL;
  2292.                 if (Items.field_151068_bn.func_77833_h(p_180439_4_)) {
  2293.                     var17 = EnumParticleTypes.SPELL_INSTANT;
  2294.                 }
  2295.                 for (int var18 = 0; var18 < 100; ++var18) {
  2296.                     double var19 = var5.nextDouble() * 4.0;
  2297.                     double var21 = var5.nextDouble() * 3.141592653589793 * 2.0;
  2298.                     double var23 = Math.cos(var21) * var19;
  2299.                     double var25 = 0.01 + var5.nextDouble() * 0.5;
  2300.                     double var27 = Math.sin(var21) * var19;
  2301.                     EntityFX var29 = this.func_174974_b(var17.func_179348_c(), var17.func_179344_e(), var7 + var23 * 0.1, var9 + 0.3, var11 + var27 * 0.1, var23, var25, var27, new int[0]);
  2302.                     if (var29 == null) continue;
  2303.                     float var30 = 0.75f + var5.nextFloat() * 0.25f;
  2304.                     var29.func_70538_b(var14 * var30, var15 * var30, var16 * var30);
  2305.                     var29.func_70543_e((float)var19);
  2306.                 }
  2307.                 this.field_72769_h.func_175731_a(p_180439_3_, "game.potion.smash", 1.0f, this.field_72769_h.field_73012_v.nextFloat() * 0.1f + 0.9f, false);
  2308.                 break;
  2309.             }
  2310.             case 2003: {
  2311.                 double var7 = (double)p_180439_3_.func_177958_n() + 0.5;
  2312.                 double var9 = p_180439_3_.func_177956_o();
  2313.                 double var11 = (double)p_180439_3_.func_177952_p() + 0.5;
  2314.                 for (int var13 = 0; var13 < 8; ++var13) {
  2315.                     this.func_174972_a(EnumParticleTypes.ITEM_CRACK, var7, var9, var11, var5.nextGaussian() * 0.15, var5.nextDouble() * 0.2, var5.nextGaussian() * 0.15, Item.func_150891_b(Items.field_151061_bv));
  2316.                 }
  2317.                 for (double var32 = 0.0; var32 < 6.283185307179586; var32 += 0.15707963267948966) {
  2318.                     this.func_174972_a(EnumParticleTypes.PORTAL, var7 + Math.cos(var32) * 5.0, var9 - 0.4, var11 + Math.sin(var32) * 5.0, Math.cos(var32) * -5.0, 0.0, Math.sin(var32) * -5.0, new int[0]);
  2319.                     this.func_174972_a(EnumParticleTypes.PORTAL, var7 + Math.cos(var32) * 5.0, var9 - 0.4, var11 + Math.sin(var32) * 5.0, Math.cos(var32) * -7.0, 0.0, Math.sin(var32) * -7.0, new int[0]);
  2320.                 }
  2321.                 return;
  2322.             }
  2323.             case 2004: {
  2324.                 for (int var18 = 0; var18 < 20; ++var18) {
  2325.                     double var19 = (double)p_180439_3_.func_177958_n() + 0.5 + ((double)this.field_72769_h.field_73012_v.nextFloat() - 0.5) * 2.0;
  2326.                     double var21 = (double)p_180439_3_.func_177956_o() + 0.5 + ((double)this.field_72769_h.field_73012_v.nextFloat() - 0.5) * 2.0;
  2327.                     double var23 = (double)p_180439_3_.func_177952_p() + 0.5 + ((double)this.field_72769_h.field_73012_v.nextFloat() - 0.5) * 2.0;
  2328.                     this.field_72769_h.func_175688_a(EnumParticleTypes.SMOKE_NORMAL, var19, var21, var23, 0.0, 0.0, 0.0, new int[0]);
  2329.                     this.field_72769_h.func_175688_a(EnumParticleTypes.FLAME, var19, var21, var23, 0.0, 0.0, 0.0, new int[0]);
  2330.                 }
  2331.                 return;
  2332.             }
  2333.             case 2005: {
  2334.                 ItemDye.func_180617_a(this.field_72769_h, p_180439_3_, p_180439_4_);
  2335.             }
  2336.         }
  2337.     }
  2338.  
  2339.     @Override
  2340.     public void func_180441_b(int n, BlockPos blockPos, int n2) {
  2341.         void progress;
  2342.         void breakerId;
  2343.         RenderGlobal renderGlobal;
  2344.         CallbackInfo callbackInfo = new CallbackInfo("func_180441_b", false);
  2345.         renderGlobal.saveBlockBreakProgressPacket(n, blockPos, n2, callbackInfo);
  2346.         if (progress >= 0 && progress < 10) {
  2347.             void pos;
  2348.             DestroyBlockProgress var4 = (DestroyBlockProgress)this.field_72738_E.get((int)breakerId);
  2349.             if (var4 == null || var4.func_180246_b().func_177958_n() != pos.func_177958_n() || var4.func_180246_b().func_177956_o() != pos.func_177956_o() || var4.func_180246_b().func_177952_p() != pos.func_177952_p()) {
  2350.                 var4 = new DestroyBlockProgress((int)breakerId, (BlockPos)pos);
  2351.                 this.field_72738_E.put((int)breakerId, var4);
  2352.             }
  2353.             var4.func_73107_a((int)progress);
  2354.             var4.func_82744_b(this.field_72773_u);
  2355.         } else {
  2356.             this.field_72738_E.remove((int)breakerId);
  2357.         }
  2358.     }
  2359.  
  2360.     public void func_174979_m() {
  2361.         this.field_147595_R = true;
  2362.     }
  2363.  
  2364.     public void resetClouds() {
  2365.         this.cloudRenderer.reset();
  2366.     }
  2367.  
  2368.     public int getCountRenderers() {
  2369.         return this.field_175008_n.field_178164_f.length;
  2370.     }
  2371.  
  2372.     public int getCountActiveRenderers() {
  2373.         return this.field_72755_R.size();
  2374.     }
  2375.  
  2376.     public int getCountEntitiesRendered() {
  2377.         return this.field_72749_I;
  2378.     }
  2379.  
  2380.     public int getCountTileEntitiesRendered() {
  2381.         return this.countTileEntitiesRendered;
  2382.     }
  2383.  
  2384.     public RenderChunk getRenderChunk(BlockPos pos) {
  2385.         return this.field_175008_n.func_178161_a(pos);
  2386.     }
  2387.  
  2388.     public RenderChunk getRenderChunk(RenderChunk renderChunk, EnumFacing facing) {
  2389.         if (renderChunk == null) {
  2390.             return null;
  2391.         }
  2392.         BlockPos pos = renderChunk.getPositionOffset16(facing);
  2393.         return this.field_175008_n.func_178161_a(pos);
  2394.     }
  2395.  
  2396.     public WorldClient getWorld() {
  2397.         return this.field_72769_h;
  2398.     }
  2399.  
  2400.     @MixinMerged(mixin="com.replaymod.recording.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2401.     @Override
  2402.     public void setRecordingEventHandler(RecordingEventHandler recordingEventHandler) {
  2403.         this.recordingEventHandler = recordingEventHandler;
  2404.     }
  2405.  
  2406.     @MixinMerged(mixin="com.replaymod.recording.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2407.     @Override
  2408.     public RecordingEventHandler getRecordingEventHandler() {
  2409.         return this.recordingEventHandler;
  2410.     }
  2411.  
  2412.     @MixinMerged(mixin="com.replaymod.recording.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2413.     public void saveBlockBreakProgressPacket(int breakerId, BlockPos pos, int progress, CallbackInfo info) {
  2414.         if (this.recordingEventHandler != null) {
  2415.             this.recordingEventHandler.onBlockBreakAnim(breakerId, pos, progress);
  2416.         }
  2417.     }
  2418.  
  2419.     @MixinMerged(mixin="com.replaymod.render.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2420.     public void replayModRender_setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, int frameCount, boolean playerSpectator, CallbackInfo ci) {
  2421.         if (this.replayModRender_hook != null && !this.replayModRender_passThroughSetupTerrain) {
  2422.             this.replayModRender_passThroughSetupTerrain = true;
  2423.             do {
  2424.                 this.func_174970_a(viewEntity, partialTicks, camera, this.replayModRender_hook.nextFrameId(), playerSpectator);
  2425.             } while (this.field_147595_R);
  2426.             this.replayModRender_passThroughSetupTerrain = false;
  2427.             ci.cancel();
  2428.         }
  2429.     }
  2430.  
  2431.     @MixinMerged(mixin="com.replaymod.render.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2432.     public void replayModRender_isPositionInRenderChunk(BlockPos pos, RenderChunk chunk, CallbackInfoReturnable<Boolean> ci) {
  2433.         if (this.replayModRender_hook != null) {
  2434.             ci.setReturnValue((Object)true);
  2435.         }
  2436.     }
  2437.  
  2438.     @MixinMerged(mixin="com.replaymod.render.mixin.MixinRenderGlobal", priority=1000, sessionId="62a1efa2-a7cb-4ec5-8b84-36587bc28fab")
  2439.     public void replayModRender_updateChunks(long finishTimeNano, CallbackInfo ci) {
  2440.         if (this.replayModRender_hook != null) {
  2441.             if (ShaderReflection.renderGlobal_chunksToUpdateForced != null) {
  2442.                 try {
  2443.                     Set ctuf = (Set)ShaderReflection.renderGlobal_chunksToUpdateForced.get(this);
  2444.                     for (RenderChunk renderChunk : ctuf) {
  2445.                         this.replayModRender_hook.renderDispatcher.field_178519_d.add(renderChunk.func_178574_d());
  2446.                     }
  2447.                 }
  2448.                 catch (Exception e) {
  2449.                     e.printStackTrace();
  2450.                 }
  2451.             }
  2452.             this.replayModRender_hook.updateChunks();
  2453.             ci.cancel();
  2454.         }
  2455.     }
  2456.  
  2457.     public static class ContainerLocalRenderInformation {
  2458.         final RenderChunk field_178036_a;
  2459.         final EnumFacing field_178034_b;
  2460.         final Set field_178035_c = EnumSet.noneOf(EnumFacing.class);
  2461.         final int field_178032_d;
  2462.         private static final String __OBFID = "CL_00002534";
  2463.  
  2464.         public ContainerLocalRenderInformation(RenderChunk p_i46248_2_, EnumFacing p_i46248_3_, int p_i46248_4_) {
  2465.             this.field_178036_a = p_i46248_2_;
  2466.             this.field_178034_b = p_i46248_3_;
  2467.             this.field_178032_d = p_i46248_4_;
  2468.         }
  2469.  
  2470.         ContainerLocalRenderInformation(RenderChunk p_i46249_2_, EnumFacing p_i46249_3_, int p_i46249_4_, Object p_i46249_5_) {
  2471.             this(p_i46249_2_, p_i46249_3_, p_i46249_4_);
  2472.         }
  2473.     }
  2474.  
  2475. }
Advertisement
Add Comment
Please, Sign In to add comment