782 发表于 2022-5-18 06:33:39

附加包教程第十三期——物品:盔甲基础

本帖最后由 782 于 2022-5-20 20:44 编辑


物品(六)
盔甲基础
一、前言
制作自定义盔甲非常容易,但你需要做一些其他事情,因为有几个文件需要添加,并且可能涉及一点纹理。
本期教程假定读者已经基本了解第八期(物品:基础)和第十期(物品:武器基础)的内容。
提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
static/image/hrline/line4.png
二、行为包文件示例(以胸甲为例)
路径:行为包/items/盔甲名称.json
{
    "format_version": "1.16.100",
    "minecraft:item": {
      "description": {
            //唯一标识符
            "identifier": "demo:my_chestplate",
            //让它在“盔甲”分类内
            "category": "equipment"
      },
      //定义物品组件部分
      "components": {
            //把它放在“胸甲”物品组内
            "minecraft:creative_category": {
                "parent": "itemGroup.name.chestplate"
            },
            //在物品栏中的图标
            "minecraft:icon": {
                "texture": "my_chestplate"
            },
            //取一个名字
            "minecraft:display_name": {
                "value": "我的自定义胸甲"
            },
            //设定最大堆叠数量(此处不堆叠)
            "minecraft:max_stack_size": 1,
            //让它可以附魔胸甲类型的魔咒
            "minecraft:enchantable": {
                "value": 10,
                "slot": "armor_torso"
            },
            //指定盔甲的护甲值
            "minecraft:armor": {
                "protection": 5
            },
            //让盔甲变得可修复
            "minecraft:repairable": {
                "repair_items": [{
                  "items": ["minecraft:stick"],
                  "repair_amount": "context.other->query.remaining_durability + 0.05 * context.other->query.max_durability"
                  //一个复杂的Molang表达式,复制就行了
                }]
            },
            //定义物品可以穿(放)在那些槽位
            "minecraft:wearable": {
                "dispensable": true,
                "slot": "slot.armor.chest"
            },
            //物品耐久度
            "minecraft:durability": {
                "max_durability": 200
            },
            //击退抗性
            "minecraft:knockback_resistance": {
                "protection": 0.4
            }
      }
    }
}
这里面有一些之前没有了解到的组件:
“minecraft:armor”指定这个物品是一个盔甲。它里面可以包含两个组件:

[*]“protection”定义盔甲给予的盔甲值,填写整数。
[*]“texture_type”(具体功能未知)定义适用于盔甲的纹理类型,填写字符串。
可以是以下名称的任意一个:
none:无
leather:皮革
chain:锁链
iron:铁
diamond:钻石
gold:金
elytra:鞘翅
turtle:海龟壳
netherite:下界合金

“minecraft:wearable”定义物品可以放在那些槽位,包含两个内容:

[*]“dispensable”定义物品是否可以通过发射器发射至槽位,填写布尔值。
[*]“slot”定义物品可以放在那些槽位,填写字符串。
可以是以下名称中的任意一个:
slot.weapon.mainhand:主手
slot.weapon.offhand:副手
slot.armor.head:头盔
slot.armor.chest:胸甲
slot.armor.legs:护腿
slot.armor.feet:靴子
slot.saddle:马鞍
slot.armor:马铠
slot.hotbar:快捷栏
slot.inventory:物品栏
slot.enderchest:末影箱
slot.chest:生物(驴、骡等)驮的箱子
slot.equippable:马鞍、马铠或地毯(羊驼)

“minecraft:knockback_resistance”里面的“protection”定义了盔甲的击退抗性,填写浮点数(小数)。
最大值为1.0!
static/image/hrline/line3.png
三、物品图标示例(以胸甲为例)
{
    "resource_pack_name": "demo",
    "texture_name": "atlas.items",
    "texture_data": {
      "my_chestplate": {
            "textures": "textures/items/my_chestplate"
      }
    }
}
如果不想自己做纹理,本期教程底部有原版所有盔甲(包括头盔、胸甲、护腿和靴子)的物品栏纹理及自定义的部分物品栏纹理。
static/image/hrline/line9.png
四、attachables文件(以胸甲为例)
如果将上面的物品加入到游戏,它可以正常显示,也能正常穿戴,但穿戴后在玩家身上不会显示纹理。
这个时候,我们就需要一个 资源包/attachables 文件夹来添加附加纹理。
路径:资源包/attachables/物品名称.json
示例:
{
    "format_version": "1.8.0",
    "minecraft:attachable": {
      "description": {
            "identifier": "demo:my_chestplate",
            //这两个是默认的,必须添加
            "materials": {
                "default": "armor",
                "enchanted": "armor_enchanted"
            },
            "textures": {
                //这是我们盔甲纹理(用于模型)的路径
                "default": "textures/models/armor/my_armor_5_1",
                //这个文件是附魔纹理,在我们的资源包中不存在
                //但不添加的话可能会崩溃,把它放在那就行了
                "enchanted": "textures/misc/enchanted_item_glint"
            },
            //这个指定了模型
            "geometry": {
                "default": "geometry.player.armor.chestplate"
            },
            //隐藏玩家身体的外层纹理
            "scripts": {
                "parent_setup": "variable.chest_layer_visible = 0.0;"
            },
            //指定了物品将使用什么渲染控制器
            "render_controllers": ["controller.render.armor"]
      }
    }
}
重点内容:
“description”中的“identifier”必须要与盔甲的标识符相同,以将其关联在一起。

“geometry”在本期会用到的是:
geometry.player.armor.helmet:玩家头盔模型
geometry.player.armor.chestplate:玩家胸甲模型
geometry.player.armor.leggings:玩家护腿模型
geometry.player.armor.boots:玩家靴子模型
拓展:
geometry.humanoid.armor.helmet:生物头盔纹理
geometry.humanoid.armor.chestplate:生物胸甲纹理
geometry.humanoid.armor.leggings:生物护腿模型
geometry.humanoid.armor.boots:生物靴子模型

此时,我们需要确保为我们的模型创建一个纹理,这些纹理存在于在 资源包/textures/models/armor中。
我们实际上需要2个纹理,一种是主盔甲,包含胸甲、头盔和靴子,另一种是护腿,单独佩戴时通常会覆盖一些靴子区域。
如果不想自己做纹理,本期教程底部有原版所有盔甲(包括头盔、胸甲、护腿和靴子)的模型纹理及自定义的部分模型纹理。
static/image/hrline/line8.png
五、效果展示

本教程仅以盔甲为例,但在本期教程底部可以找到更多盔甲的范例
static/image/hrline/2.gif
六、本期文件下载
盔甲纹理合集:
盔甲文件示例合集:
static/image/hrline/5.gif
预告:下一期会教大家如何用多套盔甲执行事件
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航
上一期下一期

782 发表于 2022-5-19 20:59:28

@lpyqzMinecraft
@泥黑木大跌
你们怎么不更了?

lpyqzMinecraft 发表于 2022-5-19 21:02:07

782 发表于 2022-5-19 20:59
@lpyqzMinecraft
@泥黑木大跌
你们怎么不更了?

真的,你们都的太厉害了。一个比一个能卷

782 发表于 2022-5-19 21:05:42

lpyqzMinecraft 发表于 2022-5-19 21:02
真的,你们都的太厉害了。一个比一个能卷



我快的时候一天两更
满的时候一周一更

lpyqzMinecraft 发表于 2022-5-19 21:06:37

782 发表于 2022-5-19 21:05
我快的时候一天两更
满的时候一周一更

主要是懒的板牌。

一只呆明球 发表于 2022-10-2 16:01:57

不知道难不难……

粤湛猫? 发表于 2023-1-19 19:30:25

666666666666666

呼啸泰坦 发表于 2023-9-23 08:43:46

782 发表于 2022-5-19 20:59
@lpyqzMinecraft
@泥黑木大跌
你们怎么不更了?

忙不过来了

心555 发表于 2023-10-3 11:43:27

66666666666

是灰 发表于 2023-12-2 17:43:00

:::::::::::::
页: [1]
查看完整版本: 附加包教程第十三期——物品:盔甲基础