Files
MCCustomSkinLoader/Common/source/customskinloader/fake/FakeClientPlayer.java
T

79 lines
3.2 KiB
Java

package customskinloader.fake;
import java.util.UUID;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
import customskinloader.CustomSkinLoader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ThreadDownloadImageData;
import net.minecraft.client.renderer.texture.ITextureObject;
import net.minecraft.client.renderer.texture.SimpleTexture;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.DefaultPlayerSkin;
import net.minecraft.client.resources.SkinManager;
import net.minecraft.client.resources.SkinManager.SkinAvailableCallback;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
public class FakeClientPlayer {
//For Legacy Skin
public static ThreadDownloadImageData getDownloadImageSkin(ResourceLocation resourceLocationIn, String username)
{
//CustomSkinLoader.logger.debug("FakeClientPlayer/getDownloadImageSkin "+username);
TextureManager textman = Minecraft.getMinecraft().getTextureManager();
ITextureObject ito = textman.getTexture(resourceLocationIn);
if (ito == null || !(ito instanceof ThreadDownloadImageData))
{
//if Legacy Skin for username not loaded yet
SkinManager skinman = Minecraft.getMinecraft().getSkinManager();
UUID offlineUUID=EntityPlayer.getOfflineUUID(username);
GameProfile offlineProfile=new GameProfile(offlineUUID,username);
//Load Default Skin
ResourceLocation defaultSkin=DefaultPlayerSkin.getDefaultSkin(offlineUUID);
ITextureObject defaultSkinObj=new SimpleTexture(defaultSkin);
textman.loadTexture(resourceLocationIn, defaultSkinObj);
//Load Skin from SkinManager
skinman.loadProfileTextures(offlineProfile, new LegacyBuffer(resourceLocationIn), false);
}
if(ito instanceof ThreadDownloadImageData)
return (ThreadDownloadImageData)ito;
else
return null;
}
public static ResourceLocation getLocationSkin(String username)
{
//CustomSkinLoader.logger.debug("FakeClientPlayer/getLocationSkin "+username);
return new ResourceLocation("skins/legacy-" + StringUtils.stripControlCodes(username));
}
private static class LegacyBuffer implements SkinAvailableCallback{
ResourceLocation resourceLocationIn;
public LegacyBuffer(ResourceLocation resourceLocationIn) {
CustomSkinLoader.logger.debug("Loading Legacy Texture "+resourceLocationIn);
this.resourceLocationIn=resourceLocationIn;
}
@Override
public void skinAvailable(Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture) {
if(typeIn!=Type.SKIN)
return;
CustomSkinLoader.logger.debug("Legacy Texture Loaded "+resourceLocationIn);
TextureManager textman = Minecraft.getMinecraft().getTextureManager();
ITextureObject ito = textman.getTexture(location);
textman.loadTexture(resourceLocationIn, ito);
//textman.bindTexture(resourceLocationIn);
}
}
}