# 自定义盔甲

# 概述

属于特殊的自定义物品,在支持自定义物品所有特性的基础上,还具有盔甲相关的功能。

# 注册

  1. 与自定义基础物品的注册1-6步相同

  2. custom_item_type为amor

  3. behavior/netease_items_beh的json中添加netease:armor组件,参数详见json组件

    {
         "format_version": "1.10",
         "minecraft:item": {
           "description": {
             "identifier": "customitems:modarmor1",
             "register_to_create_menu":true,
             "custom_item_type": "armor"
           },
           "components": {
             "netease:armor":{
               "defense": 10,
               "enchantment":4,
               "armor_slot":0
             }
           }
         }
       }
    
  4. 添加模型贴图到资源包的textures\models

    与微软内置盔甲贴图一致,自定义盔甲的贴图也需要设置贴图。

  5. resource/netease_item_res目录下创建新json中添加盔甲物品的贴图,参数详见自定义物品注册中贴图的设置解释

    {
      "format_version": "1.10",
      "minecraft:item": {
        "description": {
          "identifier": "customitems:modarmor1",
          "category": "Equipment"
        },
        "components": {
          "minecraft:icon": "customitems:modarmor1"
        }
      }
    }
    
  6. 在resource目录下创建attachables目录,创建新json描述文件,其中可配置的参数详见json组件

    {
      "format_version": "1.8.0",
      "minecraft:attachable": {
        "description": {
          "identifier": "customitems:modarmor1",
          "materials": {
            "default": "armor",
            "enchanted": "armor_enchanted"
          },
          "textures": {
            "default": "textures/models/diamond_1",
            "enchanted": "textures/misc/enchanted_item_glint"
          },
          "geometry": {
            "default": "geometry.customitems_modarmor1"
          },
          "scripts": {
            "parent_setup": "variable.chest_layer_visible = 0.0;"
          },
          "render_controllers": [ "controller.render.armor" ]
        }
      }
    }
    
  7. resource/models目录下增加entity目录,增加对应的geometry描述文件

    可配置的参数主要为根节点描述符geometry.modid_modarmor1,这个值与上一步中的geometry文件值对应。

    {
        "geometry.customitems_modarmor1": {
            "texturewidth": 64,
            "textureheight": 32,
            "visible_bounds_width": 2,
            "visible_bounds_height": 2,
            "visible_bounds_offset": [ 0, 1, 0 ],
            "bones": [
                {
                    "cubes": [
                        {
                            "origin": [ -4, 24, -4],
                            "uv": [ 0, 0 ],
                            "size": [ 8, 8, 8 ],
                            "inflate": 1.0
                        },
                        {
                            "origin": [ 4, 30, -1],
                            "size": [ 2, 2, 2],
                            "uv": [47, 0]
                        },
                        {
                            "origin": [-6, 30, -1],
                            "size": [2, 2, 2],
                            "uv": [47, 0]
                        },
                        {
                            "origin": [6, 31, -1],
                            "size": [2, 2, 2],
                            "uv": [42, 8]
                        },
                        {
                            "origin": [-8, 31, -1],
                            "size": [2, 2, 2],
                            "uv": [42, 8]
                        },
                        {
                            "origin": [8, 32, -1],
                            "size": [2, 4, 2],
                            "uv": [41, 0]
                        },
                        {
                            "origin": [-10, 32, -1],
                            "size": [2, 4, 2],
                            "uv": [41, 0]
                        },
                        {
                            "origin": [-8, 36, -1],
                            "size": [16, 2, 2],
                            "uv": [28, 28]
                        }
                    ],
                    "name": "head",
                    "parent": null,
                    "pivot": [
                        0.0,
                        24.0,
                        0.0
                    ]
                }
    
            ]
    
        }
    }
    

# JSON组件

# netease_item_beh文件

description

类型 默认值 解释
category str Equipment 与普通物品不同,盔甲的默认分类是Equipment

网易components

  • netease:armor(行为包)
类型 默认值 解释
defense int 0 盔甲的防御值
enchantment int 0 盔甲的附魔能力。该值的解释见官方wiki (opens new window)
armor_slot int 盔甲槽位,详见 ArmorSlotType
toughness int 0 盔甲韧性,范围0~20,详见盔甲机制 (opens new window)
knockback_resistance float 0 击退抗性,范围0~1,详见伤害-击退抗性 (opens new window)

# attachables文件

类型 描述
identifier str 盔甲的唯一描述符,与之前注册流程中的物品描述符保持一致
textures/default str 盔甲对应的贴图路径设置
geometry/default str 盔甲对应的模型描述文件路径设置
scripts/parent_setup str 盔甲对应部位影响玩家渲染的设置参数

parent_setup

微软内置的盔甲对应设置的值为以下几种:

variable.helmet_layer_visible 玩家是否显示

variable.chest_layer_visible 玩家上半身是否显示

variable.leg_layer_visible 玩家腿部是否显示

variable.boot_layer_visible 玩家脚部是否显示

一般而言,当设置对应的部位的盔甲,需要设置在scripts/parent_setup 设置对应的变量值为0

geometry/default

需要设置成盔甲对应位置的geometry,例如geometry.humanoid.armor.boots

说明
geometry.humanoid.armor.boots 靴子
geometry.humanoid.armor.chestplate 护胸
geometry.humanoid.armor.helmet 头盔
geometry.humanoid.armor.leggings 脚部

# 附属功能

除了支持自定义物品的所有功能外,还支持盔甲的python事件及接口,包括OnNewArmorExchangeServerEvent事件及armorslot组件

# demo解释

CustomItemsMod中定义了一个自定义装备:

  • customitems:modarmor1

    头盔类型的自定义装备

# 自定义模型设置建议

  • 盔甲模型的基础参考文件为:data\resource_packs\vanilla\models目录下的mobs.json文件中的geometry.humanoid

  • 模型制作工具,推荐使用BlockBench,导出的模型JSON文件格式与要求的格式相近。

  • 使用BlockBench制作模型并导出为JSON文件后,按照我们提供的装备物品Demo的JSON样式进行调整; 需注意的是,请尽量使用JSON范例中key的顺序,避免出现比较奇怪的Bug。

  • 如果Cube和已有的模型或者Cube之间有重叠的面,重叠部分可能会无法显示或者闪烁;可通过调整每个Cube的inflate(可为负数)来避免这种情况。inflate的作用是让Cube向各个方向膨胀一定数值,同时不会影响贴图坐标。

  • 注意:对于溺尸,不能使用SetArmorNew接口装备自定义盔甲,该行为会造成游戏闪退。