diff --git a/Common/customskinloader/config/SkinSiteProfile.java b/Common/customskinloader/config/SkinSiteProfile.java index 4ae83b6..711b277 100644 --- a/Common/customskinloader/config/SkinSiteProfile.java +++ b/Common/customskinloader/config/SkinSiteProfile.java @@ -1,11 +1,14 @@ package customskinloader.config; +import customskinloader.loader.jsonapi.CustomSkinAPIPlus.CustomSkinAPIPlusPrivacy; + public class SkinSiteProfile { public String name; public String type; public String userAgent; public String root; + public CustomSkinAPIPlusPrivacy privacy; public String skin; public String model; @@ -30,6 +33,7 @@ public class SkinSiteProfile { ssp.name=name; ssp.type="CustomSkinAPIPlus"; ssp.root=root; + ssp.privacy=new CustomSkinAPIPlusPrivacy(); return ssp; } public static SkinSiteProfile createUniSkinAPI(String name,String root){ diff --git a/Common/customskinloader/loader/jsonapi/CustomSkinAPIPlus.java b/Common/customskinloader/loader/jsonapi/CustomSkinAPIPlus.java index 1f08c4b..791a8cf 100644 --- a/Common/customskinloader/loader/jsonapi/CustomSkinAPIPlus.java +++ b/Common/customskinloader/loader/jsonapi/CustomSkinAPIPlus.java @@ -1,5 +1,13 @@ package customskinloader.loader.jsonapi; +import java.io.File; +import java.io.IOException; +import java.util.UUID; +import java.util.prefs.Preferences; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; + import com.google.gson.Gson; import customskinloader.CustomSkinLoader; @@ -11,6 +19,30 @@ import customskinloader.utils.MinecraftUtil; public class CustomSkinAPIPlus implements IJsonAPI { + private static String clientID=null; + private static String deviceID=Preferences.systemRoot().node("CustomSkinAPIPlus").get("id", null); + public CustomSkinAPIPlus(){ + File clientIDFile=new File(CustomSkinLoader.DATA_DIR,"CustomSkinAPIPlus-ClientID"); + + if(clientIDFile.isFile()) + try{ + clientID=FileUtils.readFileToString(clientIDFile); + }catch(Exception e){ + e.printStackTrace(); + } + if(clientID==null){ + clientID=UUID.randomUUID().toString(); + try { + FileUtils.write(clientIDFile, clientID); + } catch (Exception e) { + e.printStackTrace(); + } + } + if(StringUtils.isEmpty(deviceID)){ + deviceID=UUID.randomUUID().toString(); + Preferences.systemRoot().node("CustomSkinAPIPlus").put("id", deviceID); + } + } @Override public String toJsonUrl(String root, String username) { return JsonAPILoader.Type.CustomSkinAPI.jsonAPI.toJsonUrl(root, username); @@ -18,7 +50,9 @@ public class CustomSkinAPIPlus implements IJsonAPI { @Override public String getPayload(SkinSiteProfile ssp) { - return new Gson().toJson(new CustomSkinAPIPlusPayload()); + if(ssp.privacy==null) + ssp.privacy=new CustomSkinAPIPlusPrivacy(); + return new Gson().toJson(new CustomSkinAPIPlusPayload(ssp.privacy)); } @Override @@ -32,13 +66,29 @@ public class CustomSkinAPIPlus implements IJsonAPI { } public static class CustomSkinAPIPlusPayload{ - public static String gameVersion = MinecraftUtil.getMinecraftMainVersion();//minecraft version - public static String modVersion = CustomSkinLoader.CustomSkinLoader_FULL_VERSION;//mod version - public String serverAddress = MinecraftUtil.isLanServer()?null:MinecraftUtil.getServerAddress();//ip:port + public String gameVersion;//minecraft version + public String modVersion;//mod version + public String serverAddress;//ip:port + public String clientID;//Minecraft Client ID + public String deviceID;//Device ID + public CustomSkinAPIPlusPayload(CustomSkinAPIPlusPrivacy privacy){ + if(privacy.gameVersion) + gameVersion=MinecraftUtil.getMinecraftMainVersion(); + if(privacy.modVersion) + modVersion=CustomSkinLoader.CustomSkinLoader_VERSION; + if(privacy.serverAddress) + serverAddress=MinecraftUtil.isLanServer()?null:MinecraftUtil.getStandardServerAddress(); + if(privacy.clientID) + clientID=CustomSkinAPIPlus.clientID; + if(privacy.deviceID) + deviceID=CustomSkinAPIPlus.deviceID; + } } public static class CustomSkinAPIPlusPrivacy{ - public static boolean gameVersion; - public static boolean modVersion; - public static boolean serverAddress; + public boolean gameVersion=true; + public boolean modVersion=true; + public boolean serverAddress=true; + public boolean clientID=true; + public boolean deviceID=true; } } diff --git a/Common/customskinloader/utils/HttpUtil0.java b/Common/customskinloader/utils/HttpUtil0.java index aa77e04..7e6109f 100644 --- a/Common/customskinloader/utils/HttpUtil0.java +++ b/Common/customskinloader/utils/HttpUtil0.java @@ -44,18 +44,24 @@ public class HttpUtil0 { } } - public static boolean isLanServer(String address){ + public static String parseAddress(String address) { if(StringUtils.isEmpty(address)) - return true; + return null; String[] addresses=address.split(":"); InetAddress add; try { add = InetAddress.getByName(addresses[0]); } catch (UnknownHostException e) { e.printStackTrace(); - return true; + return null; } - int numIp=getNumIp(add.getHostAddress()); + return add.getHostAddress()+(addresses.length==2 ? addresses[1] : "25565"); + } + public static boolean isLanServer(String standardAddress){ + if(StringUtils.isEmpty(standardAddress)) + return true; + String[] addresses=standardAddress.split(":"); + int numIp=getNumIp(addresses[0]); return numIp==0||numIp==getNumIp("127.0.0.1")|| (numIp>=getNumIp("192.168.0.0")&&numIp<=getNumIp("192.168.255.255"))|| (numIp>=getNumIp("10.0.0.0")&&numIp<=getNumIp("10.255.255.255"))|| diff --git a/Common/customskinloader/utils/MinecraftUtil.java b/Common/customskinloader/utils/MinecraftUtil.java index e4099b7..a2bdb6d 100644 --- a/Common/customskinloader/utils/MinecraftUtil.java +++ b/Common/customskinloader/utils/MinecraftUtil.java @@ -66,17 +66,19 @@ public class MinecraftUtil { return minecraftMainVersion; } + // (domain|ip)(:port) public static String getServerAddress(){ net.minecraft.client.multiplayer.ServerData data=net.minecraft.client.Minecraft.getMinecraft().getCurrentServerData(); if(data==null)//Single Player return null; return data.serverIP; } + // ip:port + public static String getStandardServerAddress(){ + return HttpUtil0.parseAddress(getServerAddress()); + } public static boolean isLanServer(){ - net.minecraft.client.multiplayer.ServerData data=net.minecraft.client.Minecraft.getMinecraft().getCurrentServerData(); - if(data==null)//Single Player - return true; - return HttpUtil0.isLanServer(data.serverIP); + return HttpUtil0.isLanServer(getStandardServerAddress()); } public static String getCurrentUsername(){ return net.minecraft.client.Minecraft.getMinecraft().getSession().getProfile().getName(); diff --git a/README.md b/README.md index dc1f032..da5c969 100644 --- a/README.md +++ b/README.md @@ -49,10 +49,11 @@ The problem of rendering incorrect texture has been fixed. ##Default Load List - [Mojang](http://www.minecraft.net/) (Mojang API) -- [Blessing Skin](https://skin.prinzeugen.net/) (CustomSkinAPI) -- [OneSkin] (http://fleey.org/skin/) (CustomSkinAPI) +- [Blessing Skin](http://skin.prinzeugen.net/) (CustomSkinAPI) +- [OneSkin](http://fleey.org/skin/) (CustomSkinAPI) - SkinMe (UniSkinAPI) - [McSkin](http://www.mcskin.cc/) (CustomSkinAPI) +- [ElfSkin](http://www.mcelf.com/s/mcskin/) (Self-made API) - LocalSkin (Legacy) If you want to apply to add other skin server to default list, please go to [issue](https://github.com/JLChnToZ/MCCustomSkinLoader/issues).