 import net.minecraft.client.network.NetworkPlayerInfo;
 import net.minecraft.client.renderer.ThreadDownloadImageData;
 import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import net.minecraftforge.fml.relauncher.ReflectionHelper;
 
 import java.lang.reflect.Field;
 import java.net.URL;
 
 /**
  * Default Cape implementation
- * 
+ *
  * @author jadar
  */
 public class StaticCape extends AbstractCape {
 @@ -41,16 +43,17 @@ public void loadTexture(AbstractClientPlayer player) {
 
         //mmdanggg2: using reflection to modify the private locationCape, hacky but it works.
         try {
            Field playerInfoF = AbstractClientPlayer.class.getDeclaredField("playerInfo");
        	Field playerInfoF = ReflectionHelper.findField(AbstractClientPlayer.class, "playerInfo", "field_175157_a");
             playerInfoF.setAccessible(true);
             NetworkPlayerInfo nci = (NetworkPlayerInfo) playerInfoF.get(player);
 
           Field locationCapeF = NetworkPlayerInfo.class.getDeclaredField("locationCape");
           Field locationCapeF = ReflectionHelper.findField(NetworkPlayerInfo.class, "locationCape", "field_178862_f");
             locationCapeF.setAccessible(true);
             locationCapeF.set(nci, location);
 
             playerInfoF.setAccessible(false);
             locationCapeF.setAccessible(false);

         } catch (Exception e) {
             e.printStackTrace();
             DevCapes.getInstance().logger.error("Setting cape ResourceLocation failed!");

@@ -1,29 +1,478 @@
- 
+/**%0A * DeveloperCapes by Jadar%0A * License: MIT License%0A * (https://raw.github.com/jadar/DeveloperCapes/master/LICENSE)%0A * version 4.0.0.x%0A */%0Apackage com.jadarstudios.developercapes.cape;%0A%0Aimport com.jadarstudios.developercapes.DevCapes;%0Aimport com.jadarstudios.developercapes.HDImageBuffer;%0Aimport com.mojang.authlib.minecraft.MinecraftProfileTexture;%0A%0Aimport net.minecraft.client.Minecraft;%0Aimport net.minecraft.client.entity.AbstractClientPlayer;%0A
 import net.minecraft.client.
@@ -498,17 +498,16 @@
 erInfo;%0A
- 
 import n
@@ -560,17 +560,16 @@
 geData;%0A
- 
 import n
@@ -729,19 +729,17 @@
 Helper;%0A
- %0A 
+%0A
 import j
@@ -762,17 +762,16 @@
 .Field;%0A
- 
 import j
@@ -787,16 +787,13 @@
 RL;%0A
- %0A 
+%0A
 /**%0A
- 
  * D
@@ -823,18 +823,11 @@
 ion%0A
--
  *
- %0A+ *%0A 
+%0A
  * @
@@ -843,14 +843,12 @@
 dar%0A
- 
  */%0A
- 
 publ
@@ -894,28 +894,203 @@
 e %7B%0A
- @@ -41,16 +43,17 @@
+%0A    public StaticCape(String name, URL url) %7B%0A        this.setName(name);%0A        this.setURL(url);%0A    %7D%0A%0A    public StaticCape(String name) %7B%0A        this(name, null);%0A    %7D%0A%0A    @Override%0A   
  pub
@@ -1142,18 +1142,72 @@
 yer) %7B%0A 
-%0A
  
+      ResourceLocation location = this.getLocation();%0A%0A
         
@@ -1304,106 +1304,14 @@
     
- 
 try %7B%0A
-            Field playerInfoF = AbstractClientPlayer.class.getDeclaredField(%22playerInfo%22);%0A
     
@@ -1427,33 +1427,32 @@
 %22);%0A            
- 
 playerInfoF.setA
@@ -1460,33 +1460,32 @@
 cessible(true);%0A
- 
             Netw
@@ -1553,101 +1553,10 @@
 r);%0A
- 
 %0A 
-          Field locationCapeF = NetworkPlayerInfo.class.getDeclaredField(%22locationCape%22);%0A
     
@@ -1675,33 +1675,32 @@
 %22);%0A            
- 
 locationCapeF.se
@@ -1710,33 +1710,32 @@
 cessible(true);%0A
- 
             loca
@@ -1768,11 +1768,9 @@
 n);%0A
- %0A 
+%0A
     
@@ -1807,25 +1807,24 @@
 ble(false);%0A
- 
             
@@ -1868,17 +1868,16 @@
         
- 
 %7D catch 
@@ -1904,17 +1904,16 @@
         
- 
 e.printS
@@ -1925,17 +1925,16 @@
 race();%0A
- 
         
@@ -2011,12 +2011,663 @@
  failed!%22);%0A
+        %7D%0A%0A        Minecraft.getMinecraft().renderEngine.loadTexture(location, this.getTexture());%0A    %7D%0A%0A    @Override%0A    public boolean isTextureLoaded(AbstractClientPlayer player) %7B%0A        ResourceLocation cape = player.getLocationCape();%0A        return cape != null;%0A    %7D%0A%0A    public void setURL(URL url) %7B%0A        if (url == null) %7B%0A            this.texture = null;%0A            return;%0A        %7D%0A        this.texture = new ThreadDownloadImageData(null, url.toString(), null, new HDImageBuffer());%0A    %7D%0A%0A    public void setName(String name) %7B%0A        this.name = name;%0A        this.location = new ResourceLocation(%22DevCapes/%22 + name);%0A    %7D%0A%7D%0A

Update StaticCape.java