9.5 KiB
title, category, mentions
| title | category | mentions | ||||||
|---|---|---|---|---|---|---|---|---|
| 可旋转方块 | 巧思案例 |
|
可旋转方块
::: tip 格式与最低引擎版本 1.20.30
本教程假设您已掌握方块基础知识,包括方块状态与方块特性。
开始前请先阅读方块指南。
:::
旋转类型
-
基本方向旋转
- 适用于雕刻南瓜和熔炉
- 4个方向 - 'north'(北)、'south'(南)、'east'(东)、'west'(西)
-
面向方向旋转
- 适用于发射器和观测器
- 6个方向 - 'down'(下)、'up'(上)、'north'(北)、'south'(南)、'east'(东)、'west'(西)
-
方块面附着旋转
- 适用于梯子和物品展示框
- 6个附着方向 - 'down'(下)、'up'(上)、'north'(北)、'south'(南)、'east'(东)、'west'(西)
-
原木/柱体旋转
- 适用于原木和玄武岩
- 3个轴对齐方向
-
精确旋转
- 适用于头颅、告示牌和旗帜
- 16个方向(以22.5度递增)
- 4个侧面附着方向
基本方向旋转
特性
使用minecraft:placement_direction方块特性并启用minecraft:cardinal_direction状态来设置方块方向。
::: code-group
"description": {
"identifier": "wiki:cardinal_direction_example",
// 在此处定义方块特性
"traits": {
"minecraft:placement_direction": {
"enabled_states": ["minecraft:cardinal_direction"], // 可在查询中使用,例如`q.block_state('minecraft:cardinal_direction') == 'north'`
"y_rotation_offset": 180 // 朝向玩家
}
}
}
:::
置换
通过方块置换实现旋转。每个置换包含minecraft:transformation组件,检查minecraft:cardinal_direction状态并应用相应旋转。
下方旋转值假设模型正面朝北
::: code-group
"permutations": [
// 面向北
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'north'",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 0] }
}
},
// 面向西
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'west'",
"components": {
"minecraft:transformation": { "rotation": [0, 90, 0] }
}
},
// 面向南
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'south'",
"components": {
"minecraft:transformation": { "rotation": [0, 180, 0] }
}
},
// 面向东
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'east'",
"components": {
"minecraft:transformation": { "rotation": [0, -90, 0] }
}
}
]
:::
面向方向旋转
特性
使用minecraft:placement_direction方块特性并启用minecraft:facing_direction状态来设置方块方向。
::: code-group
"description": {
"identifier": "wiki:facing_direction_example",
// 在此处定义方块特性
"traits": {
"minecraft:placement_direction": {
"enabled_states": ["minecraft:facing_direction"], // 可在查询中使用,例如`q.block_state('minecraft:facing_direction') == 'north'`
}
}
}
:::
置换
通过方块置换实现旋转。每个置换包含minecraft:transformation组件,检查minecraft:facing_direction状态并应用相应旋转。
下方旋转值假设模型正面朝北
::: code-group
"permutations": [
// 朝下
{
"condition": "q.block_state('minecraft:facing_direction') == 'down'",
"components": {
"minecraft:transformation": { "rotation": [-90, 0, 0] }
}
},
// 朝上
{
"condition": "q.block_state('minecraft:facing_direction') == 'up'",
"components": {
"minecraft:transformation": { "rotation": [90, 0, 0] }
}
},
// 朝北
{
"condition": "q.block_state('minecraft:facing_direction') == 'north'",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 0] }
}
},
// 朝西
{
"condition": "q.block_state('minecraft:facing_direction') == 'west'",
"components": {
"minecraft:transformation": { "rotation": [0, 90, 0] }
}
},
// 朝南
{
"condition": "q.block_state('minecraft:facing_direction') == 'south'",
"components": {
"minecraft:transformation": { "rotation": [0, 180, 0] }
}
},
// 朝东
{
"condition": "q.block_state('minecraft:facing_direction') == 'east'",
"components": {
"minecraft:transformation": { "rotation": [0, -90, 0] }
}
}
]
:::
方块面附着旋转
特性
使用minecraft:placement_position方块特性并启用minecraft:block_face状态来设置方块附着面。
::: code-group
"description": {
"identifier": "wiki:facing_direction_example",
// 在此处定义方块特性
"traits": {
"minecraft:placement_position": {
"enabled_states": ["minecraft:block_face"], // 可在查询中使用,例如`q.block_state('minecraft:block_face') == 'north'`
}
}
}
:::
置换
通过方块置换实现旋转。每个置换包含minecraft:transformation组件,检查minecraft:block_face状态并应用相应旋转。
下方旋转值假设模型正面朝北
::: code-group
"permutations": [
// 朝下
{
"condition": "q.block_state('minecraft:block_face') == 'down'",
"components": {
"minecraft:transformation": { "rotation": [-90, 0, 0] }
}
},
// 朝上
{
"condition": "q.block_state('minecraft:block_face') == 'up'",
"components": {
"minecraft:transformation": { "rotation": [90, 0, 0] }
}
},
// 朝北
{
"condition": "q.block_state('minecraft:block_face') == 'north'",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 0] }
}
},
// 朝西
{
"condition": "q.block_state('minecraft:block_face') == 'west'",
"components": {
"minecraft:transformation": { "rotation": [0, 90, 0] }
}
},
// 朝南
{
"condition": "q.block_state('minecraft:block_face') == 'south'",
"components": {
"minecraft:transformation": { "rotation": [0, 180, 0] }
}
},
// 朝东
{
"condition": "q.block_state('minecraft:block_face') == 'east'",
"components": {
"minecraft:transformation": { "rotation": [0, -90, 0] }
}
}
]
:::
原木旋转
实现与原版原木相同的旋转方式
::: warning 实验性功能
需要启用假日创作者功能来触发事件
:::
方块状态
::: code-group
"states": {
"wiki:axis": [0, 1, 2]
}
:::
方块事件与触发
使用Molang表达式通过查询方块附着面来确定坐标轴方向(转换为0、1或2)
::: code-group
"wiki:set_axis": {
"set_block_state": {
"wiki:axis": "数学运算.floor(q.block_face / 2)"
}
}
:::
使用minecraft:on_player_placing触发器组件调用事件
::: code-group
"minecraft:on_player_placing": {
"event": "wiki:set_axis"
}
:::
置换
::: code-group
"permutations": [
{
"condition": "q.block_state('wiki:axis') == 0",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 0] }
}
},
{
"condition": "q.block_state('wiki:axis') == 1",
"components": {
"minecraft:transformation": { "rotation": [90, 0, 0] }
}
},
{
"condition": "q.block_state('wiki:axis') == 2",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 90] }
}
}
]
:::
原木旋转示例
::: warning 实验性功能
本示例需要启用假日创作者功能以使用minecraft:unit_cube
:::
::: code-group
{
"format_version": "1.20.30",
"minecraft:block": {
"description": {
"identifier": "wiki:custom_log",
"states": {
"wiki:axis": [0, 1, 2]
}
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 1.5
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 15
},
"minecraft:material_instances": {
"*": {
"texture": "log_side"
},
"end": {
"texture": "log_top"
},
"up": "end",
"down": "end"
},
"minecraft:unit_cube": {},
"minecraft:on_player_placing": {
"event": "wiki:set_axis"
}
},
"events": {
"wiki:set_axis": {
"set_block_state": {
"wiki:axis": "Math.floor(q.block_face / 2)"
}
}
},
"permutations": [
{
"condition": "q.block_state('wiki:axis') == 0",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 0] }
}
},
{
"condition": "q.block_state('wiki:axis') == 1",
"components": {
"minecraft:transformation": { "rotation": [90, 0, 0] }
}
},
{
"condition": "q.block_state('wiki:axis') == 2",
"components": {
"minecraft:transformation": { "rotation": [0, 0, 90] }
}
}
]
}
}
:::