Files
MCCustomSkinLoader/Common/source/customskinloader/loader/LegacyLoader.java
T

94 lines
3.9 KiB
Java
Raw Normal View History

2016-02-27 15:22:35 +08:00
package customskinloader.loader;
2016-07-31 22:00:46 +08:00
import java.io.File;
2016-09-10 21:00:53 +08:00
import org.apache.commons.lang3.StringUtils;
2016-07-31 22:00:46 +08:00
import com.mojang.authlib.GameProfile;
2016-02-27 15:22:35 +08:00
import customskinloader.CustomSkinLoader;
import customskinloader.config.SkinSiteProfile;
2016-09-24 19:08:01 +08:00
import customskinloader.profile.ModelManager0;
2016-07-31 22:00:46 +08:00
import customskinloader.profile.UserProfile;
2016-11-06 12:00:36 +08:00
import customskinloader.utils.HttpRequestUtil;
import customskinloader.utils.HttpRequestUtil.HttpRequest;
import customskinloader.utils.HttpRequestUtil.HttpResponce;
2016-07-31 22:00:46 +08:00
import customskinloader.utils.HttpTextureUtil;
2016-02-27 16:37:05 +08:00
import customskinloader.utils.HttpUtil0;
2016-02-27 15:22:35 +08:00
2016-08-21 11:26:00 +08:00
public class LegacyLoader implements ProfileLoader.IProfileLoader {
2016-02-27 15:22:35 +08:00
public static final String USERNAME_REGEX="\\{USERNAME\\}";
2016-08-05 17:00:03 +08:00
2016-02-27 15:22:35 +08:00
@Override
2016-09-10 21:00:53 +08:00
public UserProfile loadProfile(SkinSiteProfile ssp, GameProfile gameProfile) throws Exception {
2016-07-31 22:00:46 +08:00
String username=gameProfile.getName();
UserProfile profile=new UserProfile();
2016-09-10 21:00:53 +08:00
if(StringUtils.isNoneEmpty(ssp.skin)){
2016-07-31 22:00:46 +08:00
String skin=ssp.skin.replaceAll(USERNAME_REGEX, username);
2016-09-10 21:00:53 +08:00
if(HttpUtil0.isLocal(ssp.skin)){
2016-07-31 22:00:46 +08:00
File skinFile=new File(CustomSkinLoader.DATA_DIR,skin);
2016-08-05 17:00:03 +08:00
if(skinFile.exists()&&skinFile.isFile())
2016-07-31 22:00:46 +08:00
profile.skinUrl=HttpTextureUtil.getLocalLegacyFakeUrl(skin, HttpTextureUtil.getHash(skin, skinFile.length(), skinFile.lastModified()));
2016-08-05 17:00:03 +08:00
}else{
2016-11-20 11:27:33 +08:00
HttpResponce responce=HttpRequestUtil.makeHttpRequest(new HttpRequest(skin).setUserAgent(ssp.userAgent).setCheckPNG(ssp.checkPNG!=null&&ssp.checkPNG!=false).setLoadContent(false).setCacheTime(60));
2016-11-06 12:00:36 +08:00
if(responce.success)
profile.skinUrl=HttpTextureUtil.getLegacyFakeUrl(skin);
2016-07-31 22:00:46 +08:00
}
2016-08-05 17:00:03 +08:00
profile.model=profile.hasSkinUrl()?ssp.model:null;
2016-07-31 22:00:46 +08:00
}
2016-09-10 21:00:53 +08:00
if(StringUtils.isNoneEmpty(ssp.cape)){
2016-07-31 22:00:46 +08:00
String cape=ssp.cape.replaceAll(USERNAME_REGEX, username);
2016-09-10 21:00:53 +08:00
if(HttpUtil0.isLocal(ssp.cape)){
2016-07-31 22:00:46 +08:00
File capeFile=new File(CustomSkinLoader.DATA_DIR,cape);
2016-08-05 17:00:03 +08:00
if(capeFile.exists()&&capeFile.isFile())
2016-07-31 22:00:46 +08:00
profile.capeUrl=HttpTextureUtil.getLocalLegacyFakeUrl(cape, HttpTextureUtil.getHash(cape, capeFile.length(), capeFile.lastModified()));
2016-08-05 17:00:03 +08:00
}else{
2016-11-20 11:27:33 +08:00
HttpResponce responce=HttpRequestUtil.makeHttpRequest(new HttpRequest(cape).setUserAgent(ssp.userAgent).setCheckPNG(ssp.checkPNG!=null&&ssp.checkPNG!=false).setLoadContent(false).setCacheTime(60));
2016-11-06 12:00:36 +08:00
if(responce.success)
profile.capeUrl=HttpTextureUtil.getLegacyFakeUrl(cape);
2016-07-31 22:00:46 +08:00
}
}
2016-09-24 19:08:01 +08:00
if(ModelManager0.isElytraSupported()&&StringUtils.isNoneEmpty(ssp.elytra)){
String elytra=ssp.elytra.replaceAll(USERNAME_REGEX, username);
if(HttpUtil0.isLocal(ssp.elytra)){
File elytraFile=new File(CustomSkinLoader.DATA_DIR,elytra);
if(elytraFile.exists()&&elytraFile.isFile())
profile.elytraUrl=HttpTextureUtil.getLocalLegacyFakeUrl(elytra, HttpTextureUtil.getHash(elytra, elytraFile.length(), elytraFile.lastModified()));
}else{
2016-11-20 11:27:33 +08:00
HttpResponce responce=HttpRequestUtil.makeHttpRequest(new HttpRequest(elytra).setUserAgent(ssp.userAgent).setCheckPNG(ssp.checkPNG!=null&&ssp.checkPNG!=false).setLoadContent(false).setCacheTime(60));
2016-11-06 12:00:36 +08:00
if(responce.success)
profile.elytraUrl=HttpTextureUtil.getLegacyFakeUrl(elytra);
2016-09-24 19:08:01 +08:00
}
}
2016-07-31 22:00:46 +08:00
if(profile.isEmpty()){
CustomSkinLoader.logger.info("Both skin and cape not found.");
return null;
}
2016-08-05 17:00:03 +08:00
return profile;
2016-07-31 22:00:46 +08:00
}
2016-08-21 11:26:00 +08:00
@Override
public boolean compare(SkinSiteProfile ssp0, SkinSiteProfile ssp1) {
2016-09-10 21:00:53 +08:00
return (StringUtils.isNoneEmpty(ssp0.skin)?ssp0.skin.equalsIgnoreCase(ssp1.skin):true) || (StringUtils.isNoneEmpty(ssp0.cape)?ssp0.cape.equalsIgnoreCase(ssp1.cape):true);
2016-08-21 11:26:00 +08:00
}
2016-08-28 19:40:18 +08:00
@Override
public String getName() {
return "Legacy";
}
2016-09-24 20:47:08 +08:00
@Override
public void initLocalFolder(SkinSiteProfile ssp) {
if(HttpUtil0.isLocal(ssp.skin))
initFolder(ssp.skin);
if(HttpUtil0.isLocal(ssp.cape))
initFolder(ssp.cape);
if(HttpUtil0.isLocal(ssp.elytra))
initFolder(ssp.elytra);
}
private void initFolder(String target){
String file=target.replaceAll(USERNAME_REGEX, "init");
File folder=new File(CustomSkinLoader.DATA_DIR,file).getParentFile();
if(folder!=null&&!folder.exists())
folder.mkdirs();
}
2016-02-27 15:22:35 +08:00
}