Minecraft(我的世界)中文论坛

标题: [1.8][皮肤相关]Universal Skin API 计划

作者: RecursiveG    时间: 2014-11-18 14:48
标题: [1.8][皮肤相关]Universal Skin API 计划
本帖最后由 RecursiveG 于 2014-11-18 21:16 编辑

计划简介与背景介绍
距Minecraft 1.8 发布已有一段时间。1.8加入了新的特性,比如:新的人物模型“Alex”和UUID系统。同时,材质的存储也发生了较大的变化。
因此,旧的皮肤链接形式无法满足新版本的要求,比如,难以自由选择人物模型,无法有效利用材质存储系统导致的多余请求等。
在这种情况下,本人草拟了Universal Skin API计划,希望提供一个新的,统一的,可扩展的解决方案。
任何对本计划有兴趣,希望做出贡献的人都欢迎留言。
本计划由以下三部分组成
Universal Skin API
Universal Skin Server
Universal Skin Mod
相关链接






作者: gooding300    时间: 2014-11-22 22:21
本帖最后由 gooding300 于 2014-11-22 22:23 编辑

居然是沙发,先激动一个
您好,我是一名非常业余的开发者
目前高一
希望可以参与您的计划
有做过皮服站以及皮肤补丁
也很希望MC皮肤在国内有个光明的前景
说实话,我对SkinMe(国内唯一一个大型第三方皮服装)对于盗版皮肤加载标准的确立不是报太大希望
故非常喜欢这个项目我目前在做的CSL只能加载原始png图像,也是一种局限

作者: 嘻嘻嘻呵呵    时间: 2014-11-23 13:32
{:10_525:}来卖一个萌~~~~~
作者: Zhuogu    时间: 2014-11-25 17:17
很看好这个计划,我应该会参与。但是今年升学申请比较忙,会尽量去做。
作者: 狠兵    时间: 2014-11-25 17:21
越来越高端了...
作者: Only1Word    时间: 2014-12-17 18:44
应该怎么去参与这个计划呢. ( 前端
作者: RecursiveG    时间: 2014-12-17 19:19
Only1Word 发表于 2014-12-17 18:44
应该怎么去参与这个计划呢. ( 前端

在Github上fork然后开pull request或者开issue都可以。
PM我也可以
作者: ufo2013    时间: 2015-1-7 12:15
本帖最后由 ufo2013 于 2015-1-7 12:17 编辑

求教怎么指定皮肤网址,已经安装了该mod,游戏ID改成skinme账号对应的,还是原版的皮肤啊

回错帖了,勿理

作者: simon3000    时间: 2015-6-15 04:07
本帖最后由 simon3000 于 2015-6-15 04:09 编辑

外行围观一下

手持一个现成的老版本皮肤服务端,不知道要不要,找不到原作者.........自己用过,有些地方都被改了
链接: http://pan.baidu.com/s/1bnlm8Cv 密码: 8h5n

作者: ーのものー    时间: 2016-1-3 11:05
唔。。因为看到mod配置文件中的地址都是直接获取png的,所以窝用PHP简单实现了一个直接获取png的皮肤站:skin.prinzeugen.net,如果mod已经支持json api的话,那窝就把后端改成输出json好了
作者: RecursiveG    时间: 2016-1-3 11:45
ーのものー 发表于 2016-1-3 11:05
唔。。因为看到mod配置文件中的地址都是直接获取png的,所以窝用PHP简单实现了一个直接获取png的皮肤站:sk ...

新版mod是已经支持了,不过我没有时间维护。
若是能增加json支持自然是极好的。
作者: ーのものー    时间: 2016-1-13 20:26
提交了一个 issue
作者: 云闪    时间: 2016-2-11 21:40
问个问题,如果正版玩家本身有皮肤,又安装了这个mod并在这个mod的服务端有相应账号,那么皮肤是显示正版的还是mod服务端的?
作者: simon3000    时间: 2016-2-27 23:25
没有明白API→_→
  1. {
  2.   "player_name": "XiaoMing",
  3.   "last_update": 1416300800,
  4.   "model_preference": ["slim","default"],
  5.   "skins": {
  6.     "slim": "67cbc70720c4666e9a12384d041313c7bb9154630d7647eb1e8fba0c461275c6",
  7.     "default": "6d342582972c5465b5771033ccc19f847a340b76d6131129666299eb2d6ce66e"
  8.   }
  9.   "cape": "970a71c6a4fc81e83ae22c181703558d9346e0566390f06fb93d09fcc9783799"
  10. }
复制代码


这样的话,那些 '67cbc70720c4666e9a12384d041313c7bb9154630d7647eb1e8fba0c461275c6'
之类的应该怎么用?
./textures/67cbc70720c4666e9a12384d041313c7bb9154630d7647eb1e8fba0c461275c6
./textures/67cbc70720c4666e9a12384d041313c7bb9154630d7647eb1e8fba0c461275c6.png
模型名称约定又该怎么写呢?
作者: RecursiveG    时间: 2016-2-28 00:16
simon3000 发表于 2016-2-27 23:25
没有明白API→_→
  1. /textures/67cbc70720c4666e9a12384d041313c7bb9154630d7647eb1e8fba0c461275c6
复制代码

不要后缀
模型名称目前只用到slim和default。
下面那个alex和steve是写错了......
作者: simon3000    时间: 2016-2-28 02:02
RecursiveG 发表于 2016-2-28 00:16
不要后缀
模型名称目前只用到slim和default。
下面那个alex和steve是写错了...... ...

所以就是
客户端获取 用户名.json
根据用户名.json里面的skin的这个奇怪字符串
来获取皮肤?
那不要png的话改怎么获取?又会出来一个奇怪的格式吗
作者: RecursiveG    时间: 2016-2-28 11:33
simon3000 发表于 2016-2-28 02:02
所以就是
客户端获取 用户名.json
根据用户名.json里面的skin的这个奇怪字符串

只是名字里没有png而已,本质还是个png文件
你看这个链接: https://skins.minecraft.net/MinecraftSkins/Herobrine.png
跳转完了也是没有后缀名的,但是也能正常显示
作者: ーのものー    时间: 2016-3-5 10:13
记得上次那个要用 php 实现的那个家伙吗
前几天正式发布了,不知道你知不知道呢 http://www.mcbbs.net/thread-552877-1-1.html
同时支持 uniskinapi,以及 custom skin loader 提出的 json api。
另,uniskinmod 似乎不支持更改模型?即使json里 preference model 是 slim,游戏里也还是 steve 模型?
作者: RecursiveG    时间: 2016-3-5 13:40
ーのものー 发表于 2016-3-5 10:13
记得上次那个要用 php 实现的那个家伙吗
前几天正式发布了,不知道你知不知道呢 http://www.mcbbs.net/thre ...

已经知道了 https://github.com/RecursiveG/Un ... uecomment-187898245
1.8的mod大概的确有些奇奇怪怪的问题。。。
1.9这次换个思路写,估计bug能少一点
csl的作者我也有联系,另外USM的API有小更新你可以看一下,应该是向后兼容的。
作者: ーのものー    时间: 2016-3-5 15:35
RecursiveG 发表于 2016-3-5 13:40
已经知道了 https://github.com/RecursiveG/UniSkinServer/issues/6#issuecomment-187898245
1.8的mod大 ...

动态皮肤也可以啊,awesome
不过现在的uniskinmod 还不支持新版本的api吧?看你好像挺忙的
如果你更新了的话,通知我下:-D
作者: 孩紫MC    时间: 2016-3-15 19:51
最近在着手开发我的McAdmin 并使之支持此API 但是做完基本步骤 例如生成JSON等 但是我却发现 我的链接形式是xxx.xxx.xxx/?x=xxx&x=xxx这样的访问路径 敢问大神 这样的访问路径是否适用于API
作者: RecursiveG    时间: 2016-3-16 01:11
孩紫MC 发表于 2016-3-15 19:51
最近在着手开发我的McAdmin 并使之支持此API 但是做完基本步骤 例如生成JSON等 但是我却发现 我的链接形式 ...

不适合,请用rewrite规则
作者: 孩紫MC    时间: 2016-3-16 08:33
RecursiveG 发表于 2016-3-16 01:11
不适合,请用rewrite规则

好的 thx!
作者: 孩紫MC    时间: 2016-3-16 08:41
再请问下 cfg配置文件中 填写的root链接是否跟Github中的API说明一样
根地址

根地址是每个URL请求的开始部分,每个请求的URL均由 根地址与Endpoint连接而成,根地址也唯一地标识了一台服务器 所有请求都是不带参数的GET请求 假设一个服务器的根地址是

http://127.0.0.1:8000/skinserver/
获取玩家Profile的Endpoint是

/{玩家名}.json
那么,从该服务器获取玩家XiaoMing的皮肤的请求即为

http://127.0.0.1:8000/skinserver/XiaoMing.json




作者: 孩紫MC    时间: 2016-3-16 17:51
本帖最后由 孩紫MC 于 2016-3-16 18:22 编辑

另外还想请教一个问题 当mod抓取材质文件 例如这样
PM 06:00:00 > /admin.json
PM 06:00:04 > /textures/30371f59d9233d2d42aff85757f0bf92.png
PM 06:00:04 > /textures/bf54cbbac665857466f5499a4f9073c8.png
PM 06:04:53 > /admin.json
PM 06:08:14 > /admin.json
PM 06:08:15 > /textures/30371f59d9233d2d42aff85757f0bf92.png
PM 06:08:15 > /textures/bf54cbbac665857466f5499a4f9073c8.png
PM 06:10:38 > /admin.json


那是否应该生成对应的文件于服务端?(生成的数据是存放在MYSQL的)

作者: RecursiveG    时间: 2016-3-17 00:20
孩紫MC 发表于 2016-3-16 17:51
另外还想请教一个问题 当mod抓取材质文件 例如这样

那是否应该生成对应的文件于服务端?(生成的数据是存放 ...

只要能正常返回数据,是否有实际文件并无所谓。
另外材质末尾不应带有".png"后缀
作者: 孩紫MC    时间: 2016-3-17 08:44
本帖最后由 孩紫MC 于 2016-3-17 10:42 编辑
RecursiveG 发表于 2016-3-17 00:20
只要能正常返回数据,是否有实际文件并无所谓。
另外材质末尾不应带有".png"后缀 ...

{:10_492:}从我贴出的log中显示 是正常返回数据的 但是在实际游戏中显示的并不是返回后的皮肤材质。。但发现了一个问题 人物模型是Alex 请问大神 defaul的模型是以Steve为主还是Alex为主


作者: 孩紫MC    时间: 2016-3-19 22:12
不得不说 加载出来的无论是披风还是皮肤 都是Steve0.0 这是什么回事 数据也是返回正常的OVO
作者: 孩紫MC    时间: 2016-3-25 15:39
本帖最后由 孩紫MC 于 2016-3-25 15:42 编辑

-.-还是有些地方不太懂 从website方面返回的信息来看
已经正确加载了

再从游戏的log来看 也是加载了数据


可以看到已经是加载了数据的(

但是用NP++打开.minecraft/assets/skins的文件 例如


却发现其中的内容是


但是游戏中的效果却是


(难道说不支持127.0.0.1?)
_(:3」∠)_不知道是什么原因造成的 导致了皮肤跟披风都是steve

作者: RecursiveG    时间: 2016-3-26 00:33
孩紫MC 发表于 2016-3-25 15:39
-.-还是有些地方不太懂 从website方面返回的信息来看
已经正确加载了

1.8可能有问题,请暂时用CSL代替
http://www.mcbbs.net/thread-269807-1-1.html
作者: 云闪    时间: 2016-3-26 02:05
RecursiveG 发表于 2016-3-26 00:33
1.8可能有问题,请暂时用CSL代替
http://www.mcbbs.net/thread-269807-1-1.html

之前说把修改后源码发给你的忘了_(:зゝ∠)_
应该是1.8的authlib加了域名白名单验证导致的,我贴一下我加的代码:
AsmTransformer类:
  1.         hookMethod("com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService", "<clinit>", "<clinit>", "()V",
  2.                 new staticTransformer());
复制代码
  1.     private class staticTransformer implements IMethodTransformer {
  2.         
  3.         @Override
  4.         public void transform(MethodNode mn, String srgName, boolean devEnv, String classObfName) {
  5.             AbstractInsnNode n = getNthInsnNode(mn, Opcodes.ANEWARRAY, 1);
  6.             mn.instructions.insertBefore(n, new InsnNode(Opcodes.POP));
  7.             mn.instructions.insertBefore(n, new InsnNode(Opcodes.ICONST_3));
  8.             n = getNthInsnNode(mn, Opcodes.PUTSTATIC, 1);
  9.             mn.instructions.insertBefore(n, new InsnNode(Opcodes.DUP));
  10.             mn.instructions.insertBefore(n, new InsnNode(Opcodes.ICONST_2));
  11.             mn.instructions.insertBefore(n, new LdcInsnNode(""));
  12.             mn.instructions.insertBefore(n, new InsnNode(Opcodes.AASTORE));
  13.         }
  14.     }
复制代码


本来应该直接改验证域名白名单的方法的_(:зゝ∠)_但是我对字节码不熟,总是出问题,于是直接改了那个储存白名单域名的String数组常量
作者: 孩紫MC    时间: 2016-3-26 08:32
RecursiveG 发表于 2016-3-26 00:33
1.8可能有问题,请暂时用CSL代替
http://www.mcbbs.net/thread-269807-1-1.html

OVO好的~~~~~
作者: 孩紫MC    时间: 2016-3-26 11:37
RecursiveG 发表于 2016-3-17 00:20
只要能正常返回数据,是否有实际文件并无所谓。
另外材质末尾不应带有".png"后缀 ...

我好像发现了个问题 数据文件必须存放在服务端 不然就算返回数据后也无法加载皮肤