Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 6553|回复: 35

[插件开发教程] [翻译][UD]自定义物品模型[1.9+]

[复制链接]
耗子 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10120
钻石
性别
保密
注册时间
2012-2-18
查看详细资料
发表于 2017-5-29 00:08:18 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 耗子 于 2018-8-3 11:21 编辑

自定义物品模型[1.9+]
前言
1.9中最令人兴奋的特性之一是,物品可以由损害值(耐久度)来决定显示的模型。这样你可以显示出物品的磨损度,但是我们也可以利用这个特性给Minecraft添加1000个物品!
例如,这里展示的一切都是一个木锄,但具有不同的耐久度:
c2ca89e9861a861d29af16880e35e677160ea979.png

代码
这个部分比较容易。选择一个具有耐久度的物品(例如工具),然后创建一个这个物品的 ItemStack 并设置耐久度,让我们以耐久度为1的木锄来举个例子:
  1. ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
复制代码

这将给你一个有些轻微损耗的木锄,例如:
6efcb96a63eab34f8e54f8917dc00ad144d83c88.png


当然,我们不希望耐久度条出现,我们也不希望耐久度改变除非这个物品用起来像个工具。幸运的是,有一个标签可以做到!
https://hub.spigotmc.org/javadoc ... html#setUnbreakable(boolean)
  1. ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
  2. ItemMeta meta = customItem.getItemMeta();
  3. meta.setUnbreakable(true); // On versions 1.11 and above
  4. customItem.setItemMeta(meta);
复制代码

这将给我们这个物品:
4d86eb5880900d6ed945f85fe38f560458063b1c.png

很好,没有耐久度条了!但是,如果要制作一个自定义物品,我们可能不想要所有的官方标签。幸运的是这里有更多的 API!你可以为物品添加 Flag 来隐藏 Lore,例如:
  1.         ItemStack customItem = new ItemStack(Material.WOOD_HOE, 1, (short)1);
  2.         ItemMeta meta = customItem.getItemMeta();
  3.         meta.spigot().setUnbreakable(true);
  4.         meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE);
  5.         customItem.setItemMeta(meta);
复制代码

e0a0ad8256c852dfc87b8ed1f6a6a9780bedb4eb.png

现在我们有一个设置了不会损耗的物品,并且它没有什么奇怪的Lore。

这些是关于代码方面的编写!你可能想设置一个显示名和Lore,但是这都是你自己的事情了。

这个物品即将成为你梦想的自定义物品了....它只需要一个新的皮肤。

资源包
现在事情变得有些困难了。如果你没有任何制作资源包的经验,那么很容易。创建一个新的文件夹,并在里面创建一个名为 pack.mcmeta 文件,文件内容看起来像这样:
  1. {
  2.   "pack": {
  3.     "pack_format": 3,
  4.     "description": "Official elMakers Magic Resource Pack"
  5.   }
  6. }
复制代码

注意:在 Minecraft 1.10 及其以下版本使用 pack_format: 2 代替。

添加子文件夹并前往到"assets/minecraft/models/item"目录下。

在 item 文件夹中,创建一个叫 wooden_hoe.json 的新文件。这将作为你的所有自定义物品的"容器" 。它告诉客户端在某些耐久度时木锄使用的模型。

这个文件看起来像这样:
  1. {
  2.   "parent": "item/handheld",
  3.   "textures": {
  4.     "layer0": "items/wood_hoe"
  5.   },
  6.   "overrides": [
  7.     {"predicate": {"damaged": 0, "damage": 0.01666666666667}, "model": "item/my_cool_custom_item"}
  8.   ]
  9. }
复制代码

好,让我们损耗它。

我们覆盖了木锄,但是只是在基础版本上扩展。因此 "parent" 和 "textures" 告诉客户端使用默认木锄。这意味着木锄在损耗为0的情况下看起来是正常的。

现在来看向新东西 - "overrides" 块允许您通过物品的某些属性来指定不同的模型。这些属性被称为 "predicates"。为了我们的目标,我们将重点放在 "damage" 上。

这将基于损害值改变模型,这是一个范围从0到1的百分比。因此值 "0.016666" 来自于比例 "1/60" - 因为我想使用这个模型在损害值(耐久度)为1的木锄上,并且木锄的最大耐久度为60。

查看MC Wiki中的所有物品的耐久度:
http://minecraft.gamepedia.com/Hoe

你可以添加尽可能多的 predicate,直到物品的最大耐久度 - 只要保证每一个都是 "x/60"。

你还可以使用此工具自动生成给定的特殊类型的工具,减少计算量: http://accidentalgames.com/media/durabilityModels.php

保留原物品
如果你仍然想使用官方的物品,这是可能的!

在你的模型文件中添加一条条目,最终它看起来是这样的:
  1. {
  2.   "parent": "item/handheld",
  3.   "textures": {
  4.     "layer0": "items/wood_hoe"
  5.   },
  6.   "overrides": [
  7.     {"predicate": {"damaged": 0, "damage": 0.01666666666667}, "model": "item/my_cool_custom_item"},
  8.     {"predicate": {"damaged": 1, "damage": 0}, "model": "item/wooden_hoe"}
  9.   ]
  10. }
复制代码

这将使已损耗的物品继续使用原来的模型。注意如果你使用上面链接的JSON生成器,你需要做最终的修改 - 它需要原来的模型名称,所以 wooden_hoe 代替 wood_hoe。

最后,把你的自定义模型文件放在资源包中的相同的item文件夹,在这种情况下它应该在
"my_cool_custom_item.json"。(创建自定义物品模型不在本教程的范畴中,我认为有一些很好用的工具,并且也可以像 Cubik 一样使用)

Zip格式压缩你的资源包根目录,把它添加到 <minecraft>/resourcepacks 文件夹,然后读取它并查看你的自定义物品!
bc72f045a5a55d73334ef403fa5e23b815427295.png

如果有疑问,随时可以去github查看我的资源包结构:

https://github.com/elBukkit/Magi ... source-pack/default

后记
如果你完成了以上事项,有一些事情你需要考虑。
  • 高等级工具能为你提供更多的物品模型。一个钻石锄最大耐久为1,562!
  • 当需要它的时候,你需要一个地方来传输你的资源包!我觉得可以用Dropbox,获得一个直接链接并将它添加到你的server.properties文件。
  • 如果随着时间的推移你计划更新你的资源包,记得添加资源包的SHA1到你的server.properties为好,或者每次都重命名你的资源包,否则客户端不会重新下载它。
  • 另一个很酷的1.9特性 - 物品可以作为帽子并且在游戏中显示出来!你需要在模型Json文件的"display"块添加一个"head"来使它工作,如果不清楚可以看这里:https://github.com/elBukkit/Magi ... magic_hat.json#L587


我希望这能帮助到你!如果你在本教程发现任何问题,请告诉我 - 感谢阅读!  

原文地址:https://www.spigotmc.org/wiki/custom-item-models-in-1-9-and-up/
欢迎各位支持作者,以编写和翻译更多优秀教程。



来自群组: Unknown Domain

评分

参与人数 9人气 +14 金粒 +100 收起 理由
602723113 + 2 MCBBS有你更精彩~
hahahahah + 2 MCBBS有你更精彩~
FHC红石 + 3 + 25 编程开发板块?
1582952890 + 2 MCBBS有你更精彩~
sbsg5s55 + 1 + 5 耗子真棒
ablu2g + 1 + 20 很棒的作品!
1192085905 + 1 + 20 MCBBS有你更精彩~
小星啊啊啊 + 1 + 15 MCBBS有你更精彩~
奥妙 + 1 + 15 MCBBS有你更精彩~

查看全部评分

奥妙 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
615
钻石
性别
保密
注册时间
2014-2-27
查看详细资料
发表于 2017-5-29 19:03:12 | 显示全部楼层
像我这种英语渣。这翻译对我很有用。
回复

使用道具 举报

小星啊啊啊 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
6596
钻石
性别
保密
注册时间
2013-6-26
查看详细资料
发表于 2017-5-29 19:19:33 | 显示全部楼层
很有用~感谢耗子翻译
回复

使用道具 举报

FHC红石 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
49719
钻石
性别
保密
注册时间
2014-6-7
查看详细资料
发表于 2017-7-21 21:44:28 | 显示全部楼层
为什么这东西……在编程版= =好像也没毛病
回复

使用道具 举报

初音☆未来 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1560
钻石
性别
保密
注册时间
2015-7-9
查看详细资料
发表于 2017-7-21 22:32:00 | 显示全部楼层
如果按照那样的话,耐久度一样的木锄,模型也就一样喽?
回复

使用道具 举报

麦二哈 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
384
钻石
性别
保密
注册时间
2017-2-18
查看详细资料
发表于 2017-7-26 15:01:29 | 显示全部楼层
楼主啊 1.8能不能做到
回复

使用道具 举报

麦二哈 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
384
钻石
性别
保密
注册时间
2017-2-18
查看详细资料
发表于 2017-7-26 15:02:38 | 显示全部楼层
1.8能不能利用这个特性啊
回复

使用道具 举报

耗子 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
10120
钻石
性别
保密
注册时间
2012-2-18
查看详细资料
 楼主| 发表于 2017-7-26 15:16:18 | 显示全部楼层
麦二哈 发表于 2017-7-26 15:02
1.8能不能利用这个特性啊

不能……………………
回复

使用道具 举报

fuyishi99 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
41
钻石
性别
保密
注册时间
2016-7-17
查看详细资料
发表于 2017-7-26 21:55:29 来自手机 | 显示全部楼层
感谢翻译
回复

使用道具 举报

lvsihan 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1338
钻石
性别
保密
注册时间
2012-7-12
查看详细资料
发表于 2017-8-6 22:23:15 | 显示全部楼层
我想问下 怎么获取这个耐久值的物品...在使用/give player wooden_hoe 1 0.01666666667 的时候 告诉我0.01xxxxxxxxxxxxx7是个无效数字...
回复

使用道具 举报

Rain_Effect 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3273
钻石
性别
保密
注册时间
2015-7-28
查看详细资料
发表于 2017-8-7 08:35:51 | 显示全部楼层
lvsihan 发表于 2017-8-6 22:23
我想问下 怎么获取这个耐久值的物品...在使用/give player wooden_hoe 1 0.01666666667 的时候 ...

唔。。。我来解释一下吧,这个0.01666666667是以木锄原本耐久为100%(即1)计算的百分比值,而木锄在游戏内的耐久上限为60(游戏内显示为59),则计算方式为:
  1. 100% ÷ 60(耐久上限值) × 1(耐久损耗度) → 0.01666666667
复制代码

所以如果要获取物品的时候,请先计算他的整数的耐久损耗值后再代入获取:
  1. 0.01666666667 × 60(耐久上限值) = 1.0000000002 ≈ 1(取整)
复制代码

方式很简单,只是苦了不知道该怎么解释的我用了复杂的方式解释给你听。。。

评分

参与人数 1人气 +2 收起 理由
lvsihan + 2 感谢

查看全部评分

回复

使用道具 举报

lvsihan 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1338
钻石
性别
保密
注册时间
2012-7-12
查看详细资料
发表于 2017-8-7 09:16:34 | 显示全部楼层
Rain_Effect 发表于 2017-8-7 08:35
唔。。。我来解释一下吧,这个0.01666666667是以木锄原本耐久为100%(即1)计算的百分比值,而木锄在游戏内 ...

...这样 就是说 他的耐久度应该是58/59?
回复

使用道具 举报

Rain_Effect 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3273
钻石
性别
保密
注册时间
2015-7-28
查看详细资料
发表于 2017-8-7 15:35:54 | 显示全部楼层
本帖最后由 Rain_Effect 于 2017-8-7 15:37 编辑
lvsihan 发表于 2017-8-7 09:16
...这样 就是说 他的耐久度应该是58/59?

没错,目前0.01666666667值的耐久度是为58/59的木锄,也就是附加值为1的木锄
在MC中,他的耐久计算方式是反向计算的:
附加值为0,则耐久为满;附加值为N,耐久度为上限值-N。
相对你也可以把附加值看作损耗值来计算。
以及之前说到的计算公式也可以换为这样:
附加值(损耗值)
耐久上限值
=
1
60
=0.0166...
这种算法应该会直观很多吧?

评分

参与人数 1人气 +2 金粒 +20 收起 理由
lvsihan + 2 + 20 神乎其技,不服不行!

查看全部评分

回复

使用道具 举报

lvsihan 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1338
钻石
性别
保密
注册时间
2012-7-12
查看详细资料
发表于 2017-8-7 16:05:42 | 显示全部楼层
Rain_Effect 发表于 2017-8-7 15:35
没错,目前0.01666666667值的耐久度是为58/59的木锄,也就是附加值为1的木锄
在MC中,他的耐久计算方式是 ...

谢谢大佬.. 么么哒
回复

使用道具 举报

Mgazul 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2509
钻石
性别
保密
注册时间
2017-1-14
查看详细资料
发表于 2017-9-29 06:10:24 | 显示全部楼层
my_cool_custom_item.json 是什么文件  试了一晚 所有的材质都是跟换后的  原版的材质显示不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-8-21 09:00 , Processed in 0.052938 second(s), Total 22, Slave 21 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表