mirror of
https://github.com/xfl03/MCCustomSkinLoader.git
synced 2026-11-11 23:07:31 +00:00
122 lines
3.8 KiB
Java
122 lines
3.8 KiB
Java
package customskinloader.profile;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import com.google.common.collect.Maps;
|
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
|
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
|
|
|
/**
|
|
* Model Manager for 1.8 and higher.
|
|
* A manager to check if model is available.
|
|
* It is the only class in package 'customskinloader' which has differences in different Minecraft version.
|
|
* @since 13.1
|
|
*/
|
|
public class ModelManager0 {
|
|
public static enum Model{
|
|
SKIN_DEFAULT,
|
|
SKIN_SLIM,
|
|
CAPE,
|
|
ELYTRA
|
|
}
|
|
private static HashMap<String,Model> models=new HashMap<String,Model>();
|
|
private static Type typeElytra=null;
|
|
static{
|
|
for(Type type:Type.values()){
|
|
if(type.ordinal()==2)//ELYTRA
|
|
typeElytra=type;
|
|
}
|
|
models.put("default", Model.SKIN_DEFAULT);
|
|
models.put("slim", Model.SKIN_SLIM);
|
|
models.put("cape", Model.CAPE);
|
|
if(typeElytra!=null)
|
|
models.put("elytra", Model.ELYTRA);
|
|
}
|
|
|
|
/**
|
|
* Get enum for the model.
|
|
* @param model - string model
|
|
* @since 14.5
|
|
*/
|
|
public static Model getEnumModel(String model){
|
|
return models.get(model);
|
|
}
|
|
|
|
/**
|
|
* Check if model is skin.
|
|
* @since 14.5
|
|
* */
|
|
public static boolean isSkin(Model model){
|
|
return model==Model.SKIN_DEFAULT||model==Model.SKIN_SLIM;
|
|
}
|
|
|
|
/**
|
|
* Check if elytra is supported.
|
|
* @since 14.5
|
|
*/
|
|
public static boolean isElytraSupported(){
|
|
return typeElytra!=null;
|
|
}
|
|
|
|
/**
|
|
* Parse hashMapProfile to UserProfile
|
|
* @param profile - hashMapProfile (HashMap<String,MinecraftProfileTexture>)
|
|
* @return profile - UserProfile instance
|
|
* @since 13.1
|
|
*/
|
|
public static UserProfile toUserProfile(Map profile){
|
|
UserProfile userProfile=new UserProfile();
|
|
if(profile==null)
|
|
return userProfile;
|
|
MinecraftProfileTexture skin=(MinecraftProfileTexture)profile.get(Type.SKIN);
|
|
userProfile.skinUrl= skin==null?null:skin.getUrl();//Avoid NullPointerException
|
|
userProfile.model= skin==null?null:skin.getMetadata("model");
|
|
if(StringUtils.isEmpty(userProfile.model))
|
|
userProfile.model="default";
|
|
|
|
MinecraftProfileTexture cape=(MinecraftProfileTexture)profile.get(Type.CAPE);
|
|
userProfile.capeUrl= cape==null?null:cape.getUrl();
|
|
return userProfile;
|
|
}
|
|
|
|
/**
|
|
* Parse UserProfile to hashMapProfile
|
|
* @param profile - UserProfile instance
|
|
* @return profile - hashMapProfile (HashMap<String,MinecraftProfileTexture>)
|
|
* @since 13.1
|
|
*/
|
|
public static Map fromUserProfile(UserProfile profile){
|
|
Map map=Maps.newHashMap();
|
|
if(profile==null)
|
|
return map;
|
|
if(profile.skinUrl!=null){
|
|
Map metadata=null;
|
|
if(profile.model!=null&&profile.model.equals("slim")){
|
|
metadata = Maps.newHashMap();
|
|
metadata.put("model", "slim");
|
|
}
|
|
map.put(Type.SKIN, getProfileTexture(profile.skinUrl,metadata));
|
|
}
|
|
if(profile.capeUrl!=null)
|
|
map.put(Type.CAPE, getProfileTexture(profile.capeUrl,null));
|
|
if(typeElytra!=null && profile.elytraUrl!=null)
|
|
map.put(typeElytra, getProfileTexture(profile.elytraUrl,null));
|
|
return map;
|
|
}
|
|
|
|
/**
|
|
* Parse url to MinecraftProfileTexture
|
|
*
|
|
* @param url - textureUrl
|
|
* metadata - metadata
|
|
* @return MinecraftProfileTexture
|
|
* @since 14.5
|
|
*/
|
|
public static MinecraftProfileTexture getProfileTexture(String url,Map metadata){
|
|
return new MinecraftProfileTexture(url,metadata);
|
|
}
|
|
}
|