package net.minecraft.client.entity;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.util.HashMap;
import net.minecraft.client.Minecraft;
import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.client.renderer.IImageBuffer;
import net.minecraft.client.renderer.ImageBufferDownload;
import net.minecraft.client.renderer.ThreadDownloadImageData;
import net.minecraft.client.renderer.texture.ITextureObject;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.DefaultPlayerSkin;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.IAttributeInstance;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.src.Config;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
import net.minecraft.world.World;
import net.minecraft.world.WorldSettings;
public abstract class AbstractClientPlayer extends EntityPlayer
{
private NetworkPlayerInfo field_175157_a;
private ResourceLocation ofLocationCape = null;
private static final String __OBFID = "CL_00000935";
public AbstractClientPlayer(World worldIn, GameProfile p_i45074_2_)
{
super(worldIn, p_i45074_2_);
String username = p_i45074_2_.getName();
this.downloadCape(username);
}
public boolean func_175149_v()
{
NetworkPlayerInfo var1 = Minecraft.getMinecraft().getNetHandler().func_175102_a(this.getGameProfile().getId());
return var1 != null && var1.getGameType() == WorldSettings.GameType.SPECTATOR;
}
public boolean hasCape()
{
return this.func_175155_b() != null;
}
protected NetworkPlayerInfo func_175155_b()
{
if (this.field_175157_a == null)
{
this.field_175157_a = Minecraft.getMinecraft().getNetHandler().func_175102_a(this.getUniqueID());
}
return this.field_175157_a;
}
public boolean hasSkin()
{
NetworkPlayerInfo var1 = this.func_175155_b();
return var1 != null && var1.func_178856_e();
}
public ResourceLocation getLocationSkin()
{
NetworkPlayerInfo var1 = this.func_175155_b();
return var1 == null ? DefaultPlayerSkin.func_177334_a(this.getUniqueID()) : var1.func_178837_g();
}
public ResourceLocation getLocationCape()
{
if (!Config.isShowCapes())
{
return null;
}
else if (this.ofLocationCape != null)
{
return this.ofLocationCape;
}
else
{
NetworkPlayerInfo var1 = this.func_175155_b();
return var1 == null ? null : var1.func_178861_h();
}
}
public static ThreadDownloadImageData getDownloadImageSkin(ResourceLocation resourceLocationIn, String username)
{
TextureManager var2 = Minecraft.getMinecraft().getTextureManager();
Object var3 = var2.getTexture(resourceLocationIn);
if (var3 == null)
{
var3 = new ThreadDownloadImageData((File)null, String.format("http://skins.minecraft.net/MinecraftSkins/%s.png", new Object[] {StringUtils.stripControlCodes(username)}), DefaultPlayerSkin.func_177334_a(func_175147_b(username)), new ImageBufferDownload());
var2.loadTexture(resourceLocationIn, (ITextureObject)var3);
}
return (ThreadDownloadImageData)var3;
}
public static ResourceLocation getLocationSkin(String username)
{
return new ResourceLocation("skins/" + StringUtils.stripControlCodes(username));
}
public String func_175154_l()
{
NetworkPlayerInfo var1 = this.func_175155_b();
return var1 == null ? DefaultPlayerSkin.func_177332_b(this.getUniqueID()) : var1.func_178851_f();
}
public float func_175156_o()
{
float var1 = 1.0F;
if (this.capabilities.isFlying)
{
var1 *= 1.1F;
}
IAttributeInstance var2 = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed);
var1 = (float)((double)var1 * ((var2.getAttributeValue() / (double)this.capabilities.getWalkSpeed() + 1.0D) / 2.0D));
if (this.capabilities.getWalkSpeed() == 0.0F || Float.isNaN(var1) || Float.isInfinite(var1))
{
var1 = 1.0F;
}
if (this.isUsingItem() && this.getItemInUse().getItem() == Items.bow)
{
int var3 = this.getItemInUseDuration();
float var4 = (float)var3 / 20.0F;
if (var4 > 1.0F)
{
var4 = 1.0F;
}
else
{
var4 *= var4;
}
var1 *= 1.0F - var4 * 0.15F;
}
return var1;
}
private void downloadCape(String username)
{
if (username != null && !username.isEmpty())
{
username = StringUtils.stripControlCodes(username);
String ofCapeUrl = "http://s.optifine.net/capes/" + username + ".png";
MinecraftProfileTexture mpt = new MinecraftProfileTexture(ofCapeUrl, new HashMap());
final ResourceLocation rl = new ResourceLocation("skins/" + mpt.getHash());
IImageBuffer iib = new IImageBuffer()
{
ImageBufferDownload ibd = new ImageBufferDownload();
public BufferedImage parseUserSkin(BufferedImage var1)
{
return AbstractClientPlayer.this.parseCape(var1);
}
public void func_152634_a()
{
AbstractClientPlayer.this.ofLocationCape = rl;
}
};
ThreadDownloadImageData textureCape = new ThreadDownloadImageData((File)null, mpt.getUrl(), (ResourceLocation)null, iib);
Minecraft.getMinecraft().getTextureManager().loadTexture(rl, textureCape);
}
}
private BufferedImage parseCape(BufferedImage img)
{
int imageWidth = 64;
int imageHeight = 32;
int srcWidth = img.getWidth();
for (int srcHeight = img.getHeight(); imageWidth < srcWidth || imageHeight < srcHeight; imageHeight *= 2)
{
imageWidth *= 2;
}
BufferedImage imgNew = new BufferedImage(imageWidth, imageHeight, 2);
Graphics g = imgNew.getGraphics();
g.drawImage(img, 0, 0, (ImageObserver)null);
g.dispose();
return imgNew;
}
}