--- ../src-base/minecraft/net/minecraft/client/renderer/RenderGlobal.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/RenderGlobal.java
@@ -517,8 +517,10 @@
 
     public void func_180446_a(Entity p_180446_1_, ICamera p_180446_2_, float p_180446_3_)
     {
+        int pass = net.minecraftforge.client.MinecraftForgeClient.getRenderPass();
         if (this.field_72740_G > 0)
         {
+            if (pass > 0) return;
             --this.field_72740_G;
         }
         else
@@ -529,9 +531,12 @@
             this.field_72769_h.field_72984_F.func_76320_a("prepare");
             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(), p_180446_3_);
             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, p_180446_3_);
+            if (pass == 0) // no indentation to shrink patch
+            {
             this.field_72748_H = 0;
             this.field_72749_I = 0;
             this.field_72750_J = 0;
+            }
             Entity entity1 = this.field_72777_q.func_175606_aa();
             double d3 = entity1.field_70142_S + (entity1.field_70165_t - entity1.field_70142_S) * (double)p_180446_3_;
             double d4 = entity1.field_70137_T + (entity1.field_70163_u - entity1.field_70137_T) * (double)p_180446_3_;
@@ -543,13 +548,17 @@
             this.field_72777_q.field_71460_t.func_180436_i();
             this.field_72769_h.field_72984_F.func_76318_c("global");
             List list = this.field_72769_h.func_72910_y();
+            if (pass == 0) // no indentation to shrink patch
+            {
             this.field_72748_H = list.size();
+            }
             int i;
             Entity entity2;
 
             for (i = 0; i < this.field_72769_h.field_73007_j.size(); ++i)
             {
                 entity2 = (Entity)this.field_72769_h.field_73007_j.get(i);
+                if (!entity2.shouldRenderInPass(pass)) continue;
                 ++this.field_72749_I;
 
                 if (entity2.func_145770_h(d0, d1, d2))
@@ -571,6 +580,7 @@
                 for (i = 0; i < list.size(); ++i)
                 {
                     entity2 = (Entity)list.get(i);
+                    if (!entity2.shouldRenderInPass(pass)) continue;
                     boolean flag = this.field_72777_q.func_175606_aa() instanceof EntityLivingBase && ((EntityLivingBase)this.field_72777_q.func_175606_aa()).func_70608_bn();
                     boolean flag1 = entity2.func_145770_h(d0, d1, d2) && (entity2.field_70158_ak || p_180446_2_.func_78546_a(entity2.func_174813_aQ()) || entity2.field_70153_n == this.field_72777_q.field_71439_g) && entity2 instanceof EntityPlayer;
 
@@ -605,6 +615,7 @@
                 while (iterator2.hasNext())
                 {
                     Entity entity3 = (Entity)iterator2.next();
+                    if (!entity3.shouldRenderInPass(pass)) continue;
                     boolean flag2 = this.field_175010_j.func_178635_a(entity3, p_180446_2_, d0, d1, d2) || entity3.field_70153_n == this.field_72777_q.field_71439_g;
 
                     if (flag2)
@@ -640,6 +651,7 @@
                 while (iterator1.hasNext())
                 {
                     tileentity = (TileEntity)iterator1.next();
+                    if (!tileentity.shouldRenderInPass(pass) || !p_180446_2_.func_78546_a(tileentity.getRenderBoundingBox())) continue;
                     TileEntityRendererDispatcher.field_147556_a.func_180546_a(tileentity, p_180446_3_, -1);
                 }
             }
@@ -671,7 +683,7 @@
 
                 Block block = this.field_72769_h.func_180495_p(blockpos).func_177230_c();
 
-                if (tileentity != null && (block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull))
+                if (tileentity != null && tileentity.shouldRenderInPass(pass) && tileentity.canRenderBreaking() && p_180446_2_.func_78546_a(tileentity.getRenderBoundingBox()))
                 {
                     TileEntityRendererDispatcher.field_147556_a.func_180546_a(tileentity, p_180446_3_, destroyblockprogress.func_73106_e());
                 }
@@ -1151,6 +1163,12 @@
 
     public void func_174976_a(float p_174976_1_, int p_174976_2_)
     {
+        net.minecraftforge.client.IRenderHandler renderer = this.field_72769_h.field_73011_w.getSkyRenderer();
+        if (renderer != null)
+        {
+            renderer.render(p_174976_1_, field_72769_h, field_72777_q);
+            return;
+        }
         if (this.field_72777_q.field_71441_e.field_73011_w.func_177502_q() == 1)
         {
             this.func_180448_r();
@@ -1381,6 +1399,12 @@
 
     public void func_180447_b(float p_180447_1_, int p_180447_2_)
     {
+        net.minecraftforge.client.IRenderHandler renderer = this.field_72777_q.field_71441_e.field_73011_w.getCloudRenderer();
+        if (renderer != null)
+        {
+            renderer.render(p_180447_1_, this.field_72777_q.field_71441_e, field_72777_q);
+            return;
+        }
         if (this.field_72777_q.field_71441_e.field_73011_w.func_76569_d())
         {
             if (this.field_72777_q.field_71474_y.field_74347_j)
@@ -1805,8 +1829,11 @@
                 double d4 = (double)blockpos.func_177956_o() - d1;
                 double d5 = (double)blockpos.func_177952_p() - d2;
                 Block block = this.field_72769_h.func_180495_p(blockpos).func_177230_c();
+                TileEntity te = this.field_72769_h.func_175625_s(blockpos);
+                boolean hasBreak = block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull;
+                if (!hasBreak) hasBreak = te != null && te.canRenderBreaking();
 
-                if (!(block instanceof BlockChest) && !(block instanceof BlockEnderChest) && !(block instanceof BlockSign) && !(block instanceof BlockSkull))
+                if (!hasBreak)
                 {
                     if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D)
                     {
@@ -1949,13 +1976,16 @@
         if (p_174961_1_ != null)
         {
             ItemRecord itemrecord = ItemRecord.func_150926_b(p_174961_1_);
+            ResourceLocation resource = null;
 
             if (itemrecord != null)
             {
                 this.field_72777_q.field_71456_v.func_73833_a(itemrecord.func_150927_i());
+                resource = itemrecord.getRecordResource(p_174961_1_);
             }
 
-            PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.func_147675_a(new ResourceLocation(p_174961_1_), (float)p_174961_2_.func_177958_n(), (float)p_174961_2_.func_177956_o(), (float)p_174961_2_.func_177952_p());
+            if (resource == null) resource = new ResourceLocation(p_174961_1_);
+            PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.func_147675_a(resource, (float)p_174961_2_.func_177958_n(), (float)p_174961_2_.func_177956_o(), (float)p_174961_2_.func_177952_p());
             this.field_147593_P.put(p_174961_2_, positionedsoundrecord);
             this.field_72777_q.func_147118_V().func_147682_a(positionedsoundrecord);
         }
