Tutorial:制作附加包/方块:修订间差异

来自Minecraft基岩版开发Wiki
添加的内容 删除的内容
标签移动版编辑 移动版网页编辑 高级移动版编辑
无编辑摘要
标签可视化编辑 移动版编辑 移动版网页编辑 高级移动版编辑
第1行: 第1行:
{{about|自定义方块教程|方块开发信息|方块}}
{{about|自定义方块教程|方块开发信息|方块}}


本教程版本为基岩版1.16及以上版本。在阅读本教程前,请先确保自身已有一定的行为包及资源包基础。如果还未掌握,请先浏览[[Manual:附加包教程/开始之前|教程/开始之前]],[[Manual:附加包教程/包的构建|教程/包的构建]],[[Manual:附加包教程/运行、调试与导出|教程/运行、调试与导出]]和[[Manual:附加包教程/本地化|教程/本地化]]页面后再来学习本教程。在浏览完本教程之后,你将学会如何创建一个全新的自定义方块。
本教程版本为基岩版1.16及以上版本。在阅读本教程前,请先确保自身已有一定的[[附加]]基础。如果还未掌握,请先浏览[[Manual:附加包教程/开始之前|教程/开始之前]],[[Manual:附加包教程/包的构建|教程/包的构建]],[[Manual:附加包教程/运行、调试与导出|教程/运行、调试与导出]]和[[Manual:附加包教程/本地化|教程/本地化]]页面后再来学习本教程。在浏览完本教程之后,你将学会如何创建一个全新的自定义方块。


==概述==
==概述==

2021年4月8日 (四) 14:07的版本

本教程版本为基岩版1.16及以上版本。在阅读本教程前,请先确保自身已有一定的附加包基础。如果还未掌握,请先浏览教程/开始之前教程/包的构建教程/运行、调试与导出教程/本地化页面后再来学习本教程。在浏览完本教程之后,你将学会如何创建一个全新的自定义方块。

概述

自定义方块是在基岩版beta 1.12.0.2中的新增内容。[注 1]基岩版1.16.100.56及之后的部分版本更新中, Mojang 为自定义方块提供了大量的接口,这使得自定义方块的功能大大增加,不过现在仍有绝大多数的接口未被开放。

通过自定义方块,您可以在游戏中创造出属于您的全新方块,并通过添加属性、组件和事件等内容赋予它许多有趣的特性。

添加方块

您可在行为包中的 blocks 文件夹下新增自定义的方块配置文件。其数据结构如下:

{
  "format_version": "1.16.0",
  "minecraft:block": {
    "description": {
    }, //描述
    "components": {
    }, //组件
    "events": {
    }, //事件
    "permutations" [
    ] //置换内容
  }
}

如上,方块配置文件由描述、组件、事件与置换内容四部分构成。

描述

描述 (description) 对象储存了用于描述该方块的基础信息,其数据结构如下:

属性名称 数据类型 描述
identifier String 设置此方块的标识符。须包含命名空间但不得使用minecraft:作为命名空间。(除非所编辑的方块为原版方块)
is_experimental Boolean (可选)决定了该方块是否为实验性方块。默认值为 false 。若此属性值为 true ,则该方块需开启实验性玩法才可获得。
properties 设置此方块所具有的一个或多个属性。例如:"test:block_property": [ 0, 1, 2, 3 ],其中test:block_property为属性名称,数组中的参数为该方块此属性可能拥有的值(游戏默认该方块初始属性为所有属性数组中的第一个参数)。数组的参数类型可以为整数、小数、布尔值或字符串[注 2]
register_to_creative_menu Boolean 设置此方块是否出现在创造模式物品栏。(基岩版1.15.0至今由于不明原因导致此API失效,待修复)

组件

组件(components)对象决定了该放块的功能属性,您可选择并添加您需要的组件属性。

组件分为一般组件和触发器。一般组件用于定义该方块的属性,触发器用于在特定条件下使方块触发事件。

事件

事件(events)对象储存了该方块可能用到的所有事件。

将事件并列起来可以使一个触发器触发多个事件:

  •  <test_event>:事件名称
    •  sequence:序列
      •  <index>:序列的元素
        •  trigger:触发器[注 3]
          •  event:事件名称
          •  target:事件执行的目标,默认为self

示例:

"events": {
  "test_event": {
    "sequence": [
      {
        "trigger": {
          "event": "event_1"
        }
      },
      {
        "trigger": {
          "event": "event_2"
        }
      }
    ]
  },
  "event_1": {
    "set_block_property": {
      "minecraft:direction": 1
    }
  },
  "event_2": {
    "run_command": {
      "command": "say Hello world"
    }
  }
}

置换

置换(permutations)数组储存了该方块在对应条件下会置换或新增的对应所有组件。一般使用 query.block_property[注 4] 来获取方块属性并以此作为置换条件。

示例

{
  "format_version": "1.16.0",
  "minecraft:block": {
    "description": {
      "identifier": "test:on_interact_change_state_block",
      "properties": {
        "minecraft:direction": {
        }
      }
    },
    "components": {
      "minecraft:loot": "loot_tables/blocks/test.json",
      "minecraft:destroy_time": 0.55,
      "minecraft:explosion_resistance": 2.5,
      "minecraft:friction": 0.1,
      "minecraft:map_color": "#FFFFFF",
      "minecraft:block_light_absorption": 15,
      "minecraft:block_light_emission": 15,
      "minecraft:on_interact": {
        "event": "test_event"
      }
    },
    "events": {
      "test_event": {
        "set_block_property": {
          "minecraft:direction": "1"
        }
      }
    },
    "permutations" [
      "condition": "query.block_property('minecraft:direction') == 1",
      "components": {
        "minecraft:geometry": "geometry.test"
      }
    ]
  }
}
  1. 基岩版1.15后,方块不能被注册到创造模式物品栏且旧版本的自定义方块无法在新版本中使用。
  2. 示例:
    {
      "minecraft:block": {
        "description": {
          "identifier": "example:test_block",
          "properties": {
            "example:integer_property": [0, 1, 2, 3],
            "example:string_property": ["small", "middle", "large"],
            "example:boolean_property": [true, false]
          }
        }
      }
    }
    
  3. 已知问题:目前无法在对象中添加事件的触发条件(condition)。
  4. query.block_property 是MoLang中的一项查询功能。

定义资源

block.json

定义纹理

动态纹理

恭喜!您现在了解了自定义方块的基本框架

接下来,您可以尝试制作属于您的第一个自定义方块了。

点击此处进入自定义第一个方块的教程。

你知道吗

  • 自定义方块的Json文件名称并不要求必须与物品ID相同。