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

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


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

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



当然,我们不希望耐久度条出现,我们也不希望耐久度改变除非这个物品用起来像个工具。幸运的是,有一个标签可以做到!
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);
复制代码

这将给我们这个物品:


很好,没有耐久度条了!但是,如果要制作一个自定义物品,我们可能不想要所有的官方标签。幸运的是这里有更多的 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);
复制代码



现在我们有一个设置了不会损耗的物品,并且它没有什么奇怪的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 文件夹,然后读取它并查看你的自定义物品!


如果有疑问,随时可以去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/
欢迎各位支持作者,以编写和翻译更多优秀教程。
[afd]mouse[/afd]



[groupid=1181]Unknown Domain[/groupid]