手册:制作附加包/方块

From Minecraft基岩版开发Wiki
< Manual:制作附加包
Revision as of 09:58, 11 September 2021 by LPaicen (talk | contribs) (LPaicen移动页面Manual:方块Manual:制作附加包/方块:统一教程目录)
方块
系列教程
所属系列
难度
中级
前置知识
适用版本
国际版
实践设备
常用
Windows 10MacOS.svgAndroid
推荐
Windows 10
建议软件
Visual Studio Code icon.svg
相关阅读

本教程默认读者已掌握附加包的基本构架。教程为自定义方块的基础教程,关于自定义方块的更多内容请查看进阶教程页面。

概述

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

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

添加方块

添加自定义方块首先需要了解一下自定义方块行为部分的基本结构。

自定义方块配置文件存储在行为包中的 blocks文件夹下,其数据结构如下:

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

如上,方块配置文件由描述、组件、事件与置换四部分内容构成。下面对上述四种基本内容进行了简要阐述:

描述

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

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

组件

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

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

事件

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

通过在一个事件下直接添加多个事件或使用序列间接添加多个事件可以使一个触发器同时触发多个事件:

示例:

"events": {
  "test_event": { //事件名称
    "set_block_property": { //第一个事件
      "minecraft:direction": 1
    },
    "run_command": { //第二个事件
      "command": "say Hello world"
    }
  }
}

置换

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

示例

现在仿照下面的示例,通过创建一个方块的JSON行为文件来向游戏中添加一个简单的自定义方块:

{
  "format_version": "1.16.0",
  "minecraft:block": {
    "description": {
      "identifier": "example:test_block"
    },
    "components": {
      "minecraft:destroy_time": 1.0,
      "minecraft:explosion_resistance": 2.5,
      "minecraft:friction": 0.6,
      "minecraft:map_color": "#FFFFFF",
      "minecraft:block_light_absorption": 0,
      "minecraft:block_light_emission": 0
  }
}

定义资源

创建完自定义方块后,还需要对其增添纹理、音效等内容来改变其外观表现。首先需要对添加的纹理进行定义。

定义纹理

准备好两张PNG格式的图片,这里以自定义类似原版原木的方块作为示例:

Tutorial Block Texture
custom_log_end.png —— “原木”顶部和底部的图片
Tutorial Block Texture
custom_log_side.png —— “原木”侧面的图片

将这两张图片分别命名并放到资源包的<RP>/textures/blocks/路径下,这里分别命名为“custom_log_end.png”和“custom_log_side.png”。

现在准备好了图片,还需要对这两张图片进行定义。创建一个名为“terrain_texture.json”的文件到<RP>/textures/路径下,然后向其中添加如下内容:

{
  "resource_pack_name": "tutorial_pack", //这里填写任意名称
  "num_mip_levels": 4,
  "padding": 8,
  "texture_name": "atlas.terrain",
  "texture_data": {
    "log_end": { //定义后的名称
      "textures": "textures/blocks/custom_log_end"  //图片文件的路径
    },
    "log_side": {
      "textures": "textures/blocks/custom_log_side"
    }
  }
}

这样就将刚刚的custom_log_end.pngcustom_log_side.png两张图片分别定义为了“log_end”和“log_side”这两个名称。

每添加一张新的图片都需要在terrain_texture.json中定义一次,定义后的名称将用于在以后给各种文件或组件调用。

block.json

定义完了图片,现在需要将这两张图片应用到刚刚的自定义方块上,并且为它添加音效。

首先创建一个名为“block.json”的文件到资源包根目录下,然后向其中添加如下内容:

{
  "format_version": [ 1, 1, 0 ],
  "example:test_block": { //刚刚创建的自定义方块的标识符
    "sound" : "wood", //使用木头的音效
    "textures" : {
      "down" : "log_end", //刚刚定义的图片名称,下同
      "side" : "log_side", 
      "up" : "log_end"
    }
  }
}

现在保存文件并进入游戏,将附加包添加进一个世界并进入世界,输入如下命令: /give @s example:test_block 就可以获取到刚刚添加的自定义方块了。

File:Tutorial test custom block.png
自定义“原木”被成功添加到了游戏


  1. query.block_property 是MoLang中的一项查询功能。