添加了部分来自于BedrockWiki的文章!

This commit is contained in:
boybook
2025-03-19 22:17:04 +08:00
parent 41635cf9bb
commit c25ebf2767
558 changed files with 96136 additions and 24 deletions

View File

@@ -0,0 +1,540 @@
---
title: 方块组件
description: 方块组件用于改变方块在世界中的外观和功能。
category: 常规
nav_order: 2
mentions:
- SirLich
- solvedDev
- yanasakana
- SmokeyStack
- MedicalJewel105
- aexer0e
- Chikorita-Lover
- Luthorius
- TheDoctor15
- XxPoggyisLitxX
- TheItsNameless
- ThomasOrs
- Kaioga5
- QuazChick
---
# 方块组件 Components
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式版本 & 最低引擎版本 `1.20.30`
在创建自定义方块时使用最新格式版本可获取最新功能和改进。本wiki旨在提供关于自定义方块的最新信息当前目标格式版本为`1.20.30`
:::
:::danger <nbsp/>
每个组件在同一时间只能有一个实例生效。重复的组件将被最新的[permutation条件置换](/blocks/block-permutations)覆盖。
:::
需要事件触发组件?[点击此处查看!](/blocks/block-events#event-triggers)
## 应用组件
方块组件用于改变方块在世界中的外观和功能。它们被应用在`minecraft:block`或其[permutation条件置换](/blocks/block-permutations)的`components`子项中。
::: code-group
```json [BP/blocks/lamp.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:lamp",
"menu_category": {
"category": "items"
}
},
"components": {
"minecraft:light_dampening": 0,
"minecraft:light_emission": 15,
"minecraft:map_color": [210, 200, 190],
"minecraft:geometry": "geometry.lamp",
"minecraft:material_instances": {
"*": {
"texture": "lamp"
},
"shade": {
"texture": "lamp_shade"
}
}
}
}
}
```
:::
## 碰撞箱
设置方块实体/粒子的碰撞箱,单位为<abbr title="1/16方块单位">像素</abbr> - 必须包含在基础方块单位内16×16×16
- 原点从方块的水平中点和垂直底部开始计算,向东北方向延伸。
- 尺寸从原点开始计算,向东北方向延伸。
**也可定义为布尔值:**
- `false`时实体可穿过方块
- `true`时设置单位大小的立方体作为碰撞箱
**默认值:** `true`
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.50及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:collision_box": {
"origin": [-8, 0, -8],
"size": [16, 16, 16]
}
```
:::
::: code-group
```json [minecraft:block > components]
"minecraft:collision_box": false
```
:::
## 工作台
将方块变为工作台,交互时打开合成界面。
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.50及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:crafting_table": {
"table_name": "Wiki工作台", // 在合成菜单中显示的名称,可本地化
"crafting_tags": ["crafting_table", "wiki_workbench"] // 用于配方文件的标签
}
```
:::
## 可被爆炸破坏
设置方块对爆炸破坏的抗性。
**也可定义为布尔值:**
- `false`时不可被爆炸破坏
- `true`时爆炸抗性为`0`
**默认值:** `true`
::: code-group
```json [minecraft:block > components]
"minecraft:destructible_by_explosion": {
"explosion_resistance": 20
}
```
:::
::: code-group
```json [minecraft:block > components]
"minecraft:destructible_by_explosion": false // 不可被爆炸破坏
```
:::
## 可被挖掘破坏
设置挖掘破坏所需时间。
**也可定义为布尔值:**
- `false`时不可被挖掘破坏
- `true`时可被瞬间破坏
**默认值:** `true`
::: code-group
```json [minecraft:block > components]
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 0.5
}
```
:::
::: code-group
```json [minecraft:block > components]
"minecraft:destructible_by_mining": false // 不可被挖掘破坏
```
:::
## 显示名称
设置当鼠标悬停在物品栏和快捷栏中的方块时显示的文本对应的语言文件键名。
如果给定的字符串没有对应的翻译,将直接显示原始字符串。
**注意**在某些情况下Minecraft可能会回退使用`tile.<标识符>.name`。
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.60及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:display_name": "tile.example_block.red.name"
```
:::
::: code-group
```c [RP/texts/zh_CN.lang]
tile.example_block.red.name=红色示例方块
```
:::
## 可燃性
设置方块的可燃性参数。
**也可定义为布尔值:**
- `false`时方块不会着火或被火焰破坏
- `true`时将使用下方示例值
**默认值:** `false`
::: code-group
```json [minecraft:block > components]
"minecraft:flammable": {
"catch_chance_modifier": 5, // 影响方块在火源旁被点燃的几率
"destroy_chance_modifier": 20 // 影响方块在燃烧时被火焰破坏的几率
}
```
:::
::: code-group
```json [minecraft:block > components]
"minecraft:flammable": false // 默认值 - 方块不会自然引燃,但可被直接点燃
```
:::
## 摩擦力
设置方块表面摩擦力0.0至0.9的小数)。数值越小表面越滑。
**原版示例值:**
- 泥土:`0.4`
- 冰:`0.02`
**默认值:** `0.4`
::: code-group
```json [minecraft:block > components]
"minecraft:friction": 0.4
```
:::
## 几何模型
设置方块使用的模型。当与其他方块相交时,模型不会应用面剔除。
**自定义方块模型限制:**
- 模型尺寸限制为30×30×30<abbr title="1/16方块单位">像素</abbr>
- 每个轴上至少要有1像素位于基础16×16×16方块内
- 模型的位置绝对边界为原点各方向30像素。只要遵守第二条规则模型可放置在这些边界内的任意位置
**启用时:**
- 方块变为可呼吸
- 方块不再传导红石信号
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.40及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:geometry": "geometry.example_block" // 来自'RP/models/entity'或'RP/models/blocks'文件夹的几何模型标识符
```
:::
---
### 骨骼可见性
隐藏模型中骨骼的直接子立方体。
**Molang表达式需遵守[条件置换限制](/blocks/block-permutations#permutation-conditions)。**
_自格式版本1.20.10起支持`bone_visibility`中的Molang表达式。_
::: code-group
```json [minecraft:block > components]
"minecraft:geometry": {
"identifier": "geometry.example_block", // 来自'RP/models/entity'或'RP/models/blocks'文件夹的几何模型标识符
"bone_visibility": {
"wiki_bone": false, // 隐藏该骨骼中的立方体
"conditional_bone": "q.block_state('wiki:example_state') == 3", // 使用Molang表达式条件设置可见性
"another_bone": true // true为默认值无实际效果
}
}
```
:::
## 光照衰减
设置光线穿过方块时的衰减程度0-15整数 - 数值越大透光越少。
**原版示例值:**
- 泥土和染色玻璃:`15`
- 铁栏杆和玻璃板:`0`
**默认值:** `15`
::: code-group
```json [minecraft:block > components]
"minecraft:light_dampening": 7
```
:::
## 光照发射
设置方块发出的光照强度0-15整数
**原版示例值:**
- 蛙明灯:`15`
- 红石火把(点亮):`7`
**默认值:** `0`
::: code-group
```json [minecraft:block > components]
"minecraft:light_emission": 10
```
:::
## 战利品表
设置方块被破坏时掉落的战利品(无视`精准采集`附魔)。
**若省略则掉落方块本身。**
::: code-group
```json [minecraft:block > components]
"minecraft:loot": "loot_tables/blocks/custom_block.json"
```
:::
## 地图颜色
设置方块在地图上的显示颜色(十六进制字符串或[R, G, B]数组0-255
**若省略则地图不显示该方块。**
::: code-group
```json [minecraft:block > components]
"minecraft:map_color": "#ffffff"
```
:::
::: code-group
```json [minecraft:block > components]
"minecraft:map_color": [255, 255, 255]
```
:::
## 材质实例
配置方块的渲染参数,包括纹理和光照处理。
- 所有实例必须使用相同的渲染方法
- 与其他方块相交时,方块面会无条件变暗
材质实例可与`RP/blocks.json`条目结合使用,创建具有类不透明属性的方块。这主要用于在[自定义玻璃方块](/blocks/custom-glass-blocks)上启用面剔除。
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.40及以上。_
### 渲染方法
渲染方法本质上控制方块在世界中的显示方式,类似于实体的材质。以下是各类型的关键属性:
| 渲染方法 | _透明度_ | _半透明性_ | _背面剔除_ | 原版示例 |
| ---------------- | :------: | :--------: | :--------: | ------------------------ |
| opaque默认 | ❌ | ❌ | ✔️ | 泥土、石头、混凝土 |
| double_sided | ❌ | ❌ | ❌ | 无 - 用于不透明2D平面 |
| alpha_test | ✔️ | ❌ | ❌ | 藤蔓、铁轨、树苗 |
| blend | ✔️ | ✔️ | ✔️ | 玻璃、信标、蜂蜜块 |
- **_透明度_** - 完全透明区域
- **_半透明性_** - 半透明区域
- 半透明像素在UI渲染中显示为不透明
- **_背面剔除_** - 从背面观察时面不可见
- 没有背面剔除的渲染方法在远处会消失(基于迷雾/渲染距离)
- 在UI渲染中始终启用背面剔除
::: code-group
```json [minecraft:block > components]
"minecraft:material_instances": {
// '*' 为必需实例 - 方块的默认实例(也用于破坏粒子)
// 通配符遵循渲染控制器语法
// 内置实例名包括'up', 'down', 'north', 'east', 'south'和'west'
"*": {
"texture": "texture_name", // 在`RP/textures/terrain_textures.json`中定义的短名称
"render_method": "blend", // 上表中的渲染方法之一
"face_dimming": true, // 默认true是否根据方向调暗该材质的表面
"ambient_occlusion": true // 默认true是否根据周围方块生成阴影
}
}
```
:::
### 自定义实例名称
:::tip
可在Blockbench中通过右键立方体并打开`材质实例`来定义自定义材质实例名称。
:::
可在材质实例中定义自定义实例名称,可被内置实例名称引用,或在方块模型中引用。
::: code-group
```json [minecraft:block > components]
"minecraft:material_instances": {
"*": {
"texture": "texture_name",
"render_method": "blend" // 必须与其他实例匹配
},
// 自定义实例名称
"end": {
"texture": "texture_name_end",
"render_method": "blend" // 必须与其他实例匹配
},
"up": "end",
"down": "end",
// 模型中定义的实例名称:
"flower": {
"texture": "texture_name_flower",
"render_method": "blend" // 必须与其他实例匹配
}
}
```
:::
## 放置过滤器
配置方块可存在的条件。当条件不满足时,方块将无法放置;若已放置则会弹出。
**`block_filter`最多可包含64个条目。**
**若省略,方块可被放置并存在于任何表面。**
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.60及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:placement_filter": {
"conditions": [
{
"allowed_faces": ["up"], // 可包含'up', 'down', 'north', 'east', 'south', 'west'和'side'
"block_filter": [
// 测试标识符
"minecraft:dirt",
// 测试标签
{ "tags": "!q.any_tag('stone', 'wiki_tag')" }
]
}
]
}
```
:::
查看[此页面](/blocks/block-tags)获取原版标签及相关方块列表。
## 选择箱
设置方块的可选区域(点击框),单位为<abbr title="1/16方块单位">像素</abbr> - 必须包含在基础方块单位内16×16×16
- 原点从方块的水平中点和垂直底部开始计算,向东北方向延伸。
- 尺寸从原点开始计算,向东北方向延伸。
**也可定义为布尔值:**
- `false`时实体可穿过方块
- `true`时设置单位大小的立方体作为碰撞箱
**默认值:** `true`
_自实验性玩法`Holiday Creator Features`中发布适用于格式版本1.19.60及以上。_
::: code-group
```json [minecraft:block > components]
"minecraft:selection_box": {
"origin": [-8, 0, -8],
"size": [16, 16, 16]
}
```
:::
或:
::: code-group
```json [minecraft:block > components]
"minecraft:selection_box": false
```
:::
## 变换
允许对方块进行平移、缩放和旋转(包含视觉和功能变化)。
**变换后的模型不得超过[几何模型限制](#geometry)。**
:::tip
学习如何应用[可旋转方块](/blocks/rotatable-blocks),就像熔炉和生物头颅一样根据放置方向旋转!
:::
::: code-group
```json [minecraft:block > components]
"minecraft:transformation": {
"translation": [-5, 8, 0],
"rotation": [90, 180, 0],
"scale": [0.5, 1, 0.5],
}
```
:::
## 单位立方体(实验性功能) {#unit-cube}
:::warning 实验性功能
此组件需要启用`Holiday Creator Features`实验性玩法,未来可能会被移除/修改。
:::
将方块变为16×16×16立方体覆盖`minecraft:geometry`设置。
**启用时:**
- 方块变为不可呼吸
- 方块可传导红石信号
**如果方块的纹理/模型不需要根据条件置换改变,请在`RP/blocks.json`中定义纹理以避免使用此实验性组件。**
::: code-group
```json [minecraft:block > components]
"minecraft:unit_cube": {}
```
:::

View File

@@ -0,0 +1,623 @@
---
title: 方块事件与触发器
description: 方块事件允许你在满足特定条件时操控游戏世界。
category: 常规
nav_order: 8
tags:
- 实验性功能
mentions:
- SirLich
- solvedDev
- yanasakana
- MedicalJewel105
- aexer0e
- SmokeyStack
- TheDoctor15
- XxPoggyisLitxX
- TheItsNameless
- ThomasOrs
- QuazChick
- VactricaKing
- BlazeDrake
---
# 方块事件与触发器
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式与最低引擎版本 `1.20.30`
创建自定义方块时使用最新格式版本可获得新功能和改进。本wiki旨在分享关于自定义方块的最新信息当前目标格式版本为`1.20.30`
:::
:::warning 实验性功能
方块事件需要启用`假日创作者功能`实验性玩法。
:::
:::danger 警告
方块事件已被弃用,将在未来更新中移除。除非必要,否则不建议使用,因为在移除后你需要将所有功能迁移至脚本系统。
:::
## 定义事件
方块事件允许你在满足特定条件时操控游戏世界,事件定义在`minecraft:block``events`子项中。在事件内部,你可以通过配置[事件响应](#事件响应)来设定触发事件时执行的操作。
[事件触发器](#事件触发器)会在适当条件下运行事件,执行所有关联的事件响应。
::: code-group
```json [BP/blocks/loot_dropper.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:loot_dropper"
},
"components": {
"minecraft:on_step_on": {
"event": "wiki:drop_loot"
}
},
"events": {
"wiki:drop_loot": {
"spawn_loot": {
"table": "loot_tables/blocks/my_loot_table.json"
}
}
}
}
}
```
:::
_此示例在实体踏上方块时生成战利品_
## 序列响应
序列允许你多次运行相同响应,或在满足条件时触发特定操作。
所有事件响应都应包含在序列中。
::: code-group
```json [minecraft:block > events]
"wiki:my_sequence": {
"sequence": [
{
"set_block_state": {
"wiki:my_state": true
}
},
{
"condition": "q.block_state('wiki:my_state')", // 可选
"trigger": {
"event": "wiki:my_entity_event",
"target": "other"
}
}
]
}
```
:::
## 随机响应
随机执行事件响应。
::: code-group
```json [minecraft:block > events]
"wiki:random_action": {
"randomize": [
{
"weight": 1, // 1/4概率
"set_block_state": {
"wiki:my_state": true
}
},
{
"weight": 3, // 3/4概率
"trigger": {
"event": "wiki:my_entity_event",
"target": "other"
}
}
]
}
```
:::
## 事件响应
- [`add_mob_effect`](#添加生物效果)
- [`damage`](#造成伤害)
- [`decrement_stack`](#减少堆叠)
- [`die`](#摧毁)
- [`play_effect`](#播放特效)
- [`play_sound`](#播放音效)
- [`remove_mob_effect`](#移除生物效果)
- [`run_command`](#执行命令)
- [`set_block`](#设置方块)
- [`set_block_at_pos`](#在指定位置设置方块)
- [`set_block_state`](#设置方块状态)
- [`spawn_loot`](#生成战利品)
- [`swing`](#挥动)
- [`teleport`](#传送)
- [`transform_item`](#转换物品)
- [`trigger`](#触发事件)
### 添加生物效果
为指定目标添加生物效果。
::: code-group
```json [minecraft:block > events]
"wiki:effect_event": {
"add_mob_effect": {
"effect": "poison",
"target": "other",
"duration": 8,
"amplifier": 3
}
}
```
:::
### 造成伤害
对目标造成指定类型和数值的伤害。
::: code-group
```json [minecraft:block > events]
"wiki:damage_event": {
"damage": {
"type": "magic",
"target": "other",
"amount": 4
}
}
```
:::
### 减少堆叠
移除玩家当前手持物品堆叠中的一个物品。
::: code-group
```json [minecraft:block > events]
"wiki:remove_one": {
"decrement_stack": {
"ignore_game_mode": true // 可选 - 是否影响创造模式玩家默认为false
}
}
```
:::
### 摧毁
摧毁指定目标,若目标为`self`则方块直接消失且不生成战利品或效果。
::: code-group
```json [minecraft:block > events]
"wiki:destroy": {
"die": {
"target": "self"
}
}
```
:::
### 播放特效
在目标位置播放粒子特效。
支持的`effect`值未知。可通过[`run_command`](#执行命令)配合`playsound`命令实现类似效果。
::: code-group
```json [minecraft:block > events]
"wiki:particle_effect": {
"play_effect": {
"effect": "???",
"target": "self"
}
}
```
:::
### 播放音效
在目标位置播放音效。
支持`RP/sounds.json`中大多数原版独立音效事件ID但自定义音效条目不可用。
::: code-group
```json [minecraft:block > events]
"wiki:play_sound": {
"play_sound": {
"sound": "beacon.power",
"target": "self"
}
}
```
:::
### 移除生物效果
移除目标的指定生物效果。
::: code-group
```json [minecraft:block > events]
"wiki:remove_effect_event": {
"remove_mob_effect": {
"effect": "poison",
"target": "other"
}
}
```
:::
### 执行命令
对目标执行命令。
使用数组可执行多个命令。
::: code-group
```json [minecraft:block > events]
"wiki:execute_event": {
"run_command": {
"target": "self", // 可选 - 默认为'self'(目标为方块)
"command": "summon pig"
}
}
```
:::
或...
::: code-group
```json [minecraft:block > events]
"wiki:execute_event": {
"run_command": {
"target": "self", // 可选 - 默认为'self'(目标为方块)
"command": [
"summon pig",
"say 大家欢迎小猪!"
]
}
}
```
:::
### 设置方块
用指定方块替换当前方块。
::: code-group
```json [minecraft:block > events]
"wiki:place_block": {
"set_block": {
"block_type": "minecraft:grass"
}
}
```
:::
或...
::: code-group
```json [minecraft:block > events]
"wiki:place_block": {
"set_block": {
"block_type": {
"name": "minecraft:trapdoor",
"states": {
"direction": 2,
"open_bit": true
}
}
}
}
```
:::
### 在指定位置设置方块
在方块相对位置生成指定方块。
::: code-group
```json [minecraft:block > events]
"wiki:generate_stone_above": {
"set_block_at_pos": {
"block_type": "minecraft:stone",
"block_offset": [0, 1, 0]
}
}
```
:::
或...
::: code-group
```json [minecraft:block > events]
"wiki:generate_upper_door_above": {
"set_block_at_pos": {
"block_type": {
"name": "minecraft:wooden_door",
"states": {
"upper_block_bit": true
}
},
"block_offset": [0, 1, 0]
}
}
```
:::
### 设置方块状态
设置方块状态值可设置为Molang表达式字符串的返回值
:::warning
字符串值会被解析为Molang表达式。因此要设置字符串状态时必须用`'`包裹值(见示例)。
:::
::: code-group
```json [minecraft:block > events]
"wiki:change_state": {
"set_block_state": {
"wiki:boolean_state_example": false,
"wiki:integer_state_example": "q.block_state('wiki:integer_state_example') + 1",
"wiki:string_state_example": "'red'"
}
}
```
:::
### 生成战利品
生成战利品表内容。
::: code-group
```json [minecraft:block > events]
"wiki:drop_loot": {
"spawn_loot": {
"table": "loot_tables/blocks/my_loot_table.json"
}
}
```
:::
### 挥动
使关联实体执行挥动动作。
::: code-group
```json [minecraft:block > events]
"wiki:swing_arm": {
"swing": {}
}
```
:::
### 传送
将目标随机传送至目标点周围。
::: code-group
```json [minecraft:block > events]
"wiki:go_away": {
"teleport": {
"target": "other", // 被传送实体
"avoid_water": true, // 避免传入水中
"land_on_block": true, // 将目标放置在方块上
"destination": [0, 0, 0], // 目标原点
"max_range": [5, 6, 7] // 相对原点的最大偏移范围
}
}
```
:::
### 转换物品
替换目标的当前手持物品。
::: code-group
```json [minecraft:block > events]
"wiki:replace": {
"transform_item": {
"transform": "iron_sword"
}
}
```
:::
### 触发事件
触发指定目标的事件。
::: code-group
```json [minecraft:block > events]
"wiki:trigger_crack": {
"trigger": {
"event": "wiki:crack",
"target": "self"
}
}
```
:::
## 事件触发器
事件触发器通过[组件](/blocks/block-components)定义,可通过[permutations](/blocks/block-permutations)动态添加、修改或移除。
- [`minecraft:on_fall_on`](#跌落触发)
- [`minecraft:on_interact`](#交互触发)
- [`minecraft:on_placed`](#放置触发)
- [`minecraft:on_player_destroyed`](#玩家破坏触发)
- [`minecraft:on_player_placing`](#玩家放置时触发)
- [`minecraft:on_step_off`](#离开触发)
- [`minecraft:on_step_on`](#踏入触发)
- [`minecraft:queued_ticking`](#队列计时)
- [`minecraft:random_ticking`](#随机计时)
### 跌落触发
当实体跌落在方块上时触发事件。
**注意**:需要`minecraft:collision_box`组件的Y轴高度≥4。
::: code-group
```json [minecraft:block > components]
"minecraft:on_fall_on": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')", // 可选
"min_fall_distance": 5
}
```
:::
### 交互触发
当玩家与方块交互时触发事件。
::: code-group
```json [minecraft:block > components]
"minecraft:on_interact": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 放置触发
当方块被放置时触发事件。
::: code-group
```json [minecraft:block > components]
"minecraft:on_placed": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 玩家破坏触发
当玩家通过挖掘破坏方块时触发事件(创造模式不触发)。
::: code-group
```json [minecraft:block > components]
"minecraft:on_player_destroyed": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 玩家放置时触发
当玩家放置方块时触发事件。
::: code-group
```json [minecraft:block > components]
"minecraft:on_player_placing": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 离开触发
当实体离开方块时触发事件。
**注意**:需要`minecraft:collision_box`组件的Y轴高度≥4。
::: code-group
```json [minecraft:block > components]
"minecraft:on_step_off": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 踏入触发
当实体踏上方块时触发事件。
**注意**:需要`minecraft:collision_box`组件的Y轴高度≥4。
::: code-group
```json [minecraft:block > components]
"minecraft:on_step_on": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
```
:::
### 队列计时
在`interval_range`范围内随机间隔触发事件。
::: code-group
```json [minecraft:block > components]
"minecraft:queued_ticking": {
"looping": true,
"interval_range": [20, 20], // 两个游戏刻数值,随机决定延迟时间
"on_tick": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
}
```
:::
### 随机Tick
在每次随机刻触发事件(如作物随机生长机制)。
::: code-group
```json [minecraft:block > components]
"minecraft:random_ticking": {
"on_tick": {
"event": "wiki:example_event",
"target": "self", // 可选 - 默认为'self'(目标为方块)
"condition": "q.block_state('wiki:boolean_state_example')" // 可选
}
}
```
:::

View File

@@ -0,0 +1,83 @@
---
title: 方块变换(转体)
description: 方块变换数组提供了一种基于当前置换条件性应用组件的方法。
category: 常规
nav_order: 7
mentions:
- QuazChick
---
# 方块变换(转体)
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式要求 & 最低引擎版本 `1.20.30`
在学习方块变换前,您应当已熟练掌握[方块状态](/blocks/block-states)知识。
使用方块状态时,请确保资源包清单中的`min_engine_version``1.20.20`或更高版本。
:::
方块`permutations`数组提供了一种基于当前置换(状态值集合)条件性应用组件(包括事件触发器和标签)的方式。
`permutations`数组中的组件可以覆盖方块的基类组件以及其他组件列表中的组件。置换数组中最后出现的条目具有最高优先级。
## 定义置换
`permutations`数组是`minecraft:block`的直接子项由包含组件的对象组成。当条件判断为真值非false或0相关组件将被应用。
**置换条件必须遵守其[Molang限制条件](#置换条件限制)。**
_自实验性玩法`Holiday Creator Features`发布支持格式版本1.19.70及更高。_
::: code-group
```json [BP/blocks/custom_block.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_block",
"states": {
"wiki:integer_state_example": [2, 4, 6, 8],
"wiki:boolean_state_example": [false, true],
"wiki:string_state_example": ["red", "green", "blue"]
}
},
"components": {},
"permutations": [
{
"condition": "q.block_state('wiki:integer_state_example') == 2",
"components": {
"minecraft:friction": 0.1
}
},
{
"condition": "q.block_state('wiki:boolean_state_example')",
"components": {
"minecraft:friction": 0.8 // 覆盖之前的置换
}
},
{
"condition": "q.block_state('wiki:string_state_example') == 'red' && !q.block_state('wiki:boolean_state_example')",
"components": {
"minecraft:geometry": "geometry.pig"
}
}
]
}
}
```
:::
## 置换条件限制
当条件评估为真值非false或0关联的组件列表将被应用。
置换条件需以Molang表达式字符串形式编写并具有严格限制
- 条件判断完全基于方块的置换状态,因此只能使用`q.block_state`查询函数
- 这意味着条件判断不会产生副作用
- 禁止使用以下数学函数:`math.die_roll`、`math.die_roll_integer`、`math.random`、`math.random_integer`
- 不可进行变量赋值操作
保留英文术语如Component、Entity、Block等根据中文技术文档惯例处理专有名词

View File

@@ -0,0 +1,128 @@
---
title: 方块状态
description: 方块状态允许你的方块拥有多种变体,每种变体通过使用置换具备独特的功能和外观。
category: 常规
nav_order: 4
mentions:
- QuazChick
---
# 方块状态
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式要求 & 最低引擎版本 `1.20.30`
使用方块状态时,请确保资源包清单中的 `min_engine_version` 设置为 `1.20.20` 或更高。
:::
方块状态允许你的方块拥有多种变体,每种变体通过使用[置换](/blocks/block-permutations)具备独特的功能和外观。
## 定义状态
有效状态值可以定义为布尔值、整数或字符串数组,也可以通过对象定义为整数范围。`values` 数组中的第一个元素将作为默认值使用。
### 置换数量限制
**每个状态最多可定义 16 个有效值。所有可能的状态值组合([置换](/blocks/block-permutations))总数不应超过 65,536。**
计算方块置换总数时,需将所有状态的有效值数量相乘。例如下方示例的计算公式为 3 × 2 × 3 × 6说明该方块具有 108 种可能的置换组合。
_该功能需启用 `Holiday Creator Features` 实验性玩法(格式版本 1.19.70 及以上)。_
::: code-group
```json [BP/blocks/custom_block.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_block",
"states": {
"wiki:string_state_example": ["red", "green", "blue"],
"wiki:boolean_state_example": [false, true],
"wiki:integer_state_example": [1, 2, 3],
"wiki:integer_range_state_example": {
"values": { "min": 0, "max": 5 } // 等同于 [0, 1, 2, 3, 4, 5]
}
}
},
"components": { ... },
"permutations": [ ... ]
}
}
```
:::
## 获取状态值
以下列出在不同上下文中获取方块状态当前值的方法。
### Molang 查询函数
可通过 `block_state` 查询函数获取状态值。
```c
q.block_state('wiki:string_state_example') == 'blue'
```
### 命令参数
在 `execute` 和 `testforblock` 等命令中使用[方块状态参数](/commands/block-states)来检查状态值。
```c
execute if block ~~~ wiki:custom_block["wiki:string_state_example"="blue", "wiki:integer_state_example"=4] run kill
```
### 脚本API
:::warning 实验性功能
使用 [`BlockPermutation.getState()`](https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/blockpermutation#getstate) 方法需启用 `Beta APIs` 实验性玩法。
:::
通过 [`BlockPermutation.getState()`](https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/blockpermutation#getstate) 方法可获取不同状态的当前值。
```js
customBlock.permutation.getState("wiki:integer_state_example") === 3
```
## 设置状态值
### 命令参数
在 `setblock` 和 `fill` 等命令中使用[方块状态参数](/commands/block-states)来修改默认状态值。
```c
setblock ~~~ wiki:custom_block["wiki:string_state_example"="blue", "wiki:integer_state_example"=4]
```
### 脚本API
:::warning 实验性功能
使用 [`BlockPermutation.withState()`](https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/blockpermutation#withstate) 方法需启用 `Beta APIs` 实验性玩法。
:::
[`BlockPermutation.withState()`](https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/blockpermutation#withstate) 方法会返回修改了指定状态值的新置换对象。可通过 [`Block.setPermutation()`](https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/block#setpermutation) 方法应用此置换,如下所示:
```js
customBlock.setPermutation(
customBlock.permutation.withState("wiki:boolean_state_example", false)
);
```
### 事件响应
:::warning 实验性功能
方块事件需启用 `Holiday Creator Features` 实验性玩法。
:::
使用 [`set_block_state`](/blocks/block-events#set-block-state) 事件响应可以修改自定义方块状态的值。
::: code-group
```json [minecraft:block > events]
"wiki:change_state": {
"set_block_state": {
"wiki:boolean_state_example": false,
"wiki:string_state_example": "'red'"
}
}
```
:::

View File

@@ -0,0 +1,145 @@
---
title: 方块标签
category: 常规
nav_order: 3
mentions:
- SirLich
- yanasakana
- aexer0e
- SmokeyStack
- MedicalJewel105
- Luthorius
- Chikorita-Lover
- victorsigma
- TheItsNameless
- QuazChick
- Kaioga5
---
# 方块标签
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
方块标签可用于确保某个方块符合特定条件。
## 应用标签
方块标签的应用方式与物品标签相同 - 在方块的`components`组件中添加 - 如下所示:
::: code-group
```json [BP/blocks/tree_stump.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:tree_stump",
"menu_category": {
"category": "nature"
}
},
"components": {
"tag:wood": {},
"tag:my_lovely_tag": {},
"tag:wiki:very_useless": {}
}
}
}
```
:::
## 测试标签
可通过以下Molang查询函数检测标签
- `q.all_tags`
- `q.any_tag`
:::warning 实验性功能
以下查询函数需要启用实验性Molang功能。
:::
- `q.block_has_all_tags`
- `q.block_has_any_tag`
- `q.block_neighbor_has_all_tags`
- `q.block_neighbor_has_any_tag`
- `q.relative_block_has_all_tags`
- `q.relative_block_has_any_tag`
物品检测方块标签的示例:
::: code-group
```json [BP/items/custom_pickaxe.json]
{
"format_version": "1.20.30",
"minecraft:item": {
"description": {
"identifier": "wiki:custom_pickaxe",
"menu_category": {
"category": "equipment",
"group": "itemGroup.name.pickaxe"
}
},
"components": {
"minecraft:digger": {
"use_efficiency": true,
"destroy_speeds": [
{
"speed": 5,
"block": {
"tags": "q.any_tag('custom_ore', 'stone', 'metal')"
}
}
]
}
}
}
}
```
:::
## 方块标签列表
### 原版标签
原版标签可应用于自定义方块,部分原版方块内部已标记。此类标签不会赋予方块原版特性,仅用于通过标签查询时与原版方块保持相同检测结果。
| 标签 | 原版用途 |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| wood | 金合欢木门、金合欢木栅栏、金合欢木栅栏门、金合欢木板、金合欢木压力板、金合欢木告示牌、木桶、蜂巢、蜂箱、白桦木门、白桦木栅栏、白桦木栅栏门、白桦原木、白桦木板、白桦木压力板、白桦木告示牌、白桦木台阶、白桦木楼梯、深色橡木门、深色橡木栅栏、深色橡木栅栏门、深色橡木原木、深色橡木板、深色橡木压力板、深色橡木告示牌、深色橡木台阶、深色橡木楼梯、制箭台、丛林木门、丛林木栅栏、丛林木栅栏门、丛林原木、丛林木板、丛林压力板、丛林告示牌、丛林木台阶、丛林木楼梯、梯子、橡木门、橡木栅栏、橡木栅栏门、橡木原木、橡木板、橡木压力板、橡木告示牌、橡木台阶、橡木楼梯、橡木活板门、锻造台、云杉木门、云杉木栅栏、云杉木栅栏门、云杉原木、云杉木板、云杉木压力板、云杉木告示牌、云杉木台阶、云杉木楼梯、云杉木活板门 |
| pumpkin | 雕刻过的南瓜、南瓜灯、南瓜 |
| plant | 金合欢树苗、白桦树苗、深色橡树苗、丛林树苗、大型蕨、丁香、橡树苗、牡丹、玫瑰丛、云杉树苗、向日葵、高草丛 |
| stone | 安山岩、安山岩墙、砖台阶、砖墙、砖块、圆石、圆石台阶、圆石楼梯、圆石墙、闪长岩、闪长岩墙、滴水石块、末地石砖墙、花岗岩、花岗岩墙、苔石、苔石墙、下界砖墙、磨制安山岩、磨制闪长岩、磨制花岗岩、海晶石墙、石英台阶、红色下界砖墙、红砂岩墙、砂岩台阶、砂岩墙、平滑石台阶、石头、石砖墙、石砖台阶 |
| metal | 金块、铁块、炼药锅、铁栏杆 |
| diamond_pick_diggable | 粗金块、粗铁块、煤矿石、深层煤矿石、深层绿宝石矿石、深层金矿石、深层铁矿石、深层红石矿石、钻石矿石、绿宝石矿石、金矿石、铁矿石、青金石矿石、黑曜石、红石矿石 |
| gold_pick_diggable | (无内容) |
| iron_pick_diggable | 粗金块、粗铁块、煤矿石、深层煤矿石、深层绿宝石矿石、深层金矿石、深层铁矿石、深层红石矿石、钻石矿石、绿宝石矿石、金矿石、铁矿石、青金石矿石、红石矿石 |
| stone_pick_diggable | (无内容) |
| wood_pick_diggable | (无内容) |
| dirt | 耕地 |
| sand | 红沙、沙子 |
| gravel | 沙砾 |
| grass | 砂土、泥土、草径、草方块 |
| snow | 雪 |
| rail | 激活铁轨、探测铁轨、动力铁轨、铁轨 |
| water | 水 |
| mob_spawner | 刷怪笼 |
| lush_plants_replaceable | (无内容) |
| azalea_log_replaceable | (无内容) |
| not_feature_replaceable | 基岩、箱子、末地传送门框架、刷怪笼 |
| text_sign | 所有种类的告示牌 |
| minecraft:crop | 甜菜根、胡萝卜、马铃薯、小麦 |
| fertilize_area | 所有花卉(除高茎花卉和凋灵玫瑰外);绯红菌岩、诡异菌岩、草、苔藓块 |
### 原版方块标签
原版方块标签是专门为方块设计的标签,可以为标记的方块赋予某些原版特性。
| 标签 | 原版应用 | 描述 |
| -------- | ---------------- | ------------ |
| acacia | 金合欢原木 | |
| birch | 白桦原木 | |
| dark_oak | 深色橡木原木 | |
| jungle | 丛林原木 | |
| log | 所有原木类型 | 原木方块 |
| oak | 橡木原木 | |
| spruce | 云杉原木 | |

View File

@@ -0,0 +1,110 @@
---
title: 方块特性
description: 方块特性可轻松为自定义方块应用原版方块状态(如朝向),无需借助事件和触发器。
category: 常规
nav_order: 5
mentions:
- QuazChick
---
# 方块特性
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式要求 & 最低引擎版本 `1.20.30`
在学习方块特性前,您应当已熟练掌握[方块状态](/blocks/block-states)知识。
使用方块状态时,请确保资源包清单中的`min_engine_version``1.20.20`或更高版本。
:::
## 应用特性
方块特性可轻松为自定义方块应用原版方块状态(如朝向),无需借助复杂的事件和触发器系统。
::: code-group
```json [BP/blocks/custom_slab.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_slab",
"menu_category": {
"category": "construction",
"group": "itemGroup.name.slab"
},
"traits": {
"minecraft:placement_position": {
"enabled_states": ["minecraft:vertical_half"]
}
}
},
"components": { ... },
"permutations": [ ... ]
}
}
```
:::
_此示例将在放置时设置`minecraft:vertical_half`方块状态为`'top'`或`'bottom'`——具体取决于玩家视角位置。_
**仍需通过置换系统配合条件查询来实现功能差异:**
```c
q.block_state('minecraft:vertical_half') // 查询垂直半区状态
```
## 放置朝向
记录玩家放置方块时的旋转方向信息。
_自实验性玩法`Upcoming Creator Features`发布支持格式版本1.20.30及更高。_
**可启用以下状态:**
| 状态名称 | 可选值 | 描述 |
| ------------------------------ | -------------------------------------------------------------------------------- | ---------------------------------- |
| `minecraft:cardinal_direction` | `"south"`(默认)<br>`"north"`<br>`"west"`<br>`"east"` | 放置时玩家的主要朝向(东南西北) |
| `minecraft:facing_direction` | `"down"`(默认)<br>`"up"`<br>`"south"`<br>`"north"`<br>`"west"`<br>`"east"` | 放置时玩家的完整朝向(含上下方向) |
<br>
**额外参数:**
- `y_rotation_offset` - 此旋转偏移仅适用于水平方向状态值(北/南/西/东必须指定轴对齐角度如90、180、-90
::: code-group
```json [minecraft:block > description > traits]
"minecraft:placement_direction": {
"enabled_states": ["minecraft:cardinal_direction"],
"y_rotation_offset": 180 // Y轴旋转偏移量
}
```
:::
## 放置位置
记录玩家放置方块时的具体位置信息。
_自实验性玩法`Upcoming Creator Features`发布支持格式版本1.20.30及更高。_
**可启用以下状态:**
| 状态名称 | 可选值 | 描述 |
| ------------------------- | -------------------------------------------------------------------------------- | ----------------------------- |
| `minecraft:block_face` | `"down"`(默认)<br>`"up"`<br>`"south"`<br>`"north"`<br>`"west"`<br>`"east"` | 方块被放置时所处的表面方位 |
| `minecraft:vertical_half` | `"top"`<br>`"bottom"`(默认) | 方块被放置时所处的垂直半区位置 |
<br>
**_此特性无额外参数_**
::: code-group
```json [minecraft:block > description > traits]
"minecraft:placement_position": {
"enabled_states": [
"minecraft:block_face", // 方块表面方位
"minecraft:vertical_half" // 垂直半区位置
]
}
```
:::

View File

@@ -0,0 +1,62 @@
---
title: 实验性方块
category: 通用
tags:
- 信息
- 实验性
mentions:
- SmokeyStack
- MedicalJewel105
- QuazChick
---
# 实验性方块
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式版本 `1.20.30`
在创建自定义方块时使用最新格式版本,可获取最新功能和改进。本维基旨在分享自定义方块的最新信息,当前目标格式版本为 `1.20.30`
:::
本文作为索引文档,概述自定义方块功能的实验性要求。
## 方块组件
| 组件 | 所需实验性功能 |
| ------------------------------------------------------------------------------------------- | --------------------------------- |
| [`minecraft:collision_box`](/blocks/block-components#collision-box) | 无格式版本1.19.50及以上) |
| [`minecraft:crafting_table`](/blocks/block-components#crafting-table) | 无格式版本1.19.50及以上) |
| [`minecraft:destructible_by_explosion`](/blocks/block-components#destructible-by-explosion) | 无 |
| [`minecraft:destructible_by_mining`](/blocks/block-components#destructible-by-mining) | 无 |
| [`minecraft:display_name`](/blocks/block-components#display-name) | 无格式版本1.19.60及以上) |
| [`minecraft:flammable`](/blocks/block-components#flammable) | 无 |
| [`minecraft:friction`](/blocks/block-components#friction) | 无 |
| [`minecraft:geometry`](/blocks/block-components#geometry) | 无格式版本1.19.40及以上) |
| [`minecraft:light_dampening`](/blocks/block-components#light-dampening) | 无 |
| [`minecraft:light_emission`](/blocks/block-components#light-emission) | 无 |
| [`minecraft:loot`](/blocks/block-components#loot) | 无 |
| [`minecraft:map_color`](/blocks/block-components#map-color) | 无 |
| [`minecraft:material_instances`](/blocks/block-components#material-instances) | 无格式版本1.19.40及以上) |
| [`minecraft:placement_filter`](/blocks/block-components#placement-filter) | 无格式版本1.19.60及以上) |
| [`minecraft:selection_box`](/blocks/block-components#selection-box) | 无格式版本1.19.60及以上) |
| [`minecraft:transformation`](/blocks/block-components#transformation) | 无 |
| [`minecraft:unit_cube`](/blocks/block-components#unit-cube) | **`假日创作者功能Holiday Creator Features`** |
## 方块状态
_从实验性功能 **`假日创作者功能`** 中释放适用于格式版本1.19.70及以上。_
## 方块特性
| 特性 | 所需实验性功能 |
| ------------------------------------------------------------------------------- | --------------------------------- |
| [`minecraft:placement_direction`](/blocks/block-components#placement-direction) | 无格式版本1.20.20及以上) |
| [`minecraft:placement_position`](/blocks/block-components#placement-position) | 无格式版本1.20.20及以上) |
## 方块置换
_从实验性功能 **`假日创作者功能`** 中释放适用于格式版本1.19.70及以上。_
## 方块事件与触发器
**完整功能仍处于实验性阶段,需启用 `假日创作者功能`。**

View File

@@ -0,0 +1,322 @@
---
title: 方块入门
description: A "Hello world" guide in making blocks. Learn the block format and how to create basic custom blocks.
category: General
nav_order: 1
---
# 方块入门
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip 格式版本 & 最低引擎版本 `1.20.30`
本页介绍基础方块特性。更多方块组件内容请访问[此处](/blocks/block-components)。
:::
:::danger <nbsp/>
原版方块的逻辑是硬编码实现的,无法被修改或访问。
:::
Minecraft 基岩版允许我们添加具有多种类原版特性的自定义方块。自定义方块可以拥有多阶段生长(如植物)、方向朝向等实用功能。
本教程将指导如何在稳定版 Minecraft 中创建基础方块。
## 注册方块
方块定义的结构与实体类似:包含行为描述和定义方块特性的组件列表。
与实体不同,方块除`RP/blocks.json`外没有其他资源定义。
以下是将自定义方块加入创造模式物品栏所需的**最低限度**行为包代码:
::: code-group
```json [BP/blocks/custom_block.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_block",
"menu_category": {
"category": "construction", // 方块所在的创造模式物品栏或配方书标签
"group": "itemGroup.name.concrete", // 方块所属的可展开分组(可选)
"is_hidden_in_commands": false // 是否在命令中隐藏该方块(可选)
}
},
"components": {} // 必须保留,即使为空!
}
}
```
:::
### 方块描述
- 定义方块的`identifier` - 采用`命名空间:标识符`格式的唯一ID
- 配置方块的`menu_category`归属
- 可选参数`group`和`is_hidden_in_commands`
_方块描述还包含[状态](/blocks/block-states)和[特性](/blocks/block-traits)相关内容请参见对应页面。_
## 添加组件
目前我们的自定义方块使用的是默认组件值(可参考[此处](/blocks/block-components))。
现在开始自定义功能配置!
::: code-group
```json [BP/blocks/custom_block.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_block",
"menu_category": {
"category": "construction"
}
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 3
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 3
},
"minecraft:friction": 0.4,
"minecraft:map_color": "#ffffff",
"minecraft:light_dampening": 0,
"minecraft:light_emission": 4,
"minecraft:loot": "loot_tables/blocks/custom_block.json"
}
}
}
```
:::
- [`minecraft:destructible_by_mining`](/blocks/block-components#destructible-by-mining) 定义玩家破坏方块所需时间(目前无法为不同工具设置不同破坏时间)
- [`minecraft:destructible_by_explosion`](/blocks/block-components#destructible-by-explosion) 定义抗爆性。值越高,被炸毁概率越低
- [`minecraft:friction`](/blocks/block-components#friction) 定义方块摩擦系数。例如灵魂沙具有高摩擦值会减缓玩家,冰的低摩擦值则产生滑溜效果。经典方块(如木头/石头)的摩擦系数为`0.4`
- [`minecraft:map_color`](/blocks/block-components#map-color) 是地图上显示的代表色(十六进制)。`#ffffff`代表白色,可通过[在线取色器](https://www.google.com/search?q=hex+color+picker)获取其他颜色代码
- [`minecraft:light_dampening`](/blocks/block-components#light-dampening) 定义光线阻挡程度
- [`minecraft:light_emission`](/blocks/block-components#light-emission) 定义方块发光等级
- [`minecraft:loot`](/blocks/block-components#loot) 定义战利品表路径。若移除,方块将默认掉落自身。更多战利品表信息请访问[此处](/loot/loot-tables)
_更多组件配置请访问[方块组件手册](/blocks/block-components)!_
## 应用纹理
:::warning
`RP/blocks.json`会忽略命名空间。即使不写命名空间或随意填写也不会产生影响。若自定义方块与原版方块同名(仅命名空间不同)可能导致问题
:::
:::tip <nbsp/>
[方块音效](/blocks/block-sounds)也可在`RP/blocks.json`中定义
:::
对于基础的16×16×16像素方块纹理应在`RP/blocks.json`中定义。
如需使用自定义模型,应使用[geometry几何组件](/blocks/block-components#geometry)和[material_instances材质实例](/blocks/block-components#material-instances)。
::: code-group
```json [RP/blocks.json]
{
"format_version": [1, 1, 0],
"wiki:custom_block": {
"textures": "custom_block", // 此纹理简称需在下方terrain_texture.json中定义
"sound": "grass"
}
}
```
:::
现在需要在`RP/textures/terrain_texture.json`中关联纹理简称与图片路径:
::: code-group
```json [RP/textures/terrain_texture.json]
{
"texture_name": "atlas.terrain",
"resource_pack_name": "wiki", // 资源包ID
"padding": 8, // 防止纹理视觉溢出
"num_mip_levels": 4, // 远距离/倾斜视角下的纹理质量
"texture_data": {
// 我们的纹理简称:
"custom_block": {
"textures": "textures/blocks/custom_block" // 指向图片文件名
}
}
}
```
:::
### 分面纹理
纹理可按面分别设置。例如一个自定义"指南针方块"可使用以下✨惊艳✨纹理:
`textures/blocks/compass_block_down.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_down.png" pixelated="true" width="64"/>
`textures/blocks/compass_block_up.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_up.png" pixelated="true" width="64"/>
`textures/blocks/compass_block_north.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_north.png" pixelated="true" width="64"/>
`textures/blocks/compass_block_east.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_east.png" pixelated="true" width="64"/>
`textures/blocks/compass_block_south.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_south.png" pixelated="true" width="64"/>
`textures/blocks/compass_block_west.png`
<WikiImage src="/assets/images/blocks/blocks-intro/compass_block_west.png" pixelated="true" width="64"/>
<br>
<br>
对应的`blocks.json`配置如下:
::: code-group
```json [RP/blocks.json]
{
"format_version": [1, 1, 0],
"wiki:compass_block": {
"textures": {
"down": "compass_block_down",
"up": "compass_block_up",
"north": "compass_block_north",
"east": "compass_block_east",
"south": "compass_block_south",
"west": "compass_block_west"
}
}
}
```
:::
<br>
若使用[材质实例](/blocks/block-components#material-instances),配置示例如下:
::: code-group
```json [minecraft:block > components]
"minecraft:material_instances": {
"*": {
"texture": "compass_block_down" // 此纹理用于破坏粒子效果
},
"up": {
"texture": "compass_block_up"
},
"north": {
"texture": "compass_block_north"
},
"east": {
"texture": "compass_block_east"
},
"south": {
"texture": "compass_block_south"
},
"west": {
"texture": "compass_block_west"
}
}
```
:::
对应的`terrain_texture.json`数据:
::: code-group
```json [RP/textures/terrain_texture.json]
{
"texture_name": "atlas.terrain",
"resource_pack_name": "wiki",
"padding": 8,
"num_mip_levels": 4,
"texture_data": {
"compass_block_down": {
"textures": "textures/blocks/compass_block_down"
},
"compass_block_up": {
"textures": "textures/blocks/compass_block_up"
},
"compass_block_north": {
"textures": "textures/blocks/compass_block_north"
},
"compass_block_east": {
"textures": "textures/blocks/compass_block_east"
},
"compass_block_west": {
"textures": "textures/blocks/compass_block_west"
},
"compass_block_south": {
"textures": "textures/blocks/compass_block_south"
}
}
}
```
:::
## 定义名称
最后定义方块的显示名称:
::: code-group
```c [RP/texts/en_US.lang]
tile.wiki:custom_block.name=自定义方块
tile.wiki:compass_block.name=指南针方块
```
:::
更多本地化内容请访问[文本与翻译指南](/concepts/text-and-translations)。
## 成果总结
通过本教程,您已掌握:
<Checklist>
- [x] 方块基础特性
- [x] 如何应用统一纹理
- [x] 如何设置分面纹理
</Checklist>
...但这只是开始,更多精彩内容等待探索!
## 下一步学习
<div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-5 m-0 p-0">
<Card
title="扩展功能"
imgsrc-light="assets/images/homepage/crafting_table_0.png"
link="/blocks/block-components">
学习各类可用[方块组件](/blocks/block-components)打造独特玩法。
<br><br>
使用[geometry几何组件](/blocks/block-components#geometry)为方块添加自定义模型!还可以通过[collision_box碰撞箱](/blocks/block-components#collision-box)和[selection_box选择框](/blocks/block-components#selection-box)配置物理交互区域。
</Card>
<Card
title="创建变体"
imgsrc-light="assets/images/homepage/scripting.png">
利用[方块状态](/blocks/block-states)和[permutations状态切换](/blocks/block-permutations)实现条件触发的组件功能。
<br><br>
例如为储液罐方块添加多级液面高度功能,并支持多种液体类型。
</Card>
<Card
title="复刻原版"
imgsrc-light="assets/images/homepage/diamond_ore_0.png"
link="/blocks/block-components">
在<b class="orange px-1 rounded-md">原版复刻</b>分类中查看多个完整实现案例。
<br><br>
从简单的[自定义玻璃方块](/blocks/custom-glass-blocks)开始,体验[material_instances材质实例](/blocks/block-components#material-instances)的应用!
</Card>
</div>

View File

@@ -0,0 +1,271 @@
---
title: 方块故障排除
category: 常规
tags:
- help
mentions:
- SmokeyStack
- SirLich
- aexer0e
- MedicalJewel105
- Sprunkles137
- QuazChick
---
# 方块故障排除
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::tip
本页包含关于_方块_的故障排除信息。在继续阅读前建议先查阅我们的[全局故障排除指南](/guide/troubleshooting)。
:::
## 0.0 - 常见问题
> "我按照教程制作方块时遇到了问题!"
无需惊慌!本页将帮助您排查常见问题。
## 1.0 - 纹理问题排查
修复与方块纹理相关的常见问题。
## 1.1 - 纹理显示为黑紫相间
我们将分析三种不同布局的方块类型:
- 类似泥土的方块 ![](/assets/images/blocks/block_tr/tr_dirt.png)
- 类似原木的方块 ![](/assets/images/blocks/block_tr/tr_log.png)
- 类似草块的方块 ![](/assets/images/blocks/block_tr/tr_grass.png)
请定位至 `RP/textures/terrain_texture.json` 文件,确保文件名正确。
::: code-group
```json [RP/textures/terrain_texture.json]
{
"texture_name": "atlas.terrain",
"resource_pack_name": "wiki",
"padding": 8,
"num_mip_levels": 4,
"texture_data": {
"dirt_like": {
"textures": "textures/blocks/dirt_like" // 此处可替换为任意内容,但需记住此名称
},
"log_like_top": {
"textures": "textures/blocks/log_like_top" // 此处可替换为任意内容,但需记住此名称
},
"log_like_side": {
"textures": "textures/blocks/log_like_side" // 此处可替换为任意内容,但需记住此名称
},
"custom_grass_top": {
"textures": "textures/blocks/custom_grass_top" // 此处可替换为任意内容,但需记住此名称
},
"custom_grass_bottom": {
"textures": "textures/blocks/custom_grass_bottom" // 此处可替换为任意内容,但需记住此名称
},
"custom_grass_side": {
"textures": "textures/blocks/custom_grass_side" // 此处可替换为任意内容,但需记住此名称
}
}
}
```
:::
接下来检查方块配置文件,确保包含 `material_instances` 组件。
类似泥土的方块配置示例:
::: code-group
```json [BP/blocks/dirt_like.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:dirt_like"
},
"components": {
"minecraft:material_instances": {
"*": {
"texture": "dirt_like"
}
}
}
}
}
```
:::
类似原木的方块配置示例:
::: code-group
```json [BP/blocks/log_like.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:log_like"
},
"components": {
"minecraft:material_instances": {
"*": {
"texture": "log_like_side"
},
"end": {
"texture": "log_like_top"
},
"up": "end",
"down": "end"
}
}
}
}
```
:::
类似草块的配置示例:
::: code-group
```json [BP/blocks/custom_grass.json]
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_grass"
},
"components": {
"minecraft:material_instances": {
"*": {
"texture": "custom_grass_side"
},
"up": {
"texture": "custom_grass_top"
},
"down": {
"texture": "custom_grass_bottom"
}
}
}
}
}
```
:::
正确配置后,方块的纹理应正常显示。
## 1.2 - 纹理显示为带"Update"字样的泥土块
问题现象:自定义方块变成带有绿色文字的泥土方块。
![](/assets/images/blocks/block_tr/tr_update.png)
这是_未知方块_的标识通常由以下原因引起
- 方块标识符被修改
- 方块JSON文件格式错误
解决方案:
1. 使用JSON校验工具检查文件格式
2. 确认方块标识符未更改
3. 确保方块配置包含以下任意组件:
- `minecraft:unit_cube`
- `minecraft:geometry`
- `minecraft:material_instances`
- 或正确配置了 `RP/blocks.json` 中的纹理条目
## 2.0 - 渲染问题排查
本节将描述常见的方块渲染问题及解决方案。
## 2.1 - 透明效果失效
问题现象:纹理中的透明像素在游戏中显示为不透明。
解决方案:在方块的 `material_instances` 组件中添加渲染方法:
::: code-group
```json [BP/blocks/your_block.json]
{
"format_version": "1.20.30",
"minecraft:block": {
...
"components": {
"minecraft:material_instances": {
"*": {
"render_method": "alpha_test"
}
}
}
}
}
```
:::
## 2.2 - 方块产生阴影
问题现象:自定义几何体方块产生阴影。
解决方案:在方块组件中添加光照衰减配置:
::: code-group
```json [minecraft:block > components]
"minecraft:light_dampening": 0
```
:::
## 2.3 - 模型立方体在物品栏中重叠
问题现象:自定义几何体方块在物品栏中呈现异常堆叠:
![](/assets/images/blocks/block_tr/inventory_render_cubes.png)
解决方案在Blockbench中调整立方体绘制顺序从下到上
```
cube_middle cube_bottom
cube_top -> cube_middle
cube_bottom cube_top
```
## 2.4 - 方块在物品栏中显示过小
问题现象16³标准尺寸方块在物品栏中比原版方块小。
解决方案分析:
- 使用 `RP/blocks.json` 配置纹理可使方块正常显示,但无法使用自定义模型
- 使用 `material_instances` 组件时需配合以下配置:
- 添加旋转组件需同时配置材质实例
- 使用单位立方体或自定义几何体
- 确保基础状态使用 `blocks.json` 配置
---
## 3.0 - 常见日志错误
本节将解析常见的日志报错信息。
## 3.1 - 碰撞/选择框错误
典型错误提示:
> `[Blocks][error]-minecraft:collision_box: min 值不能低于 (-8, 0, -8)max 值不能超过 (8, 16, 8)`
排查步骤:
- 检查 X/Z 轴数值是否在 -8 至 8 范围内
- 检查 Y 轴数值是否在 0 至 16 范围内
- 确保碰撞框不超过 16×16×16 单位区域
## 3.2 - 模型尺寸错误
典型错误提示:
> `geometry.your_block 包含 X 个超出范围的立方体...`
解决方案:
- 缩小几何体尺寸
- 将大型模型拆分为多个方块
---
## 后续步骤
若问题仍未解决欢迎加入Discord社区交流。如发现文档内容有误请通过GitHub提交修正建议