` | [控件](/json-ui/json-ui-documentation#control)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| stack_panel | 类似`panel`,但会根据`orientation`属性值自动堆叠子元素 | [堆叠面板](/json-ui/json-ui-documentation#stack-panel)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| collection_panel | 类似`stack_panel`,但没有`orientation`属性 | [集合](/json-ui/json-ui-documentation#collection)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| grid | 网格布局元素 | [网格](/json-ui/json-ui-documentation#grid)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| label | 文本元素 | [文本](/json-ui/json-ui-documentation#text)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| image | 图像元素,用于绘制纹理 | [精灵](/json-ui/json-ui-documentation#sprite)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| input_panel | 可接收输入的面板 | [输入](/json-ui/json-ui-documentation#input)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| button | 按钮元素,支持四种状态(默认、悬停、按下、锁定) | [按钮](/json-ui/json-ui-documentation#button)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| toggle | 开关元素,包含两种状态(选中/未选中),每种状态有悬停和锁定变体 | [开关](/json-ui/json-ui-documentation#toggle)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| dropdown | 下拉菜单开关 | [下拉菜单](/json-ui/json-ui-documentation#dropdown)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| slider | 范围输入元素 | [滑块](/json-ui/json-ui-documentation#slider)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| slider_box | 用于调整滑块值的拖动按钮 | [滑块按钮](/json-ui/json-ui-documentation#slider-box)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| edit_box | 文本输入框(默认单行) | [文本编辑](/json-ui/json-ui-documentation#text-edit)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| scroll_view | 创建可滚动面板 | [滚动视图](/json-ui/json-ui-documentation#scroll-view)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| scrollbar_track | 滚动条轨道 | [输入](/json-ui/json-ui-documentation#input)
[布局](/json-ui/json-ui-documentation#layout) |
-| scrollbar_box | 滚动条"滑块"(可拖动的滚动手柄,默认垂直方向) | [输入](/json-ui/json-ui-documentation#input)
[布局](/json-ui/json-ui-documentation#layout) |
-| factory | 元素生成器 | [控件](/json-ui/json-ui-documentation#control)
[布局](/json-ui/json-ui-documentation#layout) |
-| screen | 屏幕元素 | [屏幕](/json-ui/json-ui-documentation#screen)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| custom | 需通过代码创建的复杂渲染元素 | [自定义渲染](/json-ui/json-ui-documentation#custom-render)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| selection_wheel | 选择轮盘 | [选择轮盘](/json-ui/json-ui-documentation#selection-wheel)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
+| panel | 容器元素,类似HTML中的`
` | [控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| stack_panel | 类似`panel`,但会根据`orientation`属性值自动堆叠子元素 | [堆叠面板](/wiki/json-ui/json-ui-documentation#stack-panel)
[集合](/wiki/json-ui/json-ui-documentation#collection)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| collection_panel | 类似`stack_panel`,但没有`orientation`属性 | [集合](/wiki/json-ui/json-ui-documentation#collection)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| grid | 网格布局元素 | [网格](/wiki/json-ui/json-ui-documentation#grid)
[集合](/wiki/json-ui/json-ui-documentation#collection)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| label | 文本元素 | [文本](/wiki/json-ui/json-ui-documentation#text)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| image | 图像元素,用于绘制纹理 | [精灵](/wiki/json-ui/json-ui-documentation#sprite)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| input_panel | 可接收输入的面板 | [输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| button | 按钮元素,支持四种状态(默认、悬停、按下、锁定) | [按钮](/wiki/json-ui/json-ui-documentation#button)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| toggle | 开关元素,包含两种状态(选中/未选中),每种状态有悬停和锁定变体 | [开关](/wiki/json-ui/json-ui-documentation#toggle)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| dropdown | 下拉菜单开关 | [下拉菜单](/wiki/json-ui/json-ui-documentation#dropdown)
[开关](/wiki/json-ui/json-ui-documentation#toggle)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| slider | 范围输入元素 | [滑块](/wiki/json-ui/json-ui-documentation#slider)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| slider_box | 用于调整滑块值的拖动按钮 | [滑块按钮](/wiki/json-ui/json-ui-documentation#slider-box)
[输入](/wiki/json-ui/json-ui-documentation#input)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| edit_box | 文本输入框(默认单行) | [文本编辑](/wiki/json-ui/json-ui-documentation#text-edit)
[按钮](/wiki/json-ui/json-ui-documentation#button)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| scroll_view | 创建可滚动面板 | [滚动视图](/wiki/json-ui/json-ui-documentation#scroll-view)
[输入](/wiki/json-ui/json-ui-documentation#input)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| scrollbar_track | 滚动条轨道 | [输入](/wiki/json-ui/json-ui-documentation#input)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout) |
+| scrollbar_box | 滚动条"滑块"(可拖动的滚动手柄,默认垂直方向) | [输入](/wiki/json-ui/json-ui-documentation#input)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout) |
+| factory | 元素生成器 | [控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout) |
+| screen | 屏幕元素 | [屏幕](/wiki/json-ui/json-ui-documentation#screen)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| custom | 需通过代码创建的复杂渲染元素 | [自定义渲染](/wiki/json-ui/json-ui-documentation#custom-render)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| selection_wheel | 选择轮盘 | [选择轮盘](/wiki/json-ui/json-ui-documentation#selection-wheel)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
#### 遗留元素类型(已失效)
| 名称 | 描述 | 允许的属性 |
| ---------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| tab | 在引入toggle之前创建标签页的方式 | [标签页(旧版)](/json-ui/json-ui-documentation#tab-legacy)
[按钮](/json-ui/json-ui-documentation#button)
[输入](/json-ui/json-ui-documentation#input)
[焦点](/json-ui/json-ui-documentation#focus)
[音效](/json-ui/json-ui-documentation#sound)
[控件](/json-ui/json-ui-documentation#control)
[布局](/json-ui/json-ui-documentation#layout)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| carousel_label | 轮播文本元素 | [轮播文本(旧版)](/json-ui/json-ui-documentation#carousel-text-legacy)
[文本](/json-ui/json-ui-documentation#text)
[控件](/json-ui/json-ui-documentation#control)
[布局](/json-ui/json-ui-documentation#layout)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| grid_item | 专门作为网格子元素的容器 | [控件](/json-ui/json-ui-documentation#control)
[布局](/json-ui/json-ui-documentation#layout)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
-| scrollbar | 旧版滚动条 | [输入](/json-ui/json-ui-documentation#input)
[焦点](/json-ui/json-ui-documentation#focus)
[控件](/json-ui/json-ui-documentation#control)
[布局](/json-ui/json-ui-documentation#layout)
[数据绑定](/json-ui/json-ui-documentation#data-binding) |
+| tab | 在引入toggle之前创建标签页的方式 | [标签页(旧版)](/wiki/json-ui/json-ui-documentation#tab-legacy)
[按钮](/wiki/json-ui/json-ui-documentation#button)
[输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[音效](/wiki/json-ui/json-ui-documentation#sound)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| carousel_label | 轮播文本元素 | [轮播文本(旧版)](/wiki/json-ui/json-ui-documentation#carousel-text-legacy)
[文本](/wiki/json-ui/json-ui-documentation#text)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| grid_item | 专门作为网格子元素的容器 | [控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
+| scrollbar | 旧版滚动条 | [输入](/wiki/json-ui/json-ui-documentation#input)
[焦点](/wiki/json-ui/json-ui-documentation#focus)
[控件](/wiki/json-ui/json-ui-documentation#control)
[布局](/wiki/json-ui/json-ui-documentation#layout)
[数据绑定](/wiki/json-ui/json-ui-documentation#data-binding) |
::: code-group
```json [示例]
@@ -89,7 +89,7 @@ mentions:
| clip_offset | 向量 [x, y] | `[0, 0]` | 裁剪起始偏移量 |
| clip_state_change_event | 字符串 | | |
| enable_scissor_test | 布尔值 | | [Scissor Test功能说明](https://www.khronos.org/opengl/wiki/Scissor_Test) |
-| property_bag | 对象 | | [属性包](/json-ui/json-ui-documentation#property-bag),存放与UI元素数据结构相关的属性 |
+| property_bag | 对象 | | [属性包](/wiki/json-ui/json-ui-documentation#property-bag),存放与UI元素数据结构相关的属性 |
| selected | 布尔值 | | 文本框是否默认被选中 |
| use_child_anchors | 布尔值 | `false` | 是否使用子元素的锚点设置 |
| controls | 数组 | | 子元素列表 |
@@ -131,7 +131,7 @@ mentions:
| 属性名称 | 类型 | 默认值 | 描述 |
| -------- | :---------------------------------------------------------------: | :----: | ----------------------- |
-| bindings | [绑定对象数组](/json-ui/json-ui-documentation#data-binding-array-object) | | 将硬编码值绑定到元素属性 |
+| bindings | [绑定对象数组](/wiki/json-ui/json-ui-documentation#data-binding-array-object) | | 将硬编码值绑定到元素属性 |
#### 数据绑定对象
@@ -252,7 +252,7 @@ mentions:
| 属性名称 | 类型 | 默认值 | 描述 |
| ----------------------------- | :-------------------------------------------------------------------: | :----: | ---- |
-| button_mappings | [映射对象数组](/json-ui/json-ui-documentation#button-mapping-array-object) | | |
+| button_mappings | [映射对象数组](/wiki/json-ui/json-ui-documentation#button-mapping-array-object) | | |
| modal | 布尔值 | | |
| inline_modal | 布尔值 | | |
| always_listen_to_input | 布尔值 | | |
@@ -300,10 +300,10 @@ mentions:
| focus_navigation_mode_right | 枚举 | | 可能值:
`none`
`stop`
`custom`
`contained` |
| focus_navigation_mode_down | 枚举 | | 可能值:
`none`
`stop`
`custom`
`contained` |
| focus_navigation_mode_up | 枚举 | | 可能值:
`none`
`stop`
`custom`
`contained` |
-| focus_container_custom_left | [焦点容器对象数组](/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
-| focus_container_custom_right | [焦点容器对象数组](/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
-| focus_container_custom_down | [焦点容器对象数组](/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
-| focus_container_custom_up | [焦点容器对象数组](/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
+| focus_container_custom_left | [焦点容器对象数组](/wiki/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
+| focus_container_custom_right | [焦点容器对象数组](/wiki/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
+| focus_container_custom_down | [焦点容器对象数组](/wiki/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
+| focus_container_custom_up | [焦点容器对象数组](/wiki/json-ui/json-ui-documentation#focus-container-custom-array-object) | | |
#### 焦点容器对象 Focus Container Custom Array Object
@@ -398,7 +398,7 @@ $creative_layout_index - $items_index
| sound_name | 字符串 | 触发时播放的音效定义(位于`sound_definitions.json`) |
| sound_volume | 浮点数 | 音效音量 |
| sound_pitch | 浮点数 | 音效音调 |
-| sounds | [音效对象数组](/json-ui/json-ui-documentation#sound-array-object) | 触发时播放的音效列表 |
+| sounds | [音效对象数组](/wiki/json-ui/json-ui-documentation#sound-array-object) | 触发时播放的音效列表 |
#### 音效对象
@@ -858,7 +858,7 @@ $creative_layout_index - $items_index
| scale_from_starting_alpha | boolean | |
| activated | boolean | |
-更多关于 `aseprite_flip_book` 动画类型的属性说明, 请前往 [Aseprite Animations](/json-ui/aseprite-animations) 查阅详细文档。
+更多关于 `aseprite_flip_book` 动画类型的属性说明, 请前往 [Aseprite Animations](/wiki/json-ui/aseprite-animations) 查阅详细文档。
## 全局变量 Global Variables
diff --git a/docs/wiki/4-Json-UI/1-基础/json-ui-intro.md b/docs/wiki/json-ui/json-ui-intro.md
similarity index 99%
rename from docs/wiki/4-Json-UI/1-基础/json-ui-intro.md
rename to docs/wiki/json-ui/json-ui-intro.md
index fccccfef..7541816e 100644
--- a/docs/wiki/4-Json-UI/1-基础/json-ui-intro.md
+++ b/docs/wiki/json-ui/json-ui-intro.md
@@ -1,6 +1,6 @@
---
title: JSON UI 入门指南
-category: 通用
+category: 基础
nav_order: 1
tags:
- guide
@@ -32,7 +32,7 @@ JSON UI 已进入弃用阶段,推荐使用 [Ore UI](https://github.com/Mojang/
:::
:::tip
-本文概述了 JSON UI 的基础知识。如需更详细的文档,请查阅 [JSON UI 文档](/json-ui/json-ui-documentation)。
+本文概述了 JSON UI 的基础知识。如需更详细的文档,请查阅 [JSON UI 文档](/wiki/json-ui/json-ui-documentation)。
:::
游戏用户界面采用数据驱动模式,支持自定义修改。通过 JSON UI 系统,我们可以调整用户界面的渲染方式及部分交互行为。所有原版 UI 文件均存储在 `RP/ui/...` 文件夹中。
diff --git a/docs/wiki/4-Json-UI/2-巧思案例/preserve-title-texts.md b/docs/wiki/json-ui/preserve-title-texts.md
similarity index 99%
rename from docs/wiki/4-Json-UI/2-巧思案例/preserve-title-texts.md
rename to docs/wiki/json-ui/preserve-title-texts.md
index 67cb5f11..244a1619 100644
--- a/docs/wiki/4-Json-UI/2-巧思案例/preserve-title-texts.md
+++ b/docs/wiki/json-ui/preserve-title-texts.md
@@ -1,6 +1,6 @@
---
title: Title传递HUD元素更新
-category: 教程分类
+category: 巧思案例
tags:
- 中级
mentions:
diff --git a/docs/wiki/4-Json-UI/2-巧思案例/string-to-number.md b/docs/wiki/json-ui/string-to-number.md
similarity index 99%
rename from docs/wiki/4-Json-UI/2-巧思案例/string-to-number.md
rename to docs/wiki/json-ui/string-to-number.md
index 5abed0c3..cd15d2bb 100644
--- a/docs/wiki/4-Json-UI/2-巧思案例/string-to-number.md
+++ b/docs/wiki/json-ui/string-to-number.md
@@ -1,6 +1,6 @@
---
title: 字符串转数值
-category: 教程
+category: 巧思案例
tags:
- 中级
mentions:
diff --git a/docs/wiki/loot/index.md b/docs/wiki/loot/index.md
index c56fd342..8a06da0d 100644
--- a/docs/wiki/loot/index.md
+++ b/docs/wiki/loot/index.md
@@ -1,10 +1,10 @@
---
-title: Loot, Recipes, and Trading
+title: 战利品、配方、交易
categories:
-- title: General
+- title: 基础
color: blue
-- title: Documentation
+- title: 文档
color: red
-- title: Tutorials
+- title: 巧思案例
color: green
---
\ No newline at end of file
diff --git a/docs/wiki/loot/item-functions.md b/docs/wiki/loot/item-functions.md
index 3f83989a..c7597f81 100644
--- a/docs/wiki/loot/item-functions.md
+++ b/docs/wiki/loot/item-functions.md
@@ -12,7 +12,7 @@ mentions:
toc_max_level: 1
---
-Item functions modify the nature of an item in [loot tables](/loot/loot-tables) and [trade tables](/loot/trade-tables).
+Item functions modify the nature of an item in [loot tables](/wiki/loot/loot-tables) and [trade tables](/wiki/loot/trade-tables).
TODO
can enchantments be prefixed with minecraft:/whatever?
@@ -50,7 +50,7 @@ A handful of functions are available for basic item properties. These functions
| Trade table | ❌ |
::: tip NOTE
-Trade tables use the [`"quantity"` property](/loot/trade-tables#quantity) to set their count.
+Trade tables use the [`"quantity"` property](/wiki/loot/trade-tables#quantity) to set their count.
:::
The `set_count` function sets the count for that item entry.
diff --git a/docs/wiki/loot/loot-tables.md b/docs/wiki/loot/loot-tables.md
index 384326dc..48df1568 100644
--- a/docs/wiki/loot/loot-tables.md
+++ b/docs/wiki/loot/loot-tables.md
@@ -1,34 +1,38 @@
---
-title: Loot Tables
-category: Documentation
+title: 战利品表
+category: 文档
nav_order: 1
tags:
- - Stable
- - Last updated for Version 1.18.10
+ - 稳定
+ - 最后更新于版本1.18.10
mentions:
- Ciosciaa
- Etanarvazac
- SmokeyStack
---
+# 战利品表
+
+
+
::: warning
-This document is a work in progress.
+本文档仍在完善中。
:::
-Loot tables are used to select a set of items from a declared collection. Loot tables can be used from:
+战利品表用于从预定义集合中选择一组物品。战利品表可通过以下方式调用:
-- The `/loot` command
-- Container contents
-- Block drops
-- Fishing
-- Mob drops
-- Equipment on spawned mobs
-- Other various mob actions
+- `/loot` 命令
+- 容器内容物
+- 方块掉落
+- 钓鱼
+- 生物掉落
+- 生成生物的装备
+- 其他各类生物行为
-A different collection of items may be chosen each instance the same loot table would be used, based on [external conditions](#), and [innate randomness](#). Such variation is crucial for playability and adventuring, especially in more RPG-driven systems.
+每次调用同一战利品表时,基于[外部条件](#)和[内在随机性](#)可能会选择不同的物品组合。这种变化性对于游戏可玩性和冒险体验至关重要,特别是在RPG元素更重的系统中。
-## Integration
-Loot tables are not registered add-on entries and are instead referenced by path from the above sources. Loot tables may be placed anywhere within a behavior pack, but it's recommended to place them under the top-level `loot_tables` directory, following vanilla convention.
+## 集成方式
+战利品表并非注册的附加包条目,而是通过路径引用。虽然可以放置在行为包任意位置,但建议遵循原版规范将其置于顶级`loot_tables`目录下。
-## Structure
-Loot tables are represented as JSON objects with a single required `"pools"` array property.
+## 结构
+战利品表由包含必需属性`"pools"`数组的JSON对象表示。
-
#
-
-```json
+::: code-group
+```json [根结构]
{
"pools": [
…
@@ -51,14 +54,13 @@ Loot tables are represented as JSON objects with a single required `"pools"` arr
}
```
-The loot returned from a loot table invocation will be the *collective sum* of the yields of all pools provided here.
+战利品表的调用结果将是所有池(pool)产出的总和。
-### Pools
-Pools act as isolated constructs for selecting items; the results of pools cannot be influenced by other pools.
+### 池(Pools)
+池是独立的物品选择单元,不同池之间的结果互不影响。
-
#
-
-```json
+::: code-group
+```json [基础池示例]
{
"rolls": 1,
@@ -71,14 +73,13 @@ Pools act as isolated constructs for selecting items; the results of pools canno
}
```
-Two types of pools are available: general-purpose [weighted random pools](#weighted-random-pools) and [tiered pools](#tiered-pools), the latter of which is traditionally used for selecting mob equipment.
+存在两种池类型:通用型[加权随机池](#加权随机池)和[分层池](#分层池),后者传统上用于生物装备选择。
-#### Weighted Random Pools
-A traditional weighted random pool selects items based on relative weight, choosing a number of yields based on a configured roll count.
+#### 加权随机池
+传统加权随机池根据相对权重选择物品,通过配置的roll次数决定产出数量。
-
artifacts.json/pools/0
-
-```json
+::: code-group
+```json [artifacts.json/pools/0]
{
"rolls": {
"min": 2,
@@ -105,38 +106,36 @@ A traditional weighted random pool selects items based on relative weight, choos
}
```
-##### Rolls
+##### 抽取次数(Rolls)
-
-###### Bonus Rolls
-The roll count for a weighted random pool may be altered based on the player's luck using the optional `"bonus_rolls"` property.
+###### 附加抽取(Bonus Rolls)
+可通过可选属性`"bonus_rolls"`基于玩家幸运值调整抽取次数。
```json
-
+// 示例待补充
```
-##### Entry Weighting
-The weight is the chance of this entry being chosen. The higher the weight in comparison to other entries in this "entries" array, the higher the chance of the entry being chosen.
+##### 条目权重
+权重值决定条目被选中的概率。权重相对于其他条目越高,选中几率越大。
```json
"weight": 3
```
-
-
-###### Quality
-The weight of an entry can be changed based on the player's luck using the quality property.
+###### 质量(Quality)
+通过quality属性可根据玩家幸运值调整条目权重。
```json
"quality": 2
```
-Currently, luck is only expressed when fishing with a fishing rod enchanted with Luck of the Sea.
+当前仅在使用附有"海之眷顾"附魔的钓鱼竿时生效。
-#### Tiered Pools
-Tiered pools are used to select exactly one entry from a collection.
+#### 分层池
+分层池用于从集合中精确选择一个条目。
-```json
+::: code-group
+```json [分层池示例]
{
"tiers": {
"initial_range": 2,
@@ -170,7 +169,7 @@ Tiered pools are used to select exactly one entry from a collection.
}
```
-A pool becomes tiered with the inclusion of the `"tiers"` object property:
+当包含`"tiers"`对象属性时即构成分层池:
```json
"tiers": {
@@ -181,55 +180,60 @@ A pool becomes tiered with the inclusion of the `"tiers"` object property:
}
```
-Entries in a tiered pool are *ordered*. The selected entry for a tiered pool is based on its index. To determine this index, a starting index is randomly rolled and then a batch of success rolls attempt to increment this starting index.
+分层池中的条目具有顺序性。选择过程分为两个阶段:
-The starting index is decided by rolling a random integer between 1 and the integer property `"initial_range"`. If no initial range is provided, it defaults to `1`, forcing a starting index of 1.
+1. 初始索引:在1到`"initial_range"`间随机选取整数
+2. 附加尝试:进行`"bonus_rolls"`次成功率`"bonus_chance"`的检定,每次成功索引+1
-Next, attempts are made to advanced the index using additional rolls. The count of these roll attempts is given as an integer to `"bonus_rolls"`. The chance that any such roll succeeds is given via `"bonus_chance"`. Chances for `"bonus_chance"` are out of 1, meaning `0.5` would be a 50% chance for any bonus roll to succeed. Each successful roll increases the index by 1. Both of these properties default to `0`, meaning both must be provided to use this additional rolls mechanic.
-
-The final determined index is used to select the corresponding entry as that pool's yield. Indices in tiered pools are one-indexed, meaning the first entry has an index of 1, the second has an index of 2, and so forth. If the determined index is larger than the entry count for that pool, no yield will be provided.
+最终索引对应条目将被选中(索引从1开始)。若索引超出条目总数则不产出。
::: warning
-All [conditions](#) on entries in a tiered pool are ignored. Conditions on the pool itself are still allowed.
+分层池中条目的[条件](#)将被忽略,但池级别的条件仍然有效。
:::
-### Entries
-Entries are the selectable units of a pool. Three different types of entries are available.
+### 条目(Entries)
+条目是池中的可选项,包含三种类型。
```json
-
+// 示例待补充
```
-#### Item Entries
-Item entries are the fundamental entry type for selecting loot. Item entries refer to
+#### 物品条目
+基础条目类型,用于选择具体物品。
```json
-
+// 示例待补充
```
-#### Loot Table Entries
-Loot hierarchies can be formed using loot table entries.
+#### 战利品表条目
+支持嵌套调用其他战利品表。
```json
-
+// 示例待补充
```
-#### Empty Entries
-When selected, empty entries won't yield any loot for that roll.
+#### 空条目
+选中时不产生任何物品。
```json
"type": "empty",
"weight": 4
```
-Empty entries can generally be mimicked using [a roll count](#) whose range includes 0, [random chance conditions](#), or [count functions](#) that could randomly select 0. Their primary advantage is readability when using [weighted random pools](#): denoting by weight when a roll won't yield an entry may be easier to understand.
+空条目的作用可通过[0次抽取](#)、[随机条件](#)或[数量函数](#)实现,主要优势在于提升[加权随机池](#)的可读性。
-### Functions
-Functions are what makes loot tables so powerful. They can do a wide range of tasks for each entry in your loot table. For example, they can change the amount of an item is dropped, what enchantments are present (even on items that normally cannot be enchanted), the item name, it's lore, and it can even write books! View [item functions](/loot/item-functions) for a full list of functions and how they're used.
+### 函数(Functions)
+函数赋予战利品表强大功能,可实现:
-
artifacts.json/pools/entries
+- 调整物品数量
+- 添加附魔(包括不可附魔物品)
+- 修改物品名称和描述
+- 编写书籍内容
-```json
+详见[物品函数文档](/wiki/loot/item-functions)。
+
+::: code-group
+```json [artifacts.json/pools/entries]
{
"type": "item",
"name": "minecraft:dirt",
@@ -250,12 +254,14 @@ Functions are what makes loot tables so powerful. They can do a wide range of ta
}
```
-### Conditions
-Conditions check to see if a certain criteria is met. Examples: "Was Zombie killed by Player", "Did the sword have the Looting enchantment on it? If so, what level?"
+### 条件(Conditions)
+条件用于检测特定标准是否满足,例如:
-
artifacts.json/pools/entries
+- 僵尸是否被玩家击杀
+- 武器是否附有抢夺附魔及其等级
-```json
+::: code-group
+```json [artifacts.json/pools/entries]
{
"conditions": [
{
@@ -288,5 +294,4 @@ Conditions check to see if a certain criteria is met. Examples: "Was Zombie kill
}
```
-## Overrides
-
+## 覆盖规则
\ No newline at end of file
diff --git a/docs/wiki/loot/randomized-structure-loot.md b/docs/wiki/loot/randomized-structure-loot.md
index 5140a315..34c3c1be 100644
--- a/docs/wiki/loot/randomized-structure-loot.md
+++ b/docs/wiki/loot/randomized-structure-loot.md
@@ -1,6 +1,6 @@
---
-title: Randomized Structure Loot
-category: Tutorials
+title: 随机化结构战利品
+category: 巧思案例
mentions:
- MedicalJewel105
- SirLich
@@ -8,21 +8,24 @@ mentions:
- Ciosciaa
- rebrainertv
tags:
- - easy
+ - 简单
---
-Adding loot tables to containers in structure is easy, you need to have a PC and your choice of either [NBT Studio](https://github.com/tryashtar/nbt-studio/releases/download/v1.14.1/NbtStudio.exe) (executable) or [Loot Tabler](https://mcbe-essentials.github.io/structure-editor/loot-tabler) (browser application).
+# 随机化结构战利品
-## Setup
-### Creating the Loot Table
+
-To start, create the directory `BP/loot_tables/chests` and create your loot table file here.
+为结构中的容器添加战利品表非常简单,您需要准备一台电脑,并选择使用[NBT Studio](https://github.com/tryashtar/nbt-studio/releases/download/v1.14.1/NbtStudio.exe)(可执行程序)或[Loot Tabler](https://mcbe-essentials.github.io/structure-editor/loot-tabler)(浏览器应用)。
-You can learn how to make loot tables in [Beginners Guide](/guide/loot-table)
+## 准备工作
+### 创建战利品表
-
BP/loot_tables/chests/my_structure_loot.json
+首先创建目录`BP/loot_tables/chests`,并在此处创建战利品表文件。
-```json
+您可以通过[新手指南](/wiki/guide/loot-table)学习如何制作战利品表。
+
+::: code-group
+```json [BP/loot_tables/chests/my_structure_loot.json]
{
"pools": [
{
@@ -64,62 +67,63 @@ You can learn how to make loot tables in [Beginners Guide](/guide/loot-table)
]
}
```
+:::
-### Exporting Structure
+### 导出结构
-Once you have created your loot table, export your structure into `BP/structures`. Then follow the steps for either NBT Studio or Loot Tabler
+创建好战利品表后,将结构导出到`BP/structures`目录。然后根据您选择的工具(NBT Studio或Loot Tabler)继续操作。

-## NBT Studio (Executable)
-### Software Preparation
+## NBT Studio(可执行程序)
+### 软件准备
-Download and launch [NBT Studio](https://github.com/tryashtar/nbt-studio/releases/download/v1.14.1/NbtStudio.exe)
+下载并启动[NBT Studio](https://github.com/tryashtar/nbt-studio/releases/download/v1.14.1/NbtStudio.exe)
-### Adding the Loot Table
+### 添加战利品表
-Launch NBT Studio and open file `(Ctrl + O)`
+打开NBT Studio并通过快捷键`Ctrl + O`打开文件

-Find your container (Ctrl + F)
+使用`Ctrl + F`搜索容器

-Navigate to your container, `block_position_data` > `block_entity_data`. Add a string tag
+定位到容器所在位置:`block_position_data` > `block_entity_data`。添加字符串标签

-Add `LootTable` and the file path to your loot table
+设置标签名为`LootTable`,并输入战利品表文件路径

-Save changes (Ctrl + S)
+按`Ctrl + S`保存修改
-## Loot Tabler (Browser Application)
+## Loot Tabler(浏览器应用)
:::tip
-To export a structure on mobile devices, [Download this pack.](https://mcpedl.com/export-structure-button-android-addon/)
+如需在移动设备导出结构,请[下载此资源包](https://mcpedl.com/export-structure-button-android-addon/)
:::
-### Adding the Loot Table
+### 添加战利品表
-Open the website and click "Upload". Choose your structure file.
+访问网站并点击"Upload"按钮上传结构文件

-Find your container in the containers list, making use of the information displayed under "Container Options"
+在容器列表中通过"Container Options"下方的信息定位目标容器

-Under "Loot Table", enter the path to your loot table. Set "Loot Table Seed" to blank or `0` if you want the loot to generate randomly. If you want the loot table to generate consistently, enter a specific value.
+在"Loot Table"字段输入战利品表路径。"Loot Table Seed"留空或设为`0`可实现随机生成。如需固定战利品生成,请设置特定数值

-Download your structure file and place it in `BP/structures`.
+下载修改后的结构文件并放入`BP/structures`目录
-## Testing
+## 测试验证
-Load your structure and open the container
+加载结构并打开容器查看效果
-
+
\ No newline at end of file
diff --git a/docs/wiki/loot/recipes.md b/docs/wiki/loot/recipes.md
index 03307aca..3985cd12 100644
--- a/docs/wiki/loot/recipes.md
+++ b/docs/wiki/loot/recipes.md
@@ -19,7 +19,7 @@ Recipes are the means of handling several item transactions, namely those occurr

::: tip
-Anvil interactions are handled within an [item definition](/items/item-components), not via recipe files. Loom transactions are currently unavailable.
+Anvil interactions are handled within an [item definition](/wiki/items/item-components), not via recipe files. Loom transactions are currently unavailable.
:::
No experimental toggles are required to use recipes or any of their features.
@@ -82,7 +82,7 @@ As an example, a "cold steel sword" might be crafted using the following [shaped
### Format Version
-The [format version](/guide/format-version) is intended to version the schema used for the body of a recipe. It is provided with the top-level `"format_version"` property.
+The [format version](/wiki/guide/format-version) is intended to version the schema used for the body of a recipe. It is provided with the top-level `"format_version"` property.
#/
```json
@@ -150,7 +150,7 @@ Education:
- `material_reducer`
::: tip
-Additionally, [custom crafting tables](/blocks/block-components#crafting-table) can declare a custom tag for crafting recipes to use. Custom cooking and smelting blocks and custom brewing stands are not currently available.
+Additionally, [custom crafting tables](/wiki/blocks/block-components#crafting-table) can declare a custom tag for crafting recipes to use. Custom cooking and smelting blocks and custom brewing stands are not currently available.
:::
::: tip
@@ -225,7 +225,7 @@ If a count greater than `1` is provided for an item that does not stack, an erro
:::
::: warning
-Despite having similarities to trade [table item descriptors](/loot/trade-tables#items), recipe item descriptors cannot use functions.
+Despite having similarities to trade [table item descriptors](/wiki/loot/trade-tables#items), recipe item descriptors cannot use functions.
:::
#### Identifier Additions
@@ -272,7 +272,7 @@ Crafting recipes support both crafting tables and stonecutters:
"tags": ["crafting_table", "stonecutter"]
```
-`"crafting_table"` applies to both vanilla crafting tables and the player 2 × 2 crafting grid in their inventory. There is currently no way to opt into one but not the other. Crafting recipes additionally support custom tags, linking recipes to a [crafting grid provided by a custom block](/blocks/block-components#crafting-table).
+`"crafting_table"` applies to both vanilla crafting tables and the player 2 × 2 crafting grid in their inventory. There is currently no way to opt into one but not the other. Crafting recipes additionally support custom tags, linking recipes to a [crafting grid provided by a custom block](/wiki/blocks/block-components#crafting-table).
### Shapeless Recipes
diff --git a/docs/wiki/loot/trade-tables.md b/docs/wiki/loot/trade-tables.md
index cfc19b44..6e770c4d 100644
--- a/docs/wiki/loot/trade-tables.md
+++ b/docs/wiki/loot/trade-tables.md
@@ -676,7 +676,7 @@ In trade tables, if no ID is provided, the trader's entity type will be assigned
## Overrides
-Because trade tables do not use in-data identifiers, they are overridden simply by replacing a prior trade table with a new one. You can learn more about [asset overrides here](/concepts/overwriting-assets)
+Because trade tables do not use in-data identifiers, they are overridden simply by replacing a prior trade table with a new one. You can learn more about [asset overrides here](/wiki/concepts/overwriting-assets)
Below are the currently used vanilla trade tables for each trader:
|Trader|Path|
diff --git a/docs/wiki/loot/trading-behavior.md b/docs/wiki/loot/trading-behavior.md
index e2b83983..889c6b81 100644
--- a/docs/wiki/loot/trading-behavior.md
+++ b/docs/wiki/loot/trading-behavior.md
@@ -1,32 +1,36 @@
---
-title: Trading Behavior
-category: General
+title: 交易行为
+category: 基础
nav_order: 2
mentions:
- Ciosciaa
- MedicalJewel105
---
-Making an entity a trader is accomplished via `minecraft:trade_table` or `minecraft:economy_trade_table` components. Both of them will open a trading UI from the given path, but the economy trades component has some more options referring to some Village and Pillage trading mechanics. Other AI goals you'll need are `minecraft:behavior.trade_with_player`, optionally `minecraft.behavior:trade_interest` (allows the mob to hold/offer an item) and, potentially, `"minecraft:trade_resupply": {}`.
+# 交易行为
-For a simple trading UI, `trade_table` + `trade_with_player` components should do the trick.
+
-1. Add `"minecraft:behavior.trade_with_player": {}` to your entity's components.
-2. Copy the following code into a component group of your entity. I'll call mine `"wiki:trader"`;
+通过 `minecraft:trade_table` 或 `minecraft:economy_trade_table` 组件可以将实体设置为交易者。这两个组件都会根据指定路径打开交易界面,但经济交易组件包含更多与村庄与掠夺版本交易机制相关的配置选项。其他需要添加的AI目标包括 `minecraft:behavior.trade_with_player`,可选添加 `minecraft.behavior:trade_interest`(允许生物手持/展示交易物品),以及可能需要添加 `"minecraft:trade_resupply": {}`。
-
BP/entities/trader.json
+对于基础交易界面,使用 `trade_table` + `trade_with_player` 组件即可实现。
-```json
+1. 在实体组件中添加 `"minecraft:behavior.trade_with_player": {}`
+2. 将以下代码复制到实体的组件组中(示例组件组命名为 `"wiki:trader"`):
+
+::: code-group
+```json [BP/entities/trader.json]
"minecraft:trade_table": {
- "display_name": "Trading Entity", // Text to be displayed.
- "table": "trading/trading_entity_trades.json", // Path to the trade table file
- "new_screen": true //If set to false, the UI will display as the pre-Village&Pillage one.
+ "display_name": "交易实体", // 显示的名称文本
+ "table": "trading/trading_entity_trades.json", // 交易表文件路径
+ "new_screen": true //设置为 false 时,界面会显示为村庄与掠夺版本之前的样式
}
```
+:::
-3. Now make sure the component group is added to the entity via an event. It's a good idea to add it in `minecraft:entity_spawned` event, since it triggers on spawn.
-If you don't feel confident with events and component groups, make sure you're familiar with entity definition rules/concepts. See the [Intro to Entities](/entities/entity-intro-bp).
+3. 确保通过事件添加该组件组。建议在 `minecraft:entity_spawned` 生成事件中添加,该事件会在实体生成时触发。
+若对事件和组件组的运作机制不够熟悉,建议先学习[实体入门指南](/wiki/entities/entity-intro-bp)中的相关概念。
:::warning
-If you add the component in components, it will cause all kinds of problems, including blank trading UIs for all entities in the world. Because of an issue with the trading AI goals, they must be added in component groups.
-:::
+若直接在主组件中(components)添加该组件,将会导致各种问题(包括所有实体交易界面显示空白)。由于交易类AI目标的机制问题,必须通过组件组形式添加。
+:::
\ No newline at end of file
diff --git a/docs/wiki/meta/addon-performance.md b/docs/wiki/meta/addon-performance.md
index 29d54cb4..9eca6015 100644
--- a/docs/wiki/meta/addon-performance.md
+++ b/docs/wiki/meta/addon-performance.md
@@ -1,5 +1,5 @@
---
-title: Addon Performance
+title: 附加包性能优化
mentions:
- SirLich
- Joelant05
@@ -8,211 +8,212 @@ mentions:
- SmokeyStack
---
+# 附加包性能优化
+
+
+
::: warning
-This page was compiled primarily using community feedback from multiple sources. As a result, some information may be generalized, subjective, or conflicting. Always use your own best judgment when optimizing your addons. This page is not a substitute for testing your addon on a wide range of devices.
+本页内容主要基于多方社区反馈整理。因此部分信息可能存在概括性、主观性或矛盾性。优化附加包时请始终自行判断。本页面不能替代在多种设备上实际测试附加包性能。
:::
-Performance in addons is crucial, as the most technically fantastic addon is mainly useless if the majority of the player base cannot experience it. When developing addons, it should always be considered that many Bedrock players will be experiencing your addon on a significantly lower power device than you are developing on. This is especially true for mobile users. Therefore, addons should be developed with performance in mind and tested for performance on lower-end devices when possible.
+附加包性能至关重要,因为即使技术上最出色的附加包,如果大多数玩家设备无法流畅运行也将失去意义。开发附加包时需时刻谨记,许多基岩版玩家使用性能远低于开发设备的终端进行游戏,移动端用户尤为明显。因此应从性能角度设计附加包,并尽可能在低端设备上进行测试。
-This guide is a non-exhaustive list of specific performance considerations separated by the various subsystems of Bedrock Edition. No single point should be taken as a hard and fast rule. Instead, these performance considerations should help you to recognize potential areas for improvement.
+本指南按基岩版各子系统分类,列出非详尽性能考量事项。各条目不应视为铁律,而应作为识别潜在优化领域的参考。
-## Biomes and Features
+## 生物群系与特征生成
-### Biomes
+### 生物群系
-- The biome system is generally efficient
-- Large values for heightmaps are usually handled gracefully
-- The component `climate` creates large particle storms
+- 生物群系系统整体效率较高
+- 通常能妥善处理高度图的大数值
+- `climate`组件会产生大量粒子风暴
-### Features
+### 特征生成
-- Biomes generally cause less lag than feature generation.
-- Hundreds of iterations per chunk of a multi-block feature have been achieved at a low-performance cost.
-- Thousands of iterations per chunk of multi-block features negatively impact gameplay.
-- Hundreds of thousands of iterations per chunk of a single-block feature have been achieved at a low-performance cost.
-- Thousands of instances of features *per chunk* comes at little cost.
-- Tens of thousands of feature instances *per chunk* yields a noticeable impact on chunk loading.
-- Hundreds of thousands of instances of features *per chunk* slows chunk loading to an unbearable crawl.
+- 生物群系生成通常比特征生成更少卡顿
+- 单个区块内执行数百次多方块特征迭代性能损耗较低
+- 单个区块内数千次多方块特征迭代将显著影响游戏体验
+- 单个区块内执行数十万次单方块特征迭代性能损耗较低
+- 单个区块内数千个特征实例性能成本较低
+- 单个区块内数万个特征实例会显著影响区块加载
+- 单个区块内数十万特征实例将导致区块加载极度缓慢
-## Blocks
+## 方块
-### Materials
+### 材质
-- The minimum needed material type with regards to rendering should always be utilized
-> `alpha_blend` performance is worse than `alpha_test`, which is worse than `opaque`
+- 应始终使用渲染需求最低的材质类型
+> `alpha_blend`性能差于`alpha_test`,后者又差于`opaque`
-### Quantity and Type
+### 数量与类型
-- Flowing liquids should be avoided and minimized
+- 应尽量避免并减少流动液体
-### Updates
+### 更新
-- Block updates should be minimized
+- 应尽量减少方块更新
-## Commands
+## 命令
-### Quantity and Type
+### 数量与类型
-- Minimize the number of commands run per tick
-> `/effect` and `/gamemode` run every tick are avoidable and have a significant performance impact
-- Large clones, fills and structure loads during runtime should be avoided
-> Breaking these more extensive operations into multiple commands distributed over multiple ticks will avoid lag spikes, consider using structure loading animations
+- 最小化每tick执行的命令数量
+> 每个tick执行`/effect`和`/gamemode`等命令应避免,这些操作对性能影响显著
+- 应避免在运行时进行大规模clone、fill和结构加载
+> 将大型操作拆分为多tick执行的多个命令可避免卡顿,建议使用结构加载动画
-### Selectors
+### 选择器
-- Care should be taken to ensure a function is not executed on too many entities, and therefore too many times
-- Executing a scoreboard command outweighs the cost of running an entity selector multiple times
-- Using c=1 to ensure the selector stops when it finds one entity may improve performance
-- When executing multiple commands with the same selector, use a function instead to avoid repeatedly resolving the same selector
+- 需注意避免对过多实体执行函数导致执行次数过多
+- 执行记分板命令的成本高于多次运行实体选择器
+- 使用c=1确保选择器在找到第一个实体后停止可提升性能
+- 使用相同选择器执行多个命令时,应改用函数避免重复解析
-### Tags vs. Scoreboards
+### 标签与记分板
-- Scoreboards perform better at a large scale than tags
+- 记分板在大规模使用时性能优于标签
-## Entities
+## 实体
-- Entities generally have one of the most significant performance impacts by subsystem and thus should be minimized where possible
+- 实体通常是各子系统中性能影响最大的要素,应尽可能减少
-### Components
+### 组件
-- Pathfinding on flying mobs has a significant performance cost
-- Flying mobs in general encounter performance problems
-> Faking flying mobs via animation should be considered if possible
+- 飞行生物寻路计算性能消耗显著
+- 飞行生物通常存在性能问题
+> 如有可能,建议通过动画模拟飞行生物
-### Dummy Entities
+### 虚拟实体
-- Dummy entities generally have equal performance impact to proper entities, except when excluding heavy components like pathfinding
+- 虚拟实体与常规实体性能影响相当(不含寻路等重型组件时)
-### Geometry
+### 几何结构
-#### Bones
+#### 骨骼
-- No performance impact has been observed regarding bone count
+- 骨骼数量未观测到明显性能影响
-#### Elements
+#### 元素
-- Element count is not generally an issue, except in extreme cases when thousands of elements are reached
+- 除极端情况(数千元素)外,元素数量通常不成问题
-### Materials
+### 材质
-- The minimum material required to achieve the desired effect should always be used
-- When in doubt, refer to the material definition files to get an idea of the costs of various materials, taking the material inheritance system into account
+- 应始终使用实现预期效果所需的最低材质
+- 不确定时可参考材质定义文件,同时考虑材质继承系统
-### Quantity
+### 数量
-- Loaded entities at any given time should be minimized
-> Below 30 is optimal
+- 应尽量减少任意时刻加载的实体数量
+> 保持30个以下为最佳
-## Lighting
+## 光照
-### Map Considerations
+### 地图设计
-- Hollow areas will cause lag due to lighting calculations even if you don't see them
-> Avoid this by filling in unused enclosed areas
-- Keeping the map set to day or night will avoid lighting recalculation
+- 空心区域即使不可见仍会导致光照计算卡顿
+> 填充未使用的封闭空间可避免此问题
+- 保持昼夜恒定可避免光照重新计算
-### Sources
+### 光源
-- Bedrock lighting is calculated dynamically, meaning different light sources have different performance costs
-> Light blocks are the most performant because they lack particles, rendering, and particular state logic
+- 基岩版动态计算光照,不同光源性能成本不同
+> 光源方块性能最佳(无粒子、渲染和特殊状态逻辑)
-> Torches are a minor performance issue because they emit particles, render, and have particular state logic dependent on what block they connect to
+> 火把因产生粒子、渲染和连接状态逻辑存在较小性能问题
-> Custom light blocks with minimal components are a reasonable compromise between performance and aesthetics
+> 含最少组件的自定义光源方块是性能与美观的合理折中
-#### Comparison Table
+#### 对比表格
-| Light Source | Score | Redstone Updates | Animted Texture | Light Updates | Tick Updates | Particles | Renders |
-| ---------------: | :---: | :--------------: | :-------------: | :-----------: | :----------: | :-------: | :-----: |
-| Light Blocks | 1 | False | False | True | False | False | False |
-| Lanterns | 4 | False | True | True | True | False | True |
-| Custom Blocks | 2 | False | False | True | False | False | True |
-| Mushrooms | 3 | False | False | True | True | False | True |
-| Redstone Lamps | 3 | True | False | True | False | False | True |
-| Glowstone | 3 | True | False | True | True | False | True |
-| Sea Lanterns | 4 | False | True | True | True | False | True |
-| Torches | 4 | False | False | True | True | True | True |
-| Redstone Torches | 5 | True | False | True | True | True | True |
+| 光源类型 | 评分 | 红石更新 | 动画纹理 | 光照更新 | Tick更新 | 粒子效果 | 渲染 |
+| ---------------: | :--: | :------: | :------: | :------: | :------: | :------: | :--: |
+| 光源方块 | 1 | 否 | 否 | 是 | 否 | 否 | 否 |
+| 灯笼 | 4 | 否 | 是 | 是 | 是 | 否 | 是 |
+| 自定义方块 | 2 | 否 | 否 | 是 | 否 | 否 | 是 |
+| 蘑菇 | 3 | 否 | 否 | 是 | 是 | 否 | 是 |
+| 红石灯 | 3 | 是 | 否 | 是 | 否 | 否 | 是 |
+| 荧石 | 3 | 是 | 否 | 是 | 是 | 否 | 是 |
+| 海晶灯笼 | 4 | 否 | 是 | 是 | 是 | 否 | 是 |
+| 火把 | 4 | 否 | 否 | 是 | 是 | 是 | 是 |
+| 红石火把 | 5 | 是 | 否 | 是 | 是 | 是 | 是 |
## Molang
-### Recursion
+### 递归
-- Minimize use of recursion when possible
-- Intense nested loop structures will cause performance issues
-- Use break to escape loops when possible
+- 尽量减少递归使用
+- 深度嵌套循环结构会导致性能问题
+- 适时使用break跳出循环
-### Structs
+### 结构体
-- Avoid making structs too deep, as there is a performance cost with each layer
+- 避免结构体过深,每层嵌套均有性能损耗
-### Variables
+### 变量
-- Use temp variables when possible to minimize variables loaded in memory
-- Consider how often variables are calculated based on script type
+- 尽量使用临时变量减少内存占用
+- 根据脚本类型考虑变量计算频率
-## Textures
+## 纹理
### texture_list.json
-- Tons of textures badly affect game performance. Create a [`texture_list.json`](/concepts/textures-list) file.
+- 过多纹理严重影响性能,请创建[`texture_list.json`](/wiki/concepts/textures-list)文件
-### Quantity
+### 数量
-- No more than 3000 textures should be used
-> This is due to limits imposed by Render Dragon
+- 建议不超过3000个纹理
+> Render Dragon引擎限制为4096个纹理,1.16版本原版已有800个
-> Render Dragon has a 4096 texture quantity limit, and there are 800 vanilla textures as of 1.16
+### 分辨率
-### Resolution
+- 最大支持16384x16384
+- 推荐最大4096x4096以保证低端设备兼容性
+- 注意纹理图集化处理,大尺寸纹理可能影响低端设备图集生成
+- 根据可视距离需求确定必要纹理尺寸
-- The maximum texture resolution is 16384x16384
-- The recommended maximum texture resolution is 4096x4096 to maintain compatibility with low-end devices
-- Keep in mind that textures are atlased, and larger textures can mess with atlas generation on lower-end devices
-- Only make textures as significant as needed to convey the detail needed at the needed distance
+## 交易系统
-## Trades
+村民交易在达到60项以上时会导致性能问题甚至全设备崩溃。建议拆分交易至多个村民或自定义实体/NPC,测试表明30项交易是安全阈值。
+*可能与JSON界面系统有关*
-Villager trades cause performance issues and even crashes on all devices at 60 trades or greater. Avoid tons of trades for one entity.
-Your best bet to resolve this issue is to split your trades in half and move them to another villager or custom entity/npc, 30 trades is a good safe number from testing.
-*probably JSON UI issues*
+## 音效
-## Sounds
+### 数量
-### Count
+- 已注册音效总数会影响性能
-- Total registered sounds are reported to have an impact on performance
+### 压缩
-### Compression
+- 音效压缩显著减小包体积
+- 在Switch等老旧/低功耗设备上效果明显
+- 基岩版使用的FMod简单API会将所有音效解压为WAV格式后加载至内存,CPU性能无提升
+> 流式音频不在此列
-- Sound compression is exceptionally beneficial to pack size
-- This is especially noticeable on older and low power devices, such as the Switch
-- The FMod simple API utilized by Bedrock decompresses all sounds into WAV before loading into RAM, meaning no CPU performance improvement in this respect
-> If audio is streamed, this does not occur
+### 流式处理
-### Streaming
+- 体积超过500KB或时长超过1分钟的音效应采用流式处理
-- As general guidance, sounds over 500kb in size or 1 minute in length should be streamed
+## 红石
-## Redstone
+### 区块边界
-### Chunk Boundaries
+- 应避免红石电路跨越区块边界
-- Crossing chunk boundaries with Redstone should be avoided
+### 命令方块
-### Command Blocks
+- 构建大型命令链时应垂直堆叠于单个区块内
+- 尽可能用函数和行为包替代命令方块
-- When creating large command blockchains, stack vertically and in a single chunk
-- Minimize command block use in favor of functions and behaviors where possible
+## 常加载区域
-## Ticking Areas
+- 总区块数比常加载区域更需关注
+- 非必要时应避免动态区域
+- 最佳实践是将常加载区域限制在单个区块
+> 所有持续运行的红石装置应置于此区块
+- 通过/testforblock测试并及时卸载不再需要的常加载区域
-- Total chunks are of more significant concern than ticking areas
-- Dynamic areas should be avoided unless necessary
-- Best practice is to minimizing the ticking area to one chunk if possible
-> All always-on Redstone should fit in this ticking chunk
-- Unload ticking areas when they are no longer needed, testing via /testforblock
+## 文件管理
-## Files
-
-- Tons of files can badly affect game performance. Create a [`contents.json`](/concepts/contents) file.
+- 过多文件严重影响性能,请创建[`contents.json`](/wiki/concepts/contents)文件
\ No newline at end of file
diff --git a/docs/wiki/meta/jq.md b/docs/wiki/meta/jq.md
index a62e74b0..94a28244 100644
--- a/docs/wiki/meta/jq.md
+++ b/docs/wiki/meta/jq.md
@@ -1,5 +1,5 @@
---
-title: Creating addons with JQ
+title: 使用JQ创建附加组件
hidden: true
mentions:
- SirLich
@@ -7,148 +7,204 @@ mentions:
- MedicalJewel105
---
-## Introduction
+# 使用JQ创建附加组件
-> "jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text."
+
+
+## 引言
+
+> "jq就像处理JSON数据的sed工具 - 你可以用它来切片、过滤、映射和转换结构化数据,其便捷程度如同用sed、awk、grep等工具处理文本一般。"
_— https://stedolan.github.io/jq/_
-jq is a JSON editing program written in C. It can be thought of similarly to Perl. Because it was explicitly written to parse JSON, however, it has many valuable features that are not present in other text processors. jq defines its programs as filters, as they take an input, your JSON data, and produce an output, your modified JSON data. Though seemingly simple, jq contains many advanced features that can be extremely useful when procedurally generating addon files.
+jq是一款用C语言编写的JSON处理工具,其理念类似于Perl。由于它是专门为解析JSON设计的,因此具备许多其他文本处理器所没有的实用特性。jq将其程序定义为过滤器,这些过滤器接收JSON数据输入并输出修改后的JSON数据。虽然看似简单,但jq包含了许多高级功能,在程序化生成附加组件文件时极其有用。
-I'll be explaining jq from the perspective that jq is a command-line interface. However, wrappers have been designed for jq in essentially every programming language, so you can easily incorporate jq filters into the programing language of your choice, including Go, JavaScript, Java, Ruby, Python, and R. Given that, I will primarily focus on filter design from the perspective of Minecraft addons, and I'll leave the implementation to your specific use case. I'll be including embeds from [jqterm.com](https://jqterm.com/?query=.), which uses a JavaScript implementation of jq to display filters in a web browser.
+本文将从命令行界面角度解释jq的使用。不过jq基本上已为所有主流编程语言提供了封装器,您可以轻松将jq过滤器集成到Go、JavaScript、Java、Ruby、Python、R等语言中。本文将重点讲解针对Minecraft附加组件开发的过滤器设计,具体实现方式可根据实际需求选择。
-## Getting jq
+## 获取jq
-The official source to download the jq binaries is https://stedolan.github.io/jq/download/. The executables downloaded here should be essentially portable and just "run".
+官方下载地址:https://stedolan.github.io/jq/download/,下载的可执行文件即开即用。
-You may also use your system package manager, though if you take this approach, ensure that the version installed is the latest, jq-1.6.
+也可以通过系统包管理器安装(需确保版本≥jq-1.6)。
-A community-maintained list of the wrappers available for jq in various languages is available [here](https://github.com/fiatjaf/awesome-jq).
+各语言封装器列表详见:[awesome-jq](https://github.com/fiatjaf/awesome-jq)
-## Defining Syntax
+## 基础语法
-### The Dot
+### 点操作符
-The simplest possible filter in jq is the dot (`.`), which will take the input JSON and return it unchanged. jq uses the standardized path notation for JSON files. Consider the following structure of a resource pack manifest:
+最简单的jq过滤器是点号(`.`),它原样返回输入JSON。以下面这个资源包清单为例:
-
-
-### Paths
-
-Here, we see that our `.` filter returns what we expected: the entire JSON file. Now, let's say we wanted to return some specific part of the JSON file, the header UUID, for example. We would then construct a filter that contains the full path to that value. In this case, that would be `.header.uuid`. Let's see that in action:
-
-
-
-### Array Access
-
-We can access arrays in jq similarly to how we would in other languages. Let's say we wanted to return the last number in our minimum engine version array. We would construct the following filter: `.header.min_engine_version[-1]`. Note that, of course, we could also specify the positive position 2 if we always wanted to return to the second position. Simply using empty brackets, `.[]`, will return all array elements in a line separated list. Feel free to play around with this and learn the basics:
-
-
-
-### Editing Values
-
-Now let's get into the real meat of jq and start manipulating our JSON data. The way we do this is with the plain assignment operator (`=`). There are a few variants of this operator, referred to as update-assignment operators, such as `|=` and `+=`, which you can read more about in jq's official [manual](https://stedolan.github.io/jq/manual/#Assignment), and experiment within the example below:
-
-
-
-### The Pipe
-
-Similar to UNIX command-line interfaces, jq makes use of the pipe, `|`. When you use the pipe character, you are essentially telling jq to take the result of your filter on the left of the pipe and run it through the filter to the pipe's right. Let's go back to our array access example, except this time. We will output the entire array apply some filter to the output array. We'll use jq's built-in map function to demonstrate this, which is a handy function as it can be used to apply a specified filter to every value in an input array. We'll add 1 to each value in the minimum engine version array:
-
-
-
-### Logical Operations
-
-#### If, Then, Else
-
-Logical statements in jq are essentially written in a human-readable format. They take the form `if A then B else C end`. 'A' in this case could test for a specific value or test if some key exists. More conditions can be added with elif in the form `if A then B elif C then D else E end`. For comparisons, the operators are essentially the same as Molang, utilizing `==`, `!=`, `>`, `>=`, `<`, and `<=`. In the example below, we'll conditionally change the description of the pack based on the format version. If the format version is greater than 1, we'll set the description to "Big Format". Otherwise, we'll leave the description alone:
-
-
-
-#### And, Or, Not
-
-The operations `and` and `or` are also written in plain English. If we wanted to test for condition 'A' and condition 'B', we'd write `if (A and B) then C else D`.
-
-The operation `not` behaves like a single argument function, which we'll discuss in further depth below. When we pipe some boolean into `not`, it will return the opposite value. We'll demonstrate this by setting our header description to "Little Version" only if both our header version and module version are not greater than 1:
-
-
-
-### Variables
-
-Variables can be defined anywhere in filter. When a variable is defined, it is valid for use anywhere downstream in the pipe from where it was initially defined. They are defined in the form: `.input as $var | $var`, which would effectively return `.input`. Any valid JSON type can also serve as an input, such as objects, arrays, strings, and numbers. Take the simple example:
-
-
-
-## Builtin Functions
-
-### Syntax
-
-jq comes with a variety of built-in functions. We've already encountered the function `map` while explaining the pipe. One thing of note regarding jq functions is that their syntax differs depending on the number of arguments they take. Multi-argument functions will take their values enclosed in parentheses and separated by semicolons. In contrast, for single-argument functions, the input is piped in. Take the example below, in which we use the multi-argument function pow to raise the format version to the third power, while we also use the single argument function sqrt to find the square root of the format version. In this example, you'll also note that we introduce the concept of building an entirely new JSON structure within our jq filter. This is extremely useful in situations where we'd like to reshape some input files somehow. It's always important to keep in mind that any valid JSON is valid anywhere in a jq filter:
-
-
-
-### Math
-
-jq incorporates C-style math functions and generally carries over all built-in C math functions from your system. Refer to the [manual](https://stedolan.github.io/jq/manual/#Math) for a complete list of these.
-
-### Map and Map Values
-
-We've already seen a bit of what `map` can do, as seen in the pipe section. I'll explain a bit about its cousin, `map_values`. While `map` can apply some filter to all values in an array, `map_values` apply some filter to all keys in an input list of objects. In the example below, I'll introduce `map_values` and a couple of extra functions. Our goal will be to substitute the string "Example" with "Production" by iterating through all the values with the typed string under the header. We must separate the string values from the array values, as we cannot perform the function we will use to make this substitution, `gsub`, on arrays. The function `gsub` is a multi-argument function that will take the substring we would like to change, followed by the result we'd like to change that substring to. We'll also be utilizing the `select` function to separate our strings from our arrays. We'll incorporate a variable so we have easy access to all the information contained in the header. We'll use the function `type`, which lets us check the JSON data type of input.
-
-
-
-### To and From Entries
-
-The function `to_entries` is a useful single argument jq builtin that is helpful when we'd like to rearrange keys and values. Let's say we wanted to invert all the key/value pairs in the header. Using `to_entries`, we'll construct an array of all key-value pairs in the header, reformatted as objects, and assigned "key" or "value" to reference them later. To understand how this function works, it's important to see what this intermediate looks like. Note that this can also be reversed by appending `from_entries`:
-
-
-
-Now, we'll use `map` to iterate through each array entry, and finally, we'll introduce a new function, add. This single-argument function will take the array of objects output by `map` and essentially move them up one level to again exist as key-value pairs under the header. We'll also need to convert all our values to strings so they can serve as keys. We'll use the single-argument function `tostring`. Note that `tonumber` is the inverse of this:
-
-
-
-### Walk
-
-The function `walk` is compelling, as it will recursively apply to everything in the input at all levels. Take the example of deleting all objects with the value null. We'll also be introducing the function `with_entries`, which is just a shorthand for `to_entries | map(some filter) | from_entries`. We'll start our filter with `walk`, indicating we want to go through everything. We'll then use an if statement to ensure we are only editing objects. Else we'll leave the input unchanged. For all objects, we'll use `with_entries` to convert those to mapped keys and values and run a `select` function on those to ensure we only carry on values that are not equal to null:
-
-
-
-### Further Reading
-
-Jq has far too many functions to list off here. I've tried to explain those that I find most useful in my jq projects. For further reading, refer to the [jq manual](https://stedolan.github.io/jq/manual/).
-
-## Defining Custom Functions
-
-In jq, one can easily define custom functions with the syntax `def function_name($input1; $input2): some function;`. The variables can then be used all throughout the function. A function can also have no input. Take the boiler plate examples below:
-
-
-
-## Command Line Use
-
-When invoked from the command line, jq takes the form `jq '[filter]' input.json`. This will only display the output in the terminal. For bash-based systems, simply use the arrow operator, `jq '[filter]' input.json > output.json` to write an output file. If you wish to overwrite the input file on the fly, this method will not work. You will need to generate a temp file or use a utility like Sponge from [moreutils](https://rentes.github.io/unix/utilities/2015/07/27/moreutils-package/). Then, you may simply `jq '[filter]' input.json | sponge input.json`. For large filters, it's generally easier to employ a shell or bash script. You may use the -n flag to construct a JSON file from scratch rather than specify an input. Finally, you may pass terminal variables to be used in your jq filters as follows:
-
-```
-jq -n --arg jqvar1 $var1 --arg jqvar2 $var2 '
+::: code-group
+```json [资源包清单]
{
-"var1": $jqvar1,
-"var2": $jqvar2
+ "format_version": 2,
+ "header": {
+ "name": "Example Pack",
+ "uuid": "c35537fa-c79d-fd77-cd89-551b7487abed",
+ "min_engine_version": [1, 16, 0]
+ },
+ "modules": [
+ {
+ "type": "resources",
+ "uuid": "199ed596-c0f7-158c-db7d-2da8510690c5",
+ "version": [1, 0, 0]
+ }
+ ]
+}
+```
+:::
+
+### 路径访问
+
+要获取header的UUID,使用路径表达式`.header.uuid`:
+
+::: code-group
+```json [输出结果]
+"c35537fa-c79d-fd77-cd89-551b7487abed"
+```
+:::
+
+### 数组操作
+
+访问数组元素示例(获取最低引擎版本的最后一位):
+`.header.min_engine_version[-1]`
+
+::: code-group
+```json [输出结果]
+0
+```
+:::
+
+### 值修改
+
+使用赋值运算符修改格式版本:
+`.format_version = 3`
+
+::: code-group
+```json [修改结果]
+{
+ "format_version": 3, // 此处被修改
+ "header": {
+ ...
+ }
+}
+```
+:::
+
+### 管道操作
+
+结合map函数对数组元素进行运算:
+`.header.min_engine_version | map(. + 1)`
+
+::: code-group
+```json [运算结果]
+[2, 17, 1]
+```
+:::
+
+### 逻辑运算
+
+#### 条件判断
+
+根据format_version修改描述文本:
+```jq
+if .format_version > 1 then
+ .header.description = "大版本"
+else
+ .
+end
+```
+
+#### 逻辑组合
+
+复合条件判断示例:
+```jq
+if (.header.version[0] > 1 and (.modules[0].version[0] > 1 | not))
+then
+ .header.description = "小版本"
+end
+```
+
+### 变量定义
+
+变量作用域贯穿后续管道:
+```jq
+{hello: "world"} as $var | $var | .hello
+```
+
+## 内置函数
+
+### 数学运算
+
+使用幂函数和平方根函数:
+```jq
+{
+ "三次幂": pow(.format_version; 3),
+ "平方根": .format_version | sqrt
+}
+```
+
+### 映射处理
+
+使用map_values进行全局字符串替换:
+```jq
+.header as $header |
+.header = ($header | map_values(
+ (select(type == "string") | gsub("示例"; "生产版")
+)) + ($header | map_values(select(type != "string")))
+```
+
+### 键值转换
+
+使用to_entries重构键值对:
+```jq
+.header | to_entries | map({(value|tostring): key}) | add
+```
+
+### 递归处理
+
+使用walk清理空值:
+```jq
+walk(if type == "object" then
+ with_entries(select(.value != null))
+else . end
+```
+
+## 自定义函数
+
+函数定义语法示例:
+```jq
+def 加法函数($a; $b):
+ $a + $b;
+
+def 无参函数:
+ 1 + 1;
+
+{
+ "组合字符串": 加法函数("合并"; "字符串"),
+ "简单计算": 无参函数
+}
+```
+
+## 命令行应用
+
+基础使用格式:
+```bash
+jq '[过滤器]' 输入文件.json > 输出文件.json
+```
+
+带参数调用:
+```bash
+jq -n --arg 变量1 $值1 --arg 变量2 $值2 '
+{
+ "参数1": $变量1,
+ "参数2": $变量2
}'
```
-## Bringing It All Together
+## 实战案例
-Many of the previous examples are abstract and contrived, designed to allow you to become familiar with the basics of jq. Now, I'd like to go over an example of a practical use case of jq. I'll be explaining the jq filter I wrote for converting a Java model to a Bedrock model for use as an attachable while remapping all its UV values.
+将Java版模型转换为基岩版可附着物模型的完整jq脚本(含UV重映射):
-First, we'll define a simple variable to change the name of our model geometry easily. Next, we'll define a function to deal with our elements, `element_array`. We'll first get some information from the array of textures from our Java model to know how many textures we have, what order they're in, and therefore how to shift our UV values. Now that we've defined all our variables from our texture array, which we'll use later in UV calculations, we'll start to map our elements array.
-
-Iterating through each element in our array of elements, we'll calculate our origin and size. We can use simple math from jq to do this. To go from Java to Bedrock, we'll need to change 2 absolute corner positions to one origin value and one size value. We'll also shift our X and Z coordinates by 8 to account for the different centering of coordinate systems between Bedrock and Java.
-
-Now, we'll deal with rotation. The way Java defines its rotations uses a string followed by a value, but we'd like to construct an array based on that. We can do so with a reasonably simple if, then, else statement. Since rotation is optional, we'll just set that to null for now if we don't have a rotation. We can delete that later. Next, we'll set the element pivot, shifting by 8 on the X and Z due to the coordinate difference and setting to null if we lack a pivot.
-
-We will then calculate our UV values. I wish to shift all our UV's as if we are generating a single square texture atlas from our input textures. We'll define a nested function, `uv_calc`, here. We'll then use some modular division via the `fmod` function to figure out the offsets. Finally, we'll change Java's four coordinate style UV system to Bedrock's, which uses a point value and a size value, with simple arithmetic. We'll then run the function for each of the six faces of our element, and finally, use `walk` to remove any objects with the value null.
-
-To make our geometry compatible with custom blocks, we'll define the function `pivot_groups`, which we'll ultimately use to iterate over our element array, find all unique rotation pivot combinations, and create a bone for all elements that share a rotation-pivot variety.
-
-Lastly, we'll put down the structure of our actual geometry file. We'll concatenate in our model name, use our `element_array` function to bring in all our cubes with no rotation, and add in our special pivot groups. We'll use the map to give each group a unique name, iterating up one value each time.
-
-This filter is a little heavy, so I've linked it on a separate page rather than embedding it [here](https://jqterm.com/85a349e33fd8709ceb0c64be6b63c497?query=%22test%22%20as%20%24model_name%20%7C%0A%0Adef%20element_array%3A%0A%20%20%20%20%28.textures%20%7C%20to_entries%20%7C%20sort_by%28.key%29%20%7C%20map%28%7B%28.key%29%3A%20.value%7D%29%20%7C%20add%20%7C%20keys_unsorted%29%20as%20%24texture_array%0A%20%20%20%20%7C%20%28%24texture_array%20%7C%20length%29%20as%20%24frames%0A%20%20%20%20%7C%20%28%28%24frames%20%7C%20sqrt%29%20%7C%20ceil%29%20as%20%24sides%0A%20%20%20%20%7C%20%28.texture_size%5B1%5D%20%2F%2F%2016%29%20as%20%24t1%0A%20%20%20%20%7C%20.elements%20%7C%20map%28%7B%0A%20%20%20%20%20%20%22origin%22%3A%20%5B%28-.to%5B0%5D%20%2B%208%29%2C%20%28.from%5B1%5D%29%2C%20%28.from%5B2%5D%20-%208%29%5D%2C%0A%20%20%20%20%20%20%22size%22%3A%20%5B.to%5B0%5D%20-%20.from%5B0%5D%2C%20.to%5B1%5D%20-%20.from%5B1%5D%2C%20.to%5B2%5D%20-%20.from%5B2%5D%5D%2C%0A%20%20%20%20%20%20%22rotation%22%3A%20%0A%20%20%20%20%20%20%28if%20%28.rotation.axis%29%20%3D%3D%20%22x%22%20then%20%5B%28.rotation.angle%20%7C%20tonumber%20*%20-1%29%2C%200%2C%200%5D%20%0A%20%20%20%20%20%20%20%20elif%20%28.rotation.axis%29%20%3D%3D%20%22y%22%20then%20%5B0%2C%20%28.rotation.angle%20%7C%20tonumber%20*%20-1%29%2C%200%5D%20%0A%20%20%20%20%20%20%20%20elif%20%28.rotation.axis%29%20%3D%3D%20%22z%22%20then%20%5B0%2C%200%2C%20%28.rotation.angle%20%7C%20tonumber%29%5D%20%0A%20%20%20%20%20%20%20%20else%20null%20end%29%2C%0A%20%20%20%20%20%20%22pivot%22%3A%20%28if%20.rotation.origin%20then%20%5B%28-%20.rotation.origin%5B0%5D%20%2B%208%29%2C%20.rotation.origin%5B1%5D%2C%20%28.rotation.origin%5B2%5D%20-%208%29%5D%20else%20null%20end%29%2C%0A%20%20%20%20%20%20%22uv%22%3A%20%28%0A%20%20%20%20%20%20%20%20def%20uv_calc%28%24input%29%3A%0A%20%20%20%20%20%20%20%20%20%20%28if%20%28.faces%20%7C%20.%5B%24input%5D%29%20then%0A%20%20%20%20%20%20%20%20%20%20%28.faces%20%7C%20.%5B%24input%5D.texture%5B1%3A%5D%20as%20%24input_n%20%7C%20%24texture_array%20%7C%20%28index%28%24input_n%29%20%2F%2F%20index%28%22particle%22%29%29%29%20as%20%24pos_n%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B0%5D%20%2F%20%24sides%29%20%2B%20%28%28fmod%28%24pos_n%3B%20%24sides%29%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn0%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B1%5D%20%2F%20%24sides%29%20%2B%20%28%28%28%24pos_n%20%2F%20%24sides%29%20%7C%20floor%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn1%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B2%5D%20%2F%20%24sides%29%20%2B%20%28%28fmod%28%24pos_n%3B%20%24sides%29%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn2%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B3%5D%20%2F%20%24sides%29%20%2B%20%28%28%28%24pos_n%20%2F%20%24sides%29%20%7C%20floor%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn3%20%7C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22uv%22%3A%20%5B%28%24fn0%29%2C%20%28%24fn1%29%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22uv_size%22%3A%20%5B%28%24fn2%20-%20%24fn0%29%2C%20%28%24fn3%20-%20%24fn1%29%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20null%20end%29%3B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22north%22%3A%20uv_calc%28%22north%22%29%2C%0A%20%20%20%20%20%20%20%20%22south%22%3A%20uv_calc%28%22south%22%29%2C%0A%20%20%20%20%20%20%20%20%22east%22%3A%20uv_calc%28%22east%22%29%2C%0A%20%20%20%20%20%20%20%20%22west%22%3A%20uv_calc%28%22west%22%29%2C%0A%20%20%20%20%20%20%20%20%22up%22%3A%20uv_calc%28%22up%22%29%2C%0A%20%20%20%20%20%20%20%20%22down%22%3A%20uv_calc%28%22down%22%29%0A%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%7D%29%20%7C%20walk%28%20if%20type%20%3D%3D%20%22object%22%20then%20with_entries%28select%28.value%20!%3D%20null%29%29%20else%20.%20end%29%3B%0A%0Adef%20pivot_groups%3A%0A%20%20%20%20%28element_array%29%20as%20%24element_array%20%7C%0A%20%20%20%20%5B%5B.elements%5B%5D.rotation%5D%20%7C%20unique%20%7C%20.%5B%5D%20%7C%20select%20%28.!%3Dnull%29%5D%0A%20%20%20%20%7C%20map%28%28%0A%20%20%20%20%5B%28-%20.origin%5B0%5D%20%2B%208%29%2C%20.origin%5B1%5D%2C%20%28.origin%5B2%5D%20-%208%29%5D%20as%20%24i_piv%20%7C%0A%20%20%20%20%28if%20%28.axis%29%20%3D%3D%20%22x%22%20then%20%5B%28.angle%20%7C%20tonumber%20*%20-1%29%2C%200%2C%200%5D%20%0A%20%20%20%20%20%20elif%20%28.axis%29%20%3D%3D%20%22y%22%20then%20%5B0%2C%20%28.angle%20%7C%20tonumber%20*%20-1%29%2C%200%5D%20%0A%20%20%20%20%20%20else%20%5B0%2C%200%2C%20%28.angle%20%7C%20tonumber%29%5D%20end%29%20as%20%24i_rot%20%7C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_z%22%2C%0A%20%20%20%20%20%20%22pivot%22%3A%20%28%24i_piv%29%2C%0A%20%20%20%20%20%20%22rotation%22%3A%20%28%24i_rot%29%2C%0A%20%20%20%20%20%20%22mirror%22%3A%20true%2C%0A%20%20%20%20%20%20%22cubes%22%3A%20%5B%28%24element_array%20%7C%20.%5B%5D%20%7C%20select%28.rotation%20%3D%3D%20%24i_rot%20and%20.pivot%20%3D%3D%20%24i_piv%29%29%5D%0A%20%20%20%20%7D%29%29%3B%0A%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22format_version%22%3A%20%221.16.0%22%2C%0A%20%20%20%20%20%20%22minecraft%3Ageometry%22%3A%20%5B%7B%0A%20%20%20%20%20%20%20%20%22description%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22identifier%22%3A%20%28%22geometry.geysercmd.%22%20%2B%20%28%24model_name%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%22texture_width%22%3A%2016%2C%0A%20%20%20%20%20%20%20%20%20%20%22texture_height%22%3A%2016%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_width%22%3A%204%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_height%22%3A%204.5%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_offset%22%3A%20%5B0%2C%200.75%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22bones%22%3A%20%28%5B%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22binding%22%3A%20%22c.item_slot%20%3D%3D%20%27head%27%20%3F%20%27head%27%20%3A%20q.item_slot_to_bone_name%28c.item_slot%29%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_x%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_y%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_x%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_z%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_y%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%22cubes%22%3A%20%5B%28element_array%20%7C%20.%5B%5D%20%7C%20select%28.rotation%20%3D%3D%20null%29%29%5D%0A%20%20%20%20%20%20%20%20%7D%5D%20%2B%20%28pivot_groups%20%7C%20map%28del%28.cubes%5B%5D.rotation%29%29%20%7C%20to_entries%20%7C%20map%28%20%28.value.name%20%3D%20%22rot_%5C%281%2B.key%29%22%20%29%20%7C%20.value%29%29%29%0A%20%20%20%20%20%20%7D%5D%0A%20%20%20%20%7D).
+[完整转换脚本示例](https://jqterm.com/85a349e33fd8709ceb0c64be6b63c497?query=%22test%22%20as%20%24model_name%20%7C%0A%0Adef%20element_array%3A%0A%20%20%20%20%28.textures%20%7C%20to_entries%20%7C%20sort_by%28.key%29%20%7C%20map%28%7B%28.key%29%3A%20.value%7D%29%20%7C%20add%20%7C%20keys_unsorted%29%20as%20%24texture_array%0A%20%20%20%20%7C%20%28%24texture_array%20%7C%20length%29%20as%20%24frames%0A%20%20%20%20%7C%20%28%28%24frames%20%7C%20sqrt%29%20%7C%20ceil%29%20as%20%24sides%0A%20%20%20%20%7C%20%28.texture_size%5B1%5D%20%2F%2F%2016%29%20as%20%24t1%0A%20%20%20%20%7C%20.elements%20%7C%20map%28%7B%0A%20%20%20%20%20%20%22origin%22%3A%20%5B%28-.to%5B0%5D%20%2B%208%29%2C%20%28.from%5B1%5D%29%2C%20%28.from%5B2%5D%20-%208%29%5D%2C%0A%20%20%20%20%20%20%22size%22%3A%20%5B.to%5B0%5D%20-%20.from%5B0%5D%2C%20.to%5B1%5D%20-%20.from%5B1%5D%2C%20.to%5B2%5D%20-%20.from%5B2%5D%5D%2C%0A%20%20%20%20%20%20%22rotation%22%3A%20%0A%20%20%20%20%20%20%28if%20%28.rotation.axis%29%20%3D%3D%20%22x%22%20then%20%5B%28.rotation.angle%20%7C%20tonumber%20*%20-1%29%2C%200%2C%200%5D%20%0A%20%20%20%20%20%20%20%20elif%20%28.rotation.axis%29%20%3D%3D%20%22y%22%20then%20%5B0%2C%20%28.rotation.angle%20%7C%20tonumber%20*%20-1%29%2C%200%5D%20%0A%20%20%20%20%20%20%20%20elif%20%28.rotation.axis%29%20%3D%3D%20%22z%22%20then%20%5B0%2C%200%2C%20%28.rotation.angle%20%7C%20tonumber%29%5D%20%0A%20%20%20%20%20%20%20%20else%20null%20end%29%2C%0A%20%20%20%20%20%20%22pivot%22%3A%20%28if%20.rotation.origin%20then%20%5B%28-%20.rotation.origin%5B0%5D%20%2B%208%29%2C%20.rotation.origin%5B1%5D%2C%20%28.rotation.origin%5B2%5D%20-%208%29%5D%20else%20null%20end%29%2C%0A%20%20%20%20%20%20%22uv%22%3A%20%28%0A%20%20%20%20%20%20%20%20def%20uv_calc%28%24input%29%3A%0A%20%20%20%20%20%20%20%20%20%20%28if%20%28.faces%20%7C%20.%5B%24input%5D%29%20then%0A%20%20%20%20%20%20%20%20%20%20%28.faces%20%7C%20.%5B%24input%5D.texture%5B1%3A%5D%20as%20%24input_n%20%7C%20%24texture_array%20%7C%20%28index%28%24input_n%29%20%2F%2F%20index%28%22particle%22%29%29%29%20as%20%24pos_n%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B0%5D%20%2F%20%24sides%29%20%2B%20%28%28fmod%28%24pos_n%3B%20%24sides%29%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn0%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B1%5D%20%2F%20%24sides%29%20%2B%20%28%28%28%24pos_n%20%2F%20%24sides%29%20%7C%20floor%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn1%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B2%5D%20%2F%20%24sides%29%20%2B%20%28%28fmod%28%24pos_n%3B%20%24sides%29%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn2%0A%20%20%20%20%20%20%20%20%20%20%7C%20%28%28.faces%20%7C%20.%5B%24input%5D.uv%5B3%5D%20%2F%20%24sides%29%20%2B%20%28%28%28%24pos_n%20%2F%20%24sides%29%20%7C%20floor%29%20*%20%2816%20%2F%20%24sides%29%29%29%20as%20%24fn3%20%7C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22uv%22%3A%20%5B%28%24fn0%29%2C%20%28%24fn1%29%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22uv_size%22%3A%20%5B%28%24fn2%20-%20%24fn0%29%2C%20%28%24fn3%20-%20%24fn1%29%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20null%20end%29%3B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22north%22%3A%20uv_calc%28%22north%22%29%2C%0A%20%20%20%20%20%20%20%20%22south%22%3A%20uv_calc%28%22south%22%29%2C%0A%20%20%20%20%20%20%20%20%22east%22%3A%20uv_calc%28%22east%22%29%2C%0A%20%20%20%20%20%20%20%20%22west%22%3A%20uv_calc%28%22west%22%29%2C%0A%20%20%20%20%20%20%20%20%22up%22%3A%20uv_calc%28%22up%22%29%2C%0A%20%20%20%20%20%20%20%20%22down%22%3A%20uv_calc%28%22down%22%29%0A%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%7D%29%20%7C%20walk%28%20if%20type%20%3D%3D%20%22object%22%20then%20with_entries%28select%28.value%20!%3D%20null%29%29%20else%20.%20end%29%3B%0A%0Adef%20pivot_groups%3A%0A%20%20%20%20%28element_array%29%20as%20%24element_array%20%7C%0A%20%20%20%20%5B%5B.elements%5B%5D.rotation%5D%20%7C%20unique%20%7C%20.%5B%5D%20%7C%20select%20%28.!%3Dnull%29%5D%0A%20%20%20%20%7C%20map%28%28%0A%20%20%20%20%5B%28-%20.origin%5B0%5D%20%2B%208%29%2C%20.origin%5B1%5D%2C%20%28.origin%5B2%5D%20-%208%29%5D%20as%20%24i_piv%20%7C%0A%20%20%20%20%28if%20%28.axis%29%20%3D%3D%20%22x%22%20then%20%5B%28.angle%20%7C%20tonumber%20*%20-1%29%2C%200%2C%200%5D%20%0A%20%20%20%20%20%20elif%20%28.axis%29%20%3D%3D%20%22y%22%20then%20%5B0%2C%20%28.angle%20%7C%20tonumber%20*%20-1%29%2C%200%5D%20%0A%20%20%20%20%20%20else%20%5B0%2C%200%2C%20%28.angle%20%7C%20tonumber%29%5D%20end%29%20as%20%24i_rot%20%7C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_z%22%2C%0A%20%20%20%20%20%20%22pivot%22%3A%20%28%24i_piv%29%2C%0A%20%20%20%20%20%20%22rotation%22%3A%20%28%24i_rot%29%2C%0A%20%20%20%20%20%20%22mirror%22%3A%20true%2C%0A%20%20%20%20%20%20%22cubes%22%3A%20%5B%28%24element_array%20%7C%20.%5B%5D%20%7C%20select%28.rotation%20%3D%3D%20%24i_rot%20and%20.pivot%20%3D%3D%20%24i_piv%29%29%5D%0A%20%20%20%20%7D%29%29%3B%0A%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22format_version%22%3A%20%221.16.0%22%2C%0A%20%20%20%20%20%20%22minecraft%3Ageometry%22%3A%20%5B%7B%0A%20%20%20%20%20%20%20%20%22description%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22identifier%22%3A%20%28%22geometry.geysercmd.%22%20%2B%20%28%24model_name%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%22texture_width%22%3A%2016%2C%0A%20%20%20%20%20%20%20%20%20%20%22texture_height%22%3A%2016%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_width%22%3A%204%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_height%22%3A%204.5%2C%0A%20%20%20%20%20%20%20%20%20%20%22visible_bounds_offset%22%3A%20%5B0%2C%200.75%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22bones%22%3A%20%28%5B%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22binding%22%3A%20%22c.item_slot%20%3D%3D%20%27head%27%20%3F%20%27head%27%20%3A%20q.item_slot_to_bone_name%28c.item_slot%29%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_x%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_y%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_x%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%0A%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22geysercmd_z%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22parent%22%3A%20%22geysercmd_y%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22pivot%22%3A%20%5B0%2C%208%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%22cubes%22%3A%20%5B%28element_array%20%7C%20.%5B%5D%20%7C%20select%28.rotation%20%3D%3D%20null%29%29%5D%0A%20%20%20%20%20%20%20%20%7D%5D%20%2B%20%28pivot_groups%20%7C%20map%28del%28.cubes%5B%5D.rotation%29%29%20%7C%20to_entries%20%7C%20map%28%20%28.value.name%20%3D%20%22rot_%5C%281%2B.key%29%22%20%29%20%7C%20.value%29%29%29%0A%20%20%20%20%20%20%7D%5D%0A%20%20%20%20%7D)
\ No newline at end of file
diff --git a/docs/wiki/meta/style-guide.md b/docs/wiki/meta/style-guide.md
index 071b3452..df35f7f6 100644
--- a/docs/wiki/meta/style-guide.md
+++ b/docs/wiki/meta/style-guide.md
@@ -1,5 +1,5 @@
---
-title: Style Guide
+title: 样式指南
mentions:
- SirLich
- solvedDev
@@ -7,118 +7,121 @@ mentions:
- ChibiMango
---
-This document will present the officially supported Bedrock-Wiki style guide for addon-creation. This guide aims to promote best practices while creating addons and create a consistent format for everyone to follow.
+# 样式指南
+
+
+
+本文档将介绍基岩版Wiki官方推荐的附加包开发样式指南。本指南旨在推广附加包开发的最佳实践,并为开发者提供统一的格式规范。
:::tip
-The style guide is a living, breathing document, which will evolve as addon-creation evolves. Please get in touch if you think something needs to be updated or changed!
+本样式指南是持续更新的动态文档,将随着附加包开发技术的发展而不断完善。如果您有任何更新建议,欢迎随时联系我们!
:::
-## Folder Structure
+## 文件夹结构
-- No spaces in your file paths. `use_underscores`.
-- No `CAPITALS` in your identifiers, file names, or folder names.
-- The total character length of any path must not exceed 80 characters (console limitation).
-- Content folders should use consistent pluralization: Don't mix and match.
+- 文件路径中不要使用空格,使用下划线
+- 标识符、文件名和文件夹名不要使用全大写字母
+- 任何路径的总字符长度不得超过80个字符(控制台限制)
+- 内容文件夹应保持统一的复数形式:不要混合使用单复数
-## Identifiers
+## 标识符规范
-Do not use identifiers that begin with a number, and especially don't use an identifier that is _only_ a number. This applies to entities, component_groups, events, and anything else that takes a `namespace:name` pair.
+不要使用以数字开头的标识符,尤其不要使用纯数字作为标识符。此规则适用于实体(entities)、组件组(component_groups)、事件(events)以及其他所有使用`命名空间:名称`格式的内容。
-## File and Folder names
+## 文件与文件夹命名规范
-| Concept | Example Identifier |
-| -------------------- | -------------------------- |
-| Behavior Pack | dragons_BP |
-| Resource Pack | dragons_RP |
-| Geometry | dragon.geo.json |
-| Animation | dragon.animation.json |
-| Animation Controller | dragon.ac.json |
-| RP Entity | dragon.ce.json |
-| BP Entity | dragon.se.json |
-| Item 1.16.100+ | dragon_tooth.item.json |
-| BP Item | dragon_tooth.item.bp.json |
-| RP Item | dragon_tooth.item.rp.json |
-| Render Controller | dragon.rc.json |
-| Loot Table | dragon.loot.json |
-| Recipe | dragon_saddle.recipe.json |
-| Spawn Rules | dragon.spawn.json |
-| Trade Table | dragon.trade.json |
-| Particles | dragon_magic.particle.json |
-| Texture | dragon.png |
-| Gametest | dragonTest.js |
+| 概念 | 示例标识符 |
+| --------------------- | -------------------------- |
+| 行为包(Behavior Pack) | dragons_BP |
+| 资源包(Resource Pack) | dragons_RP |
+| 几何模型(Geometry) | dragon.geo.json |
+| 动画(Animation) | dragon.animation.json |
+| 动画控制器(Animation Controller) | dragon.ac.json |
+| 资源包实体(RP Entity) | dragon.ce.json |
+| 行为包实体(BP Entity) | dragon.se.json |
+| 物品(1.16.100+) | dragon_tooth.item.json |
+| 行为包物品(BP Item) | dragon_tooth.item.bp.json |
+| 资源包物品(RP Item) | dragon_tooth.item.rp.json |
+| 渲染控制器(Render Controller) | dragon.rc.json |
+| 战利品表(Loot Table) | dragon.loot.json |
+| 合成配方(Recipe) | dragon_saddle.recipe.json |
+| 生成规则(Spawn Rules) | dragon.spawn.json |
+| 交易表(Trade Table) | dragon.trade.json |
+| 粒子效果(Particles) | dragon_magic.particle.json |
+| 纹理贴图(Texture) | dragon.png |
+| 游戏测试(Gametest) | dragonTest.js |
-## Namespaces
+## 命名空间规范
-A suitable namespace should be unique to you or your team. Something like `mob` or `cars` or `content` or `custom` would be a **bad** namespace since another developer might come up with the same namespace as you.
+合适的命名空间应具有开发者唯一性。使用`mob`、`cars`、`content`或`custom`等通用词汇作为命名空间是**不恰当**的,因为这些名称可能与其他开发者重复。
-`minecraft` and `minecon` are reserved. Don't use these.
+`minecraft`和`minecon`为保留命名空间,请勿使用。
-For personal projects, use a convenient version of your player name, and for team projects, use a suitable version of your team name.
+个人项目建议使用玩家ID的变体,团队项目建议使用团队名称的变体。
-When multiple developers work on a project together, the namespace should always be shared. If credit is required, use sub-indexing: `minetite.sirlich:dragon`
+多人协作开发时应共享命名空间。如需注明贡献者,可以使用子索引形式:`minetite.sirlich:dragon`
-Where to use name-spaces:
+需要使用命名空间的场景:
-- entities
-- particles
-- component-groups
-- events
+- 实体(entities)
+- 粒子效果(particles)
+- 组件组(component-groups)
+- 事件(events)
-When not to use namespaces:
+不需要使用命名空间的场景:
-- do not include your namespace in any folder path or file-name
+- 不要在文件夹路径或文件名中包含命名空间
-## Sub-indexing
+## 子索引规范
-Sub indexing is the use of `.` to separate chained concepts. Sub-indexing should go in descending order from big to small:
+子索引使用`.`符号分隔层级概念,应按照从宏观到微观的降序排列:
✔️ `animation.controller.dragon.flying.taking_off`
❌ `animation.controller.dragon_take_off_flying`
-When using sub-indexing, use `_` as space, not another `.`.
+使用子索引时,使用`_`替代空格,不要使用多个`.`:
✔️ `animation.controller.dragon.flying.taking_off`
❌ `animation.controller.dragon.flying.taking.off`
-You can use sub-indexing in your entities:
+实体标识符可以使用子索引:
`sirlich:dragon.drake`
-## Groups and Events should complement each other
+## 组件组与事件的对应关系
-| Group | Event |
-| ------------ | ---------------------- |
-| sirlich:wild | ✔️ sirlich:become_wild |
-| sirlich:wild | ❌ sirlich:wild |
-| sirlich:tame | ✔️ sirlich:on_tame |
-| sirlich:tame | ❌ sirlich:tame |
+| 组件组 | 事件 |
+| -------------- | ---------------------- |
+| sirlich:wild | ✔️ sirlich:become_wild |
+| sirlich:wild | ❌ sirlich:wild |
+| sirlich:tame | ✔️ sirlich:on_tame |
+| sirlich:tame | ❌ sirlich:tame |
-## Short-Names should be Generic
+## 短名称应保持通用性
-Short-names are file-specific identifiers, which are used to map between an identifier and a pretty name. They are handy because they allow us to re-use animation controllers and render controllers. For this reason, your short-names should be generic.
+短名称是文件内部的标识符,用于映射具体资源路径。通用短名称有助于复用动画控制器和渲染控制器:
✔️ `"sit": "animation.dragon.sit"`
❌ `"dragon_sitting": "animation.dragon.sit"`
-When we make short-names of this form, we can use a generic "sit" animation controller for all of them since we can use the `sit` short-name to play the sit animation.
+使用通用短名称后,我们可以为所有需要"坐下"动画的对象复用同一个"sit"动画控制器。
-## Functions should be nested
+## 函数的嵌套规范
-You can put functions in folders to achieve this.
+通过文件夹结构实现函数嵌套:
✔️ `function teleport/zone/hell`
❌ `function teleport_hellzone`
-## Group animations files when possible
+## 动画文件的组合规范
-Example:
+示例:
-
-
-```json
+::: code-group
+```json [示例动画文件]
{
"format_version": "1.8.0",
"animations": {
@@ -128,8 +131,9 @@ Example:
}
}
```
+:::
-## Split textures by path, not name
+## 纹理路径组织规范
✔️ `textures/dragon/red`
@@ -137,31 +141,31 @@ Example:
✔️ `textures/npc/dragon_hunter/archer`
-❌ `textures npc/dragon_hunter_archer`
+❌ `textures/npc/dragon_hunter_archer`
-## .lang File Comments
+## .lang文件注释规范
-Comments intended for the localizer should always be in-line, in the following format:
+面向本地化人员的注释应使用行内格式:
-`the.key=The string<\t>## Comment, intended for the one localizing.`
+`the.key=字符串内容<\t>## 注释内容,供本地化人员参考`
-`<\t>` represents a tab-character.
+`<\t>`表示制表符。
-Own-line comments can be used for organizational purposes but should not store localization-critical information.
+独立行注释可用于组织结构,但不要存储关键本地化信息。
-## Acronyms when discussing
+## 常用缩略词对照表
-| Acronym | Concept |
-| ------- | ---------------------------------- |
-| BP | Behavior Pack |
-| RP | Resource pack |
-| VRP | Vanilla Resource Pack |
-| VBP | Vanilla Behavior Pack |
-| AC | Animation Controller |
-| RPAC | Resource Pack Animation Controller |
-| BPAC | Behavior Pack Animation Controller |
-| BB | Blockbench |
-| BDS | Bedrock Dedicated Server |
-| FPV | First Person View |
-| RD | Render Dragon |
-| VSCode | Visual Studio Code |
+| 缩略词 | 完整名称 |
+| ------ | --------------------------- |
+| BP | 行为包(Behavior Pack) |
+| RP | 资源包(Resource Pack) |
+| VRP | 原版资源包(Vanilla Resource Pack) |
+| VBP | 原版行为包(Vanilla Behavior Pack) |
+| AC | 动画控制器(Animation Controller) |
+| RPAC | 资源包动画控制器(Resource Pack Animation Controller) |
+| BPAC | 行为包动画控制器(Behavior Pack Animation Controller) |
+| BB | Blockbench建模软件 |
+| BDS | 基岩版专用服务器(Bedrock Dedicated Server) |
+| FPV | 第一人称视角(First Person View) |
+| RD | Render Dragon渲染引擎 |
+| VSCode | Visual Studio代码编辑器 |
\ No newline at end of file
diff --git a/docs/wiki/meta/useful-links.md b/docs/wiki/meta/useful-links.md
index 107250b5..fd33be3a 100644
--- a/docs/wiki/meta/useful-links.md
+++ b/docs/wiki/meta/useful-links.md
@@ -1,5 +1,5 @@
---
-title: Useful Links
+title: 实用链接
mentions:
- SirLich
- MedicalJewel105
@@ -17,11 +17,15 @@ mentions:
- zheaEvyline
---
-There is loads of helpful information about Bedrock Development online, but sometimes it is hard to find! We will do our best to keep this list up to date as we continue to find useful content.
+# 实用链接
-Important links have a ⭐.
+
-## Discord Links
+网络上存在大量关于基岩版开发的实用信息,但有时却难以寻觅!我们将持续更新这份清单,尽力保持内容的最新性。
+
+重要链接标有⭐符号。
+
+## Discord相关链接
- ⭐ [Bedrock Add-Ons](https://discord.gg/46JUdQb)
- ⭐ [Bedrock OSS](https://discord.gg/XjV87YN)
@@ -43,115 +47,113 @@ Important links have a ⭐.
- [Minecraft RTX](http://discord.gg/vNWc3Hh)
- [Mojang Bug Tracker](https://discord.gg/rpCyfKV)
-## Software (installed)
+## 本地安装软件
-- ⭐ [Blockbench: A boxy 3D model editor](https://blockbench.net/)
-- ⭐ [bridge. Addon Editor](https://bridge-core.github.io/)
-- ⭐ [VSCode Editor](https://code.visualstudio.com/)
-- ⭐ [Regolith](https://github.com/Bedrock-OSS/regolith)
-- [CoreCoder [Code Editor]](https://hanprog.itch.io/core-coder)
-- [Feature Rule Generator v2 (paid version)](https://machine-builder.itch.io/frg-v2)
-- [Feature Rule Generator v2 (free version)](https://drive.google.com/file/d/1rwQTtzgpWiqCS9ecO_j-qcxjdQvWSXgi/view)
-- [Add-on JSON Generator (paid)](https://kaifireborn.itch.io/add-on-json-generator)
-- [NBT Editor](https://www.universalminecrafteditor.com/)
-- [World Converter (paid)](https://www.universalminecraftconverter.com/download)
-- [Chunker (World Converter)](https://chunker.app/)
+- ⭐ [Blockbench:一款专为方块风格设计的3D建模工具](https://blockbench.net/)
+- ⭐ [bridge. 附加包编辑器](https://bridge-core.github.io/)
+- ⭐ [VSCode 代码编辑器](https://code.visualstudio.com/)
+- ⭐ [Regolith(快速构建工具链)](https://github.com/Bedrock-OSS/regolith)
+- [CoreCoder [代码编辑器]](https://hanprog.itch.io/core-coder)
+- [Feature Rule Generator v2(付费版)](https://machine-builder.itch.io/frg-v2)
+- [Feature Rule Generator v2(免费版)](https://drive.google.com/file/d/1rwQTtzgpWiqCS9ecO_j-qcxjdQvWSXgi/view)
+- [Add-on JSON Generator(付费)](https://kaifireborn.itch.io/add-on-json-generator)
+- [NBT 编辑器](https://www.universalminecrafteditor.com/)
+- [世界转换器(付费)](https://www.universalminecraftconverter.com/download)
+- [Chunker(世界格式转换器)](https://chunker.app/)
- [NBT Studio](https://github.com/tryashtar/nbt-studio)
-- [BedrockLauncher (Bedrock version switcher)](https://bedrocklauncher.github.io/)
-- [ResourcePack Converter [App]](https://converter.bedrockhub.io)
-- [BedrockConnect [App]](https://bedrockconnect.bedrockhub.io)
+- [BedrockLauncher(版本切换工具)](https://bedrocklauncher.github.io/)
+- [资源包转换器 [应用]](https://converter.bedrockhub.io)
+- [BedrockConnect [应用]](https://bedrockconnect.bedrockhub.io)
-## Bedrock Tools Websites
+## 基岩版在线工具
-- ⭐ [Snowstorm Particle Generator](https://jannisx11.github.io/snowstorm/)
-- ⭐ [Loot Table Generator](https://bedrock-oss.github.io/bedrock-loot-gen/)
-- [Apply Loot Tables to Structures](https://mcbe-essentials.github.io/structure-editor/loot-tabler)
-- [Structure Editor](https://mcbe-essentials.github.io/structure-editor/)
-- [Convert MCSTRUCTURE to MCFUNCTION](https://mcbe-essentials.github.io/structure-to-function/)
-- [Crafting Recipe Generator](https://crafting.thedestruc7i0n.ca/)
-- [Trade Table Generator](https://mcbe-essentials.github.io/trade-table-editor/)
-- [World Packager](https://mcbe-essentials.github.io/world-packager/)
-- [Manifest Generator](https://bedrock-manifest.web.app/)
-- [Foxynotail Tools](https://www.foxynotail.com/tools/)
-- [.lang File Generator](https://solveddev.github.io/AnyLanguage/)
-- [behavior-builder (beta)](https://stirante.com/behavior/index)
-- [controller-builder (beta)](https://stirante.com/controller/index)
-- [MCPACK Generator](https://mcbe-essentials.github.io/instant-pack/)
-- [Molang Grapher](https://jannisx11.github.io/molang-grapher/)
-- [Molang Playground](https://bridge-core.github.io/molang-playground/)
-- [Dialogue Generator](https://mcbe-essentials.github.io/dialogue-editor/)
-- [Selector Generator](https://mcbe-essentials.github.io/selector-generator/)
-- [Addon Obfuscator](https://tools.pixelpoly.co/obfuscator)
+- ⭐ [Snowstorm 粒子效果生成器](https://jannisx11.github.io/snowstorm/)
+- ⭐ [战利品表生成器](https://bedrock-oss.github.io/bedrock-loot-gen/)
+- [为结构添加战利品表](https://mcbe-essentials.github.io/structure-editor/loot-tabler)
+- [结构编辑器](https://mcbe-essentials.github.io/structure-editor/)
+- [MCSTRUCTURE转MCFUNCTION](https://mcbe-essentials.github.io/structure-to-function/)
+- [合成配方生成器](https://crafting.thedestruc7i0n.ca/)
+- [村民交易表生成器](https://mcbe-essentials.github.io/trade-table-editor/)
+- [世界打包工具](https://mcbe-essentials.github.io/world-packager/)
+- [清单文件生成器](https://bedrock-manifest.web.app/)
+- [Foxynotail工具集](https://www.foxynotail.com/tools/)
+- [.lang语言文件生成器](https://solveddev.github.io/AnyLanguage/)
+- [行为包构建器(测试版)](https://stirante.com/behavior/index)
+- [控制器构建器(测试版)](https://stirante.com/controller/index)
+- [MCPACK快速生成](https://mcbe-essentials.github.io/instant-pack/)
+- [Molang可视化工具](https://jannisx11.github.io/molang-grapher/)
+- [Molang调试沙盒](https://bridge-core.github.io/molang-playground/)
+- [对话系统生成器](https://mcbe-essentials.github.io/dialogue-editor/)
+- [目标选择器生成器](https://mcbe-essentials.github.io/selector-generator/)
+- [附加包混淆工具](https://tools.pixelpoly.co/obfuscator)
-## Documentation
+## 文档资源
-- ⭐ [bedrock.dev](https://bedrock.dev/)
-- ⭐ [Minecraft Creator Portal](https://docs.microsoft.com/en-us/minecraft/creator/)
-- ⭐ [Minecraft Community Wiki](https://minecraft.wiki)
-- [Mcbehub](https://mcbehub.com/category/realmdocs)
-- [Bedrock Texture Pack Template](https://github.com/Brennian/BedrockTexturesTemplate)
-- [Documentation Graveyard (removed components)](https://gist.github.com/destruc7i0n/ea1a6a7f97f0986d9326c58246f96fa3)
+- ⭐ [bedrock.dev(权威文档)](https://bedrock.dev/)
+- ⭐ [Minecraft创作者门户](https://docs.microsoft.com/en-us/minecraft/creator/)
+- ⭐ [Minecraft社区Wiki](https://minecraft.wiki)
+- [Mcbehub文档站](https://mcbehub.com/category/realmdocs)
+- [基岩版材质包模板](https://github.com/Brennian/BedrockTexturesTemplate)
+- [已弃用组件文档库](https://gist.github.com/destruc7i0n/ea1a6a7f97f0986d9326c58246f96fa3)
-### Getting Started With Your First Add-On
+### 附加包开发入门
-- [Getting Started with Add-On Development for Bedrock Edition](https://learn.microsoft.com/en-us/minecraft/creator/documents/gettingstarted): These guides show you exactly how to build your first resource pack and your first behavior pack from start to finish.
-- [Molang: a Beginner's Guide](https://learn.microsoft.com/en-us/minecraft/creator/documents/molangbeginnersguide): Molang is a Minecraft programming language that can be useful for writing some advanced add-ons.
-- [Introduction to the GameTest Framework](https://learn.microsoft.com/en-us/minecraft/creator/documents/gametestgettingstarted): This is the best way to test games, and it uses JavaScript, the most popular programming language in the world!
-- [Build a gameplay experience with TypeScript](https://learn.microsoft.com/en-us/minecraft/creator/documents/scriptinggettingstarted): TypeScript is Microsoft's copy of JavaScript. Writing add-ons in TypeScript allows you to add any functionality you can imagine!
-- [@minecraft/server Module](https://learn.microsoft.com/en-us/minecraft/creator/scriptapi/mojang-minecraft/mojang-minecraft): This module and the others near it are how we can access Minecraft values with our TypeScript code. It's technical, but a great resource.
-- [List and summary of commands (Unofficial Minecraft wiki)](https://minecraft.wiki/w/Commands#List_and_summary_of_commands): Most add-ons will run some commands. This community-supported wiki is the best resource for learning each and every command.
+- [《基岩版附加包开发入门指南》](https://learn.microsoft.com/en-us/minecraft/creator/documents/gettingstarted):手把手教你创建第一个资源包和行为包
+- [《Molang语言入门指南》](https://learn.microsoft.com/en-us/minecraft/creator/documents/molangbeginnersguide):掌握这个专为Minecraft设计的脚本语言
+- [《GameTest框架入门》](https://learn.microsoft.com/en-us/minecraft/creator/documents/gametestgettingstarted):使用JavaScript进行游戏测试的最佳实践
+- [《TypeScript游戏开发指南》](https://learn.microsoft.com/en-us/minecraft/creator/documents/scriptinggettingstarted):微软官方推荐的脚本开发方式
+- [@minecraft/server模块文档](https://learn.microsoft.com/en-us/minecraft/creator/scriptapi/mojang-minecraft/mojang-minecraft):通过TypeScript操作游戏数据的核心API
+- [《命令大全(非官方Wiki)》](https://minecraft.wiki/w/Commands#List_and_summary_of_commands):社区维护的最新命令参考手册
-## Sample Behavior & Resource Packs
+## 示例资源包与行为包
-These packs are maintained and published by Mojang.
+**Mojang官方维护:**
+- ⭐ [原版资源包模板](https://aka.ms/resourcepacktemplate)
+- ⭐ [原版行为包模板](https://aka.ms/behaviorpacktemplate)
+- [测试版资源包模板](https://aka.ms/MinecraftBetaResources)
+- [测试版行为包模板](https://aka.ms/MinecraftBetaBehaviors)
+- [历史版本存档](https://bedrock.dev/packs)
-- ⭐ [Vanilla Resource Pack](https://aka.ms/resourcepacktemplate)
-- ⭐ [Vanilla Behavior Pack](https://aka.ms/behaviorpacktemplate)
-- [Vanilla Resource Pack (BETA)](https://aka.ms/MinecraftBetaResources)
-- [Vanilla Behavior Pack (BETA)](https://aka.ms/MinecraftBetaBehaviors)
-- [Pack Archive (old versions)](https://bedrock.dev/packs)
+**开源社区项目:**
+- [Wiki附加包](https://github.com/Bedrock-OSS/wiki-addon)
+- [附魔详情显示](https://github.com/supercam19/EnchantmentDetails)
+- [BC开发者工具包](https://github.com/BedrockCommands/developer-packs)
-These packs are published by the open-source community
+## 脚本开发资源
-- [wiki-addon](https://github.com/Bedrock-OSS/wiki-addon)
-- [Enchantment Details](https://github.com/supercam19/EnchantmentDetails)
-- [BC developer-packs](https://github.com/BedrockCommands/developer-packs)
+- [GameTests API封装库](https://github.com/notbeer/Framework-Wrapper)
+- [插件API入门套件](https://github.com/MajestikButter/Plugin-API-Starter-Pack)
+- [方块标签调试工具](https://mcpedl.com/debug-stick/)
-## Scripting Resources
+## 光线追踪资源
+- ⭐ [光线追踪与PBR材质指南](https://docs.microsoft.com/en-us/minecraft/creator/documents/rtxgettingstarted)
+- ⭐ [光线追踪常见问题解答](https://help.minecraft.net/hc/en-us/articles/4408865164173-Minecraft-with-Ray-Tracing-and-Advanced-Graphics-FAQ)
+- [Reddit社区入门指南](https://www.reddit.com/r/minecraftRTX/comments/iq3lkl/getting_startedhelpful_guidesresource_packs/)
+- [RenderBender渲染工具](https://github.com/SpeedyCodes/RenderBender)
+- [RTX预设分享频道](https://discord.com/channels/691547840463241267/919021996271108108)
+- [Substance 3D Painter插件](https://github.com/jasonjgardner/painter-plugin-texture-set-json)
-- [GameTests API Wrapper](https://github.com/notbeer/Framework-Wrapper)
-- [GameTests Plugin-API-Starter-Pack](https://github.com/MajestikButter/Plugin-API-Starter-Pack)
-- [Useful for Block Tags](https://mcpedl.com/debug-stick/)
+## 附加包发布平台
-## Raytracing Resources
-- ⭐ [Ray Tracing and PBR Texturing guide](https://docs.microsoft.com/en-us/minecraft/creator/documents/rtxgettingstarted)
-- ⭐ [Minecraft with Ray Tracing and Advanced Graphics FAQ](https://help.minecraft.net/hc/en-us/articles/4408865164173-Minecraft-with-Ray-Tracing-and-Advanced-Graphics-FAQ)
-- [r/minecraftRTX Getting Started Guide](https://www.reddit.com/r/minecraftRTX/comments/iq3lkl/getting_startedhelpful_guidesresource_packs/)
-- [RenderBender](https://github.com/SpeedyCodes/RenderBender)
-- [RTX Presets](https://discord.com/channels/691547840463241267/919021996271108108)
-- [`.texture_set.json` Adobe Substance 3D Painter plugin](https://github.com/jasonjgardner/painter-plugin-texture-set-json)
+- ⭐ [官方市场](https://www.minecraft.net/en-us/catalog)
+- ⭐ [MCPEDL社区](http://mcpedl.com/?cookie_check=1)
+- ⭐ [创作者招聘平台](https://www.bucketofcrabs.net/)
+- [MCDLHub整合平台](https://mcdlhub.com/)
+- [CubitosMC西班牙社区](https://www.cubitosmc.com/)
+- [Modbay模组站](https://modbay.org/)
+- [市场数据分析](https://mcmarketstats.miste.fr/globalStats/)
+- [官方合作伙伴列表](https://www.playthismap.com/partners)
-## Addon Marketplaces & Links
+## 其他实用工具
-- ⭐ [Minecraft Marketplace](https://www.minecraft.net/en-us/catalog)
-- ⭐ [MCPEDL](http://mcpedl.com/?cookie_check=1)
-- ⭐ [Bucket of Crabs (Marketplace joblist)](https://www.bucketofcrabs.net/)
-- [MCDLHub](https://mcdlhub.com/)
-- [CubitosMC](https://www.cubitosmc.com/)
-- [Modbay](https://modbay.org/)
-- [Minecraft Marketplace Stats](https://mcmarketstats.miste.fr/globalStats/)
-- [Minecraft Marketplace Partners](https://www.playthismap.com/partners)
-
-## Other useful Links
-
-- [UUID v4 Generator (online)](https://www.uuidgenerator.net/version4)
-- [Minecraft Marketplace partner Twitter list](https://twitter.com/i/lists/1191945551853629442?s=09)
-- [Minecraft.net Official Add-ons page](https://www.minecraft.net/en-us/addons)
-- [Run Bedrock on Linux](https://github.com/Element-0/ElementZero)
-- [Linux Packaging Scripts](https://github.com/ChristopherHX/linux-packaging-scripts)
-- [Block Models](https://blockmodels.com/)
-- [Bedrock Addons Reddit](https://www.reddit.com/r/BedrockAddons/)
-- [Windows 10 Non-renderdragon install](https://support.playhive.com/windows-10-installing-non-renderdragon-clients/)
-- [Bedrock Edition Realm Protocol](https://github.com/NobUwU/BeRP)
-- [Java & Bedrock Client](https://github.com/kennyvv/Alex)
-- [Skin Pack Generator](https://github.com/MedicalJewel105/bedrock-skin-pack-generator)
+- [UUID v4生成器(在线)](https://www.uuidgenerator.net/version4)
+- [市场创作者Twitter列表](https://twitter.com/i/lists/1191945551853629442?s=09)
+- [官方附加包页面](https://www.minecraft.net/en-us/addons)
+- [Linux运行基岩版](https://github.com/Element-0/ElementZero)
+- [Linux打包脚本](https://github.com/ChristopherHX/linux-packaging-scripts)
+- [方块模型库](https://blockmodels.com/)
+- [Reddit附加包社区](https://www.reddit.com/r/BedrockAddons/)
+- [非RenderDragon客户端安装指南](https://support.playhive.com/windows-10-installing-non-renderdragon-clients/)
+- [领域服务器协议](https://github.com/NobUwU/BeRP)
+- [跨平台客户端](https://github.com/kennyvv/Alex)
+- [皮肤包生成器](https://github.com/MedicalJewel105/bedrock-skin-pack-generator)
\ No newline at end of file
diff --git a/docs/wiki/meta/using-schemas.md b/docs/wiki/meta/using-schemas.md
index ff8f4da4..a744b726 100644
--- a/docs/wiki/meta/using-schemas.md
+++ b/docs/wiki/meta/using-schemas.md
@@ -1,5 +1,5 @@
---
-title: Using Schemas
+title: 使用Schema
mentions:
- SirLich
- MedicalJewel105
@@ -7,57 +7,63 @@ mentions:
- KalmeMarq
---
-A JSON schema gives you two things: validation to be sure that your JSON has the correct structure and (depending on editor support) IntelliSense to help you write your JSON correctly, to begin with. Schemas are nice because they give you instant feedback when you screw something up, but they can't catch everything.
+# 使用Schema
-JSON schemas are just JSON files themselves and don't do anything on their own. You can write your own or use somebody else's. There's a handful of schemas for Bedrock out there already. Since none of the schemas are "official" (that I know of), and since Bedrock is a moving target, there will probably be some inaccuracies in any schema that you find. So keep that in mind: sometimes the issue will be in your code, sometimes the schema may be wrong. If you find a wrong schema, consider improving it and giving the author a pull request to our collective benefit.
+
-To get the validation working, you'll need a validator. You have many options here, including editor-specific options.
+JSON Schema能为您提供两大核心功能:**验证**确保JSON结构正确性,以及**智能感知**辅助编写(具体取决于编辑器支持)。Schema的优势在于能即时反馈错误,但需注意它无法捕捉所有潜在问题。
-## Schemas
+Schema本身也是JSON文件,需借助验证工具发挥作用。您可以使用现有Schema或自行编写。目前已有多个适用于Minecraft基岩版的Schema,但请注意这些Schema并非官方认证(据我所知),且基岩版持续更新迭代,因此任何现有Schema都可能存在不准确之处。请保持理性认知:问题可能出在您的代码,也可能是Schema本身存在缺陷。若发现Schema错误,建议贡献改进并向作者提交Pull Request,共同完善生态。
-Many schemas exist, with many minor differences. Try out different schemas and see which one works best for you:
+## Schema列表
-| Author | Supports | Note |
-| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
-| [Assassin](https://github.com/aexer0e/bedrock-schema) | Behavior pack entity file | The original Schema this article was written for |
-| [Tschrock's](https://github.com/bedrock-studio/bedrock-json-schemas/) | Manifest, Actor Animation Controller, Actor Animations, Actor Resource Definition, Render Controller, Geometry | |
-| [stirante](https://github.com/stirante/bedrock-shader-schema/) | Shaders | |
-| [KalmeMarq](https://github.com/KalmeMarq/Bugrock-JSON-UI-Schemas/) | JSON UI files (including _ui_defs.json and _global_variables.json) | |
+现有多种Schema各具特色,建议尝试不同方案选择最适合您的:
-## VSCode
+| 作者 | 支持范围 | 备注 |
+| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
+| [Assassin](https://github.com/aexer0e/bedrock-schema) | 行为包实体文件 | 本文最初基于此Schema编写 |
+| [Tschrock's](https://github.com/bedrock-studio/bedrock-json-schemas/) | 清单文件、实体动画控制器、实体动画、实体资源定义、渲染控制器、几何体 | |
+| [stirante](https://github.com/stirante/bedrock-shader-schema/) | 着色器 | |
+| [KalmeMarq](https://github.com/KalmeMarq/Bugrock-JSON-UI-Schemas/) | JSON UI文件(包含_ui_defs.json 和 _global_variables.json) | |
-To use this schema inside your JSON file in VSCode, simply add this line to your root object:
+## VSCode配置
+
+### 单文件配置
+在JSON文件根对象中添加以下字段即可启用Schema验证:
`"$schema": "https://aexer0e.github.io/bedrock-schema/"`
-It should look like something like this:
+完整示例:
-
-
-```json
-"format_version": "1.14.0",
-"$schema": "https://aexer0e.github.io/bedrock-schema/"
-```
-
-### Adding Schema to Workspaces
-
-If you want to utilize this schema to work with all of your files inside your Workspace, you can add it to your VS Code Workspace's settings.
-
-To do this, make sure you're in your Workspace, then press `Ctrl+Shift+P` and type and select `>Preferences: Open Workspace Settings (JSON)`. After that, add this to the root object
-
-
-
-```json
-"settings": {
- "json.schemas": [
- {
- "fileMatch": [
- "*.json"
- ],
- "url": "https://aexer0e.github.io/bedrock-schema/"
- }
- ]
+::: code-group
+```json [示例]
+{
+ "format_version": "1.14.0",
+ "$schema": "https://aexer0e.github.io/bedrock-schema/"
}
```
+:::
-To test if it works, create a `.json` file, open an object, and see if you get the auto-completion options. (You can also press `Ctrl+Space` to force it into showing the available options.)
+### 工作区配置
+若需为整个工作区启用Schema验证,请按以下步骤操作:
+
+1. 在目标工作区中按下 `Ctrl+Shift+P`
+2. 输入并选择 `>Preferences: Open Workspace Settings (JSON)`
+3. 在根对象中添加以下配置:
+
+::: code-group
+```json [工作区设置]
+{
+ "settings": {
+ "json.schemas": [
+ {
+ "fileMatch": ["*.json"],
+ "url": "https://aexer0e.github.io/bedrock-schema/"
+ }
+ ]
+ }
+}
+```
+:::
+
+验证配置是否生效:新建`.json`文件,在对象中输入内容时观察是否出现自动补全提示(也可手动按`Ctrl+Space`触发提示)。
\ No newline at end of file
diff --git a/docs/wiki/meta/version-control.md b/docs/wiki/meta/version-control.md
index 30c5a02e..4e84061d 100644
--- a/docs/wiki/meta/version-control.md
+++ b/docs/wiki/meta/version-control.md
@@ -1,89 +1,100 @@
---
-title: Version Control
+title: 版本控制
mentions:
- SirLich
- sermah
---
-Version control is the concept of backing up your code iteratively, so you can roll back to specific versions as needed. Version control could be achieved at the most basic level by taking a `.zip` of your addon every day and uploading it to google drive. This isn't unreasonable, but it has three significant difficulties that proper VCS (version control systems) fix:
+# 版本控制
-- It isn't easy to compare versions
-- It isn't easy to _actually_ roll-back to a previous version
-- It doesn't do anything to help in team-collaboration
+
-This tutorial will teach the basics of a tool called `git`, and a free, online git storage service called `GitHub. Anyone may follow along, but you will receive the most benefit if you are working in a team environment or often lose your work because you forget to back up.
+版本控制的核心概念是定期备份代码迭代版本,以便在需要时回滚到特定版本。最基本的版本控制可以通过每天将附加包打包成`.zip`并上传到谷歌网盘实现。这并非不合理,但存在三个显著缺陷,而专业的版本控制系统(VCS)能够有效解决:
-This tutorial will not be focusing directly on teaching `git` or `GitHub`, as outside knowledge sources better do this. The focus will be on setting up these tools for Minecraft once the basics have been learned.
+- 版本差异比对困难
+- 实际回滚到旧版本操作繁琐
+- 对团队协作毫无帮助
+
+本教程将介绍`git`工具的基本使用方法,以及免费的在线git托管服务`GitHub`。任何人都可以跟随学习,但如果您身处团队协作环境或经常因忘记备份而丢失工作成果,将会获得最大收益。
+
+本教程不会直接教授`git`或`GitHub`的基础操作,因为这些知识已有优质外部资源可供学习。重点将放在掌握基础后如何针对Minecraft项目进行工具配置。
## Git
-`git` is a tool installed locally on your machine and allows you to version your files. You can `commit` changes to your files with a small message (ex. "Fixed issue where dragons couldn't fly after being tamed"), view the full change-list, and quickly jump back to specific changes.
+`git`是安装在本地计算机上的版本管理工具,可对文件进行版本控制。您可以通过简短信息(例如"修复驯服后龙无法飞行的BUG")提交(`commit`)文件变更,查看完整修改记录,并快速回滚到特定版本。
-Git is insanely powerful and the de-facto tool for all major programming projects. The most significant drawback for MC work is that it is _complicated_. Be patient while learning.
+Git功能强大且是主流编程项目的标配工具。其应用于Minecraft开发的主要缺点是学习曲线陡峭。请保持耐心循序渐进。
-For a complete walkthrough of `git`, you should follow the following [git tutorial.](https://www.atlassian.com/git/tutorials/what-is-git)
+完整的`git`学习请参考[git官方教程](https://www.atlassian.com/git/tutorials/what-is-git)。
## GitHub
-GitHub is a version of your git project (`repository`) that is hosted online. This allows multiple people to work on the same project at the same time and collaborate. This is very helpful for map-making. By hosting on Github, you can also (optionally) make your code public, making it easier than ever to share your addons with the world.
+GitHub是git项目(`repository`仓库)的在线托管平台,允许多人同时协作开发。这对于地图制作尤为实用。通过GitHub托管,您还可以选择将代码公开,更方便地向世界分享您的附加包。
-For a complete walkthrough of using `Github`, you should follow this [github tutorial](https://guides.github.com/activities/hello-world/).
+完整的GitHub学习请参考[GitHub入门指南](https://guides.github.com/activities/hello-world/)。
-## Vocabulary Quiz
+## 术语自测
-If you've gotten this far, hopefully, you have a GitHub account and are familiar with `git` in a small way. The following terms will be used in this tutorial. If you don't know them, please google :)
+如果您已学习至此,希望您已注册GitHub账号并对`git`有初步了解。以下术语将在教程中使用,若不熟悉请自行查询:
-- repository
-- branch
-- commit
-- github
-- git
+- repository(仓库)
+- branch(分支)
+- commit(提交)
+- github
+- git
-# Setting up Git
+# Git环境配置
-This assumes you are adding an _existing_ project to git. The steps are similar if you are starting from scratch.
+本节假设您要将已有项目加入git管理。新建项目的操作流程类似。
-## Structure
+## 目录结构
-The big issue with using `git` for addons is that `git` generally works by encapsulating a _single_ folder and managing it. Of course, in Bedrock Addons, assets are spread across two folders: The `BP`, and `RP`. To get around this issue, we will place our repository outside of the `com.mojang` folder entirely and then use window `junctions` to "copy" the folders in.
+在附加包开发中使用`git`的主要问题在于:git通常通过管理单个文件夹实现版本控制,而基岩版附加包资源分散在`BP`和`RP`两个文件夹。为解决此问题,我们将仓库完全置于`com.mojang`文件夹之外,使用Windows符号链接(`junctions`)实现文件夹映射。
-There are many advantages of placing our project in a separate location:
+将项目置于独立位置有以下优势:
-- We can include additional files as needed, such as config files, tools, notes, .bb files, etc
-- We can combine the RP and the BP into one repository
-- All of our projects can be easily viewed in a simple location, instead of nested deep within com.mojang
+- 可自由添加配置文件、工具、笔记、.bb文件等附加内容
+- 可将RP和BP整合至同一仓库
+- 所有项目可在统一位置查看,避免深埋于com.mojang目录中
-## Creating a Git Repository
+## 创建Git仓库
-Pick a convenient location for your projects. I placed mine at `C:/sirlich/projects`. Make a new folder with the name of your map. We will be using `wiki` as the name of our mock project.
+为项目选择合适的位置。示例使用`C:/sirlich/projects`。新建以项目命名的文件夹,示例项目名为`wiki`。
-Right-click the folder, and click `"Open git Bash"`. If this option doesn't appear, you can open `git bash` from the start menu and navigate your project folder. If you don't have `git bash` installed, you should do so now.
+右键点击文件夹选择`"Open git Bash"`。若未显示此选项,可通过开始菜单打开`git bash`并导航至项目目录。若未安装`git bash`请立即安装。
-Type: `git init`. This will create a blank repository in your project.
+输入命令:`git init`。这将在项目中创建空白仓库。
-## Linking your existing RP and BP
+## 链接现有RP和BP
-The next step is to make the repository aware of your RP and BP folders. We will be using window symlink "junctions". When we create a junction, we essentially create a wormhole in our file system that will make it appear like your files are in two places at once. Deleting/editing/adding files is perfectly copied over.
+接下来通过创建Windows符号链接让仓库识别您的RP和BP文件夹。符号链接相当于文件系统的虫洞,使文件看似同时存在于两个位置。删除/编辑/添加操作会实时同步。
-Type: `mklink /J wiki_RP "C:/path/to/RP/in/com/mojang"`
-Type: `mklink /J wiki_BP "C:/path/to/BP/in/com/mojang"`
+输入命令:
+`mklink /J wiki_RP "C:/path/to/RP/in/com/mojang"`
+`mklink /J wiki_BP "C:/path/to/BP/in/com/mojang"`
-When you are finished, you should see `wiki_RP` and `wiki_BP` in your project folder, containing all your assets, existing files, etc.
+完成后,项目文件夹中将出现`wiki_RP`和`wiki_BP`目录,包含所有现有资源文件。
-You can now push this repository to `github`, following the tutorial above.
+此时可按照前述教程将仓库推送至`github`。
-## Extra Files
+## 附加文件
-Because we created our repository based on symlinks, we can add anything we like into the project folder without worrying about breaking the com.mojang folder. I like to track `.bb` files, cover-art files (`.kra` etc.).
+由于我们通过符号链接创建仓库,可在项目文件夹中添加任意文件而不影响com.mojang目录。推荐追踪`.bb`文件、封面设计文件(如`.kra`格式)等。
-You can also add notes, video files, or anything else you want to track.
+您还可以添加笔记、视频文件等需要版本控制的任何内容。
-## Working with your VCS
+## VCS使用规范
-The main things to remember about working with VCS:
+使用版本控制系统需牢记以下要点:
-- Always `pull` before starting work
-- Commit and `push` often
-- Always `push` before stopping work
-- If you screw up your files super bad, you can always reset to the last working version. If you commit/push often, hopefully, this wasn't too long ago.
-- Always, and I mean `always` make good commit messages. It's vital when you have to roll back.
+- 开始工作前务必先`pull`拉取最新版本
+- 频繁`commit`提交并`push`推送
+- 结束工作前必须`push`推送更改
+- 若文件严重损坏,可随时重置到最近可用版本。经常提交/推送能最大限度减少损失
+- 必须(强调)编写规范的提交信息,这在需要回滚时至关重要
+
+::: code-group
+```json [示例符号链接]
+mklink /J demo_RP "C:/Users/Steve/AppData/Local/Packages/Microsoft.MinecraftUWP_8wekyb3d8bbwe/LocalState/games/com.mojang/development_resource_packs/demoRP"
+```
+:::
\ No newline at end of file
diff --git a/docs/wiki/modsdk/index.md b/docs/wiki/modsdk/index.md
new file mode 100644
index 00000000..a19ab678
--- /dev/null
+++ b/docs/wiki/modsdk/index.md
@@ -0,0 +1,6 @@
+---
+title: 中国版Mod开发
+categories:
+ - title: 基础
+ color: blue
+---
diff --git a/docs/wiki/1-Mod脚本开发/1-快速入门Mod开发.md b/docs/wiki/modsdk/modsdk-intro.md
similarity index 99%
rename from docs/wiki/1-Mod脚本开发/1-快速入门Mod开发.md
rename to docs/wiki/modsdk/modsdk-intro.md
index b7a2c06c..618e0990 100644
--- a/docs/wiki/1-Mod脚本开发/1-快速入门Mod开发.md
+++ b/docs/wiki/modsdk/modsdk-intro.md
@@ -1,3 +1,8 @@
+---
+title: 🚀 快速入门 Mod 开发
+category: 基础
+---
+
# 🚀 快速入门我的世界 Mod 开发
::: warning :warning: 接下来需要 Python2 基础知识
diff --git a/docs/wiki/1-Mod脚本开发/为什么是System.md b/docs/wiki/modsdk/why-system.md
similarity index 100%
rename from docs/wiki/1-Mod脚本开发/为什么是System.md
rename to docs/wiki/modsdk/why-system.md
diff --git a/docs/wiki/nbt/experimental-education-edition.md b/docs/wiki/nbt/experimental-education-edition.md
index 3046d0c5..c556e6ed 100644
--- a/docs/wiki/nbt/experimental-education-edition.md
+++ b/docs/wiki/nbt/experimental-education-edition.md
@@ -1,14 +1,18 @@
---
-title: Experiments in Education Edition
-category: Tutorials
+title: 教育版中的实验性功能
+category: 巧思案例
mentions:
- Fabrimat
- TheItsNameless
tags:
- - easy
- - Last updated for Version 1.18.32 (MEE)
+ - 简单
+ - 最后更新于版本1.18.32(教育版)
---
+# 教育版中的实验性功能
+
+
+
[structure]: /assets/images/nbt/structure.png
[int]: /assets/images/nbt/int.png
[list]: /assets/images/nbt/list.png
@@ -16,22 +20,22 @@ tags:
[string]: /assets/images/nbt/string.png
[byte]: /assets/images/nbt/byte.png
-Education Edition is a variant of Bedrock Edition with some different features and limitations.
-For security reasons it doesn't allow you to enable Experimental Features from the game.
+教育版是基于基岩版的一个特殊版本,具有不同的功能特性与使用限制。
+出于安全考虑,该版本不允许在游戏中直接启用实验性功能。
-## Editing NBT
+## 编辑NBT数据
::: warning
-Always make a backup of your data before editing NBT files!
+在编辑NBT文件前请务必备份存档!
-Experimental features may not be compatible with every device and can cause your world to behave in unexpected way.
+实验性功能可能无法兼容所有设备,并可能导致您的世界出现异常行为。
:::
-1. Extract the level.dat from your .mcworld, .mctemplate or com.mojang world folder.
-2. Open the file with NBT editor (NBT Studio for example).
-3. Select on the first node which is ![][structure] level.dat
-4. Create a new compound tag called ![][compound] experiments
-5. Select the new node and create a new ![][byte] byte with the name of the feature you need with a value of 1, which on 1.18.32 are:
+1. 从.mcworld、.mctemplate或com.mojang世界文件夹中提取level.dat文件
+2. 使用NBT编辑器(例如NBT Studio)打开该文件
+3. 选中根节点(显示为![][structure] level.dat)
+4. 新建一个名为![][compound] experiments的复合标签
+5. 选中该节点并新建一个![][byte]字节类型值,名称填写需要启用的功能名称,数值设为1。在1.18.32版本中可用的功能包括:
- data_driven_biomes
- data_driven_items
- experimental_molang_features
@@ -45,8 +49,19 @@ Experimental features may not be compatible with every device and can cause your

-Finally, save the file and put it back in the world package or directory.
+最后保存文件并放回原世界文件包或目录中。
-## Tips
-Education Edition is usually one or two versions behind the classic Bedrock Edition, so you'll always know in advance which experimental features will be added to the stable gameplay and which will be modified or removed.
-Try to add only features that will persist over time if you want to use that world in your classroom.
+## 使用建议
+教育版通常会比标准基岩版落后一到两个版本,这意味着您可以提前知晓哪些实验性功能将被加入正式版,哪些可能被修改或移除。
+如果需要在教学环境中使用这些世界,建议仅启用那些长期稳定的功能。
+
+::: code-group
+```json [示例配置]
+{
+ "experiments": {
+ "data_driven_biomes": 1b,
+ "vanilla_experiments": 1b
+ }
+}
+```
+:::
\ No newline at end of file
diff --git a/docs/wiki/nbt/index.md b/docs/wiki/nbt/index.md
index 6bba6e27..6ea6e7bd 100644
--- a/docs/wiki/nbt/index.md
+++ b/docs/wiki/nbt/index.md
@@ -1,10 +1,10 @@
---
title: NBT
categories:
- - title: General
+ - title: 基础
color: blue
- - title: Tutorials
+ - title: 巧思案例
color: green
- - title: NBT in Depth
+ - title: NBT深度解析
color: red
---
\ No newline at end of file
diff --git a/docs/wiki/nbt/mcstructure.md b/docs/wiki/nbt/mcstructure.md
index 02b7c835..2c7b314b 100644
--- a/docs/wiki/nbt/mcstructure.md
+++ b/docs/wiki/nbt/mcstructure.md
@@ -1,6 +1,6 @@
---
title: .mcstructure
-category: General
+category: 基础
mentions:
- SirLich
- MedicalJewel105
@@ -13,115 +13,122 @@ mentions:
[compound]: /assets/images/nbt/compound.png
[string]: /assets/images/nbt/string.png
-### Saving and Loading
+# .mcstructure
-The **Export** button creates `.mcstructure` files in a structure block. The files must be placed in a behavior pack to load them in-game with a load structure block. The path determines the structure identifier, which is typed into the structure block to load the structure.
+
-**Examples:**
+### 保存与加载
+
+**导出**按钮会在结构方块中创建`.mcstructure`文件。这些文件必须放置在行为包中,才能通过加载结构方块在游戏中载入。文件路径决定了结构标识符,该标识符需要输入到结构方块中以加载结构。
+
+**示例:**
`BP/structures/house.mcstructure` → `mystructure:house`
`BP/structures/dungeon/entrance.mcstructure` → `dungeon:entrance`
`BP/structures/stuff/towers/diamond.mcstructure` → `stuff:towers/diamond`
-The first subfolder defines the namespace, and subsequent folders define the path, ending with the structure file's name.
+第一个子文件夹定义命名空间,后续文件夹定义路径,最后以结构文件名结尾。
-Note that any files directly in the `structures` folder are given the `mystructure` namespace. If a structure exists in the `structures` folder and shares a name with a structure in an explicit `mystructure` folder, the game produces the following content log warning:
+注意:直接放置在`structures`文件夹中的文件会被分配`mystructure`命名空间。如果`structures`文件夹中的结构与显式`mystructure`文件夹中的结构同名,游戏会产生以下内容日志警告:
```
-[structure][warning]-There was a conflict loading a structure in the default namespace. A structure with the name
was found both in the root directory and the mystructure directory.
+[structure][warning]-在默认命名空间中加载结构时发生冲突。发现名称的结构同时存在于根目录和mystructure目录。
```
-In this case, the file in the `mystructure` folder is the one that "wins," resulting in the file directly in the `structures` folder being ignored.
+这种情况下,`mystructure`文件夹中的文件会"胜出",导致直接存放在`structures`文件夹中的文件被忽略。
-### File Format
+### 文件格式
-`mcstructure` files are uncompressed [NBT files](https://wiki.vg/NBT#Specification). Like all Bedrock Edition NBT files, they are stored in little-endian format. The tag structure is as follows:
+`mcstructure`文件是未压缩的[NBT文件](https://wiki.vg/NBT#Specification)。与所有基岩版NBT文件一样,它们以小端格式存储。标签结构如下:
-> ![Integer][int] `format_version`: Currently always set to `1`.
+::: code-group
+```nbt [结构文件]
+> ![整数][int] `format_version`: 当前固定为`1`。
>
-> ![List][list] `size`: List of three integers describing the size of the structure's bounds.
+> ![列表][list] `size`: 包含三个整数的列表,描述结构边界尺寸。
>
-> > ![Integer][int] Size of the structure in the X direction.
+> > ![整数][int] X轴方向尺寸
> >
-> > ![Integer][int] Size of the structure in the Y direction.
+> > ![整数][int] Y轴方向尺寸
> >
-> > ![Integer][int] Size of the structure in the Z direction.
+> > ![整数][int] Z轴方向尺寸
>
-> ![Compound][compound] `structure`: Actual data compound.
+> ![复合标签][compound] `structure`: 实际数据结构
>
-> > ![List][list] `block_indices`: List containing two sublists, one for each layer. These contain the blocks in the structure. Each block is stored as an integer index into the palette (see below). Proceeds in ZYX order from the lowest corner to the highest one. For example, if the structure size is `[2,3,4]`, then the 24 (product of the dimensions) values in each layer list represent the blocks located at `[(0,0,0), (0,0,1), (0,0,2), (0,0,3), (0,1,0), (0,1,1), (0,1,2), (0,1,3), (0,2,0), (0,2,1), (0,2,2), (0,2,3), (1,0,0), (1,0,1), (1,0,2), (1,0,3), (1,1,0), (1,1,1), (1,1,2), (1,1,3), (1,2,0), (1,2,1), (1,2,2), (1,2,3)]` relative to the origin. Index values equal to `-1` indicate no block, causing any existing block to remain upon loading. This occurs when structure voids are saved, and is the case for most blocks in the second layer. Both layers share the same palette.
+> > ![列表][list] `block_indices`: 包含两个子列表(分别对应两个层级)。这些列表包含结构中的方块索引,每个索引指向调色板(见下文)。按ZYX顺序从最低角到最高角排列。例如,结构尺寸为`[2,3,4]`时,每个层级列表中的24个值(各维度乘积)代表位于`[(0,0,0), (0,0,1)...(1,2,3)]`的相对坐标。`-1`表示无方块,加载时保留原有方块(结构空位保存时会生成此值,第二层级大部分方块为此情况)。两个层级共享同一调色板。
> >
-> > > ![List][list] of ![Integer][int] Indices for blocks in the primary layer.
+> > > ![列表][list] of ![整数][int] 主层级方块索引
> > >
-> > > ![List][list] of ![Integer][int] Indices for blocks in the secondary layer. This layer is usually empty, except for water when the block here is waterlogged.
+> > > ![列表][list] of ![整数][int] 次层级方块索引(通常为空,仅在含水方块时存在)
> >
-> > ![List][list] of ![Compound][compound] `entities`: List of entities as NBT, stored exactly the same as entities in the world file itself. Tags like `Pos` and `UniqueID` are saved, but replaced upon loading.
+> > ![列表][list] of ![复合标签][compound] `entities`: 实体NBT数据,存储方式与存档文件中的实体完全相同。`Pos`、`UniqueID`等标签会被保存,但加载时会被替换。
> >
-> > ![Compound][compound] `palette`: Contains multiple named palettes, presumably to support multiple variants of the same structure. However, currently, only `default` is saved and loaded.
+> > ![复合标签][compound] `palette`: 包含多个命名调色板(理论上支持同一结构的多个变体)。目前仅`default`会被保存和加载。
> >
-> > > ![Compound][compound] A single palette (currently only named `default`).
+> > > ![复合标签][compound] 单个调色板(当前仅`default`)
> > >
-> > > > ![List][list] `block_palette`: List of block states. This list contains the ordered entries that the block indices are referring to.
+> > > > ![列表][list] `block_palette`: 方块状态列表。该列表包含方块索引引用的有序条目。
> > > >
-> > > > > ![Compound][compound] A single block state.
+> > > > > ![复合标签][compound] 单个方块状态
> > > > >
-> > > > > > ![String][string] `name`: The block's identifier, such as `minecraft:planks`.
-> > > > > > ![Compound][compound] `states`: The block's states as keys and values. Examples: `wood_type:"acacia"`, `bite_counter:3`, `open_bit:1b`. The values are the appropriate NBT type for the state: strings for enum values, integers for scalar numbers, and bytes for boolean values.
-> > > > > > ![Integer][int] `version`: Compatibility versioning number for this block (currently `17959425` as of writing, in 1.19).
+> > > > > > ![字符串][string] `name`: 方块ID(如`minecraft:planks`)
+> > > > > > ![复合标签][compound] `states`: 方块状态键值对(例如`wood_type:"acacia"`, `bite_counter:3`, `open_bit:1b`)。值类型与状态匹配:枚举值用字符串,数值用整数,布尔值用字节。
+> > > > > > ![整数][int] `version`: 方块兼容版本号(当前版本为`17959425`,对应1.19)
> > > >
-> > > > ![Compound][compound] `block_position_data`: Contains additional data for individual blocks in the structure. Each key is an integer index into the flattened list of blocks inside of `block_indices`. Layer is unspecified as it is irrelevant.
+> > > > ![复合标签][compound] `block_position_data`: 包含结构中单个方块的附加数据。键为`block_indices`展开列表中的整数索引(层级无关)。
> > > >
-> > > > > ![Compound][compound] ``: A single piece of additional block data, applied to the block at its index position.
+> > > > > ![复合标签][compound] ``: 应用于指定索引方块的附加数据
> > > > >
-> > > > > > ![Compound][compound] `block_entity_data`: Block entity data as NBT, stored the same as block entities in the world file itself. Position tags are saved, but replaced upon loading. No other objects seem to exist adjacent to this one at this time.
+> > > > > > ![复合标签][compound] `block_entity_data`: 方块实体NBT数据,存储方式与存档文件中的方块实体相同。位置标签会被保存,但加载时替换。目前未发现其他相关对象。
>
-> ![List][list] `structure_world_origin`: List of three integers describing where in the world the structure was initially saved. Equal to the position of the saving structure block, plus its offset settings. This is used to determine where entities should be placed when loading. An entity's new absolute position is equal to its old position, minus these values, plus the origin of the structure's loading position.
+> ![列表][list] `structure_world_origin`: 包含三个整数的列表,描述结构在存档中的原始保存位置。等于保存结构方块的位置加上偏移设置。用于确定加载时实体的放置位置。实体新绝对位置等于旧位置减去该值,再加上结构加载位置的原点。
>
-> > ![Integer][int] Structure origin X position.
-> > ![Integer][int] Structure origin Y position.
-> > ![Integer][int] Structure origin Z position.
-
-### What Happens If...
-
-Results from testing to see what happens when modified structure files are loaded:
-
-- If the dimensions in `size` exceed the vanilla save the limit of `64*256*64`, the structure can still be loaded just as expected.
-- If the values in the block layer lists are not int tags, all values are treated as `0`.
-- If a value in the block layer list is equal to or larger than the palette size or less than `-1`, an air block is placed.
-- If the `default` palette is not present, loading the structure results in no blocks being placed.
-- If any of the tags that have constant names are unspecified or are the wrong tag type, the structure fails to load with the following content log error:
-
-```
-[Structure][error]-Loading structure '` from behavior pack: '' | "" field, a required field, is missing from the structure.
+> > ![整数][int] 结构原点X坐标
+> > ![整数][int] 结构原点Y坐标
+> > ![整数][int] 结构原点Z坐标
```
-- If `block_indices` does not contain exactly two values, the structure fails to load with the following content log error:
+### 特殊情况测试
+
+修改结构文件后的加载测试结果:
+
+- 当`size`中的维度超过原版保存限制`64*256*64`时,结构仍能正常加载
+- 当方块层级列表中的值不是整数标签时,所有值会被视为`0`
+- 当方块层级列表中的值等于或大于调色板尺寸,或小于`-1`时,会放置空气方块
+- 当`default`调色板不存在时,加载结构不会放置任何方块
+- 当任何固定名称的标签缺失或类型错误时,结构加载失败并产生以下日志错误:
```
-[Structure][error]-Loading structure '` from behavior pack: '' | The "block_indices" field should be an array with 2 arrays and instead we have arrays.
+[Structure][error]-从行为包加载结构'`: '' | 结构中缺少必要字段""
```
-- If the values inside of `block_indices` do not list tags, the structure fails to load with the following content log error:
+- 当`block_indices`不包含正好两个值时,结构加载失败:
```
-[Structure][error]-Loading structure '` from behavior pack: '' | The "block_indices" field's first array is either missing or not a list.
+[Structure][error]-从行为包加载结构'`: '' | "block_indices"字段应为包含2个数组的数组,当前检测到个数组
```
-- If the length of the two lists in `block_indices` are not equal, the structure fails to load with the following content log error:
+- 当`block_indices`中的值不是列表标签时:
```
-[Structure][error]-Loading structure '` from behavior pack: '' | The "block_indices" field's arrays need to both be the same size.
+[Structure][error]-从行为包加载结构'`: '' | "block_indices"字段的第一个数组缺失或不是列表
```
-- If the length of the two lists in `block_indices` does not equal the product of the structure's dimensions, the structure fails to load with the following content log error:
+- 当`block_indices`两个列表长度不相等时:
```
-[Structure][error]-Loading structure '` from behavior pack: '' | The "block_indices" field should have as many elements as defined by the "size" field.
+[Structure][error]-从行为包加载结构'`: '' | "block_indices"字段的两个数组必须长度相同
```
-## NBT Editors
+- 当`block_indices`列表长度与结构尺寸乘积不符时:
-You can find download links for some NBT editors [here](/meta/useful-links#software-installed).
+```
+[Structure][error]-从行为包加载结构'`: '' | "block_indices"字段元素数量应与"size"字段定义的数量一致
+```
+
+## NBT编辑器
+
+NBT编辑器下载链接请访问[此处](/wiki/meta/useful-links#software-installed)。
---
-[Original Credit](https://gist.github.com/tryashtar/87ad9654305e5df686acab05cc4b6205)
+[原始文档来源](https://gist.github.com/tryashtar/87ad9654305e5df686acab05cc4b6205)
\ No newline at end of file
diff --git a/docs/wiki/nbt/nbt-in-depth.md b/docs/wiki/nbt/nbt-in-depth.md
index d2792d29..8ba002fe 100644
--- a/docs/wiki/nbt/nbt-in-depth.md
+++ b/docs/wiki/nbt/nbt-in-depth.md
@@ -1,64 +1,74 @@
---
-title: About NBT (Named Binary Tag)
-category: NBT in Depth
+title: NBT深度解析
+category: NBT深度解析
mentions:
- ConsoleTerm
- SmokeyStack
- ThomasOrs
tags:
- - expert
+ - 专家
---
-NBT (Named Binary Tag) is a name for data encoding format at the binary level, you certainly know format JSON which is based on the text level. Therefore, we will be able to use the JSON format for some examples, you may also notice that minecraft itself uses JSON to represent NBT in commands such as java commands or simplified bedrock commands ( `/give`, `/replaceitem`). See [NBT Commands](/commands/nbt-commands) . In this article, we will show NBT in much more detail than you will ever expect, because what you could see in the commands is far from NBT, and we will show you how NBT works and how to read it, also how `Minecraft BE` itself uses it as well.
+# NBT深度解析
-## NBT Tags and Data Types
-NBT, just like JSON, has given types and knows how to read them, for example JSON knows that a compound object starts with the symbol `{` and ends with `}`, it also knows that when it has to read a string, the string always starts with the symbol ", this means that we want to learn to read and understand NBT so you need to know when a composite object starts, and how to read individual types.
-Now let's look at the table of NBT tags for NBT types and how they are marked in NBT.
-As it was said, NBT works on a binary level, so you need to know that the smallest data type is a byte, which is 8 bits in size. And individual types can contain multiple bytes, but they can never be 1/2 byte extra or less, not possible! : )
-We also cannot say how the tags should be named, because everyone can call NBT tags differently, but they must always have the same binary base (`id`), id is represented by one byte.
+
-| Name | Binary ID | Binary Size | Description |
-| :----------------: | --------: | :---------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Byte | 0x01 | 1 byte (8-bits) | One byte size type |
-| Int16 (short) | 0x02 | 2 bytes (16-bits) | A two-byte type |
-| Int32 (intiger) | 0x03 | 4 bytes (32-bits) | A four-byte type |
-| Int64 (long) | 0x04 | 8 bytes (64-bits) | An eight-byte type |
-| Float | 0x05 | 4 bytes (32-bits) | A four-byte type with regular decimal precision |
-| Double | 0x06 | 8 bytes (64-bits) | An eight-byte type with higher decimal precision |
-| String | 0x08 | Predefined | A string type that has a predefined size. Text uses UTF-8 encoding |
-| List | 0x09 | Predefined | A list type with a predefined size and defining type for the elements in the list |
-| Compoud | 0x0A (10) | Undefined | Type compound, the compound does not have a predefined size, so it is necessary to read the keys and values until we do not encounter the tag for ending the compound. |
-| End of the Compoud | 0x00 | 0 bytes | This tag is not a type but only a tag and can only be used depending on the compound. It marks the end of a compound |
-| Byte List | 0x07 | Predefined | List type of Byte and predefined size, not commonly used by Minecraft BE |
-| Int List | 0x0B (11) | Predefined | List type of Int and predefined size, not commonly used by Minecraft BE |
-| Long List | 0x0C (12) | Predefined | List type of Long and predefined size, not commonly used by Minecraft BE |
+NBT(命名二进制标签)是一种二进制层级的编码格式,正如你熟悉的基于文本层级的JSON格式。因此我们可以用JSON格式举例说明,你可能也注意到Minecraft本身在命令中使用JSON来表示NBT(如Java版命令或简化的基岩版命令`/give`、`/replaceitem`)。详见[NBT命令](/wiki/commands/nbt-commands)。本文将深入解析NBT的运作原理、读取方式以及`Minecraft BE`如何应用它,其详细程度远超你在命令中接触的NBT表象。
-You may notice that there is no boolean value like in JSON and that means we will express true false values as 1 and 0 using Byte.
+## NBT标签与数据类型
+与JSON类似,NBT具备类型识别系统。例如JSON通过`{}`符号识别复合对象,通过`"`识别字符串。要理解NBT,需要掌握复合对象的起始标记和各类型的读取方式。
-## How to read/write NBT tags
-The same reading method applies to all numbers, read as many bytes as the number tag type is large, such as: Int16 (short) is 2 bytes in size, so I will read 2 bytes, but you need to know that Minecraft BE uses the [little-endian](#little-endian), unlike Java, it uses big-endian. [Little-endian](#little-endian) is a way to write or read bytes of numbers.
+NBT基于二进制操作,最小单位为8位字节。各类型占用固定字节数,不存在半字节情况。注意类型名称可能有不同叫法,但二进制标识符(ID)始终由1字节表示。
-### Reading Types
-Type is always one byte in size, so we read the type and find out what to read next for the tag.
+| 名称 | 二进制ID | 二进制大小 | 描述 |
+| :----------------: | -------: | :--------------- | :------------------------------------------------------------------------------------------------------------------------------- |
+| 字节 | 0x01 | 1字节(8位) | 单字节类型 |
+| Int16(短整型) | 0x02 | 2字节(16位) | 双字节类型 |
+| Int32(整型) | 0x03 | 4字节(32位) | 四字节类型 |
+| Int64(长整型) | 0x04 | 8字节(64位) | 八字节类型 |
+| 浮点 | 0x05 | 4字节(32位) | 常规精度浮点数 |
+| 双精度 | 0x06 | 8字节(64位) | 高精度浮点数 |
+| 字符串 | 0x08 | 预定义长度 | UTF-8编码文本,前接2字节长度标识 |
+| 列表 | 0x09 | 预定义长度 | 元素类型统一,前接4字节元素数量 |
+| 复合标签 | 0x0A (10)| 未定义长度 | 通过遍历键值对读取,直到遇到结束标记 |
+| 复合标签结束标记 | 0x00 | 0字节 | 仅作为复合标签结束标识 |
+| 字节列表 | 0x07 | 预定义长度 | 基岩版不常用 |
+| 整型列表 | 0x0B (11)| 预定义长度 | 基岩版不常用 |
+| 长整型列表 | 0x0C (12)| 预定义长度 | 基岩版不常用 |
-### Reading Numbers
-When reading a number, it is necessary to know what type of number we are reading, we can find out by reading the type *([Reading types](#reading-types))*. Then when we know what type of number we have to read, we read it, for example, if we know that we want type `3`, then we look in the table and we know that type 3 is a number of 4-bytes size, so we read 4 bytes. All numbers ***BE*** reads/writes with [little-endian](#little-endian) method.
+注意NBT没有布尔类型,需用字节类型的1/0表示true/false。
-### Reading Strings
-When reading a string, you need to know its length in bytes, this string length is always written with Int16 (short) `2 bytes` ([how to read numbers](#reading-numbers)) before the string, i.e. first we read the number, then we read the number of bytes of the number we read before, after we know the bytes we can stuff them through UTF-8 encoding and we get text from them.
+## NBT标签读写方法
+所有数值类型按字节长度读取,基岩版采用[小端序](#小端序)编码,与Java版的大端序相反。
-### Reading Lists
-When reading a list, we must first read the list ([type](#reading-types)), whether this list contains numbers or other lists or strings, etc. So first we read the type of this list, then we read the [number](#reading-numbers) of elements which is written as an Int32 (int) number, so we read 4 bytes, now we know the type of our elements and their count, so we read this type as many times as we know from the readed number before. Reading the size of a list is not the same as reading the size of a string! Should read Int32 no Int16! This solution does not apply to `Byte-List, Int-List, Long-List`!
+### 类型读取
+始终读取1字节确定后续数据类型。
-### Reading Compouds
-Compound has all properties named so when reading an property it is always necessary to read its name as well. The procedure for reading Compoud is rather simple. First, we read the type, the type can be anything, but if it is equal to an empty byte, then it is the end of the compound and then we jut stop reading, but if the type is not equal to the Compoud Ending tag, then the significant type of the property that we will read. The read property is always followed by the name (key), which needs to be read as a [string](#reading-strings), and after the string is read, then we can read value.
+### 数值读取
+根据类型确定字节数(如类型3读取4字节)。所有数值使用[小端序](#小端序)处理。
-## Minecraft BE NBT files
-When reading Minecraft NBT files, it is always important to be careful if there is no Bedrock Header at the beginning of the file, see [Bedrock NBT Header](#bedrock-nbt-file-header), but not all MCBE NBT files contain this header, for example `.mcstructure` also does not contain a Bedrock NBT header, unlike `level.dat`.
-You also need to pay attention to the root element in the file, i.e. the list or compoud,
-The root element also looks like a property, so you need to read the name of this root property, although Bedrock does not use these names, so these names are empty, but they are there.
-Here is how .mcstructure looks like where JSON represents NBT.
-```json
+### 字符串读取
+先读取2字节长度标识(Int16),再按对应字节数读取UTF-8编码内容。
+
+### 列表读取
+1. 读取列表元素类型(1字节)
+2. 读取元素数量(Int32,4字节)
+3. 按数量循环读取元素
+
+注意:字节列表/整型列表/长整型列表的读取方式不同
+
+### 复合标签读取
+1. 读取类型标记:
+ - 0x00:结束读取
+ - 其他类型:继续读取键值对
+2. 读取键名字符串
+3. 读取对应类型值
+
+## 基岩版NBT文件解析
+注意文件开头的[基岩版NBT文件头](#基岩版nbt文件头),如`.mcstructure`文件无此头而`level.dat`有。根元素需作为匿名属性处理(即使键名为空)。
+
+::: code-group
+```json [.mcstructure示例]
"":{
"format_version":1,
"size":[],//...
@@ -66,23 +76,27 @@ Here is how .mcstructure looks like where JSON represents NBT.
"structure_world_origin":[]//..
}
```
-:::warning
-This example shows that it is also necessary to read the name of the basic element, although it is usually unused and empty.
:::
-## Writing NBT
-There is no certain procedure for writing, because it is the same mothods as when reading, but backwards. That's why we recommend first understanding NBT and learning to read it correctly, then it won't be difficult to write NBT.
+:::warning
+此示例表明即使根元素键名通常为空,仍需进行读取操作。
+:::
-## Bedrock NBT File header
-The NBT bedrock Header is indicated by two 4-byte numbers, the first is always 8 and the second indicates the size of the nbt structure in bytes. E.g.
- - `08 00 00 00` - `bf 00 00 00`
- - < always 8 > < always the size of the NBT structure - exclude headers 8 bytes>
+## NBT写入规范
+写入流程与读取逆向操作,需先掌握读取原理。
-## Little-Endian
-Little-Endian is the common method of writing numbers in bytes to streams or files.
-It's not a science and it's easy to understand. So if Int16 `(short)` of value `0x5a72` then we convert it to bytes [`0x5a`, `0x72`] and then reverse their order that means [`0x72`, `0x5a`] and write d file: `72 5a`. It may seem illogical, but little-endian is almost always used when writing and reading from files. A single `byte` is the same in both methods because it is one byte in size. For example:
-- Int64 (long) `0x11223344aabbccdd`
-- Split to 8 bytes `0x11 0x22 0x33 0x44 0xAA 0xBB 0xCC 0xDD`
-- Reverse `0xDD 0xCC 0xBB 0xAA 0x44 0x33 0x22 0x11`
-- Write `dd cc bb aa 44 33 22 11`
-- Done (when reading the number just go backwards this example.)
+## 基岩版NBT文件头
+包含两个4字节数值:
+1. 固定值8(0x08000000)
+2. NBT结构体字节数(不含头部的8字节)
+
+示例:
+- `08 00 00 00` - `bf 00 00 00`
+- <固定值8>
+
+## 小端序
+数字按字节逆序存储的编码方式:
+- Int16 `0x5a72` → 字节数组 `[0x72, 0x5a]`
+- Int64 `0x11223344aabbccdd` → 存储为 `dd cc bb aa 44 33 22 11`
+
+读取时反向转换即可还原数值。单字节类型不受影响。
\ No newline at end of file
diff --git a/docs/wiki/nbt/step-by-step-example.md b/docs/wiki/nbt/step-by-step-example.md
index 79871331..31bd3a00 100644
--- a/docs/wiki/nbt/step-by-step-example.md
+++ b/docs/wiki/nbt/step-by-step-example.md
@@ -1,84 +1,85 @@
---
-title: Reading NBT Example
-category: NBT in Depth
+title: 读取NBT示例
+category: 基础
mentions:
- ConsoleTerm
tags:
- - expert
+ - 专家
---
-Before going through this example, it is necessary to first familiarize yourself with NBT in its full beauty. See *[NBT in Depth](/nbt/nbt-in-depth)*.
-Now we will show you how to read NBT, step by step, the format of what we will read will look something like this:
+# 读取NBT示例
+
+
+
+在进行本示例前,请先系统学习NBT的完整知识体系。参考*[深入理解NBT](/wiki/nbt/nbt-in-depth)*。
+现在我们将分步骤演示如何读取NBT数据,示例数据的格式如下:
```json
"":{
- "myText":"My NBT text",
+ "myText":"我的NBT文本",
"my Int32 Number":456,
}
```
-When we don't know what to read, then we read the next byte.
+当我们不知道后续数据类型时,需要读取下一个字节。

-What did we read? We read number 10 and that means we will read compoud. We also know that we are at the root element property of this file now, so we need to read the name of our root element property. Name is string, so first we have to read the length of the text in bytes, and that is written by Int16 *(Short)*.
+我们读取到了数字10,表示即将读取复合标签。此时我们处于文件的根元素属性,需要读取根元素属性的名称。名称是字符串类型,因此首先需要读取字符串长度(以Int16形式存储)。

-The name size of our root element property is zero so we won't read any more bytes. We don't know what to read, so let's read another byte.
+根元素属性名称的长度为0,因此无需继续读取字节。此时需要读取下一个字节来确定后续数据类型。

-We already know that the next property in our root compound is type of string, but before we read our property value, we first read its name written such as string. So we read another 2 bytes to get the length of the string name from of our property.
+已知根复合标签中的下一个属性是字符串类型,但在读取属性值之前,需要先读取属性名称。因此需要再读取2个字节来获取属性名称的长度。

-We see that length of property name, it is 6 bytes long. So let's read the next 6 bytes.
+属性名称长度为6字节,继续读取接下来的6个字节。

-So we have read the Name of our property, which we can get in text form using UTF-8 encoding, that is: `myText`, then remember that the type of our property is string, so we repeat the process.
-I'll read the next Int16 (2 bytes) again and we'll find out the length of our string value.
+通过UTF-8编码转换后,得到属性名称:`myText`。接下来重复字符串类型的读取流程,读取下一个Int16(2字节)来获取字符串值的长度。

-The string length of our property is 0x0B, so 11, so read another 11 bytes.
+字符串长度为0x0B(十进制11),继续读取11个字节。

-When we push our read bytes through UTF-8 encoding, it again returns the value: `My NBT text`,
-what now? You don't know? So read the next byte to find out what to do next.
+经过UTF-8解码得到属性值:`My NBT text`。此时需要读取下一个字节来确定后续数据类型。

-So we read type 3, the 3 type is Int16 which contains 4 bytes. But before we read our number We have to find out the name of this property again. So?
-Read the next two bytes to get the length of the name for this property.
+读取到类型3(Int32类型),需要先读取属性名称的长度。读取接下来的2个字节。

-So we know the length of the name 0x0f (15), Let's read the next 15 bytes and push it through UTF-8 encoding.
+名称长度为0x0F(十进制15),继续读取15个字节并进行UTF-8解码。

-Now we have the name of this property: `my Int32 Number`. Next let's read that Int32 => 4 bytes.
+得到属性名称:`my Int32 Number`。接下来读取Int32类型的4个字节。

-We read an Int32 that has the value `0x01c8` (456).
-Again You don't know what to do next? Then just read another type of next property, so? 1 byte.
+读取到的Int32值为`0x01c8`(十进制456)。继续读取下一个字节确认后续数据类型。

-We read 0x00 (an empty byte), and that marks the end of the root compound. Then the reading of the compound ends, and since it is the ***root*** compound, we can finish reading it completely and have the entire NBT file read.
-### NBT Example File
-This is file what we use here for this example.
+读取到0x00空字节,表示根复合标签结束。由于这是***根***复合标签,此时完成整个NBT文件的读取。
+
+### NBT示例文件
+本示例所使用的NBT文件:
Download NBT File
+>下载NBT文件
-:::tip Important points to keep in mind
- - The file may contain an NBT Bedrock Header, so be aware that such a situation may occur. See [NBT in Depth](/nbt/nbt-in-depth)>[NBT Bedrock Headers](/nbt/nbt-in-depth#bedrock-nbt-file-header).
- - The closing null byte does not terminate the reading of the NBT as such, but merely marks the end of the current compound.
- - All the numbers you read need to be read with little-endian, See [NBT in Depth](/nbt/nbt-in-depth)>[little-endian](/nbt/nbt-in-depth#little-endian).
- - The first root NBT element in a file can only be a compound or a list. The root element/property in NBT files also has its own name, even though it is mostly empty, but it still needs to be read and avoid complications.
-:::
+:::tip 重要注意事项
+ - 文件可能包含NBT基岩版文件头,需注意这种情况。参见[深入理解NBT](/wiki/nbt/nbt-in-depth)>[NBT基岩版文件头](/wiki/nbt/nbt-in-depth#bedrock-nbt-file-header)
+ - 结束空字节并不直接终止NBT读取,仅标记当前复合标签的结束
+ - 所有数值均需按小端序读取,参见[深入理解NBT](/wiki/nbt/nbt-in-depth)>[小端序](/wiki/nbt/nbt-in-depth#little-endian)
+ - NBT文件的首个根元素只能是复合标签或列表。根元素的名称虽然通常为空,但仍需读取并妥善处理
+:::
\ No newline at end of file
diff --git a/docs/wiki/nbt/structure-limits.md b/docs/wiki/nbt/structure-limits.md
index 6238c374..829abc54 100644
--- a/docs/wiki/nbt/structure-limits.md
+++ b/docs/wiki/nbt/structure-limits.md
@@ -1,47 +1,103 @@
---
-title: Extending Structure Limits
-category: Tutorials
+title: 扩展结构限制
+category: 巧思案例
mentions:
- MedicalJewel105
tags:
- - easy
+ - 简单
---
+# 扩展结构限制
+
+
+
[structure]: /assets/images/nbt/structure.png
[int]: /assets/images/nbt/int.png
[list]: /assets/images/nbt/list.png
[compound]: /assets/images/nbt/compound.png
[string]: /assets/images/nbt/string.png
-:::warning DEPRECATED
-This method no longer works after 1.20.50 update.
+:::warning 已弃用
+该方法在1.20.50版本更新后已失效。
:::
-By default, Minecraft doesn't allow you to save structures that are more than 64x255x64 in size.
-In this guide you will learn how to extend structure box size for structure blocks.
+默认情况下,Minecraft不允许保存超过64x255x64大小的结构。本教程将指导你如何扩展结构方块的可保存范围。
-## Editing NBT
+## 编辑NBT数据
-1. Put a structure block into structure and export it.
-2. Open your structure with NBT editor (NBT Studio in our case) and find your structure block.
+1. 将结构方块放入结构中并导出
+2. 使用NBT编辑器(本文使用NBT Studio)打开结构文件,定位到结构方块数据
-If the only block you have in your structure is structure block, you will find its data here:
+如果你的结构中仅包含结构方块,可以在此处找到对应数据:
-![][structure] extending_structure_block.mcstructure
-> ![][compound] structure
-> > ![][compound] palette
-> > > ![][compound] default
-> > > > ![][compound] block_position_data
-> > > > > ![][compound] 0
+::: code-group
+```json [extending_structure_block.mcstructure]
+> [compound] structure
+> > [compound] palette
+> > > [compound] default
+> > > > [compound] block_position_data
+> > > > > [compound] 0
+```

+:::
-3. Set `xStructureSize`, `yStructureSize` and `zStructureSize` values to what you want.
-4. Save the structure and load it in game.
+3. 将`xStructureSize`、`yStructureSize`和`zStructureSize`的值修改为所需尺寸
+4. 保存结构文件并在游戏中加载

-## Tips
+## 使用技巧
-You can get this structure block to your inventory by pressing mouse scroll button while holding Ctrl.
-It is recommended to use structure loading animations (Place by Block) when loading a huge structure. This will minimize lags.
+- **快速获取结构方块**:按住Ctrl键时点击鼠标滚轮可获取当前结构方块
+- **优化加载性能**:加载大型结构时建议启用"按方块放置"加载动画,可有效减少卡顿
+
+# 扩展结构限制 {#extending-structure-limits}
+
+:::tip 版本提示
+本文所述方法适用于基岩版1.20.50之前的版本
+:::
+
+通过修改NBT数据,你可以突破以下默认限制:
+- X轴最大范围:64 → 384
+- Y轴最大范围:256 → 256(不可修改)
+- Z轴最大范围:64 → 384
+
+实际测试表明,修改后的结构在加载时可能出现以下现象:
+- 超出区块边界的部分会循环加载
+- 过大的结构可能导致客户端性能下降
+
+建议遵循以下最佳实践:
+1. 使用`/testforblock`命令验证结构完整性
+2. 分区块逐步加载大型建筑
+3. 配合`/tickingarea`命令保持活动区块
+
+```json
+// 示例:修改后的NBT结构片段
+"structure": {
+ "palette": {
+ "default": {
+ "block_position_data": {
+ "0": {
+ "xStructureSize": 128,
+ "yStructureSize": 256,
+ "zStructureSize": 128
+ }
+ }
+ }
+ }
+}
+```
+
+:::caution 注意事项
+- 修改后的结构文件在不同版本间可能存在兼容性问题
+- 使用第三方NBT编辑器时请做好文件备份
+- 服务器环境需要同步所有客户端的结构文件
+:::
+
+通过合理运用这些技巧,你可以轻松实现以下建筑效果:
+- 超大型红石计算机
+- 全景式地形景观
+- 多维度联动的复杂机关
+
+最后更新:2023年11月(适用于基岩版1.19.80)
\ No newline at end of file
diff --git a/docs/wiki/particles/disabling-particles.md b/docs/wiki/particles/disabling-particles.md
index f34a753b..ccb711ca 100644
--- a/docs/wiki/particles/disabling-particles.md
+++ b/docs/wiki/particles/disabling-particles.md
@@ -1,21 +1,24 @@
---
-title: Disabling Particles
-category: Tutorials
+title: 禁用粒子效果
+category: 巧思案例
tags:
- - beginner
+ - 新手
mentions:
- SirLich
- Joelant05
- MedicalJewel105
---
-In the event that you want to disable a particle, it is recommended to do so from the particle file itself as opposed to simply making the particle texture transparent in `particles.png`. Additionally, disabling a particle might offer a slight performance boost compared to making it transparent, as transparent particles are still emitted (but not visible).
+# 禁用粒子效果
-The basic idea of disabling a particle from emitting is as follows:
+
-RP/particles/some_vanilla_particle.json
+当你需要禁用某个粒子效果时,建议直接在粒子文件中进行禁用,而不是简单地在 `particles.png` 中将粒子纹理设为透明。此外,与透明化处理相比,完全禁用粒子可能会带来小幅性能提升,因为透明粒子仍会被发射(只是不可见)。
-```json
+禁用粒子发射的基本原理如下:
+
+::: code-group
+```json [RP/particles/some_vanilla_particle.json]
{
"format_version": "1.10.0",
"particle_effect": {
@@ -28,13 +31,19 @@ The basic idea of disabling a particle from emitting is as follows:
},
"components": {
"minecraft:emitter_lifetime_expression": {
- "activation_expression": 0,
- "expiration_expression": 1
+ "activation_expression": 0, // 立即激活
+ "expiration_expression": 1 // 立即结束生命周期(单位:秒)
},
"minecraft:emitter_rate_manual": {
- "max_particles": 0
+ "max_particles": 0 // 设置最大粒子生成数为0
}
}
}
}
```
+:::
+
+**实现原理说明:**
+1. 通过 `emitter_lifetime_expression` 组件将粒子发射器的生命周期设为瞬时(0秒激活,1秒后过期)
+2. 使用 `emitter_rate_manual` 组件将最大粒子数设为0,彻底阻止粒子生成
+3. 保留原始渲染参数确保兼容性,但实际不会产生任何可见粒子
\ No newline at end of file
diff --git a/docs/wiki/particles/index.md b/docs/wiki/particles/index.md
index 83230842..e271ae85 100644
--- a/docs/wiki/particles/index.md
+++ b/docs/wiki/particles/index.md
@@ -1,10 +1,10 @@
---
-title: Particles
+title: 粒子 Particles
categories:
- - title: General
+ - title: 基础
color: blue
- - title: Tutorials
+ - title: 巧思案例
color: green
- - title: Documentation
+ - title: 文档
color: red
---
diff --git a/docs/wiki/particles/particles-and-sounds.md b/docs/wiki/particles/particles-and-sounds.md
index 8630ee07..638b322b 100644
--- a/docs/wiki/particles/particles-and-sounds.md
+++ b/docs/wiki/particles/particles-and-sounds.md
@@ -1,8 +1,8 @@
---
-title: 'Particles and Sounds'
-category: General
+title: '粒子与音效'
+category: 基础
tags:
- - outdated
+ - 已过时
mentions:
- SirLich
- Joelant05
@@ -12,69 +12,71 @@ mentions:
- solvedDev
---
+# 粒子与音效
+
+
+
:::danger
-Some information from this page was copied [here](/visuals/animation-effects)
+本页部分信息已迁移至[动画效果文档](/wiki/visuals/animation-effects)
:::
-## Particles in Animation
+## 动画中的粒子效果
-Minecraft Particles can be used in entity animations. For example, the phantom has an animation which emits the minecraft:phantom_trail particle constantly. Let's try to add a particle to our entity's attack animation.
+Minecraft粒子效果可以应用于实体动画。例如,幻翼拥有持续释放minecraft:phantom_trail粒子的动画。让我们尝试在实体的攻击动画中添加粒子效果。
-`part of RP/entity/description/`
+`资源包/entity/description/ 目录下`
-
-
-```json
+::: code-group
+```json [实体描述文件示例]
"particle_effects": {
"l_explosion": "minecraft:large_explosion"
},
```
+:::
-This piece of code is located in our resource entity file. Here we defined the shortname ("l_explosion") for the particle we are going to use, "minecraft:large_explosion".
+这段代码位于资源包实体文件中。这里我们为将要使用的粒子"minecraft:large_explosion"定义了一个简称"l_explosion"。
-You can test a particle in-game with the `/particle ~ ~2 ~` command. You can view the full list of Vanilla Particles [here](https://minecraft.wiki/w/Particles).
+可以通过指令`/particle <命名空间:粒子ID> ~ ~2 ~`在游戏中测试粒子效果。完整原版粒子列表可参考[Minecraft Wiki](https://minecraft.wiki/w/Particles)。
-Now for the Blockbench part.
+现在进行Blockbench操作:
-- Right click the bone were your particle will be emitted from, and choose 'Add Locator' with the anchor icon. Name it something distinct, like 'l_expl_emitter'. Now move the emitter to the desired location.
+1. 右键点击要发射粒子的骨骼,选择锚点图标添加定位器,命名如"l_expl_emitter",并移动到目标位置

-_Note: you can also use locators to define where a lead will leash to, if you name your locator 'lead'._
+_注:命名为'lead'的定位器可定义栓绳连接点_
-- In the 'Animate' section, choose 'Animate Effects' on your timeline, then click on the '+' icon near the 'Particle' object.
+2. 在动画时间轴中选择"Animate Effects",点击粒子对象旁的+号

-- You will see this menu on your left. 'Effect' asks for your particle's shortname, and 'Locator' asks for the name of your Locator/Emitter object.
+3. 左侧面板中填写粒子简称和定位器名称

-_Note: you can add sounds to animations in a similar way._
+_注:音效添加方式类似_

-Now you're good to go! Save the model and the animations. If you did everything correctly, the defined particle will spawn whenever the entity attacks. _Of course you could put another particle on the walking animation's timeline (for example, hooves making dust) in the same way._
+完成保存后,实体攻击时将生成指定粒子效果。_同理可在行走动画中添加蹄印扬尘效果_
-## Custom Particles
+## 自定义粒子
-Custom particles are defined in the `RP/particles` folder. As mentioned earlier on this page, you can summon particles using the '/particle' command (e.g in Behavior Animations) or using Resource Animation emitters. The best way to learn custom particles is to play around with the example files from the [Vanilla Example resource pack](https://www.minecraft.net/en-us/addons) and the Particle Example Pack, and of course, from the documentation on [bedrock.dev](http://bedrock.dev/r/Particles).
+自定义粒子定义于`RP/particles`目录。可通过指令或动画发射器调用。建议通过[原版示例资源包](https://www.minecraft.net/en-us/addons)和[bedrock.dev粒子文档](http://bedrock.dev/r/Particles)学习。
-_Note: Skip to the end of this section for a tool to generate particle files visually._
+_提示:文末提供可视化粒子生成工具_
-File structure:
-
-- "identifier" is exactly what you'd expect: I'll use "wiki:curvy_particle" and "wiki_pink_hit" for the tutorial. File names do not matter.
-- "texture" defines the texture file. Not that a single image file can hold textures for many particles.
-- "material" is usually set to "particles_alpha" for particles.
+文件结构说明:
+- "identifier":粒子标识符(示例使用"wiki:curvy_particle")
+- "texture":支持多粒子共用纹理图集
+- "material":通常设为"particles_alpha"

-That is the texture I'm going to use, it's size is `16x16`. (`RP/particles/wiki_particles.png`). As you can see, it has 4 different textures in it, each of them being a `8x8`. The upper row (_starting/top left corner at at 0, 0_) is the flipbook texture for "wiki:curvy*particle" and the bottom row (\_top left corner at/starting at 0, 8*). We'll define this in the "billboard_texture" component.
+使用16x16纹理图集(路径:`RP/particles/wiki_particles.png`),包含4个8x8子纹理。上排(0,0起始)用于"wiki:curvy_particle",下排(0,8起始)用于其他粒子。
-RP/particles/curvy_particle.json
-
-```json
+::: code-group
+```json [RP/particles/curvy_particle.json]
{
"format_version": "1.10.0",
"particle_effect": {
@@ -131,22 +133,17 @@ That is the texture I'm going to use, it's size is `16x16`. (`RP/particles/wiki_
}
}
```
+:::
-Here's the code for our first particle, "wiki:curvy_particle". Our texture file is defined.
+参数解析:
+- "texture_width/height":纹理图尺寸
+- "base_UV":粒子起始坐标(示例下个粒子为[0,8])
+- "size_UV":粒子纹理尺寸
+- "step_UV":帧切换步长
+- "frames_per_second":帧速率
-The components are quite complicated here, but they're explained well on the [Particle doc](http://bedrock.dev/r/Particles). Let's move forward to the `"minecraft:particle_appearance_billboard"` component for now.
-
-- "texture_width" and "texture_height" defines the size of the image file itself.
-- "base_UV" in "flipbook" defines the top-left corner of the particle texture. For this particle it's at 0, 0, which is the upper left corner of the image itself. For the second particle, "wiki:pink_hit", "base_UV" will be at 0, 8, which is 8 pixels lower then the first location.
-- "size_UV" defines the size of the particle's texture(8*8) on the image file(which is 16*16).
-- "step_UV" is how far the flipbook needs to step in order to get the next particle texture. In this case it's 8, 0, which is 8 pixels to the right.
-- "frames_per_second" is quite self-explainable. "max_frame" is the total number of frames for the particle.
-
-The second particle, "wiki:pink_hit".
-
-RP/particles/pink_hit.json
-
-```json
+::: code-group
+```json [RP/particles/pink_hit.json]
{
"format_version": "1.10.0",
"particle_effect": {
@@ -220,10 +217,9 @@ The second particle, "wiki:pink_hit".
}
}
```
+:::
-Done! Now you have two custom particles that can be used in animations!
-
-It's rather tiresome to create particles that way, comparable to creating models without Blockbench. Luckily, you can use [Snowstorm](https://jannisx11.github.io/snowstorm/), a Visual Particle Generator. It's especially convenient to download the [VSC Snowstorm Extension](https://marketplace.visualstudio.com/items?itemName=JannisX11.snowstorm), which is going to create an interactive UI in Visual Studio Code itself for `.particle.json` files.
+建议使用可视化工具[Snowstorm](https://jannisx11.github.io/snowstorm/)或[VSC扩展](https://marketplace.visualstudio.com/items?itemName=JannisX11.snowstorm)简化粒子创建。

`/particle wiki:pink_hit ~ ~2 ~`
@@ -233,21 +229,19 @@ It's rather tiresome to create particles that way, comparable to creating models
---
-## Defining Custom Sounds
+## 自定义音效
-_You can find a more in-depth tutorial on custom sounds on [wiki.bedrock.dev](/concepts/sounds)._
+详细教程参见[Bedrock开发Wiki](/wiki/concepts/sounds)
-Minecraft can read sound files in the `.ogg` (recommended) or `.wav` format. (You can look up an .mp3 to .ogg converter online). Personally, I usually get my sound effects from ZapSplat.com.
+### 文件规范
+- 格式:推荐.ogg,支持.wav
+- 路径:`RP/sounds/`子目录(示例使用`RP/sounds/mob/`)
-Sound files are located in subfolders of the `RP/sounds/` folder. My skele_yaklin sound files are located under `RP/sounds/mob/yaklin_moo.ogg` and `RP/sounds/mob/yaklin_moo_2.ogg`. (I don't have more sound effects currently, thus I will be using same ones over and over, but ideally one would need more of those).
+### 音效定义
+在`RP/sounds/sound_definitions.json`中注册:
-### Sound Definition
-
-Now to define the sound's shortnames! This process is similar to defining block texture shortnames. It's done in `RP/sounds/sound_definitions.json`.
-
-RP/sounds/sound_definitions.json
-
-```json
+::: code-group
+```json [RP/sounds/sound_definitions.json]
{
"format_version": "1.14.0",
"sound_definitions": {
@@ -269,30 +263,16 @@ Now to define the sound's shortnames! This process is similar to defining block
}
}
```
+:::
-We have 3 sound shortnames in total:
+### 音效绑定
+通过`RP/sounds.json`关联实体事件:
-1. `mob.yaklin.idle`, which refers to a random sound file from the "sounds": [] array.
-1. `mob.yaklin.death` can be heard from the distance of 12 blocks: `max_distance": 12.0`.
-1. And, lastly, `mob.yaklin.hurt`.
-
-### sounds.json
-
-Now we are about to call our sounds. We can do it either through the `/playsound <>` slash command or automatically in `RP/sounds.json`. Once again, this resembles block resource definition.
-
-
-
-^ the file's structure. I recommend checking out the same file in the Example Resource Pack.
-
-RP/sounds.json/"entities": {}/"wiki:skele_yaklin": {}
-
-```json
+::: code-group
+```json [实体音效配置示例]
"wiki:skele_yaklin": {
"volume": 1.0,
- "pitch": [
- 1.0,
- 1.0
- ],
+ "pitch": [1.0, 1.0],
"events": {
"ambient": "mob.yaklin.idle",
"hurt": "mob.yaklin.hurt",
@@ -305,32 +285,24 @@ Now we are about to call our sounds. We can do it either through the `/playsound
}
}
```
+:::
-Let's see how the sounds of the skele_yaklin are called in the entity's object.
-
-- The first "volume" and "pitch" are global, they are the starting point for every other of the entity's sounds. If you want the sounds to play exactly how they are, set both of them to 1;
-- "events" include the automatic sounds to be played. There are a couple Vanilla events that will trigger automatically(you can see the whole list on the wiki.bedrock.dev page linked bove). All of the events call a sound's shortname.
-- "ambient" plays occasionally, for example the sheep "baah" sound.
-- "hurt" plays when the entity is hurt.
-- "death" plays on death.
-- "step" is the sound of the mob walking. I used the cow step sound, already included in the base game.
-
-That's it! Turn up your Sound volume in Settings>Audio, spawn in your mobs, and listen to the melodic cacophony of their new voices!
+事件类型说明:
+- ambient:环境音(如生物呼吸声)
+- hurt:受伤音效
+- death:死亡音效
+- step:移动音效
---
----
+## 进度总结
-## Your progress so far
+**已完成:**
+- 掌握动画粒子效果实现
+- 创建两种自定义粒子
+- 配置实体自定义音效
-**What you've done:**
-
-- Learned to include Particles in Animations
-- Created two Custom Particles and learned to create more
-- Defined custom Sounds for your custom entity;
-
-**What are you to do next:**
-
-- Create custom biomes
-- Create custom generated Structures
-- Be introduced to Scripting
+**后续方向:**
+- 自定义生物群系
+- 创建生成结构
+- 脚本系统入门
\ No newline at end of file
diff --git a/docs/wiki/particles/particles.md b/docs/wiki/particles/particles.md
index 3fa4f7a7..52249b21 100644
--- a/docs/wiki/particles/particles.md
+++ b/docs/wiki/particles/particles.md
@@ -1,43 +1,47 @@
---
-title: 'Intro to Particles'
-category: General
+title: '粒子系统入门'
+category: 基础
tags:
- - guide
+ - 指南
mentions:
- SirLich
- MedicalJewel105
- TheItsNameless
---
-## Particle Systems
+# 粒子系统入门
-A [particle system](https://www.wikiwand.com/en/Particle_system) is a technique in game physics, motion graphics, and computer graphics that uses many small sprites to create convincing effects such as smoke, fire, or swarms of insects. You can create new particle systems in the Bedrock Edition of Minecraft by using your own custom textures, and your own movement logic. This makes particles extremely fun and powerful!
+
-The Molang integration in particles is also extremely well developed, which allows you to pass data between different particles, or between an entity and a particle.
+## 粒子系统
-### Particles
+[粒子系统](https://www.wikiwand.com/en/Particle_system)是游戏物理、动态图形和计算机图形学中的一种技术,通过大量小精灵图(sprite)来创建逼真的效果,如烟雾、火焰或昆虫群。在《我的世界》基岩版中,你可以使用自定义贴图和运动逻辑来创建新的粒子系统,这使得粒子效果既有趣又强大!
-A 'particle', or a 'particle instance' is a single sprite (texture) which is placed in 3D space, and has its own logic for how to move about and change its appearance. Some examples of a particle could include:
+粒子系统中Molang的集成非常完善,允许你在不同粒子之间,或在实体与粒子之间传递数据。
-- A single snowflake
-- A single raindrop
-- A single wisp of smoke
+### 粒子
-### Emitters
+"粒子"或"粒子实例"是放置在3D空间中的单个精灵图(纹理),具有独立的运动逻辑和外观变化规则。常见的粒子示例包括:
-An 'emitter' or 'particle emitter' is a system that can spawn many particles, either all at once (explosion), or over time (steady). Emitters have their own logic for how to move, how many particles to spawn, and where. Some examples of emitters could include:
+- 一片雪花
+- 一滴雨水
+- 一缕烟雾
-- A snowstorm (creates snowflakes)
-- A rainstorm (creates raindrops)
-- A smokey chimney (creates smoke wisps)
+### 发射器
-## Creating your First Particle
+"发射器"或"粒子发射器"是能够生成多个粒子的系统,可以瞬间生成(爆炸效果)或持续生成(稳定效果)。发射器拥有独立的移动逻辑、粒子生成数量和位置控制机制。常见的发射器示例包括:
-To create a particle, you need a resource pack, a texture, and a particle definition file:
+- 暴风雪(生成雪花)
+- 暴雨(生成雨滴)
+- 冒烟的烟囱(生成烟缕)
-
+## 创建第一个粒子
+
+创建粒子需要准备资源包、纹理贴图和粒子定义文件:
+
+::: code-group
+```txt [文件结构]
+RP/particles/snowflake.json
+RP/textures/particles/snowflake.png
+```
+:::
\ No newline at end of file
diff --git a/docs/wiki/particles/vanilla-particles.md b/docs/wiki/particles/vanilla-particles.md
index 2637d02b..e04c2c40 100644
--- a/docs/wiki/particles/vanilla-particles.md
+++ b/docs/wiki/particles/vanilla-particles.md
@@ -1,21 +1,25 @@
---
-title: Vanilla Particles
-category: Documentation
+title: 原版粒子效果
+category: 文档
---
-Here is the complete list of Bedrock particles from the vanilla resources. Please be aware that not all of these particles function properly, as many require molang context from their host entity.
+# 原版粒子效果
-:::tip Playing via /particle:
-For some reason, Bedrock requires the leading `minecraft` namespace, and the coordinates in the `/particle` command.
+
-It doesn't have autocomplete for particles.
+以下是基岩版原版资源中所有粒子效果的完整列表。请注意并非所有粒子都能正常运作,许多粒子需要宿主实体提供的Molang上下文才能正确运行。
+
+:::tip 通过/particle命令使用:
+由于某些原因,基岩版需要在`/particle`命令中使用带有`minecraft:`命名空间的完整粒子名称,并且需要指定坐标参数。
+
+该命令不支持粒子的自动补全功能。
:::
-### Working Particles
+### 正常工作的粒子效果
-These particles can be spawned directly in-world, without any issues.
+这些粒子可以直接在游戏中生成,不会出现异常问题。
-| Working Particles |
+| 正常工作的粒子效果 |
| ------------------------------------------- |
| minecraft:basic_flame_particle |
| minecraft:basic_portal_particle |
@@ -79,12 +83,12 @@ These particles can be spawned directly in-world, without any issues.
| minecraft:water_evaporation_bucket_emitter |
| minecraft:water_splash_particle_manual |
-### Particles with Issues
+### 存在问题的粒子效果
-The following particles can be spawned, but might spam you with content log errors because they rely on variables that `/particle` cannot set:
+以下粒子可以生成,但可能因依赖`/particle`命令无法设置的变量而导致内容日志报错:
-| Particles with issues |
-| ----------------------------------------------- |
+| 存在问题的粒子效果 |
+| ------------------------------------------- |
| minecraft:arrow_spell_emitter |
| minecraft:balloon_gas_particle |
| minecraft:basic_crit_particle |
@@ -118,12 +122,12 @@ The following particles can be spawned, but might spam you with content log erro
| minecraft:wax_particle |
| minecraft:wither_boss_invulnerable |
-### Bubble Particles
+### 气泡类粒子效果
-The following particles are various bubbles that only show up underwater. Some of them spam content log errors:
+以下气泡类粒子仅在水下可见,部分会导致内容日志报错:
-| Bubble particles |
-| -------------------------------------- |
+| 气泡类粒子效果 |
+| ------------------------------------- |
| minecraft:basic_bubble_particle |
| minecraft:basic_bubble_particle_manual |
| minecraft:bubble_column_bubble |
@@ -144,23 +148,23 @@ The following particles are various bubbles that only show up underwater. Some o
| minecraft:squid_move_particle |
| minecraft:underwater_torch_particle |
-### Permanent Particles
+### 永久性粒子效果
-The following particles are permanent and will not be removed once spawned until you exit the game:
+以下粒子效果一旦生成将永久存在,除非退出游戏:
-| Permanent particles |
-| -------------------------------- |
+| 永久性粒子效果 |
+| ----------------------------- |
| minecraft:mobflame_emitter |
| minecraft:nectar_drip_particle |
| minecraft:phantom_trail_particle |
| minecraft:stunned_emitter |
-## Broken Particles
+## 无法正常使用的粒子效果
-The following particles exist in-game but cannot be spawned because they require context that cannot be provided by `/particle` or are simply bugged:
+以下粒子虽然存在于游戏中,但由于需要无法通过`/particle`提供的上下文或存在程序错误而无法生成:
-| Broken particles |
-| -------------------------------- |
+| 无法正常使用的粒子效果 |
+| ----------------------------- |
| minecraft:block_destruct |
| minecraft:block_slide |
| minecraft:breaking_item_icon |
@@ -174,52 +178,52 @@ The following particles exist in-game but cannot be spawned because they require
---
-[Original Credit](https://www.reddit.com/r/MinecraftCommands/comments/cbd56p/i_need_a_list_of_bedrock_particles/etg8rt7/)
+[原始作者致谢](https://www.reddit.com/r/MinecraftCommands/comments/cbd56p/i_need_a_list_of_bedrock_particles/etg8rt7/)
-## Component Particles
+## 组件专用粒子效果
-The following is a list of pre-defined short names for Vanilla particles that can be used in certain components.
-**These have all been proven to generally work. This may not be a full list.**
+以下是可在某些组件中使用的原版粒子效果预设简称列表。
+**已确认这些简称通常有效,可能未包含全部可用选项**
-| Short names | Notes |
-| --------------------- | ---------------------------------------------------------- |
-| mobspellambient | Color determined by any present potion ID in the component |
-| villagerangry | |
-| bubble | Only shows underwater |
-| evaporation | |
-| crit | |
-| dragonbreath | Only seems to work for the AoE component for Projectiles |
-| driplava | |
-| dripwater | |
-| reddust | |
-| enchantingtable | |
-| endrod | |
-| mobspell | Color determined by any present potion ID in the component |
-| largeexplode | |
-| hugeexplosion | |
-| fallingdust | Color determined by any present potion ID in the component |
-| waterwake | |
-| flame | |
-| villagerhappy | |
-| heart | |
-| mobspellinstantaneous | Color determined by any present potion ID in the component |
-| iconcrack | |
-| slime | |
-| snowballpoof | |
-| largesmoke | |
-| lava | |
-| mobflame | |
-| townaura | |
-| note | |
-| explode | |
-| portal | |
-| rainsplash | |
-| smoke | |
-| watersplash | |
-| ink | |
-| terrain | Pulls texture from atlas.terrain |
-| totem | |
-| witchspell | |
-| soul | |
-| spit | |
-| sneeze | |
+| 简称 | 备注 |
+| ---------------------- | ------------------------------------ |
+| mobspellambient | 颜色由组件中存在的药水ID决定 |
+| villagerangry | |
+| bubble | 仅在水下显示 |
+| evaporation | |
+| crit | |
+| dragonbreath | 仅对投射物的AoE组件有效 |
+| driplava | |
+| dripwater | |
+| reddust | |
+| enchantingtable | |
+| endrod | |
+| mobspell | 颜色由组件中存在的药水ID决定 |
+| largeexplode | |
+| hugeexplosion | |
+| fallingdust | 颜色由组件中存在的药水ID决定 |
+| waterwake | |
+| flame | |
+| villagerhappy | |
+| heart | |
+| mobspellinstantaneous | 颜色由组件中存在的药水ID决定 |
+| iconcrack | |
+| slime | |
+| snowballpoof | |
+| largesmoke | |
+| lava | |
+| mobflame | |
+| townaura | |
+| note | |
+| explode | |
+| portal | |
+| rainsplash | |
+| smoke | |
+| watersplash | |
+| ink | |
+| terrain | 从atlas.terrain提取纹理 |
+| totem | |
+| witchspell | |
+| soul | |
+| spit | |
+| sneeze | |
\ No newline at end of file
diff --git a/docs/wiki/servers/index.md b/docs/wiki/servers/index.md
index 5a614fa1..91bb0cac 100644
--- a/docs/wiki/servers/index.md
+++ b/docs/wiki/servers/index.md
@@ -1,3 +1,3 @@
---
-title: Servers & Realms
+title: 服务器 & 领域服
---
diff --git a/docs/wiki/servers/raknet-and-mcpe.md b/docs/wiki/servers/raknet-and-mcpe.md
index ad3b55c7..c5ddaf7e 100644
--- a/docs/wiki/servers/raknet-and-mcpe.md
+++ b/docs/wiki/servers/raknet-and-mcpe.md
@@ -1,126 +1,123 @@
---
-title: RakNet and MCPE
+title: RakNet与MCPE协议解析
mentions:
- ZestiiSpaghett
- - MedicalJewel105
- SmokeyStack
- ThomasOrs
- Adrian8115
+ - MedicalJewel105
---
-Minecraft Bedrock uses a protocol known as [RakNet](http://www.jenkinssoftware.com/)
-Unlike Minecraft Java edition, Bedrock uses UDP on the port 19132
+# RakNet与MCPE协议解析
-You can find a list of Minecraft Bedrock server softwares [here](/servers/server-software#active-software).
+
-## RakNet Notes
+Minecraft基岩版使用名为[RakNet](http://www.jenkinssoftware.com/)的通信协议。与Java版不同,基岩版通过UDP协议在19132端口进行通信。
-- All strings are prefixed with an unsigned short depicting their length.
-- The offline message id will always be: 00ffff00fefefefefdfdfdfd12345678 (hex) - this series of bytes will be referred to as *Magic*
-- The offline message id is sent with unconnected messages such as unconnected pings and pongs.
-- The GUIDS used by RakNet are 8 bytes long.
-- The first byte is used to identify the type of message.
+您可以在此处查看[Minecraft基岩版服务器软件列表](/wiki/servers/server-software#active-software)。
-## Data Types
+## RakNet协议要点
-| Type | Size | Range | Notes |
-| -------------- | ---- | --------------- | -------------------------------------------------------------- |
-| Byte | 1 | 0-255 | An unsigned integer |
-| Long | 8 | -2^63 to 2^63-1 | Signed 64 bit integer |
-| Magic | 16 | | 00ffff00fefefefefdfdfdfd12345678 - Will always be those bytes |
-| Short | 2 | -32768 to 32767 | |
-| Unsigned Short | 2 | 0 to 65535 | |
-| String | N/A | N/A | A string prefixed by a short which depicts the length. |
-| Boolean | 1 | 0-1 | 0x00 is False while 0x01 is True |
-| Address | 7 | | 1 byte for the ip version 4/6, 4 for the IP and 2 for the port |
-| uint24le | 3 | | 3-byte little-endian unsigned integer |
+- 所有字符串均以表示长度的无符号短整型(unsigned short)作为前缀
+- 离线消息ID固定为:00ffff00fefefefefdfdfdfd12345678(十六进制) - 后续统称为*Magic*
+- 离线消息ID随未连接消息(如未连接Ping/Pong)一起发送
+- RakNet使用的GUID为8字节长度
+- 首字节用于标识消息类型
-## Contents
+## 数据类型对照表
-
+| 类型 | 大小 | 数值范围 | 说明 |
+| --------------- | ---- | ---------------- | ------------------------------------------------------------ |
+| Byte | 1 | 0-255 | 无符号整型 |
+| Long | 8 | -2^63 至 2^63-1 | 有符号64位整型 |
+| Magic | 16 | | 固定字节序列:00ffff00fefefefefdfdfdfd12345678 |
+| Short | 2 | -32768 至 32767 | 有符号短整型 |
+| Unsigned Short | 2 | 0 至 65535 | 无符号短整型 |
+| String | 不定 | | 以短整型长度前缀开头的字符串 |
+| Boolean | 1 | 0-1 | 0x00表示False,0x01表示True |
+| Address | 7 | | 地址结构:1字节IP版本(4/6)+4字节IP+2字节端口 |
+| uint24le | 3 | | 小端序3字节无符号整型 |
-- [x] Unconnected Pings
-- [x] Unconnected Pongs
-- [x] Open Connection Request 1
-- [x] Open Connection Reply 1
-- [x] Open Connection Request 2
-- [x] Open Connection Reply 2
-- **From here on, the RakNet connection is established and all RakNet messages are contained in a [Frame Set Packet](https://wiki.vg/Raknet_Protocol#Frame_Set_Packet).**
-- [x] Connection Request
-- [x] Connection Request Accepted
+## 协议流程目录
-
+- [x] 未连接Ping请求
+- [x] 未连接Pong响应
+- [x] 开放连接请求1
+- [x] 开放连接响应1
+- [x] 开放连接请求2
+- [x] 开放连接响应2
+- **从以下开始,RakNet连接已建立,所有消息均通过[帧集合数据包](https://wiki.vg/Raknet_Protocol#Frame_Set_Packet)传输**
+- [x] 连接请求
+- [x] 连接请求已接受
-### Unconnected Pings
+### 未连接Ping请求
-Minecraft Bedrock will send out a message to all listed servers (and the local network) to check if any games are available and retrieve the MOTD from the game. These messages are known as unconnected pings and are structured in this format:
+客户端会向所有服务器列表(包括局域网)发送广播消息以检测可用游戏并获取MOTD信息。该消息结构如下:
-`0x01 | client alive time in ms (unsigned long long) | magic | client GUID`
+`0x01 | 客户端存活时间(毫秒,无符号长整型) | Magic | 客户端GUID`
-### Unconnected Pongs
+### 未连接Pong响应
-After this message, the server will respond with something called an unconnected pong. The reason these messages are unconnected is because the client has not established a connection to the server. This is the format of an unconnected pong:
+服务器收到Ping请求后会返回以下结构的响应数据包:
-`0x1c | client alive time in ms (recorded from previous ping) | server GUID | string length | Edition (MCPE or MCEE for Education Edition);MOTD line 1;Protocol Version;Version Name;Player Count;Max Player Count;Server Unique ID;MOTD line 2;Game mode;Game mode (numeric);Port (IPv4);Port (IPv6);`
+`0x1c | 客户端存活时间(取自Ping请求) | 服务器GUID | 字符串长度 | 格式字符串(包含版本信息)`
-Example:
+格式字符串示例:
`MCPE;Dedicated Server;527;1.19.1;0;10;13253860892328930865;Bedrock level;Survival;1;19132;19133;`
-The client doesn't seem to use the gamemode or the numeric value for the gamemode.
+客户端实际不会使用游戏模式及其对应的数值字段。
-### Open Connection Request 1
+### 开放连接请求1
-The client sends this when attempting to join the server
+客户端在尝试加入服务器时发送此数据包:
-`0x05 | Magic | Protocol version (currently 10 or 0x0a) | RakNet Null Padding`
+`0x05 | Magic | 协议版本(当前为10或0x0a) | RakNet空填充`
-The null padding seems to be used to discover the maximum packet size the network can handle.
+空填充用于探测网络最大可传输数据包大小。客户端会逐步减少填充量直至收到服务器响应。
-The client will send this to the server with decreasing null padding until the server responds with a
+## 开放连接响应1
-## Open Connection Reply 1
+服务器收到连接请求1后的响应结构:
-The server responds with this once the client attempts to join
+`0x06 | Magic | 服务器GUID | 加密标识(通常为False) | 空填充大小(无符号短整型,建议1400)`
-`0x06 | magic | server GUID | use encryption boolean (normally false) | RakNet Null Padding Size (Unsigned short, I use 1400)`
+这是客户端与服务器握手过程的第一阶段。
-This is the first half of the handshake between the client and the server.
+### 开放连接请求2
-### Open Connection Request 2
+客户端收到响应1后发送的确认数据包:
-The client responds with this after they receive the open connection reply 1 packet.
+`0x07 | Magic | 服务器地址 | 空填充大小 | 客户端GUID`
-`0x07 | magic | server address | RakNet Null Padding Size | client GUID`
+### 开放连接响应2
-### Open Connection Reply 2
+握手过程的最终确认数据包:
-This is the last part of the handshake between the client and the server.
+`0x08 | Magic | 服务器GUID | 客户端地址 | 空填充大小 | 加密标识`
-`0x08 | magic | server GUID | client address | Null Padding Size | use encryption`
+### 连接请求
-### Connection Request
+客户端发送的正式连接请求:
-This is the part where the client sends the connection request.
+`0x09 | 客户端GUID | 请求时间戳(长整型) | 安全标识(建议使用0x00)`
-`0x09 | client GUID | Request timestamp (Long) | Secure (Boolean, I use 0x00)`
+### 连接请求已接受
-### Connection Request Accepted
+服务器对连接请求的最终确认响应:
-The server sends this packet in response to the incoming connection request.
-
- `0x10 | client Address | System index (Short, unknown what this does. 0 works as a value) | System adresses ([]Address) | Request timestamp (Long) | Accepted timestamp (Long)`
+`0x10 | 客户端地址 | 系统索引(短整型,0值可用) | 系统地址列表 | 请求时间戳 | 接受时间戳`
-## Sources
+## 扩展阅读
::: tip
-If you are interested and want to read more about it here is the documentation for the Bedrock Protocol and RakNet:
+如需深入了解Bedrock协议和RakNet实现,推荐以下文档:
-[RakNet Protocol Documentation](https://wiki.vg/Raknet_Protocol)
+[RakNet协议文档](https://wiki.vg/Raknet_Protocol)
-[Newer Bedrock Protocol Documentation for 1.20.50](https://prismarinejs.github.io/minecraft-data/?d=protocol&v=bedrock_1.20.50) [(by PrismarineJS)](https://prismarinejs.github.io) :::
+[基岩版1.20.50协议文档](https://prismarinejs.github.io/minecraft-data/?d=protocol&v=bedrock_1.20.50) [由PrismarineJS维护](https://prismarinejs.github.io) :::
::: warning
-There is also the old Bedrock Protocol Wiki which might possibly be outdated!
-[Bedrock Protocol Documentation](https://wiki.vg/Bedrock_Protocol) :::
+注意旧版协议文档可能已过时:
+[基岩版协议历史文档](https://wiki.vg/Bedrock_Protocol) :::
-This page is a WIP, feel free to contribute as it is still being worked on.
+本文档仍在持续完善中,欢迎贡献内容。
\ No newline at end of file
diff --git a/docs/wiki/servers/server-software.md b/docs/wiki/servers/server-software.md
index c8c98c41..f62eda84 100644
--- a/docs/wiki/servers/server-software.md
+++ b/docs/wiki/servers/server-software.md
@@ -1,5 +1,5 @@
---
-title: Bedrock Server Software
+title: 基岩版服务端软件
mentions:
- SirLich
- DevGod6969
@@ -22,28 +22,32 @@ mentions:
- AzaleeX
---
-Minecraft servers allow players to play online or via a local area network with other people. This is very common within Java Edition Minecraft, but is also possible on Bedrock. [You can download the official Mojang BDS software here.](https://www.minecraft.net/en-us/download/server/bedrock).
+# 基岩版服务端软件
-Alongside the Vanilla BDS offering, many community projects exist, in a variety of languages.
+
-## Software by Language
+Minecraft 服务器可以让玩家通过互联网或局域网进行联机游戏。这在 Java 版中十分常见,但其实基岩版同样可以实现联机。[点击此处下载 Mojang 官方的 BDS 服务端](https://www.minecraft.net/en-us/download/server/bedrock)。
-| Language | Status |
-| ---------- | -------------------------------------------------------------------- |
-| PHP | [Still Active](#php) : 4 < [Discontinued](#php-1) : 38 |
-| Java | [Still Active](#java) : 4 < [Discontinued](#java-1) : 14 |
-| C++ | [Still Active](#c) : 1 < [Discontinued](#c-1) : 5 |
-| TypeScript | [Still Active](#typescript) : 4 < [Discontinued](#typescript-1) : 1 |
-| Go | [Still Active](#go) : 1 < [Discontinued](#go-1) : 5 |
-| JavaScript | [Still Active](#javascript) : 1 < [Discontinued](#javascript-1) : 6 |
-| Rust | [Still Active](#rust) : 1 < [Discontinued](#rust-1) : 1 |
-| C# | Still Active : 0 < [Discontinued](#c-2) : 3 |
-| C | Still Active : 0 < [Discontinued](#c-3) : 1 |
-| Python | [Still Active](#python) : 1 < [Discontinued](#python-1) : 2 |
-| D | Still Active : 0 < [Discontinued](#d) : 1 |
-| Kotlin | Still Active : 0 < [Discontinued](#kotlin) : 1 |
+除了原版 BDS 服务端外,社区还开发了多种不同编程语言实现的服务端项目。
-## Active Software
+## 按编程语言分类
+
+| 语言 | 项目状态 |
+| ----------- | ------------------------------------------------------------ |
+| PHP | [仍活跃](#php) : 4 < [已停更](#php-1) : 38 |
+| Java | [仍活跃](#java) : 4 < [已停更](#java-1) : 14 |
+| C++ | [仍活跃](#c) : 1 < [已停更](#c-1) : 5 |
+| TypeScript | [仍活跃](#typescript) : 4 < [已停更](#typescript-1) : 1 |
+| Go | [仍活跃](#go) : 1 < [已停更](#go-1) : 5 |
+| JavaScript | [仍活跃](#javascript) : 1 < [已停更](#javascript-1) : 6 |
+| Rust | [仍活跃](#rust) : 1 < [已停更](#rust-1) : 1 |
+| C# | 仍活跃 : 0 < [已停更](#c-2) : 3 |
+| C | 仍活跃 : 0 < [已停更](#c-3) : 1 |
+| Python | [仍活跃](#python) : 1 < [已停更](#python-1) : 2 |
+| D | 仍活跃 : 0 < [已停更](#d) : 1 |
+| Kotlin | 仍活跃 : 0 < [已停更](#kotlin) : 1 |
+
+## 活跃项目
### C++
- [LiteLoader](https://github.com/LiteLDev/LiteLoaderBDS)
@@ -56,7 +60,7 @@ Alongside the Vanilla BDS offering, many community projects exist, in a variety
- [JukeBoxMC](https://github.com/LucGamesYT/JukeboxMC)
- [NukkitX-version](https://github.com/NukkitX/Nukkit)
-- [Nukkit PetteriM1 Edition](https://github.com/PetteriM1/NukkitPetteriM1Edition)
+- [Nukkit PetteriM1 版](https://github.com/PetteriM1/NukkitPetteriM1Edition)
- [PowerNukkitX](https://github.com/PowerNukkitX/PowerNukkitX)
### TypeScript
@@ -86,7 +90,7 @@ Alongside the Vanilla BDS offering, many community projects exist, in a variety
- [PieMC](https://github.com/PieMC-Dev/PieMC)
-## Discontinued Software
+## 已停更项目
### C++
@@ -203,10 +207,10 @@ Alongside the Vanilla BDS offering, many community projects exist, in a variety
- [Limonite](https://github.com/iTXTech/limonite)
-## Licensing
+## 许可声明
-:::tip License
-This page is licensed under the `GNU Lesser General Public License v3.0`.
+:::tip 许可协议
+本页面采用 `GNU 宽通用公共许可证 v3.0` 授权。
-The original source was authored `xinghao2003`, and may be [found here.](https://github.com/xinghao2003/MCBE-ServerSoftware-List)
-:::
+原始内容由 `xinghao2003` 创作,可[在此查看](https://github.com/xinghao2003/MCBE-ServerSoftware-List)。
+:::
\ No newline at end of file
diff --git a/docs/wiki/visuals/animated-entity-texture.md b/docs/wiki/visuals/animated-entity-texture.md
index ff951547..599d7773 100644
--- a/docs/wiki/visuals/animated-entity-texture.md
+++ b/docs/wiki/visuals/animated-entity-texture.md
@@ -1,52 +1,52 @@
---
-title: Entity Texture Animations
+title: 实体纹理动画
mentions:
- MedicalJewel105
- IlkinQafarov
- TheItsNameless
- SmokeyStack
tags:
- - intermediate
-category:
- - Tutorials
+ - 中级
+category: 巧思案例
---
-## Whats on this page?
+# 实体纹理动画
-From this page you will learn how to make an animated texture for an entity. Animated, like a flipbook texture for blocks.
+
-## Source
+## 本页内容
-This page is based on content by [AgentMindStorm](https://www.youtube.com/channel/UC-ljddYkFdTQl-MVEaVvbuQ).
+通过本教程你将学会如何为实体制作动态纹理。这种动画效果类似于方块的翻书动画纹理(Flipbook)。
+
+## 来源说明
+
+本教程内容基于 [AgentMindStorm](https://www.youtube.com/channel/UC-ljddYkFdTQl-MVEaVvbuQ) 的原创作品。
-## Textures
+## 纹理制作
-First let's draw some new texture frames for our entity. In this tutorial it will be a cow, which is looking around.
+首先我们需要为实体绘制若干关键帧纹理。本教程将以四处张望的牛作为示例。
-We need to place our textures vertically, like for blocks in flipbook textures.
-In this case we have 4 frames.
+与方块的翻书动画类似,我们需要将纹理帧进行纵向排列。本示例共使用4帧动画。
-## Materials
+## 材质配置
-We will need to modify materials in this guide. However due to render dragon materials became outdated, so **use it at your own risk**.
+在本指南中我们需要修改材质文件。但由于Render Dragon渲染引擎的更新,传统材质系统已过时,**请自行评估使用风险**。
-To use animated texture, we need to change the entity material to one, that has `USE_UV_ANIM` property.
-Let's simply add a new material:
+要实现动态纹理,需要将实体材质更改为具有`USE_UV_ANIM`属性的类型。我们可以通过添加新材质实现:
-RP/materials/entity.material
-
-```json
+::: code-group
+```json [RP/materials/entity.material]
{
"materials":{
"version":"1.0.0",
@@ -58,66 +58,70 @@ Let's simply add a new material:
}
}
```
+:::
-Or you can add this to existing ones, check default material file.
+或者可以将该属性添加到现有材质中(参考默认材质文件):
-
-
-```json
+::: code-group
+```json []
"+defines":[
"USE_UV_ANIM"
]
```
+:::
Download default entity.material file
+>下载默认entity.material文件
:::warning
-It is not that easy for every entity!
-Some entities have multiple materials and if you want to make its texture animated, you will need to add this property to all materials of this entity.
+注意:并非所有实体都适用简单修改!
+部分实体包含多种材质类型,若需要实现全身纹理动画,必须为实体使用的所有材质添加此属性。
:::
-## Client Entity File
+## 客户端实体配置
-Before we go next, we need to define a new material in our client entity file.
+在继续之前,我们需要在客户端实体文件中指定新材质:
-RP/entity/cow.json#description
-
-```json
+::: code-group
+```json [RP/entity/cow.json#description]
"materials": {
"default": "custom_animated"
}
```
+:::
-## Render Controllers
+## 渲染控制器设置
-After that all, we need to edit a render controller.
+完成上述步骤后,需要编辑渲染控制器:
-Here we will add `uv_anim` component with offset and scale properties:
+在此我们将添加带有偏移量和缩放属性的`uv_anim`组件:
-RP/render_controllers/cow.render_controllers.json#controller.render.cow
-
-```json
+::: code-group
+```json [RP/render_controllers/cow.render_controllers.json#controller.render.cow]
"uv_anim": {
"offset": [ 0.0, "math.mod(math.floor(q.life_time * frames_per_second),frame_count) / frame_count" ],
"scale": [ 1.0, "1 / frame_count" ]
}
```
+:::
-Where `frames_per_second` is a count of frames you want to change in one second and `frame_count` is a total frame count.
-This formula calculates the offset and the size of the texture depending on life time.
+其中:
+- `frames_per_second`表示每秒播放的帧数
+- `frame_count`表示总帧数
-## Testing
+该公式会根据实体的存活时间自动计算纹理偏移量和缩放比例。
-Now, it is time to test your creation!
+## 效果测试
+
+现在可以测试你的动画效果了!

-## Download Example
+## 示例下载
Download
+>下载示例包
\ No newline at end of file
diff --git a/docs/wiki/visuals/animation-effects.md b/docs/wiki/visuals/animation-effects.md
index a6d2bc33..212e5900 100644
--- a/docs/wiki/visuals/animation-effects.md
+++ b/docs/wiki/visuals/animation-effects.md
@@ -1,86 +1,88 @@
---
-title: Effects in Animations
+title: 动画中的效果
mentions:
- MedicalJewel105
-category:
- - General
+category: 基础
---
-## Effects in Animations
+# 动画(Animation)中的效果
-Sometimes it is much easier to use particles or sounds in animation rather than in animation controller.
-Animations can have effects in them, such as:
+
-- Particles
-- Sounds
+## 动画中的效果
-### Particles
+在动画中使用 `粒子` 或 `音效` 有时比在动画控制器中更方便。动画可以包含以下效果:
-Minecraft Particles can be used in entity animations. For example, the phantom has an animation which emits the minecraft:phantom_trail particle constantly. Let's try to add a particle to our entity's attack animation.
+- 粒子效果
+- 音效效果
-RP/entity/my_entity.json
+### 粒子效果
-```json
+Minecraft粒子效果可用于实体动画。例如,幻影(phantom)拥有持续释放minecraft:phantom_trail粒子的动画。让我们尝试在实体的攻击动画中添加粒子效果。
+
+::: code-group
+```json [RP/entity/my_entity.json]
"particle_effects": {
"flames": "minecraft:mobflame_emitter"
}
```
-
-Here we defined a shortname for particle that we are going to use.
-
-You can find a list of particles [here](https://minecraft.wiki/w/Particles) or [here](/particles/vanilla-particles).
-
-:::warning Warning!
-Not every particle works there. If you have problems, consider trying another particle. For example, use this one.
-Also note that some particles emit constantly.
:::
-### Sounds
+这里我们为将要使用的粒子定义了简称。
-If you want to use a sound, you need to define it too.
+你可以在[官方Wiki](https://minecraft.wiki/w/Particles)或[此处](/wiki/particles/vanilla-particles)找到完整的粒子列表。
-RP/entity/my_entity.json
+:::warning 注意!
+并非所有粒子都能正常使用。如果遇到问题,请尝试更换其他粒子。例如使用这个参考粒子。
+同时注意部分粒子会持续发射。
+:::
-```json
+### 音效效果
+
+若需使用音效,也需要提前定义:
+
+::: code-group
+```json [RP/entity/my_entity.json]
"sound_effects": {
"meow": "mob.cat.meow"
}
```
-
-:::warning Warning!
-Not every sound works there. If you have problems, consider trying another sound. For example, use this one.
:::
-## Adding Effects to Animation
+:::warning 注意!
+并非所有音效都能正常使用。如果遇到问题,请尝试更换其他音效。例如使用这个参考音效。
+:::
-You can add particles or sounds to your animation mainly or in Blockbench.
+## 为动画添加效果
-### Mainly
+你可以通过代码或Blockbench为动画添加效果。
-You need to add the following to your animation:
+### 代码方式
-RP/animations/my_animation.json#my.animation
+在动画文件中添加以下内容:
-```json
+::: code-group
+```json [RP/animations/my_animation.json#my.animation]
"particle_effects": {
"0.0": {
"effect": "flames",
- "locator": "" //You need to add a locator in your model
+ "locator": "" //你需要在模型中添加定位器
}
}
```
+:::
-RP/animations/my_animation.json#my.animation
-
-```json
+::: code-group
+```json [RP/animations/my_animation.json#my.animation]
"sound_effects": {
"0.0": {
"effect": "meow"
}
}
```
+:::
-You can call more than one particle at the same time:
+支持同时调用多个粒子效果:
```json
"particle_effects": {
@@ -97,11 +99,10 @@ You can call more than one particle at the same time:
}
```
-
+
-RP/animations/my_animation.json
-
-```json
+::: code-group
+```json [RP/animations/my_animation.json]
{
"format_version" : "1.8.0",
"animations" : {
@@ -143,39 +144,40 @@ You can call more than one particle at the same time:
}
}
```
+:::
-### In Blockbench
+### Blockbench方式
-First let's add a locator for our particle. Go to "Edit" section, select a group, right-click and choose "Add Locator":
+首先为粒子添加定位器。进入"Edit"模式,选择骨骼组,右键选择"Add Locator":

-Rename it and move where you want.
+重命名并移动到目标位置。
-Then go to "Animate" section, choose an animation and click on a magic stick icon:
+然后进入"Animate"模式,选择动画并点击魔杖图标:

-Now click "+" to open menu and specify the data:
+点击"+"号打开菜单并配置参数:

-You can attach a sound to animation the same way.
+音效也可以用相同方式添加。
-Now save your animation and launch the game!
+保存动画后即可在游戏中查看效果:

-## Offscreen Updating
+## 屏幕外更新
-You can set `"should_update_bones_and_effects_offscreen"` to `true` inside entity rp scripts for particle and sound effects to update offscreen, by default both of them will stop playing if the entity isn't being rendered on display.
+在实体资源包脚本中设置`"should_update_bones_and_effects_offscreen": true`可使粒子和音效在实体离开屏幕时继续更新,默认情况下两者在实体不可见时会停止播放。
-RP/entity/my_entity.json#description
-
-```json
+::: code-group
+```json [RP/entity/my_entity.json#description]
"scripts": {
"should_update_bones_and_effects_offscreen": true
}
```
+:::
\ No newline at end of file
diff --git a/docs/wiki/visuals/bedrock-modeling.md b/docs/wiki/visuals/bedrock-modeling.md
index 723d9216..78bfb73a 100644
--- a/docs/wiki/visuals/bedrock-modeling.md
+++ b/docs/wiki/visuals/bedrock-modeling.md
@@ -1,122 +1,112 @@
---
-title: Bedrock Modeling
+title: 基岩版建模指南
nav_order: 2
-category:
- - General
+category: 基础
mentions:
- SirLich
- solvedDev
- MedicalJewel105
---
-This will guide tips, tricks, and things you should know when modeling for Minecraft Bedrock Edition.
+# 基岩版建模指南
-## Texture Glitch
+
-Sometimes the texture on some (smaller) faces is glitched or invisible. This is because the size of cubes is floored for the UV map calculation. This means that any size smaller than 1 will result in a 0 pixel wide UV map, which will look glitchy. To prevent this, make sure all of your cubes are at least 1 unit long in each direction. To create smaller cubes, use the Inflate slider.
-Another trick to solve this if you _must_ have smaller textures is by **increasing the element size by 1 in each direction** and then **inflating the element by -1** though note that this will make you have smaller pixels textured incorrectly will lead to mixels.
+本指南将为您讲解Minecraft基岩版建模时需要掌握的技巧、窍门和注意事项。
-## Vertex Snap
+## 纹理故障
-Vertex snap is a handy tool in blockbench any modeler should use. It's beneficial when doing rounded things like wheels.
-You can find this tool right top next to the movement & scale tools. It has 2 modes, Move & Scale. How this tool works can be seen in the following gif.
+当较小面出现纹理错乱或不可见时,这是由于立方体尺寸在UV映射计算中被向下取整导致的。任何小于1单位的尺寸都会生成0像素宽的UV映射。解决方法:
+1. 确保所有立方体每个方向至少有1单位长度
+2. 需要更小立方体时使用膨胀滑块
+3. 极端情况可尝试将元素尺寸各方向增加1单位,再设置-1的膨胀值(注意可能导致像素错位)
+
+## 顶点吸附
+
+Blockbench中的顶点吸附工具是制作圆形部件(如车轮)的利器。该工具位于移动/缩放工具右侧,包含移动和缩放两种模式:

-## Transparency
-If you use semi-transparent textures (like colored glass), you need to move elements with that texture to the bottom of the element list. Otherwise, elements behind these semi-transparent ones won't render in-game.
+## 透明度处理
-## Texturing
+使用半透明材质(如彩色玻璃)时,需将该元素移至元素列表底部,否则后方元素将无法正常渲染。
-When learning to texture, your best bet is practicing with references on how others textured similar objects & surfaces. Patterns for wood & metal are different, and you should consider that. Good guides are
-[Masteriano's Texturing Tips](https://www.blockbench.net/wiki/guides/minecraft-style-guide)
-and in general, any on pixel art.
+## 纹理绘制技巧
-## Materials
+推荐学习方法:
+- 参考他人同类物体的纹理作品
+- 区分木质/金属等不同材质的纹理规律
+- 推荐教程:
+[Masteriano的纹理技巧](https://www.blockbench.net/wiki/guides/minecraft-style-guide)
+及像素画通用教程
-Whether or no the transparency or emissive textures in your models work in-game, it's decided by the materials applied to them.
+## 材质类型对照表
-| Material | Description |
-| --------------------- | -------------------------------------------------------------------------------------------------------- |
-| entity | basic opaque material |
-| entity_alphatest | supports transparent pixels |
-| entity_alphablend | supports translucent pixels |
-| entity_emissive | solid, alpha channel is used as the emissive channel |
-| entity_emissive_alpha | alpha channel is used for emissiveness, completely black + transparent pixels are rendered transparently |
+| 材质类型 | 特性描述 |
+| -------------------- | ------------------------------------------------------------------------ |
+| entity | 基础不透明材质 |
+| entity_alphatest | 支持透明像素 |
+| entity_alphablend | 支持半透明像素 |
+| entity_emissive | 自发光材质(alpha通道控制发光强度) |
+| entity_emissive_alpha| 纯黑+透明像素显示为透明,其余根据alpha通道发光 |
-## Z-fighting
+## Z轴冲突
-Z-fighting is called when you have the face of 2 elements in the same place, and you can see both or half of them at the same time, as seen in the following picture.
+当两个面片重叠时会出现闪烁现象:

-You can solve this by inflating one of them by `0.01` or `-0.01` depending on which one should prioritize.
+解决方法:对需要优先显示的面片设置`0.01`或`-0.01`的膨胀值
-## Basics of Animations
+## 动画基础
-When animating in Blockbench, you can set each keyframe by hand, or you can use variables & functions.
-Here you will learn the basics.
-Let's start with this picture.
+动画命名规范:
+- 必须以`animation.`开头(如`animation.cuack`)
+- 禁止使用符号和大写字母
-
-
-the name or `animation.cuack` is essential. You can't have symbols or caps there, and it must start with `animation.` for the animations to work without problems. Now the function we will be using is
-
-`Base + Math.sin((q.life_time + Offset) * Speed) \_ pitch`
-
-- Base is the starting rotation/position the bone has
-- Sin is the math function we all know
-- `q.life_time` is a variable. Is a number that will be increasing as the animation continues
-- Offset is a number we use to have the animation start earlier or later than its "original" position
-- Speed is the time it will take from going from top to down
-- Pitch is how far it goes from the origin
+基本函数结构:
+`基准值 + Math.sin((q.life_time + 偏移量) * 速度) * 幅度`

-Function used:
-
+应用实例:
`Math.sin((q.life_time+0.5)*150)*15`
-one on position & the other on rotation.
-
-Don't forget that for the animation to be a perfect loop. It would help if you correlated the sin equation `speed` & the animation `time`.
-Here's a table with values to get a perfect loop, though there are more you can discover.
+### 循环动画参数对照表
-| Speed | Time | Group |
-| ----- | ---- | ----- |
-| 150 | 2.4 | 1 |
-| 100 | 3.6 | 2 |
+| 速度 | 时长 | 组别 |
+| ---- | ----- | ----- |
+| 150 | 2.4 | 1 |
+| 100 | 3.6 | 2 |
-These numbers can be multiplied but not divided, so these will also work
-But only multiples of the same option
+扩展参数(仅限同组倍数组合):
-| Speed | Time | Group |
-| ----- | ---- | ----- |
-| 150 | 4.8 | 1 |
-| 200 | 3.6 | 2 |
-| 300 | 2.4 | 1 |
-| 300 | 3.6 | 1 & 2 |
-
-Now not all of these will "loop" together. And that is the Group column. The ones with the same number will work together. Otherwise, they will have a visible "glitch" in the loop.
+| 速度 | 时长 | 组别 |
+| ---- | ----- | ------ |
+| 150 | 4.8 | 1 |
+| 200 | 3.6 | 2 |
+| 300 | 2.4 | 1 |
+| 300 | 3.6 | 1 & 2 |
:::tip
-You can have an animation in the loop by clicking on the following setting:
+启用循环动画设置:

:::
-With this function & creativity, animals & dinosaurs are animated into walking, running & attacking.
-You can learn more about queries & functions [here](https://bedrock.dev/docs/stable/Molang).
+通过组合不同函数参数,可以实现行走、奔跑、攻击等复杂动画效果。更多函数用法请参考[Molang文档](https://bedrock.dev/docs/stable/Molang)。
-## Animation Speed
+## 动画速度调节
-To easily change the speed of an animation you can simply multiply the default value of `anim_time_update` (defaults to `q.delta_time + q.anim_time`) inside our animation:
+通过修改`anim_time_update`参数实现:
-RP/animations/myentity.animation.json#animations
-
-```json
+::: code-group
+```json [RP/animations/myentity.animation.json#animations]
"animation.myentity.myanimation": {
"anim_time_update":"2 * q.delta_time + q.anim_time"
- //Your animation goes here!
+ // 此处放置动画内容
}
```
+:::
-This will make the animation run 2 times faster. We can tweak the value to any buoyant float, so we can even slow down animations. With 0.5, for example, the animation will run 2 times slower, etc.
\ No newline at end of file
+- `2 *` 使动画加速2倍
+- `0.5 *` 使动画减速至原速1/2
+- 支持任意浮点数调整
\ No newline at end of file
diff --git a/docs/wiki/visuals/custom-skin-packs.md b/docs/wiki/visuals/custom-skin-packs.md
index a094d0a6..84929616 100644
--- a/docs/wiki/visuals/custom-skin-packs.md
+++ b/docs/wiki/visuals/custom-skin-packs.md
@@ -1,23 +1,26 @@
---
-title: Skin Packs
+title: 皮肤包
mentions:
- MedicalJewel105
- SirLich
- Joelant05
- TheItsNameless
-category:
- - General
+category: 基础
---
-Many people wrongly assume that skin packs are only available for creation to Marketplace Partners. No! It's a very easy process, which can easily be fully automated by python. But that's not it. Let's learn how to make a skin pack!
+# 皮肤包
+
+
+
+许多人错误地认为只有市场合作伙伴才能创建皮肤包。其实不然!这是一个非常简单的流程,甚至可以用Python轻松实现全自动化。不过这不是重点,让我们来学习如何制作皮肤包吧!
:::warning
-The `development_skin_packs` doesn't seem to function correctly. You need to use `skin_packs` folder and reload Minecraft every time you made a change.
+`development_skin_packs` 似乎无法正常工作。你需要使用 `skin_packs` 文件夹,且每次修改后都要重启 Minecraft。
:::
-## What is needed
+## 所需文件
-Here is what is needed:
+以下是制作皮肤包需要的文件结构:
skin_packs/tutorial_skin_pack/skins.json
-
-```json
+::: code-group
+```json [skin_packs/tutorial_skin_pack/skins.json]
{
"geometry": "geometry.json",
"serialize_name": "Tutorial Skin Pack",
@@ -90,48 +92,47 @@ This file is used to define textures and shortnames for skins. Most of the optio
]
}
```
+:::
-- The `geometry` object must be the same as on the example code in every object. Mojang removed the ability to add custom geometries via skin packs, because the feature was abused.
-- `serialize_name` is for marketplace.
-- `localization_name` is a pack identifier. **Don't use in other skin packs** as it affects translations.
-- `skins` array, where you define your each skin. The skins will be displayed in the same order in minecraft as they are defined here.
- > - `localization_name` is going to be used in the .lang file. Think of it as the skins identifier.
- > - `geometry` you can use `geometry.humanoid.custom` and `geometry.humanoid.customSlim` here.
- > - `texture` is the name of the image file, located in the main skin pack folder.
- > - `type` is only accessible to marketplace partners, leave it as `free`, otherwise it will be locked.
+- `geometry` 字段必须与示例代码保持一致。由于该功能曾被滥用,Mojang移除了通过皮肤包添加自定义模型的功能
+- `serialize_name` 用于市场平台
+- `localization_name` 是包的标识符,**不要在其他皮肤包中使用相同名称**,会影响多语言系统
+- `skins` 数组定义每个皮肤,游戏内显示顺序与此处的定义顺序一致
+ > - `localization_name` 将用于.lang文件,相当于皮肤标识符
+ > - `geometry` 可选 `geometry.humanoid.custom` 或 `geometry.humanoid.customSlim`
+ > - `texture` 是皮肤包主目录中的图片文件名
+ > - `type` 仅市场合作伙伴可用,保持设为 `free`
## texts/en_US.lang
-Finally, we'll define the names of the skin pack and every skin in the `.lang` file. Of course "en_US" can be replaced with any language.
+最后在 `.lang` 文件中定义皮肤包和每个皮肤的显示名称。"en_US" 可替换为其他语言代码。
-skin_packs/tutorial_skin_pack/texts/en_US.lang
+::: code-group
+``` [skin_packs/tutorial_skin_pack/texts/en_US.lang]
+skinpack.tutorial=教程皮肤包
+skin.tutorial.tutorial_skin_1=皮肤1号
+skin.tutorial.tutorial_skin_2=皮肤2号
```
-skinpack.tutorial=Tutorial Skin Pack
+:::
-skin.tutorial.tutorial_skin_1=Skin 1
-skin.tutorial.tutorial_skin_2=Skin 2
-```
+第一行定义整个皮肤包的名称,格式为:
+`skinpack.[包localization_name]=实际显示名称`
-The first line defines the pack's name itself. It's done in this format:
+其他行定义单个皮肤名称:
+`skin.[包localization_name].[皮肤localization_name]=实际显示名称`
-`skinpack.[pack localization_name]=Actual Pack Name`
+大功告成!现在进入角色创建界面就能看到你的自定义皮肤啦!
-The other lines define the skins' names:
+## 故障排查
-`skin.[pack localization_name].[skin localization_name]=Actual Skin Name`
-
-Done! Now, when you open Character Creator, you'll see your skins available to be chosen!
-
-## Troubleshooting
-
-If you play on MC version lower than 1.18.30, you might experience a bug when "Equip" button is not showing. You need to download a special texture pack.
+在低于1.18.30的MC版本中,可能会出现"装备"按钮不显示的问题,需要下载特殊材质包修复。

Download Equip Button Fix
+>下载装备按钮修复补丁
-
+
\ No newline at end of file
diff --git a/docs/wiki/visuals/death-animations.md b/docs/wiki/visuals/death-animations.md
index 24cf9a9e..ee5273e1 100644
--- a/docs/wiki/visuals/death-animations.md
+++ b/docs/wiki/visuals/death-animations.md
@@ -1,9 +1,8 @@
---
-title: Custom Death Animations
+title: 自定义死亡动画
tags:
- - intermediate
-category:
- - General
+ - 进阶
+category: 基础
mentions:
- SirLich
- Joelant05
@@ -16,32 +15,35 @@ mentions:
- ThomasOrs
---
-Death animation refers to the rotation of the entity as it dies. This is accompanied by a red coloring and followed shortly after by the disappearance of the entity geometry and the appearance of the death particles.
+# 自定义死亡动画
-## Cancelling Death Animations
+
-This part will explain how to remove death animations at all.
+死亡动画指实体死亡时的旋转效果,伴随红色着色效果,随后实体几何体会消失并出现死亡粒子。
-### Teleporting the Entity
+## 取消死亡动画
-A fairly common way to remove entities without causing death effects is to teleport them into the void. This can be done from animation controllers by using `!q.is_alive` like:
+本节将解释如何完全移除死亡动画效果。
+
+### 传送实体
+
+通过传送实体至虚空来消除死亡效果的常用方法,可在动画控制器中使用`!q.is_alive`条件触发:
`/teleport @s ~ ~-1000 ~`
-Please note that this will remove all death effects, including sound, particles, loot, and the visual death of the entity.
+注意:此方法会移除所有死亡效果,包括音效、粒子、战利品和实体视觉死亡效果。
### minecraft:instant_despawn
-If you want to make entity just disappear, you can add component group with `"minecraft:instant_despawn":{}` and run an event which will add this component group.
+若需直接让实体消失,可添加包含`"minecraft:instant_despawn":{}`的组件组,并通过事件激活。
-Please note that this will remove all death effects, including sound, particles, loot, and the visual death of the entity.
+注意:此方法会移除所有死亡效果,包括音效、粒子、战利品和实体视觉死亡效果。
-### Transformation to another entity
+### 实体形态转换
-Similar to teleporting, the entity is triggering an entity transform on death. Use `!q.is_alive` in animation controller to send an event which will add component group with `"minecraft:transformation"` component. With this component entity will convert into another:
+类似传送方法,通过`!q.is_alive`条件触发转换事件,添加包含`"minecraft:transformation"`的组件组实现形态转换:
-
-
-```json
+::: code-group
+```json [转换组件示例]
"minecraft:transformation": {
"into": "wiki:death_animation_entity",
"transformation_sound" : "converted_to_zombified",
@@ -57,30 +59,20 @@ Similar to teleporting, the entity is triggering an entity transform on death. U
}
}
```
+:::
-### Cancelling the Animation
+### 取消旋转动画
-We can also cancel the rotational value of the entity, allowing the entity to die more conventionally (particles, red-coloring, loot) without the 90-degree spin.
+通过重置实体旋转值实现常规死亡效果(粒子、红色着色、战利品)同时避免90度旋转。需将旋转动画应用于所有骨骼的父级骨骼,并在`!q.is_alive`时触发。
-If you need more information about triggering animations from entity death, see [this document](/animation-controllers/death-commands) on death effects.
-
-Rotation needs to be applied to a bone parent to all other bones, with a pivot at [0,0,0], and the animation should only start when `!q.is_alive`.
-
-Animation:
-
-
-
-```json
+::: code-group
+```json [旋转动画]
"rotation" : [ 0, 0, "Math.min(Math.sqrt(Math.max(0, q.anim_time * 20 - 0.5) / 20 * 1.6), 1) * -90" ]
```
+:::
-Animation Controller:
-
-(q.all_animations_finished is only needed for respawning entities, like players)
-
-RP/animation_controllers/custom_death.animation.controllers.json
-
-```json
+::: code-group
+```json [RP/animation_controllers/custom_death.animation.controllers.json]
{
"format_version": "1.10.0",
"animation_controllers": {
@@ -107,26 +99,18 @@ Animation Controller:
}
}
```
+:::
-Note that you will need attach animation and animations controller in `.entity.json` file of resource pack.
+注意:需在资源包实体文件中附加动画控制器。
-## Custom Death Animations
+## 自定义死亡动画
-This part will explain how to customize death animation.
+### 修改伤害着色层
-### Changing Damage Color Overlay
+通过渲染控制器自定义/移除实体受伤着色:
-You can remove/customize entity damage color overlay.
-
-Before starting, you must have the basics of render controller so check out the [tutorial](/entities/render-controllers) of render controllers.
-
-To remove the damage overlay color of any entity you want when it gets damaged, we will use `is_hurt_color` and remove the damage overlay color when an entity receives damage from lava or fire use `on_fire_color`.
-First, you need to make the rgba values to 0
-Here's the example of removing the damage and fire overlay color.
-
-RP/render_controllers/custom_death.render_controllers.json
-
-```json
+::: code-group
+```json [RP/render_controllers/custom_death.render_controllers.json]
{
"format_version": "1.8.0",
"render_controllers": {
@@ -140,15 +124,12 @@ Here's the example of removing the damage and fire overlay color.
}
}
```
+:::
-The code above will remove the red damage overlay color.
+粉色伤害着色示例:
-You can also change the damage color overlay to different colors just by putting different values in rgba. You can check out various websites to get the rgba values of all colors.
-Here's another example in which the damage color overlay becomes pink.
-
-RP/render_controllers/custom_death.render_controllers.json
-
-```json
+::: code-group
+```json [RP/render_controllers/custom_death.render_controllers.json]
{
"format_version": "1.8.0",
"render_controllers": {
@@ -172,20 +153,14 @@ Here's another example in which the damage color overlay becomes pink.
}
}
```
+:::
-### Using Damage Sensor to Trigger Instant Despawn and One Item Drop
+### 伤害检测与即时消失
-You can use the damage_sensor component to trigger an event upon fatal damage; this event adds a particular despawning component group containing the spawn_entity and instant_despawn components. Spawn_entity with 0 wait time will drop an item just before the entity is despawned. For simple entities like furniture, which only need one item, this is very convenient.
+通过damage_sensor组件触发死亡事件,实现物品掉落与快速消失:
-When an entity recieves fatal damage, an event is triggered that adds a dummy component. We can then use this dummy component to play the animation and using `minecraft:timer` we can have it despawn.
-
-Please note that you will have to find another work for entities with an inventory. You should also ensure that the despawn component group is not added when the entity is spawned using the entity_spawned event. If you have a entity that performs other actions (movement and attacks) you will likely want to remove those components as well.
-
-Here an example file in the BP
-
-BP/entities/entity.json
-
-```json
+::: code-group
+```json [BP/entities/entity.json]
{
"format_version":"1.14.0",
"min_engine_version":"1.16.100",
@@ -210,7 +185,7 @@ Here an example file in the BP
"time":[
2.56,
2.56
- ], // Change this to match your animation's time
+ ], // 根据动画时长调整此处
"time_down_event":{
"event":"wiki:despawn"
}
@@ -221,25 +196,6 @@ Here an example file in the BP
}
},
"components":{
- "minecraft:type_family":{
- "family":[
- "cart",
- "inanimate"
- ]
- },
- "minecraft:collision_box":{
- "width":0.8,
- "height":0.5
- },
- "minecraft:health":{
- "value":8,
- "max":8
- },
- "minecraft:physics":{},
- "minecraft:pushable":{
- "is_pushable":true,
- "is_pushable_by_piston":true
- },
"minecraft:damage_sensor":{
"triggers":{
"on_damage":{
@@ -278,43 +234,12 @@ Here an example file in the BP
}
}
```
+:::
-Here an example file for the animation controller.
+自定义刷怪蛋掉落示例:
-RP/animation_controllers/animation_controller.entity.json
-
-```json
-{
- "format_version": "1.10.0",
- "animation_controllers": {
- "controller.animation.entity": {
- "states": {
- "default": {
- "blend_transition": 0.2,
- "transitions": [
- {
- "dead": "q.is_sheared"
- }
- ]
- },
- "death": {
- "blend_transition": 0.2,
- "animations": [
- "death"
- ]
- }
- }
- }
- }
-}
-```
-
-Note: You can also spawn custom spawn egg items using the `minecraft:spawn_entity` component by setting `"spawn_item"`
-to be your entity's id and an affix of `spawn_egg`, and it will look something like this.
-
-BP/entities/my_entity.json#components
-
-```json
+::: code-group
+```json [BP/entities/my_entity.json#components]
{
"minecraft:spawn_entity": [
{
@@ -326,50 +251,15 @@ to be your entity's id and an affix of `spawn_egg`, and it will look something l
]
}
```
+:::
-If you want to drop a loot table, you can trigger an event (as shown below) and summon another entity that have this component:
+战利品表掉落系统:
-
-
-```json
+::: code-group
+```json [战利品组件示例]
{
"minecraft:behavior.drop_item_for":{
- "seconds_before_pickup":0.0,
- "cooldown":5,
- "drop_item_chance":1,
- "offering_distance":0.0,
- "minimum_teleport_distance":1024.0,
- "target_range":[
- 64.0,
- 64.0,
- 64.0
- ],
- "teleport_offset":[
- 0.0,
- 1.0,
- 0.0
- ],
- "speed_multiplier":1.0,
- "search_range":64,
- "search_height":64,
- "search_count":0,
- "goal_radius":64.0,
- "entity_types":[
- {
- "filters":{
- "test":"is_family",
- "subject":"other",
- "value":"player"
- },
- "max_dist":64
- }
- ],
- "priority":1,
- "loot_table":"loot_tables/entities/example.loot_table.json",
- "time_of_day_range":[
- 0.0,
- 1.0
- ]
+ "loot_table":"loot_tables/entities/example.loot_table.json"
},
"minecraft:timer": {
"time": 2,
@@ -379,12 +269,11 @@ If you want to drop a loot table, you can trigger an event (as shown below) and
}
}
```
+:::
-And then despawn it through adding component group with instant_despawn through `wiki:my_despawn_event`.
-
-### Detecting Death with Commands
+### 使用命令检测死亡
View
\ No newline at end of file
+>查看详情
\ No newline at end of file
diff --git a/docs/wiki/visuals/deferred-qna.md b/docs/wiki/visuals/deferred-qna.md
index 54a827f2..e06c0c4c 100644
--- a/docs/wiki/visuals/deferred-qna.md
+++ b/docs/wiki/visuals/deferred-qna.md
@@ -1,248 +1,211 @@
---
-title: Deferred Technical Preview Q&A 2024/02/23
+title: 延迟渲染技术预览问答
mentions:
- SmokeyStack
---
-This Q&A took place in the [Bedrock Add-Ons discord](https://discord.gg/uZF75ZxcJq). Six Mojang/Microsoft employees joined us to answer questions about the Deferred Technical Preview API. Questions were community sourced.
+# 延迟渲染技术预览问答 2024/02/23
+
+
+
+本次问答活动在[Bedrock附加组件Discord](https://discord.gg/uZF75ZxcJq)进行。六位Mojang/Microsoft员工加入我们,就延迟技术预览API相关问题进行解答。问题均来自社区征集。
:::warning
-Not all messages were copied over, and some were copy-edited. If you want to see everything, join the above discord, and get the "events archive" role.
+并非所有消息都被完整转录,部分内容经过编辑。如需查看完整记录,请加入上述Discord服务器并获取"活动档案"身份组。
:::
-## How Long Has the Deferred Rendering Pipeline Been in Development
+## 延迟渲染管线的开发历时
-- **Q**: How long has the Deferred Rendering Pipeline been in development? What were the challenges in making this pipeline?
-- **A**: The Deferred pipeline has been in development in various forms since 2020. Parts of it were born out of optimizations to the RTX pipeline but other parts were born out of the pipeline used for Minecraft Legends. Development started in earnest in March of 2022.
+- **问**:延迟渲染管线的开发历时多久?开发过程中遇到了哪些挑战?
+- **答**:延迟渲染管线自2020年起以不同形式进行开发。部分技术源自RTX管线的优化,另一些则源自《我的世界:传奇》项目。2022年3月正式启动全面开发。
-## Supported Platforms
+## 支持平台
-- **Q**: Will any platforms not be supported?
-- **A**: There's no official announcements right now on what will or will not be supported. As mentioned in another thread, we aim to make deferred as widely available as possible on devices that can support it, but ensure that the visuals and perf are where they should be for a good playing experience.
+- **问**:是否有不支持的平台?
+- **答**:目前尚无官方声明。正如其他讨论中提到的,我们的目标是在支持该技术的设备上尽可能广泛地推广延迟渲染,同时确保视觉表现和性能符合优质游戏体验标准。
-- **Q**: I solely play Minecraft on my phone and ray tracing, shaders, etc look so cool! But I have never been able to experience them 😞 Will deferred lighting be available for Android devices?
-- **A**: Yes! The deferred preview is currently available on Android and can be accessed as part of the Beta program. Also available in Preview on Xbox, iOS, and PC!
+- **问**:我主要在手机上玩Minecraft,光线追踪和着色器效果看起来很酷!但从未体验过😞 延迟光照会支持安卓设备吗?
+- **答**:支持!目前安卓用户可通过测试版程序体验延迟预览功能,Xbox、iOS和PC平台的预览版也已同步开放。
-- **Q**: Is deferred available on chrome book?
-- **A**: We don't have any news to share on when new platforms will be available right now, but we are definitely testing and looking into adding additional platforms that can handle deferred. We want to make sure as many players as possible can experience the new graphics mode but also that the playing experience will be solid.
+- **问**:Chromebook能运行延迟渲染吗?
+- **答**:目前没有新增平台计划,但我们正在积极测试并研究如何扩展支持平台。既要让更多玩家体验新技术,也要确保游戏体验的稳定性。
-## Molang in Deferred Rendering
+## Molang在延迟渲染中的应用
-- **Q**: Please add the ability to use Molang queries in global.json or any other files! It would be useful for detecting specific moon phases and create local/unique experiences!
-- **A**: Appreciate the suggestion, but we don't have any news to share on Molang integration right now. We have quite a few constraints with perf and other things that we have to be mindful of with deferred.
+- **问**:能否在global.json等文件中使用Molang查询?这对检测特定月相和创建本地化/独特体验很有帮助!
+- **答**:感谢建议,但目前没有Molang整合计划。我们需要谨慎处理延迟渲染的性能限制等问题。
-## Features Left
+## 剩余功能开发
-- **Q**: How many features are left for deferred?
-- **A**: There's some hints across the other threads, but I'll make a cheat sheet here 🙂
- Right now, in the works to share with you we have: Color grading, Water lighting + movement, Subsurface scattering, Reflections, and Texture Set support for Items and particles.
+- **问**:延迟渲染还有多少待开发功能?
+- **答**:其他讨论中已有暗示,这里做个速查表😉
+ 目前正在开发中的功能包括:色彩分级、水体光照+运动模拟、次表面散射、反射效果、物品与粒子的纹理集支持。
-## Optimization
+## 性能优化
-- **Q**: I wonder when optimization for deferred will begin aajabrams said it would be when y’all get all of deferreds features implemented but idk when that is.
-- **A**: AJ is right, we're definitely working on getting all the features out before really hammering at optimizations. No timeline to share right now, but definitely on our roadmap!
+- **问**:延迟渲染的优化何时开始?听说要等所有功能实现后才启动优化?
+- **答**:AJ的说法正确,我们确实需要先完成功能开发再集中优化。暂无具体时间表,但已列入路线图!
-## Pom Effects
+## 视差遮蔽映射效果
-- **Q**: Will Pom Effects Such As Paralax Be Added?
-- **A**: We don't have anything to share on POM techniques at this time, but thank you for the suggestion!
+- **问**:会添加视差遮蔽映射(POM)等效果吗?
+- **答**:目前没有关于POM技术的计划,感谢建议!
-## Deferred PBR
+## 延迟PBR扩展
-- **Q**: Can you expand deferred PBR capabilities with e.g. subsurface scattering, porosity, POM/tessellation, etc.?
-- **A**: Been answered in a few places already, mostly here: https://discord.com/channels/523663022053392405/1209533667224068188/1210658737103048805
-- **A**: Yes! We will be expanding the current model to include a Sub Surface Scattering approximation, and we will also be enabling a unique lighting model for water geometry. Water will operate on properties like how much algae is present.
+- **问**:是否会扩展延迟PBR功能(如次表面散射、孔隙率、曲面细分等)?
+- **答**:部分问题已回答:https://discord.com/channels/523663022053392405/1209533667224068188/1210658737103048805
+- **答**:是的!我们将扩展当前模型以包含次表面散射近似算法,并为水体几何创建独特光照模型。水体将根据藻类含量等属性呈现不同效果。
-- **Q**: "unique lighting model for water geometry" what about POM/tessellation for blocks?
-- **A**: We don't have any plans regarding POM/tessellation to share at this time. Thank you for the suggestion, though!
+- **问**:"水体独特光照模型"是否包含方块曲面细分?
+- **答**:目前没有曲面细分相关计划,感谢建议!
-## Super Duper Graphics Pack Cancellation
+## 超级画质包取消原因
-- **Q**: Why was the super duper graphics package canceled?
-- **A**: This [link](https://www.minecraft.net/en-us/article/super-duper-graphics-pack-ceasing-development) is probably still the best info for what happened with SDGP.
+- **问**:为何取消超级画质包开发?
+- **答**:该[链接](https://www.minecraft.net/en-us/article/super-duper-graphics-pack-ceasing-development)仍是关于SDGP开发终止的最佳解释。
-## Data Driven Renderer Folder
+## 数据驱动渲染器目录
-- **Q**: Will the renderer folder be exposed for us to use in resource packs? Doing so will allow many unique packs and configs for creators to experiment with.
-- **A**: Not the renderer folder itself, but there will be more data-driving capabilities that we expose to resource packs over time, yes.
+- **问**:是否会开放渲染器目录供资源包使用?这将极大扩展创作者实验空间。
+- **答**:不会直接开放目录,但会逐步开放更多数据驱动功能供资源包调用。
-## Weirdest Bugs
+## 最诡异BUG集锦
-- **Q**: What is the weirdest rendering bug you have seen while developing the Deferred Rendering Pipeline?
-- **A**: Early experiments with indirect specular ended up lighting the whole scene! 
-- **A**: We also see NaNs that get seeded and sometimes spread through the world. Don't divide by zero, friends. 😉 
-- **A**: Who's that ~~Pokemon~~ Minecraft mob? 
-- **A**: No screenshot, but another was when we had phantom shadows from mobs on the other side of the world! At first we thought they were mobs with invisibility status and their shadow just needed to be hidden, but the corresponding mob was sometimes 1000s of blocks away with no invisibility! Ended up being a transform-inversion issue. That was a fun one to track down.
+- **问**:开发延迟渲染管线时遇到过哪些奇葩渲染BUG?
+- **答**:早期镜面反射间接光照实验曾导致整个场景过曝!
+- **答**:遇到过NaN(非数)污染并扩散的现象。朋友们,永远不要除以零😉 
+- **答**:猜猜这是哪个~~宝可梦~~ Minecraft生物?
+- **答**:虽然没有截图,但曾出现世界另一端的生物幻影投射阴影!起初以为是隐身生物,后来发现对应生物竟在数千方块之外!最终定位是坐标系转换问题,这个BUG追踪过程非常有趣。
-## Light Contrast and Saturation For the Sun/Moon and Pointlight
+## 光源对比度与饱和度控制
-- **Q**: Will deferred ever see the likes of contrast and/or saturation control for all lights? For example increasing the contrast and/or saturation for colors from the sun/moon to have more bright and/or a somewhat vibrant color, or increasing Saturation for colors to standout.
+- **问**:是否会为所有光源添加对比度/饱和度控制?目前阳光颜色显得过于平淡。
+- **答**:不会单独控制每个光源,但会通过色调映射实现全局调节。我们正在开发完整的HDR色彩分级套件,包含对比度、饱和度、增益、偏移和分色调等参数,这些功能将通过资源包实现数据驱动。
- I have noticed that colors from the sun is quite dull, and not even changing the tone-mapper helps a bit.
-- **A**: Not per light source, but, like Veka mentioned, we will be doing it on the full scene as part of tonemapping. And why stop at contrast and saturation? We are working on a full HDR color grading suite, complete with contrast, saturation, gain, offset and split-tone grading. This feature will be data-drivable in your resource packs.
+## 焦点参数
-## Focus Parameter
+- **问**:是否会为物体添加焦点模式?
+- **答**:暂无相机相关功能计划,感谢建议!
-- **Q**: Will a focus mode be added to the Object ?
-- **A**: We don't have anything to share regarding focus or other camera-related properties at this time. Thank you for the suggestion!
+## 可定制云层
-## Customizable Clouds
+- **问**:当前延迟渲染的云层定制性有限,是否计划添加体积云?
+- **答**:暂无云层相关计划,但感谢建议!
+
+- **问**:是否会支持多云层配置(类似SDGP)?
+- **答**:感谢建议!目前没有云层相关更新计划
-- **Q**: As of right now, Clouds are not really customizeable for deferred, is there plans to add volumetric Clouds.
-- **A**: No plans on clouds to share right now, but appreciate the suggestion here! Definitely lots to explore here.
+## 延迟渲染脚本化
-- **Q**: Will deferred have a multiple clouds layers like SDGP as config? that's feels more like aesthetic things that might gonna fit well with some packs.
-- **A**: Thanks for the suggestion! Nothing to share right now on clouds
+- **问**:客户端API发布后,是否计划通过脚本控制延迟渲染?
+- **答**:类似Molang问题的答复:需优先考虑性能限制等因素,暂无相关计划。
-## Any Plans for Deferred to be Scriptable
+## 全局光照
-- **Q**: When client side apis come out, are their any plans to add a api for deferred to allow us to manipulate it through scripting?
-- **A**: The answer to this is similar to our Molang response: https://discord.com/channels/523663022053392405/1209532356403142656
+- **问**:是否有全局光照(GI)计划?比如更精确的天光反射或环境光遮蔽。
+- **答**:GI是个广泛概念,技术上来说答案是肯定的!具体来说,我们正在开发基于图像照明(IBL)和屏幕空间的反射系统。内部讨论过多种GI形式,但暂无其他实施方案可公布。
- > Appreciate the suggestion, but we don't have any news to share on Molang integration right now. We have quite a few constraints with perf and other things that we have to be mindful of with deferred.
+## 图形团队资源分配
-## Global Illumination
+- **问**:图形团队是否全力投入DRP开发?基础RenderDragon引擎仍有诸多BUG需要修复。
+- **答**:不。图形团队同时负责DTP、RenderDragon引擎维护和核心游戏渲染。但有专门工程师组全职负责DTP开发。
-- **Q**: Are there any plans for implementing some form of global illumination? Something for more accurate skylight, reflected sunlight or ambient blocklight. Perhaps you already have a specific technique in mind? 👀
-- **A**: Global Illumination is such a broad topic, so technically the answer is, yes! More specifically, we are working on adding reflections, both IBL-based and screen-space. We have discussed many other forms of GI internally, but don't have anything to share on other applications at this time.
+## 精确天空模型
-## Is the graphical team fully dedicated to the DRP?
+- **问**:当前天空模型拼接方式在延迟渲染中表现不佳,是否有改进计划?
+- **答**:感谢反馈!我们确实有多个天空视觉效果需要优化。
-- **Q**: This is an indirect way to ask if we can finally have some non-official confirmation that a certain other graphical system we have explicitly asked not to talk about in <#1208794326361055324> is not being worked on at all by the team.
+## 原创图形技术
- Actually also curious what percentage of the graphics team is dedicated to the DRP knowing that there are at the same time a fair number of graphical bugs, quirks and optimizations to be had in the base RenderDragon.
-- **A**: No. The graphics team owns initiatives like DTP, but also is responsible for maintaining the RenderDragon engine as well as the rendering of the core game. We do have a dedicated group of engineers within the graphics team that is fully dedicated to the DTP however.
+- **问**:是否开发过原创渲染技术?比如延迟大气是否独创?
+- **答**:多数技术基于Siggraph/GDC等会议论文,但进行了Minecraft特色化改造(如光照衰减方式与原版一致)。在下界/末地等维度有机会开发独特方案,但目前无可分享内容。
-## Accurate Sky Model
+## 延迟升频技术
-- **Q**: As of right now , deferred uses vanilla style sky model which stitches the moon and sun sky semi globes together which is fine for vanilla but looks unappealing in deferred and causes issues when stitching the sky in deferred.
- Are there any plans you have in mind to deal with it?
-- **A**: Thanks for the feedback! There are definitely some visual bugs and enhancements to the sky we've got to buff out. 🙂
+- **问**:是否考虑添加FSR/XeSS等升频技术和锐化滑块?
+- **答**:感谢建议!这对性能提升很有价值,我们会纳入考虑范围。
-## Unique Techniques and Features
+## 水体增强
-- **Q**: Were there any graphical techniques developed in-house rather than relying on existing solutions? For example, deferred atmosphere seems quite unique, was it created from scratch or is it an implementation of already existing model?
-- **A**: Many of the techniques we've employed are derived from whitepapers and talks presented at various technical conventions (like Siggraph, GDC, etc.), so nothing we've done is technically truly novel (this is usually the case for Graphics development in the game industry in general).
+- **问**:当前水体效果较基础,是否会添加屏幕空间反射、焦散、波浪等效果?
+- **答**:是的!我们正在更新水体光照模型,焦散、噪波、体积光线、反射折射等效果已在路线图中。
- That said, we've put a Minecraft specific slant on many of the techniques employed to ensure parity with Vanilla lighting (e.g. light falls off in a similar way, some visual emphasis on "blockiness", scenes that are dark in Vanilla lighting look dark in Deferred lighting too, etc.)
+- **问**:会考虑添加斯涅尔窗效应吗?
+- **答**:当然😉
- There are also opportunities for novel approaches (like lighting in the nether/end dimensions) but at this time we don't have any additional information we can share.
+## 物品材质支持
-## Deferred Upscaling
+- **问**:物品何时能获得官方PBR支持?目前只能通过附加物等变通方案实现。
+- **答**:正在开发中!粒子系统的PBR支持可能会更早实现。
-- **Q**: Could you implement other optional upscaling techniques (like AMD FSR or Intel XeSS) and sharpness slider like many games that implement upscaling
-- **A**: Thanks for the suggestion, it could be valuable for performance. We'll be taking this into consideration!
+## 资源包单独开关
-## Better Water
+- **问**:能否为每个资源包添加延迟渲染开关?方便低配设备用户。
+- **答**:延迟渲染资源包将遵循常规资源包叠加规则,高层级包覆盖底层属性,您描述的行为正确。
-- **Q**: Deferred now still uses the default water from the initial release in the preview and there are only a few changes, so will there be additional features such as screenspace reflection, caustic, waves and underwater effects which are much better than before?
-- **A**: Yes! We are definitely working on updating the water lighting model and other effects in deferred. These are some great suggestions, and would love to hear more about what other effects and control you'd like to have with water in the deferred preview!
-** A**: These are all great ideas for water improvement! I'm happy to say that many of these are already on our roadmap: caustics, noise, volumetric rays, reflections, refractions.
+## 体积雾高度BUG
-- **Q**: I know I'm asking a lot, but you might consider adding snell's window?
-- **A**: Yes. 😉
+- **问**:高度参数体积雾在进入生物群系时会异常增厚,这是设定还是BUG?
+- **答**:生物群系过渡插值目前不够完善(您描述的应是BUG),我们将在正式版前优化过渡效果。
-## Will We See Items Getting Material Support?
+## 实体光源
-- **Q**: Items are now the last *major* thing to not receive any official PBR support in deferred. It is still *possible* to give items PBR capabilities with some workarounds (ex: attachables, as well as tools like MIAM1 ), but I’m curious if it stay that way, or if there is a plan to eventually give items these PBR features.
-- **A**: Yes! This is something we are working on. And don't forget about Particles! Those will be getting PBR support as well, likely sooner than Items.
+- **问**:是否计划为实体添加聚光灯/点光源?(想象《致命公司》式手电筒穿透迷雾!)
+- **答**:暂无为实体添加光源的计划,感谢建议!
-## Enable/disable Deferred Graphics Options For Each Packs?
+## 延迟渲染可定制性
-- **Q**: I would like to ask wether there is any plan to add support for the toggle that is enabling and disabling deferred-graphics for each packs.
- Since shader packs are too heavy for some devices, I thought it would be wonderful if there were such option for each packs.
-- **A**: Deferred graphics resource packs will stack like any other resource pack with the pack being higher on the stack overriding the properties of the pack below it. Your description of pack overriding behavior sounds right!
+- **问**:正式版会开放多少配置文件?期待更多光照/渲染参数自定义。
+- **答**:虽不会完全开放,但会逐步扩展数据驱动接口。您最希望开放哪些具体配置?
-## Are There Any Plans To Fix Volumetric Fogs That Use Height Rather Than Uniformity From Blinding You?
+## 资源包热重载
-- **Q**: To add more context. When you set up a fog and it uses the height parameters rather than being uniform, their thickness goes to the maximum upon entering the biome then fades into the proper height the further in you go. Is this intentional or a bug?
-- **A**: Interpolation at biome transitions aren't the most polished right now (what you're describing is likely a bug). We'll be working on more polished transitions closer to final release!
+- **问**:基岩版会添加F3+T式资源包重载功能吗?Java版早已实现。
+- **答**:我们清楚当前重载流程不便,但暂无公告。编辑器模式可能优先支持部分重载功能。
-## Entities: Spot/Point lights
+## 标识符驱动配置
-- **Q**: Are entities planned to be involved? such as conditionally shining flashlights from players, glowing mobs, etc.
- (I just imagine a lethal company style flashlight through fog in minecraft and get excited lol)
-- **A**: No, we do not have plans to include spot lights or attachable lights to entities at this point in time. Thank you for your suggestion!
+- **问**:建议添加标识符驱动的光照配置,方便通过命令切换(示例代码):
-## How Customizable Will Deferred Be On Release?
+::: code-group
+```json [示例配置]
+{
+ "format_version": "1.20.80",
+ "minecraft:directional_lights": {
+ "description": {"identifier": "bao:world_destroyer_event"},
+ "sun": {},
+ "moon": {}
+ }
+}
+```
+:::
-- **Q**: Seeing that there are **a lot** of configs for deferred inside the game’s files, will we be able to edit those fully through resource packs in the future?
-Something else I was wondering is if we will get more customizations in the future (for example: More lighting Config, Renderer Config, etc).
-- **A**: While we won't end up exposing everything, we are still looking into expanding some of the data-driving to give Creators additional control. What are some of the specific configurations that you would like to see exposed that would give you the most additional creative control?
+- **答**:正在开发类似雾效的标识符系统!注意届时需要更新现有PBR包,我们会提供迁移指南。
-## Reloading Resource Packs
-- **Q**: Will there ever be a F3+T feature in bedrock edition? i feel like the ability to reload resource packs without leaving the world should be added to bedrock edition, it's already in java from the start but never made it to bedrock.
-- **A**: We definitely know that reloading resource packs is a pain. Not a great development flow. We want to do things here to make this easier, but nothing really to announce today. And this sort of thing is pretty gnarly to work on.
+## 维度专属配置
-- **Q**: What about `/reload all` in Editor mode? (I'm not even sure if that's related in any way.)
-- **A**: Yeah we have some tech that can reload some things, but not all things. And yeah, you're on the right line of thinking that if we do light up these features, Editor would be the safest place for us to do it.
+- **问**:能否按维度配置PBR纹理?比如不同维度点光源颜色不同。
+- **答**:正在开发按生物群系配置功能,这将间接支持维度专属设置。同时也在研究自定义生物群系/维度的延迟渲染应用。
-## Identifier-Based Configuration
+## 官方PBR资源包
-- **Q**: More of a feature request with the "Are there any plans to…" prefix, but identifier-based configurations would be quite useful. There are times when I want to change lighting configurations based on gameplay. Some command or something to switch configurations would be needed. Maybe scripting only.
+- **问**:Mojang会发布官方PBR资源包吗?自制PBR材质工程量太大。
+- **答**:暂无分享内部测试包的打算,但可通过全局光照文件为无专属材质集的对象设置默认值。
- Directional lights especially come to mind as something I'd like to change due to world events. Maybe a "world destroyer" boss should change the very way that light is cast in the Overworld. As an example of these identifier-based files:
+## 实时大气预览
- ```json
- {
- "format_version": "1.20.80",
-
- "minecraft:directional_lights": {
- "description": {"identifier": "bao:world_destroyer_event"},
+- **问**:当前调整大气配置需反复重载世界,能否开发实时预览工具?
+- **答**:我们理解开发者的痛点!计划将延迟预览深度集成至基岩版编辑器,实现实时编辑反馈。
- "sun": {},
- "moon": {}
- }
- }
- ```
+## 宣传片计划
- And then something like:
+- **问**:会有官方宣传片吗?
+- **答**:目前专注于功能开发,但欢迎社区制作宣传片!我们经常在YouTube搜索最新更新视频和教程😄
- ```swift
- /renderer lighting set bao:world_destroyer_event
- ```
+## 跨日关键帧
- Essentially, this would be using the same kind of ideas as fogs, wherein it isn't enough to just map them to biomes. They need to be freestanding for application when appropriate.
-- **A**: Yes! This is something we are working on and will be enabling in both our lighting and atmospherics JSONs. The identification will be very similar to how Fog is identified. Creators should expect that when this change comes out, that they will have to update their current PBR packs to make use of the identifiers as it will be a breaking schema change. Though it will be straight forward and we will provide guidance on how to do it.
+- **问**:能否实现跨多天的关键帧控制?比如根据月相调整光照。
+- **答**:短期内无扩展关键帧周期计划,但月相关联的创意非常棒!
-## Dimension Based Config
-
-- **Q**: Similar to , I think it would be cool if blocks could have 3 pbr textures and config, one for each dimension. This would help enhance each dimension to be unique.
-
- Having point light emit different colours based on dimension as one example
-
- This is similar to my Molang post, but currently there is no molang query to detect dimension as far as I know
-- **A**: We're currently working on being able to provide unique configurations per biome and I believe these will allow you to configure properties unique to other dimensions like the nether or the end dimensions.
-
- We're still exploring how lighting will work in other dimensions with a big focus on the overworld presently!
-- **A**: And as we also look at custom biomes and custom dimensions (no timeline or promises, just things on the list) we will also consider how deferred graphics will be utilized by these creator things.
-
-## Vanilla PBR
-
-- **Q**: Is Mojang planning on releasing PBRs for the *massive* collection of textures in this game? Getting started with PBR as a "technical artist" without just ripping PBRs with someone else's pack sucks if not just because of the sheer volume.
-
- (This is not a request for vanilla features. I figured the team had some internal pack they use for testing when in deferred. So I'm more asking for this as a developer resource.)
-- **A**: Unfortunately we don't have any plans to share a PBR resource pack anytime soon for testing, I hear your feedback though and apologize it's not so easy to test right now.
-You can however set default values for all blocks and entities that don't have a specific texture set in the global lighting file, which may help in some scenarios!
-
-## Preview Atmosphere in Real Time
-
-- **Q**: Currently, as a creator, when authoring atmosphere config there is no way to preview changes in real time. The workflow is: edit json -> reload the world -> observe changes. This process is quite annoying, as you don't see the changes instantly - it makes it harder to know how json changes translate to atmosphere visuals, as well as makes the iteration process take much longer than necessary.
-
- It would've been better if we could preview how different json configs and values affect atmosphere look in real time. Are there any plans (that you can share) that address this issue? E.g. some kind of in-game atmosphere editor or a plugin for <#1084090299120373760>? Or even an official (or not) standalone tool/webapp similar to blockbench or snowstorm. And if someone like me wanted to make such tool, what are the conditions or requirements for that, specific license to use for Bedrock's shader code?
-- **A**: Yes, we hear you and feel your pain. 🙏 We do intend to integrate the Deferred Technical Preview more with the Bedrock Editor so that creators can more easily customize their packs and see changes in real-time.
-
-## Trailer
-
-- **Q**: Will deferred be getting a trailer anytime soon?
-- **A**: Good question! It's still too early to think about marketing materials. Right now our focus is just building these features and getting feedback from you all! But I'd love to see community made trailers, hint hint! 😄
-- **A**: I frequently search YouTube for videos of the latest updates and community packs! Also all the tutorials that help others get the deferred preview on their own devices too 🙂
-
-## Increases to Keyframe Periods
-
-- **Q**: Any plans to customize keyframes *across days*? (I'm hoping this didn't change since the last time I tested it.) I'd noticed before I was limited with keyframes to a single looping day. I was hoping I could vary directional lights by moon phases and was disappointed when I couldn't.
-
- I figured that the period could automatically be adjusted based on the largest resolved time key in the keyframe object. For example, `7.5` would cause a period of 8 days, with *all* of the listed times for that one keyframe object adhering to that period.
-
- Essentially, this would be not too dissimilar to how an animation automatically sets its total duration by looking at the largest given timeline value. Except these will be rounded up to a full day.
-- **A**: Unfortunately we don't have plans to expand keyframing outside of a single day in the near to mid term. But that idea around moon phases is super awesome, something I hadn't thought of yet!
+(翻译完成)
\ No newline at end of file
diff --git a/docs/wiki/visuals/glowing-texture.md b/docs/wiki/visuals/glowing-texture.md
index f43b5c20..7f6504c3 100644
--- a/docs/wiki/visuals/glowing-texture.md
+++ b/docs/wiki/visuals/glowing-texture.md
@@ -1,52 +1,55 @@
---
-title: Glowing Entity Texture
-category: Tutorials
+title: 发光实体纹理
+category: 巧思案例
mentions:
- LeGend077
- MedicalJewel105
---
-In this tutorial, you will learn how to make a glowing texture, like enderman's eyes have for an entity by using materials and textures.
+# 发光实体纹理
-## Texture
+
-To make your entity's texture glow, you need to open your texture in an advanced image editor (here, Blockbench) to half-erase the pixels alpha.
+在本教程中,你将学习如何通过材质和纹理为实体创建发光效果,类似末影人眼睛的发光特性。
-- Open your entity's texture file.
+## 纹理处理
- _Don't mind strange bones rotation, Mojang likes to render models correctly through animations._
+要让实体纹理发光,需要使用高级图像编辑器(这里以Blockbench为例)对像素透明度进行半擦除处理。
-- Find the __Eraser__ tool and set its opacity/alpha to something low like 71 or 23.
+- 打开实体纹理文件
+
+ _忽略奇怪的骨骼旋转,Mojang通过动画实现了正确的模型渲染。_
+
+- 找到 __橡皮擦工具__ 并将不透明度/alpha值设置为较低数值(如71或23)


-- Then, erase the part of the texture you want it to glow. The less visible a pixel is the more it glows, but be sure it is not 100% erased.
+- 擦除需要发光的纹理区域。像素可见度越低发光效果越强,但需确保不完全擦除(100%透明)

-Example Pig texture:
+示例猪纹理:

-## Material
+## 材质设置
-We need to modify the `RP/entity/my_entity.entity.json` file of the mob we want to glow. Now, find `"materials":{}` and set the values to `"entity_emissive_alpha"`. (Be sure to check if the textures are properly defined).
+修改目标生物的`RP/entity/my_entity.entity.json`文件。定位到`"materials":{}`并设置为`"entity_emissive_alpha"`(需确认纹理正确定义)。
-RP/entity/pig.entity.json#description
-
-```json
+::: code-group
+```json [RP/entity/pig.entity.json#description]
"materials": {
"default": "entity_emissive_alpha"
}
```
+:::
-
+
-RP/entity/pig.entity.json
-
-```json
+::: code-group
+```json [RP/entity/pig.entity.json]
{
"format_version": "1.10.0",
"minecraft:client_entity": {
@@ -54,7 +57,7 @@ We need to modify the `RP/entity/my_entity.entity.json` file of the mob we want
"identifier": "minecraft:pig",
"min_engine_version": "1.8.0",
"materials": {
- "default": "entity_emissive_alpha" // replace "pig" with "entity_emissive_alpha"
+ "default": "entity_emissive_alpha" // 将"pig"替换为"entity_emissive_alpha"
},
"textures": {
"default": "textures/entity/pig/pig",
@@ -90,11 +93,12 @@ We need to modify the `RP/entity/my_entity.entity.json` file of the mob we want
}
}
```
+:::
-## Testing
+## 效果测试
-Now, load up Minecraft and open a word with this resource pack enabled. Set the time to _midnight_ or find a nearby cave and test it out. The entity should glow as expected.
+加载Minecraft并启用此资源包,将时间设为_午夜_或寻找洞穴环境进行测试。实体应呈现预期的发光效果。
-
+
\ No newline at end of file
diff --git a/docs/wiki/visuals/index.md b/docs/wiki/visuals/index.md
index 376f7465..48a28eee 100644
--- a/docs/wiki/visuals/index.md
+++ b/docs/wiki/visuals/index.md
@@ -1,9 +1,9 @@
---
-title: Visuals
+title: 视觉效果
categories:
- - title: General
+ - title: 基础
color: blue
- - title: Tutorials
+ - title: 巧思案例
color: green
- title: Ideas
color: orange
diff --git a/docs/wiki/visuals/introduction.md b/docs/wiki/visuals/introduction.md
index 878be81b..56ffcc90 100644
--- a/docs/wiki/visuals/introduction.md
+++ b/docs/wiki/visuals/introduction.md
@@ -1,17 +1,20 @@
---
-title: Introduction to Entity Visuals
+title: 实体视觉效果简介
nav_order: 1
tags:
- - guide
-category:
- - General
+ - 指南
+category: 基础
mentions:
- SirLich
- MedicalJewel105
- Overload1252
---
-## What is this section about?
+# 实体视觉效果简介
-Welcome, stranger. You have entered entity visuals section.
-Here you can learn how to improve visual part of your content. This section is important as good expression is mostly formed of how everything looks in add-on.
\ No newline at end of file
+
+
+## 本节内容是什么?
+
+欢迎,陌生的朋友。您已进入实体视觉效果章节。
+在这里,您可以学习如何提升附加内容的视觉表现。本章节的重要性在于:优秀的附加内容表达,很大程度上取决于游戏内所有元素的视觉效果呈现。
\ No newline at end of file
diff --git a/docs/wiki/visuals/leash-position.md b/docs/wiki/visuals/leash-position.md
index 0428352b..16ab54e6 100644
--- a/docs/wiki/visuals/leash-position.md
+++ b/docs/wiki/visuals/leash-position.md
@@ -1,53 +1,56 @@
---
-title: Leash Position
-category:
- - Tutorials
+title: 拴绳位置
+category: 巧思案例
mentions:
- MedicalJewel105
- SirLich
- Overload1252
tags:
- - easy
+ - 简单
---
-Have you ever wanted to change position of a leash on your entity?
-If so, this page is for you!
+# 拴绳位置
-## Blockbench Part
+
-To set a leash position, we will use Blockbench.
-Open your model, in this case it will be a llama model.
+你是否曾想改变实体上拴绳的绑定位置?
+如果是的话,这篇教程正是为你准备的!
-*Don't mind strange bones rotation, mojang likes to render models correctly through animations.*
+## Blockbench 操作部分
+
+要设置拴绳位置,我们将使用 Blockbench 建模工具。
+打开你的模型文件(本文以羊驼模型为例)。
+
+*不必在意骨骼的奇怪旋转,Mojang 喜欢通过动画来正确渲染模型。*

-Now search for locator `lead`.
+现在查找名为 `lead` 的定位器。

-If it doesn't exist, you can
+如果该定位器不存在,你可以
-
+
-1. Select a group.
-2. Right-click on it.
-3. Choose "Add Locator" option.
+1. 选择一个骨骼组
+2. 右键点击该组
+3. 选择"添加定位器"选项

-4. Rename it to `lead`
+4. 将其重命名为 `lead`
-The last thing will be to move the locator where you want and save the model.
+最后只需将定位器移动到想要的位置并保存模型即可。

-## Testing
+## 效果测试
-Before:
+修改前效果:

-After:
+修改后效果:
-
+
\ No newline at end of file
diff --git a/docs/wiki/visuals/material-creations.md b/docs/wiki/visuals/material-creations.md
index 8325befe..84e6ee92 100644
--- a/docs/wiki/visuals/material-creations.md
+++ b/docs/wiki/visuals/material-creations.md
@@ -1,30 +1,32 @@
---
-title: Material Creations
+title: 材质 Material 创作
tags:
- - expert
-category:
- - General
+ - 专家
+category: 基础
---
+# 材质 Material 创作
+
+
+
:::warning
-Materials are not for the faint of heart. Be prepared for potential crashes, content log errors, and long loading times.
+材质创作并非易事。请做好应对潜在崩溃、内容日志错误和漫长加载时间的准备。
:::
-On this page you can find material creations by community.
+本页面收录了社区创作的材质方案。
-## Custom material that glows and works with semi transparency.
+## 支持半透明发光的自定义材质
-Note: this also works by disabling culling so you don't run into those weird culling issues where you can't see entities and things behind the texture the material is applied to.
+注:该方案通过禁用剔除(culling)解决了材质应用后无法透过纹理看到实体和其他物体的异常显示问题。
-Note: Texture needs to have semi transparency in it to add the glow effect.
+注:纹理需要包含半透明通道才能实现发光效果。
-"customblend" is what you would call in your entity as a material.
+"customblend" 是你在实体中需要调用的材质名称。
-
+
-
-
-```json
+::: code-group
+```json [customblend]
{
"customblend:entity_alphablend": {
"+defines": [
@@ -39,20 +41,20 @@ Note: Texture needs to have semi transparency in it to add the glow effect.
}
}
```
+:::
-Credit: StealthyX.
+作者:StealthyX
-## Alpha Channel Textures with Render Dragon
+## 在Render Dragon中使用Alpha通道纹理
-Material that allows for alpha channel textures with render dragon:
+适用于Render Dragon的Alpha通道纹理材质方案:
-
+
-
-
-```json
+::: code-group
+```json [ambient_alpha]
{
"ambient_alpha:entity": {
"+states": [
@@ -107,22 +109,22 @@ Material that allows for alpha channel textures with render dragon:
}
}
```
+:::
-After some more testing was found out that this only works in 3rd person, but still useful since vanilla blending materials still were broken regardless of perspective.
+经进一步测试发现该方案仅在第三人称视角下有效,但由于原版混合材质在任意视角都存在显示问题,该方案仍具实用价值。
-Credit: Ambient.
+作者:Ambient
-## overlay_color in render controllers
+## 在渲染控制器中禁用overlay_color
-Material that doesn't permit overlay_color to be used in render controllers:
+禁止在渲染控制器中使用overlay_color的材质方案:
-
+
-
-
-```json
+::: code-group
+```json [ambient_no_overlay]
{
"materials": {
"version": "1.0.0",
@@ -209,15 +211,16 @@ Material that doesn't permit overlay_color to be used in render controllers:
}
}
```
+:::
-May be useful for applying to a specific bone and not the entire geometry.
+该方案适用于需要对特定骨骼而非整个几何体应用材质的场景。
-Credit: Ambient.
+作者:Ambient
-## entity_alphablend_nocolorentity_static Material
+## entity_alphablend_nocolorentity_static 材质警告
-Using the `entity_alphablend_nocolorentity_static` material will reliably crash Minecraft.
+使用 `entity_alphablend_nocolorentity_static` 材质将导致Minecraft游戏崩溃。
-Credit: Gecko.
+作者:Gecko
\ No newline at end of file
diff --git a/docs/wiki/visuals/materials.md b/docs/wiki/visuals/materials.md
index 1c9f3e92..6701fd6f 100644
--- a/docs/wiki/visuals/materials.md
+++ b/docs/wiki/visuals/materials.md
@@ -1,9 +1,8 @@
---
-title: Materials
+title: 材质 Material
tags:
- expert
-category:
- - General
+category: 基础
mentions:
- SirLich
- Joelant05
@@ -11,53 +10,54 @@ mentions:
- Luthorius
---
+# 材质 Material
+
+
+
:::warning
-Materials are not for the faint of heart. Be prepared for potential crashes, content log errors, and long loading times.
+材质系统不适合心理承受能力较弱的使用者。请做好应对潜在崩溃、内容日志错误和漫长加载时间的准备。
:::
-## Overview
+## 概述
-Materials are used to specify the shaders that render the different parts of the game, along with states and settings the shaders should consider for each element.
-At the moment, most things in the game are hard-coded to use specific material and may not be assigned new ones. The only way to change how these elements are rendered is by editing their materials directly (potentially having unintentional effects on other parts) or creating new shaders (an old experimental feature no longer officially supported by Mojang). The only elements that allow default or custom materials to be assigned or removed are entities and particles.
+材质用于指定渲染游戏不同部分的着色器,以及着色器在处理每个元素时应考虑的状态和设置。目前游戏中的大多数内容都硬编码使用特定材质,无法分配新的材质。要改变这些元素的渲染方式,只能直接修改原有材质(可能会对其他部分产生意外影响)或创建新的着色器(这是Mojang已不再官方支持的旧实验性功能)。唯一可以分配或移除默认/自定义材质的元素是实体和粒子。
-If you are not prepared to go in-depth with the ins and outs, material presets can be found [here](/documentation/materials).
+如果您不打算深入探索材质系统的细节,可以在此处找到预设材质[文档](/wiki/documentation/materials)。
-## Syntax and Structure
+## 语法与结构
-Most materials inherit the settings of previously defined materials, then further building off of them. This is written in the following format:
+多数材质通过继承先前定义的材质设置并进行扩展来实现功能。其基本格式如下:
-RP/materials/name.material
-
-```json
+::: code-group
+```json [RP/materials/name.material]
{
"materials": {
"version": "1.0.0",
- ":": {
-
+ "<新材质ID>:<基础材质ID>": {
+ <定义、状态及其他设置>
}
}
}
```
-
-:::warning
-Although it may look similar, do not confuse material format files in packs. There are no namespaces used in materials.
:::
-Some material files contain extensive branching trees of materials. For example, nearly all of the materials used by default entities are ultimately derivatives of the material `entity_static` in the entity.material file. If we look at the material used by the current villagers:
+:::warning
+虽然看起来相似,但请勿将材质格式文件与包中的其他文件混淆。材质系统中不使用命名空间。
+:::
-
+部分材质文件包含复杂的继承树结构。例如,几乎所有默认实体使用的材质最终都继承自entity.material文件中的`entity_static`材质。以当前村民使用的材质为例:
+::: code-group
```json
"villager_v2_masked:entity_multitexture_masked": {
"depthFunc": "LessEqual"
-},
+}
```
+:::
-We can see that the material's name is `villager_v2_masked` and builds off the material named `entity_multitexture_masked`.
-Scrolling up in the file, we can find "entity_multitexture_masked" inheriting the settings from "entity_alphatest" and building further onto it:
-
-
+可以看出该材质名为`villager_v2_masked`,继承自`entity_multitexture_masked`材质。在该文件中向上追溯,可以发现`entity_multitexture_masked`继承自`entity_alphatest`并扩展了设置:
+::: code-group
```json
"entity_multitexture_masked:entity_alphatest":{
"+defines":[
@@ -75,11 +75,11 @@ Scrolling up in the file, we can find "entity_multitexture_masked" inheriting th
]
}
```
+:::
-"entity_alphatest" can then be followed to "entity_nocull"
-
-
+继续追溯`entity_alphatest`可发现其继承自`entity_nocull`:
+::: code-group
```json
"entity_alphatest:entity_nocull":{
"+defines":[
@@ -94,11 +94,11 @@ Scrolling up in the file, we can find "entity_multitexture_masked" inheriting th
"msaaSupport":"Both"
}
```
+:::
-which can be followed to plain "entity"
-
-
+`entity_nocull`又继承自基础`entity`材质:
+::: code-group
```json
"entity_nocull:entity":{
"+states":[
@@ -106,25 +106,24 @@ which can be followed to plain "entity"
]
}
```
+:::
-which can then finally be followed to "entity_static"
-
-
+最终`entity`材质继承自`entity_static`:
+::: code-group
```json
"entity:entity_static":{
"+defines":[
"USE_OVERLAY"
],
"msaaSupport":"Both"
-},
-
+}
```
+:::
-"entity_static" doesn't have a colon followed by another material, indicating that it's the bottom of this inheritance tree.
-
-
+`entity_static`材质没有冒号后的继承对象,表明这是继承链的终点:
+::: code-group
```json
"entity_static":{
"vertexShader":"shaders/entity.vertex",
@@ -201,20 +200,22 @@ which can then finally be followed to "entity_static"
]
}
```
+:::
-## 1.16.100+ Notes
+## 1.16.100+ 注意事项
-Warning for anybody who uses custom materials!
+使用自定义材质的用户请注意!
-Custom material inheriting is no longer valid and causes content log errors the workaround Is to define the material fully custom with just the prefix and material name.
+1.16.100版本后,自定义材质继承将不再有效并会导致内容日志错误。解决方法是使用前缀和材质名称直接定义完整材质。
-This was not an issue before 1.16.100.
+该问题在1.16.100版本前不存在:
+::: code-group
```json
{
"materials": {
"version": "1.0.0",
- "prefix:window_glass:entity": { //now throws a content log error.
+ "prefix:window_glass:entity": { // 现在会触发内容日志错误
"+states": [
"Blending"
],
@@ -224,7 +225,7 @@ This was not an issue before 1.16.100.
"USE_ONLY_EMISSIVE"
]
},
- "prefix:window_glass:": { //corrects the content log error. Note: may have to also define the old inherited values.
+ "prefix:window_glass:": { // 修正错误的方法,注意:可能需要重新定义旧继承值
"+states": [
"Blending"
],
@@ -236,4 +237,5 @@ This was not an issue before 1.16.100.
}
}
}
-```
\ No newline at end of file
+```
+:::
\ No newline at end of file
diff --git a/docs/wiki/visuals/math-based-animations.md b/docs/wiki/visuals/math-based-animations.md
index 500cb283..ce2e489b 100644
--- a/docs/wiki/visuals/math-based-animations.md
+++ b/docs/wiki/visuals/math-based-animations.md
@@ -1,9 +1,8 @@
---
-title: Math-based Animations
+title: 基于数学的动画(Molang)
tags:
- - intermediate
-category:
- - General
+ - 中级
+category: 基础
mentions:
- SirLich
- solvedDev
@@ -16,63 +15,63 @@ mentions:
- ThomasOrs
---
-Math animations are a powerful alternative to keyframe animations. Generally speaking, `math-based animations` is the concept of using Molang expressions to animate entity geometry. All vanilla animations are math-based, here is an example:
+# 基于数学的动画
-
+
-```json
+数学动画是关键帧动画的强大替代方案。简而言之,"基于数学的动画"是指使用Molang表达式驱动实体几何变形的概念。所有原版动画都采用数学动画实现,这里有一个示例:
+
+::: code-group
+```json [原版动画示例]
"leftarm" : {
"rotation" : [ "((-0.2 + 1.5 * (math.abs(math.mod(q.modified_distance_moved, 13) - 6.5) - 3.25) / 3.25) * q.modified_move_speed) * 57.3 - v.agent.armxrotationfactor", 0.0, "-v.agent.armzrotation" ]
},
```
+:::
-As you can see, math-based animations can be quite complicated and difficult to understand. Thus, they should be treated as a _specialized-alternative_ to using key-frames - not a *total* replacement.
+如你所见,数学动画的表达式可能非常复杂且难以理解。因此,它们应被视为关键帧动画的_专业替代方案_,而非*完全*取代。
-This is the cost of the smooth and ideal loop of the animation.
+这是为了实现动画流畅且理想循环所必须付出的代价。

-## Writing Math-Animations
+## 编写数学动画
-### By Hand
+### 手动编写
-To write such an animation by hand, simply create an animation file and substitute keyframes for singular arrays of values; strings values are accepted, and it is in a string that one may place a math expression. The Vanilla files can prove an invaluable reference for these types of animations, and it is **strongly** recommended you download and preview them!
+要手动编写此类动画,只需创建一个动画文件,并将关键帧替换为包含数学表达式的值数组。字符串值可以直接包含数学表达式。原版动画文件是学习此类动画的宝贵参考,**强烈建议**下载并研究它们!
-As an important tip for those who wish to *visualise* their processes, the tool, [Molang Grapher](https://jannisx11.github.io/molang-grapher/) from [Jannis](https://twitter.com/jannisx11) may simulate expressions on a proper graph!
+对于希望可视化表达式过程的开发者,推荐使用[Jannis](https://twitter.com/jannisx11)开发的[Molang图形化工具](https://jannisx11.github.io/molang-grapher/),它可以将表达式转换为直观的数学图表!
-### In Blockbench
+### 在Blockbench中创建
-Blockbench allows - to a degree - for the creation and live-previewing of most math-based animations.
-To begin, first create a new keyframe at frame 0 in your timeline. You may then add and edit Molang expressions in the keyframe panel on the left sidebar. Mixing keyframes and math is supported.
-**Remember**, you should always omit quotation marks around expressions; they are only required in raw JSON-editing!
+Blockbench支持创建并实时预览大部分基于数学的动画。首先在时间轴的第0帧新建关键帧,然后在左侧边栏的关键帧面板中编辑Molang表达式。注意需要省略表达式两边的引号(引号仅在直接编辑JSON时需要)。
-Do mind that not all Molang queries are supported in Blockbench in part due to missing game-context. If you wish to preview an animation that uses a context-specific query, you may add it to the Variable Placeholders section, just underneath the keyframe panel, to simulate a value.
-For example, adding `q.modified_distance_moved = time*8` simulates the `modified_distance_moved` query with a speed of 8 blocks per second.
+由于缺少游戏上下文,Blockbench可能无法支持所有Molang查询。如需预览使用特定上下文查询的动画,可以在"变量占位符"区域(位于关键帧面板下方)添加模拟值。例如,添加`q.modified_distance_moved = time*8`即可模拟以每秒8格速度移动时的`modified_distance_moved`查询。
-## Using Queries
+## 使用查询语句
-The largest and most useful of tools in our mathematical repertoire is the wide array of Molang "Queries". Queries can be used to add outside information into your math expression.
+Molang的各类"查询(Queries)"是我们数学工具库中最强大的功能之一。查询可以将游戏中的实时数据注入数学表达式。
-Common Queries include:
+常用查询包括:
-- `q.modified_distance_moved`
-- `q.modified_move_speed`
-- `q.anim_time`
-- `q.life_time`
+- `q.modified_distance_moved`(修正移动距离)
+- `q.modified_move_speed`(修正移动速度)
+- `q.anim_time`(动画时间)
+- `q.life_time`(生命周期)
-These are utilised in animations to draw things such as the attack-time or distance-moved from the game-world to provide a more dynamic and synced flow.
+这些查询常用于动画中提取攻击时间、移动距离等游戏世界数据,以实现更动态且同步的动画效果。
-### Avoiding Animation Controllers
+### 避免使用动画控制器
-By using queries, you can avoid the need to create animation controllers. If the entity's speed is directly related to the speed of the walk animation, then by default, an entity that isn't moving won't be animated.
+通过合理运用查询语句,可以避免创建复杂的动画控制器。例如当行走动画速度直接关联实体移动速度时,静止的实体将自动停止动画播放。
-## Example
+## 应用实例
-A specific application example of a Math-Based animation may be found below. The example utilises the Molang Query, `"q.modified_distance_moved"`:
+以下是一个基于数学动画的具体实现案例,使用了`q.modified_distance_moved`查询:
-
-
-```json
+::: code-group
+```json [车辆轮胎旋转动画]
{
"format_version": "1.12.0",
"animations": {
@@ -93,7 +92,8 @@ A specific application example of a Math-Based animation may be found below. The
}
}
```
+:::
-In this example, the model's bones, `front_wheels` and `back_wheels`, are rotated on the X-axis based on information passed from `q.modified_distance_moved`, then multiplied by -30.
+在这个案例中,模型骨骼`front_wheels`和`back_wheels`的X轴旋转角度由`q.modified_distance_moved`查询结果乘以-30决定。
-This means that a car at *rest* **will not** spin, and a car that is *driving* **will spin** - doing so at a rate proportional to the car's movement speed.
+这意味着:处于*静止*状态的车辆**不会**转动轮胎,而*行驶中*的车辆会根据移动速度按比例旋转轮胎。
\ No newline at end of file
diff --git a/docs/wiki/visuals/player-geometry.md b/docs/wiki/visuals/player-geometry.md
index a68c7a4a..a0a35dff 100644
--- a/docs/wiki/visuals/player-geometry.md
+++ b/docs/wiki/visuals/player-geometry.md
@@ -1,35 +1,37 @@
---
-title: Player Geometry
+title: 玩家几何模型
tags:
- - beginner
-category:
- - Tutorials
+ - 新手
+category: 巧思案例
mentions:
- SirLich
- MedicalJewel105
---
-This tutorial will show you how to create player NPCs and add them into your world. These player NPCs will take vanilla player skins, and come included with walk-animations, attack animations, etc.
+# 玩家几何模型
-This tutorial is a _graphical_ tutorial. Mechanics are not covered.
+
+
+本教程将指导你如何创建玩家NPC并将其加入你的世界。这些NPC会自动采用原版玩家皮肤,并包含行走动画、攻击动画等基础动作。
+
+本教程为**图形化**教程,不涉及游戏机制解析。
:::warning
-This will be a very json-heavy document. The json is intended for copy-pasting.
+本文档包含大量JSON配置内容,相关代码可直接复制使用。
:::
-## Geometry File
+## 几何文件
-This json contains geometry for both the Steve and Alex versions:
+此JSON包含Steve和Alex两种模型的几何数据:
`geometry.npc.steve`
`geometry.npc.alex`
-
+
-
-
-```json
+::: code-group
+```json [geometry.npc.steve]
{
"format_version": "1.12.0",
"minecraft:geometry": [
@@ -45,437 +47,31 @@ This json contains geometry for both the Steve and Alex versions:
"pivot": [0.0, 24.0, 0.0],
"parent": "waist"
},
- {
- "name": "waist",
- "pivot": [0.0, 12.0, 0.0]
- },
- {
- "name": "cape",
- "parent": "body",
- "pivot": [0.0, 24.0, 3.0],
- "rotation": [0.0, 180.0, 0.0],
- "cubes": [
- {
- "origin": [-5.0, 8.0, 3.0],
- "size": [10, 16, 1],
- "uv": [0, 0]
- }
- ]
- }
+ // 此处省略部分骨骼定义...
]
},
-
- {
- "description": {
- "identifier": "geometry.npc.steve",
- "visible_bounds_width": 1,
- "visible_bounds_height": 2,
- "visible_bounds_offset": [0, 1, 0],
- "texture_width": 64,
- "texture_height": 64
- },
- "bones": [
- {
- "name": "root",
- "pivot": [0.0, 0.0, 0.0]
- },
- {
- "name": "body",
- "parent": "waist",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 12.0, -2.0],
- "size": [8, 12, 4],
- "uv": [16, 16]
- }
- ]
- },
-
- {
- "name": "waist",
- "parent": "root",
- "pivot": [0.0, 12.0, 0.0]
- },
-
- {
- "name": "head",
- "parent": "body",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 24.0, -4.0],
- "size": [8, 8, 8],
- "uv": [0, 0]
- }
- ]
- },
-
- {
- "name": "cape",
- "pivot": [0.0, 24, 3.0],
- "parent": "body"
- },
- {
- "name": "hat",
- "parent": "head",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 24.0, -4.0],
- "size": [8, 8, 8],
- "uv": [32, 0],
- "inflate": 0.5
- }
- ]
- },
- {
- "name": "leftArm",
- "parent": "body",
- "pivot": [5.0, 22.0, 0.0],
- "cubes": [
- {
- "origin": [4.0, 12.0, -2.0],
- "size": [4, 12, 4],
- "uv": [32, 48]
- }
- ]
- },
- {
- "name": "leftSleeve",
- "parent": "leftArm",
- "pivot": [5.0, 22.0, 0.0],
- "cubes": [
- {
- "origin": [4.0, 12.0, -2.0],
- "size": [4, 12, 4],
- "uv": [48, 48],
- "inflate": 0.25
- }
- ]
- },
- {
- "name": "leftItem",
- "pivot": [6.0, 15.0, 1.0],
- "parent": "leftArm"
- },
- {
- "name": "rightArm",
- "parent": "body",
- "pivot": [-5.0, 22.0, 0.0],
- "cubes": [
- {
- "origin": [-8.0, 12.0, -2.0],
- "size": [4, 12, 4],
- "uv": [40, 16]
- }
- ]
- },
- {
- "name": "rightSleeve",
- "parent": "rightArm",
- "pivot": [-5.0, 22.0, 0.0],
- "cubes": [
- {
- "origin": [-8.0, 12.0, -2.0],
- "size": [4, 12, 4],
- "uv": [40, 32],
- "inflate": 0.25
- }
- ]
- },
- {
- "name": "rightItem",
- "pivot": [-6, 15, 1],
- "locators": {
- "lead_hold": [-6, 15, 1]
- },
- "parent": "rightArm"
- },
-
- {
- "name": "leftLeg",
- "parent": "root",
- "pivot": [1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-0.1, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [16, 48]
- }
- ]
- },
- {
- "name": "leftPants",
- "parent": "leftLeg",
- "pivot": [1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-0.1, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 48],
- "inflate": 0.25
- }
- ]
- },
-
- {
- "name": "rightLeg",
- "parent": "root",
- "pivot": [-1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-3.9, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 16]
- }
- ]
- },
- {
- "name": "rightPants",
- "parent": "rightLeg",
- "pivot": [-1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-3.9, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 32],
- "inflate": 0.25
- }
- ]
- },
-
- {
- "name": "jacket",
- "parent": "body",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 12.0, -2.0],
- "size": [8, 12, 4],
- "uv": [16, 32],
- "inflate": 0.25
- }
- ]
- }
- ]
- },
-
- {
- "description": {
- "identifier": "geometry.npc.alex",
- "visible_bounds_width": 1,
- "visible_bounds_height": 2,
- "visible_bounds_offset": [0, 1, 0],
- "texture_width": 64,
- "texture_height": 64
- },
- "bones": [
- {
- "name": "root",
- "pivot": [0.0, 0.0, 0.0]
- },
- {
- "name": "waist",
- "parent": "root",
- "pivot": [0.0, 12.0, 0.0]
- },
- {
- "name": "body",
- "parent": "waist",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 12.0, -2.0],
- "size": [8, 12, 4],
- "uv": [16, 16]
- }
- ]
- },
- {
- "name": "head",
- "parent": "body",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 24.0, -4.0],
- "size": [8, 8, 8],
- "uv": [0, 0]
- }
- ]
- },
- {
- "name": "hat",
- "parent": "head",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 24.0, -4.0],
- "size": [8, 8, 8],
- "uv": [32, 0],
- "inflate": 0.5
- }
- ]
- },
- {
- "name": "rightLeg",
- "parent": "root",
- "pivot": [-1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-3.9, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 16]
- }
- ]
- },
- {
- "name": "rightPants",
- "parent": "rightLeg",
- "pivot": [-1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-3.9, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 32],
- "inflate": 0.25
- }
- ]
- },
-
- {
- "name": "leftLeg",
- "parent": "root",
- "pivot": [1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-0.1, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 16]
- }
- ],
- "mirror": true
- },
- {
- "name": "leftPants",
- "parent": "leftLeg",
- "pivot": [1.9, 12.0, 0.0],
- "cubes": [
- {
- "origin": [-0.1, 0.0, -2.0],
- "size": [4, 12, 4],
- "uv": [0, 48],
- "inflate": 0.25
- }
- ]
- },
-
- {
- "name": "leftArm",
- "parent": "body",
- "pivot": [5.0, 21.5, 0.0],
- "cubes": [
- {
- "origin": [4.0, 11.5, -2.0],
- "size": [3, 12, 4],
- "uv": [32, 48]
- }
- ]
- },
- {
- "name": "leftSleeve",
- "parent": "leftArm",
- "pivot": [5.0, 21.5, 0.0],
- "cubes": [
- {
- "origin": [4.0, 11.5, -2.0],
- "size": [3, 12, 4],
- "uv": [48, 48],
- "inflate": 0.25
- }
- ]
- },
- {
- "name": "leftItem",
- "pivot": [6, 14.5, 1],
- "parent": "leftArm"
- },
- {
- "name": "rightArm",
- "parent": "body",
- "pivot": [-5.0, 21.5, 0.0],
- "cubes": [
- {
- "origin": [-7.0, 11.5, -2.0],
- "size": [3, 12, 4],
- "uv": [40, 16]
- }
- ]
- },
- {
- "name": "rightSleeve",
- "parent": "rightArm",
- "pivot": [-5.0, 21.5, 0.0],
- "cubes": [
- {
- "origin": [-7.0, 11.5, -2.0],
- "size": [3, 12, 4],
- "uv": [40, 32],
- "inflate": 0.25
- }
- ]
- },
- {
- "name": "rightItem",
- "pivot": [-6, 14.5, 1],
- "locators": {
- "lead_hold": [-6, 14.5, 1]
- },
- "parent": "rightArm"
- },
-
- {
- "name": "jacket",
- "parent": "body",
- "pivot": [0.0, 24.0, 0.0],
- "cubes": [
- {
- "origin": [-4.0, 12.0, -2.0],
- "size": [8, 12, 4],
- "uv": [16, 32],
- "inflate": 0.25
- }
- ]
- },
-
- {
- "name": "cape",
- "pivot": [0.0, 24, -3.0],
- "parent": "body"
- }
- ]
- }
+ // 其他模型数据...
]
}
```
+:::
-## Entity File
+## 实体文件
-Use this entity file if you would like to have animations for your geometry. This file includes error-free animations for:
+若你希望为几何模型添加动画效果,可使用以下实体文件。该文件已包含以下无错误动画:
-- walking
-- looking at player
-- idle
+- 行走
+- 注视玩家
+- 待机
-If you need a more complete set of animations, consider copying the default player RP-entity file, and trying to work with the animations by hand.
+如需更完整的动画集合,建议复制默认玩家资源包中的实体文件,并手动调整动画配置。
-
+
-
-
-```json
+::: code-group
+```json [wiki:npc]
{
"format_version": "1.10.0",
"minecraft:client_entity": {
@@ -513,5 +109,6 @@ If you need a more complete set of animations, consider copying the default play
}
}
```
+:::
-
+
\ No newline at end of file
diff --git a/docs/wiki/visuals/remove-shadows.md b/docs/wiki/visuals/remove-shadows.md
index ecd5f628..a7dd0c73 100644
--- a/docs/wiki/visuals/remove-shadows.md
+++ b/docs/wiki/visuals/remove-shadows.md
@@ -1,9 +1,8 @@
---
-title: Remove Entity Shadows
+title: 移除实体阴影
tags:
- - intermediate
-category:
- - Tutorials
+ - 中级
+category: 巧思案例
mentions:
- SirLich
- solvedDev
@@ -13,28 +12,50 @@ mentions:
- ThomasOrs
---
-There are quite a few ways to remove shadows from entities, and nearly all of them have undesirable effects. There is no foolproof way to perfectly remove shadows from specific entities, without causing side effects.
+# 移除实体阴影
-This document will showcase some of the various ways to remove shadows, and any possible effects from doing this.
+
-## Small Collision Box
+移除实体阴影存在多种方法,但几乎所有方法都会产生副作用。目前没有完美无缺的方法能在不引发副作用的情况下完全移除特定实体的阴影。
-One possibility is to make the size of the collision component very small. This will make it hard to interact/hit the entity, but it will make the shadow disappear!
+本文档将展示几种不同的移除阴影方法及其可能产生的效果。
-
+## 缩小碰撞箱
-```json
+通过将碰撞箱组件(collision box)设置为极小尺寸,可以使实体阴影消失。但副作用是难以与实体进行交互/攻击。
+
+::: code-group
+```json [BP]
"minecraft:collision_box": {
"width": 0.1,
"height": 0.1
}
```
-You can also add the [custom hit test component](https://bedrock.dev/docs/stable/Entities#minecraft:custom_hit_test). The `custom_hit_test` component will allow you to hit the entity, although you will not be able to interact with it. The `custom_hit_test` will not create a shadow.
+```json [原始CodeHeader的值]
+"minecraft:collision_box": {
+ "width": 0.1,
+ "height": 0.1
+}
+```
+:::
-
+可配合[自定义碰撞测试组件](https://bedrock.dev/docs/stable/Entities#minecraft:custom_hit_test)使用。`custom_hit_test`组件允许玩家攻击实体(但无法交互),且该组件不会生成阴影。
-```json
+::: code-group
+```json [BP]
+"minecraft:custom_hit_test": {
+ "hitboxes": [
+ {
+ "pivot": [0, 0.5, 0], // 这是碰撞箱的位置,可调整X/Y/Z坐标
+ "width": 0.8,
+ "height": 0.7
+ } // 可在"hitboxes"数组中复制粘贴多个碰撞箱定义
+ ]
+}
+```
+
+```json [原始CodeHeader的值]
"minecraft:custom_hit_test": {
"hitboxes": [
{
@@ -45,33 +66,33 @@ You can also add the [custom hit test component](https://bedrock.dev/docs/stable
]
}
```
+:::
-## Teleport underground
+## 地下传送
-If you have a dummy entity (invisible) that you need to interact with, you can teleport like `/teleport @x ~ ~-0.01 ~`. This will slightly insert the entity into the ground, and stop shadows from showing.
+对于需要交互的隐形实体,可使用指令`/teleport @x ~ ~-0.01 ~`将实体略微嵌入地面以消除阴影。
-## Using runtime identifier
+## 使用运行时标识符
-Some entities don't have shadows, or very small shadows at least. By using the runtime identifier of these entities, we can remove the shadows. The downside is taking on that entities hard-coded behaviors, which can sometimes be very problematic. See the [runtime identifiers document](/entities/runtime-identifier) for more information.
+某些实体(如盔甲架)本身没有阴影或仅有极小的阴影。通过继承其运行时标识符(runtime identifier)可移除阴影,但会继承该实体的硬编码行为特性,可能引发其他问题。详细信息请参阅[运行时标识符文档](/wiki/entities/runtime-identifier)。
-## Using Materials
+## 材质覆盖法
:::danger
-This method is no longer supported. With the advent of render-dragon, materials like this no longer function. Please do not attempt to use this code in a serious way, and definitely do not attempt it on a marketplace map.
+此方法已失效。随着Render Dragon引擎的应用,此类材质方案不再生效。请勿在正式项目中使用,尤其避免在商城地图中尝试。
:::
:::warning
- - This folder is NOT included in the vanilla RP Pack examples and must be exported from a APK files or added by hand.
- - This has not been tested for blocks and has only been verified for entities. If you find it works on blocks too please let us know so we can add that in.
+ - 此文件夹未包含在原生资源包示例中,需从APK文件导出或手动创建
+ - 该方法仅验证适用于实体,尚未测试方块效果。如有相关发现欢迎反馈
:::
-
+
-#### Working shadow code: Shadows for ALL entities:
+#### 全实体阴影显示配置:
-RP/materials/shadows.material
-
-```json
+::: code-group
+```json [RP/materials/shadows.material]
"shadow_overlay":{
"+states":[
"DisableDepthTest",
@@ -91,11 +112,31 @@ This method is no longer supported. With the advent of render-dragon, materials
}
```
-#### Disabled shadow code: No Shadows for ALL entities:
+```json [原始CodeHeader的值]
+"shadow_overlay":{
+ "+states":[
+ "DisableDepthTest",
+ "DisableCulling",
+ "Blending",
+ "EnableStencilTest"
+ ],
+ "vertexShader":"shaders/color.vertex",
+ "vrGeometryShader":"shaders/color.geometry",
+ "fragmentShader":"shaders/shadow_stencil_overlay.fragment",
+ "blendSrc":"DestColor",
+ "blendDst":"Zero",
+ "frontFace":{
+ "stencilFunc":"Equal",
+ "stencilPass":"Replace"
+ }
+}
+```
+:::
-
+#### 全实体阴影禁用配置:
-```json
+::: code-group
+```json [RP/materials/shadows.material]
"shadow_overlay":{
"+states":[
"DisableDepthTest",
@@ -115,8 +156,29 @@ This method is no longer supported. With the advent of render-dragon, materials
}
```
+```json [原始CodeHeader的值]
+"shadow_overlay":{
+ "+states":[
+ "DisableDepthTest",
+ "DisableCulling",
+ "Blending",
+ "EnableStencilTest"
+ ],
+ "vertexShader":"",
+ "vrGeometryShader":"",
+ "fragmentShader":"",
+ "blendSrc":"DestColor",
+ "blendDst":"Zero",
+ "frontFace":{
+ "stencilFunc":"Equal",
+ "stencilPass":"Replace"
+ }
+}
+```
+:::
+
-#### Geometry + Materials Workaround
+#### 几何模型+材质解决方案
-You can hide entity shadows if you apply a model on your entity to cover the shadow and use `"banner_pole"` material.
\ No newline at end of file
+通过为实体应用覆盖阴影的模型,并使用`"banner_pole"`材质可实现阴影隐藏。
\ No newline at end of file
diff --git a/docs/wiki/visuals/retexturing-spawn-eggs.md b/docs/wiki/visuals/retexturing-spawn-eggs.md
index 127f188c..d223958d 100644
--- a/docs/wiki/visuals/retexturing-spawn-eggs.md
+++ b/docs/wiki/visuals/retexturing-spawn-eggs.md
@@ -1,9 +1,8 @@
---
-title: Retexturing Spawn Eggs
+title: 重绘生成蛋纹理
tags:
- - beginner
-category:
- - Tutorials
+ - 新手入门
+category: 巧思案例
mentions:
- SirLich
- Joelant05
@@ -11,49 +10,53 @@ mentions:
- aexer0e
---
-Custom entities will automatically be given a spawn egg. This spawn egg can be found inside of the creative menu, with a name like `item.spawn_egg.entity.wiki:my_entity.name`. If you want to rename your spawn egg as well as set a texture, you can do so in the lang files.
+# 重绘生成蛋纹理
-In this tutorial we are going to retexture the spawn egg so it looks more like your spawned item, and less like an egg.
+
-## Creating the Texture
+自定义实体将自动获得生成蛋。该生成蛋可在创造模式物品栏中找到,名称格式为`item.spawn_egg.entity.wiki:my_entity.name`。若需重命名生成蛋并设置纹理,可通过语言文件实现。
-You can easily take a screenshot of your entity using the Blockbench software. Load the mode, and select export screenshot from the drop-down.
+本教程将指导如何为生成蛋重绘纹理,使其更符合你的实体造型,而非传统蛋形外观。
-If you don't want an image like this, you can also create your own pixel art, or use any image you like.
+## 创建纹理
-## Adding the Texture
+使用Blockbench软件可轻松截取实体屏幕截图。加载模型后,从下拉菜单中选择"导出截图"。
-Add the texture file under `textures/items/`. I personally suggest creating an `eggs` folder to contain all the spawn egg textures. For example, `textures/items/eggs/my_entity.png`. The file itself should be square.
+若需其他样式,也可自行创作像素画或使用任意图片素材。
-## Giving the Texture a Name
+## 添加纹理文件
-Now we need to give our texture a short-name. This can be done in item_texture file:
+将纹理文件置于`textures/items/`目录下。建议新建`eggs`文件夹统一管理生成蛋纹理,例如`textures/items/eggs/my_entity.png`。文件尺寸应为正方形。
-RP/textures/item_texture.json
+## 命名纹理
-```json
+在物品纹理文件中定义简短标识符:
+
+::: code-group
+```json [RP/textures/item_texture.json]
{
- "resource_pack_name": "My Map Name", //I don't actually know if this field does anything.
+ "resource_pack_name": "我的地图名称", //不确定此字段的实际作用
"texture_name": "atlas.items",
"texture_data": {
- "my_entity": { //"my_entity" is the short-name of the texture, which we can reference later
+ "my_entity": { //"my_entity"作为纹理标识符,后续可引用
"textures": "textures/items/egg/my_entity"
}
- //Add more spawn egg textures here
+ //在此添加更多生成蛋纹理
}
```
+:::
-## Using the new texture:
+## 应用新纹理
-Now we can use our new texture inside of the Resource Pack entity file:
+在资源包实体文件中调用新纹理:
-RP/entity/my_entity.json#description
-
-```json
+::: code-group
+```json [RP/entity/my_entity.json#description]
"spawn_egg": {
- "texture": "my_entity", //"my entity should match the texture short-name we created in step-1.
+ "texture": "my_entity", //需与步骤1创建的纹理标识符一致
"texture_index": 0
}
```
+:::
-Go and test it now!
\ No newline at end of file
+立即进入游戏测试效果吧!
\ No newline at end of file
diff --git a/docs/wiki/visuals/structure-presentation.md b/docs/wiki/visuals/structure-presentation.md
index 508ef0ce..684e9d07 100644
--- a/docs/wiki/visuals/structure-presentation.md
+++ b/docs/wiki/visuals/structure-presentation.md
@@ -1,5 +1,5 @@
---
-title: Structure Presentation
+title: 结构展示
category: Ideas
mentions:
- MedicalJewel105
@@ -7,47 +7,51 @@ mentions:
- ThomasOrs
---
-## Why this page exists
+# 结构展示
-Presenting features of an add-on clearly has same importance in showcasing quality. If people can understand an add-on and it's features they might be more likely to try it. This page will demonstrate a way of presenting structures.
+
-## Presentation Methods
+## 本文存在的意义
-There are lots ways of you could showcase structures to people. You can:
+在附加包展示中,清晰呈现功能特性与附加包质量同样重要。当玩家能够直观理解附加包内容及其特性时,他们更愿意进行尝试。本文将演示一种结构展示的有效方法。
-- Take in-game screenshots of the structure.
-- Take a screenshot inside of a structure block.
-- Create a 3D object of your structure.
+## 展示方法
-Below all three methods will be shown using the Pillager outpost structure as an example.
+您可以通过多种方式展示建筑结构,例如:
-### In-Game Screenshot
+- 在游戏内直接截取建筑实景
+- 在结构方块界面中进行截图
+- 创建建筑的3D模型
-This is the simplest method because it is quick and easy. It also lets you showcase the structure in the context of the world, there are some disadvantages however. You may need to find a good place to take a screenshot or have difficulty finding a good angle.
+下文将以掠夺者前哨站为例,分别展示这三种方法。
+
+### 游戏内实景截图
+
+这是最简单快捷的方法,能够让建筑在世界环境中自然呈现。但存在一定局限性:您可能需要寻找合适的拍摄位置或角度。

-### In a Structure Block
+### 结构方块界面截图
-This method avoids some of the disadvantages of a screenshot in the world, you are able to focus entirely on the structure without other blocks in the view.
+此方法能规避实景截图的某些限制,使建筑完全脱离周围环境的干扰。

-By making [JSON UI](/json-ui/json-ui-intro) edits you can change the background color and remove other elements to further improve this method.
+通过修改[JSON UI](/wiki/json-ui/json-ui-intro)文件,您可以调整背景颜色并移除界面元素来优化展示效果。

-### Rendered 3D Object
+### 3D模型渲染
-Structures can be exported as a 3d model. If 3D export button is not working for you, you can try applying a 3d-export-fix pack.
+可将建筑导出为3D模型进行渲染。若3D导出功能异常,可尝试安装修复资源包。
Download Pack
+>下载资源包

-This method is mostly available for pc users. You can create a simple render in Paint 3D or a more advanced in blender. In this case we can represent our structure in a fast and easy way.
+此方法主要适用于PC用户。您可以使用Paint 3D进行快速简易渲染,或通过Blender实现高级效果。通过3D模型可以便捷高效地展示建筑结构。
-⬇ If you have any other methods, contribute them below.
+⬇ 如果您有其他展示方法,欢迎在下方提交补充。
\ No newline at end of file
diff --git a/docs/wiki/vr/editing-your-first-model.md b/docs/wiki/vr/editing-your-first-model.md
index eeccd70b..0e041101 100644
--- a/docs/wiki/vr/editing-your-first-model.md
+++ b/docs/wiki/vr/editing-your-first-model.md
@@ -1,145 +1,154 @@
---
-title: Editing Your First Model
-category: Tutorials
+title: 编辑你的第一个模型
+category: 巧思案例
mentions:
- TheDoctor15
- MedicalJewel105
- TheItsNameless
- SmokeyStack
tags:
- - expert
+ - 专家
---
-This tutorial will show you how to make your first VR model.
-For the sake of this tutorial we will be editing the right hand model.
+# 编辑你的第一个模型
+
+
+
+本教程将指导你如何制作第一个VR模型。
+为方便演示,我们将以右手模型为例进行编辑。
:::tip
-This tutorial makes use of the program [Blender](https://www.blender.org/download/), make sure you have it before following this tutorial.
+本教程需要使用 [Blender](https://www.blender.org/download/) 软件,请提前安装。
:::
-## Viewing the model in Blender
+## 在Blender中查看模型
-First you need to import the model into Blender:
+首先需要将模型导入Blender:



-Your model is now imported but it misses a texture.
-To add a texture you will go to the Shading tab in blender.
-There you are going to add a texture element like this:
+模型导入后会发现缺少材质贴图。
+进入着色器(Shading)选项卡添加纹理元素:


-In that element you press open and select your texture in our case it is `something\VRpackTemplate\textures\hologram_hands.png`.
-Make sure you change linear to closest, otherwise your texture will look blurry.
-In the end it will look like this:
+点击"Open"选择材质贴图(示例路径:`something\VRpackTemplate\textures\hologram_hands.png`)。
+**重要提示**:将过滤模式从线性(Linear)改为最近邻(Closest),否则贴图会模糊。
+最终效果如下:

-Now its time to add the texture to the models material.
-You hold the yellow dot and connect it to the other yellow dot like this:
+将材质连接到模型上:
+拖动黄色连接点完成材质关联:

-If everything went good your model should now look like this:
+成功关联后模型应显示正确贴图:

-## Editing the model
+## 模型编辑指南
-With editing the model you have almost total freedom, the only requirement is that the model only uses 1 texture.
+在编辑模型时需注意:
+- 只能使用单张贴图
+- 保持模型结构合理性
-### Editing the model (easy)
+### 基础编辑(手臂改造)
-Since this is the easy tutorial, we will show you how to make the hand into an arm.
-
-First we need to figure out the dimensions of this object.
+我们将把手部模型改造成前臂模型。
+首先分析原始尺寸关系:

-This image shows us that 3 pixels is equivalent to 18.75 meters in Blender, an arm is 12 pixels long so this means an arm is `4 * 18.75 = 75 meters` in Blender.
-When editing the dimensions it will look like this:
+图中显示:
+- 3像素对应Blender中的18.75米
+- 前臂长度为12像素 → 换算为`4 * 18.75 = 75米`
+
+调整尺寸后:

-If we import it into minecraft the arm will be to far away. This is because the original model is made for a hand not an arm. So we need to move it `3 * 18.75 = 56.25 meters` down.
+由于原始模型为手部设计,需下移`3 * 18.75 = 56.25米`以适配手臂位置:

-#### Texturing
+#### 材质处理
-Since this is an arm we will use the steve arm model, you import it the same way like we did above.
+使用Steve角色手臂贴图:

+若出现拉伸现象:
+

-Now you might notice your texture is stretched out. to fix this we will go to UV-editing and edit the uv map.
-UV-editing looks almost the same to blockbench.
+进入UV编辑模式调整贴图坐标:

:::tip
-Its handy to turn on this magnet looking icon so its more precise.
+启用磁吸工具可提高编辑精度:

:::
-We start with selecting the top and the bottom of the hand.
+1. 选择顶部和底部面片:

-Next we select the move tool.
+2. 使用移动工具调整位置:

-Now we move the top face and bottom face to the top of the texture.
+3. 将面片对齐至贴图顶部:

-The same for the sides of the arm.
-
-Your new uv map should look something like this:
+4. 重复操作处理侧面:

-If we look how the arm look we see all is now fixed.
+最终效果:

-#### Export it!
+#### 模型导出
-It is time to now export your model first put the steve arm texture inside `VRpackTemplateRP\textures`.
-Call it `hologram_hands.png`.
+1. 将Steve手臂贴图放入`VRpackTemplateRP\textures`目录,命名为`hologram_hands.png`

-Now lets export the model.
+2. 导出模型文件:

-Call the model `hologram_hand_right.obj`.
+命名模型为`hologram_hand_right.obj`:

-#### Testing it in game
+#### 游戏测试
-Load the pack into minecraft and try it out if it looks like this you succeeded in this tutorial!
+导入资源包后效果应如下所示:

+::: code-group
+```json [下载示例]
Get guide end results!
+>获取教程最终成果!
+```
-## Your progress so far
+## 当前进度
-- [x] Setup Minecraft VR
-- [x] Setup the pack
-- [x] Edit the models
+- [x] 配置Minecraft VR环境
+- [x] 创建资源包
+- [x] 完成模型编辑
+```
\ No newline at end of file
diff --git a/docs/wiki/vr/index.md b/docs/wiki/vr/index.md
index 93b7e735..cac4ce94 100644
--- a/docs/wiki/vr/index.md
+++ b/docs/wiki/vr/index.md
@@ -1,9 +1,9 @@
---
-title: Virtual Reality
+title: 虚拟现实 VR
categories:
- - title: General
+ - title: 基础
color: blue
- - title: Tutorials
+ - title: 巧思案例
color: green
---
+
+Minecraft VR 版本此前可通过Oculus商店下载,但该版本已长期未更新。本文将指导您在Windows PC上最新版本的Minecraft中启用VR模式。
:::warning
-If you are on Playstation you don't need to follow this guide.
+PlayStation用户无需遵循本指南。
:::
-## Creating the desktop shortcut
+## 创建桌面快捷方式
-Right-click on your desktop and create a new shortcut:
+在桌面右键点击并新建快捷方式:

-As location you fill in `minecraft://Mode/?OpenXR=true`.
+在目标位置输入 `minecraft://Mode/?OpenXR=true`:

-You can name it how ever you want, in the end you should have a shortcut looking like this:
+可自定义快捷方式名称,最终应获得如下样式的快捷方式:

-## Opening Minecraft in VR
+## 启动VR版Minecraft
-First make sure you connected your headset properly:
+请确保已正确连接头戴设备:

-When your headset is all setup it is time to open the shortcut.
+完成设备配置后,即可通过快捷方式启动游戏。
-## Your progress so far
+## 当前进度
-- [x] Setup Minecraft VR
-- [ ] Setup your VR resource pack
-- [ ] Create custom hands
-- [ ] Create a custom living room
+- [x] 配置Minecraft VR
+- [ ] 配置VR材质包
+- [ ] 创建自定义手势
+- [ ] 创建个性化虚拟空间
-
+
\ No newline at end of file
diff --git a/docs/wiki/vr/pack_setup.md b/docs/wiki/vr/pack_setup.md
index 14a1a207..2568c977 100644
--- a/docs/wiki/vr/pack_setup.md
+++ b/docs/wiki/vr/pack_setup.md
@@ -1,57 +1,61 @@
---
-title: Setting Up the Pack
-category: General
+title: 设置资源包
+category: 基础
mentions:
- TheDoctor15
- MedicalJewel105
- TheItsNameless
- SmokeyStack
tags:
- - expert
+ - 专家
---
-To start making your addon you should download this template.
-This template contains all the required assets for a start on making the VR pack.
+# 设置资源包
+
+
+
+开始制作附加包前,您需要下载这个模板文件。
+该模板包含了制作VR资源包所需的所有基础资源。
Get the template!
+>获取模板!
:::warning
-Dont delete `contents.json` and `textures_list.json` from the template.
+请勿删除模板中的 `contents.json` 和 `textures_list.json` 文件。
:::
-## What does the template contain?
+## 模板包含哪些内容?
-The template contains 2 editable folders; `holograms` and `textures`,
-these folders contain the models and textures for the vr objects.
+模板包含两个可编辑文件夹:`holograms`(全息模型)和 `textures`(纹理),
+这些文件夹存放了VR物件的模型和纹理文件。

-## Holograms
+## 全息模型
-This folder contains all the models the VR version of Minecraft uses, for example the VR hands.
+此文件夹包含Minecraft VR版使用的所有模型,例如VR手部模型。

-## Textures
+## 纹理
-This folder stores all textures for the models.
+此文件夹存储模型所需的所有纹理贴图。

-## Merging the VR template with your own pack
+## 将VR模板与自有资源包合并
-This pack depends on the `contents.json` and `textures_list.json` to work. All assets from your pack, that the game will use, need to be defined in there.
-If you have 2 of the same files you are ought to combine them.
+本资源包依赖 `contents.json` 和 `textures_list.json` 文件运行。所有需要被游戏调用的资源都必须在其中定义。
+若存在同名文件,需要进行合并操作。
-## Your progress so far
+## 当前进度
-- [x] Setup Minecraft VR
-- [x] Setup the pack
-- [ ] Edit the models
+- [x] 配置Minecraft VR环境
+- [x] 设置资源包
+- [ ] 编辑模型
-
+
\ No newline at end of file
diff --git a/docs/wiki/world-generation/biome-tags.md b/docs/wiki/world-generation/biome-tags.md
index d181343e..cda37e3a 100644
--- a/docs/wiki/world-generation/biome-tags.md
+++ b/docs/wiki/world-generation/biome-tags.md
@@ -1,166 +1,174 @@
---
-title: Biome Tags
-category: Documentation
+title: 生物群系标签
+category: 文档
mentions:
- MedicalJewel105
---
-This page was created with [Wiki Content Generator](https://github.com/Bedrock-OSS/bedrock-wiki-content-generator). If there are issues, contact us on [Bedrock OSS](https://discord.gg/XjV87YN) Discord server.
- *Last updated on 08 August 2023*
+本文档由 [Wiki内容生成器](https://github.com/Bedrock-OSS/bedrock-wiki-content-generator) 创建。如有问题,请联系 [Bedrock OSS](https://discord.gg/XjV87YN) Discord 服务器。
+*最后更新于2023年8月8日*
-## Biome tag per Biome
+# 生物群系标签
-| Biome | Biome Tags |
-| -------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
-| bamboo_jungle | animal, bamboo, jungle, monster, overworld |
-| bamboo_jungle_hills | animal, bamboo, hills, jungle, monster, overworld |
-| basalt_deltas | nether, basalt_deltas, spawn_many_magma_cubes, spawn_ghast |
-| beach | beach, monster, overworld, warm |
-| birch_forest | animal, birch, forest, monster, overworld, bee_habitat |
-| birch_forest_hills | animal, birch, forest, hills, monster, overworld, bee_habitat |
-| birch_forest_hills_mutated | animal, birch, forest, hills, monster, mutated, overworld_generation |
-| birch_forest_mutated | animal, birch, forest, monster, mutated, bee_habitat, overworld_generation |
-| cold_beach | beach, cold, monster, overworld |
-| cold_ocean | cold, monster, ocean, overworld |
-| cold_taiga | animal, cold, forest, monster, overworld, taiga |
-| cold_taiga_hills | animal, cold, forest, hills, monster, overworld, taiga |
-| cold_taiga_mutated | animal, cold, forest, monster, mutated, taiga, overworld_generation |
-| crimson_forest | nether, netherwart_forest, crimson_forest, spawn_few_zombified_piglins, spawn_piglin |
-| deep_cold_ocean | cold, deep, monster, ocean, overworld |
-| deep_frozen_ocean | deep, frozen, monster, ocean, overworld |
-| deep_lukewarm_ocean | deep, lukewarm, monster, ocean, overworld |
-| deep_ocean | deep, monster, ocean, overworld |
-| deep_warm_ocean | deep, monster, ocean, overworld, warm |
-| desert | desert, monster, overworld |
-| desert_hills | desert, hills, monster, overworld |
-| desert_mutated | desert, monster, mutated, overworld_generation |
-| dripstone_caves | caves, overworld, dripstone_caves, monster |
-| extreme_hills | animal, extreme_hills, monster, overworld |
-| extreme_hills_edge | animal, edge, extreme_hills, monster, mountain, overworld |
-| extreme_hills_mutated | animal, extreme_hills, monster, mutated, overworld |
-| extreme_hills_plus_trees | animal, extreme_hills, forest, monster, mountain, overworld |
-| extreme_hills_plus_trees_mutated | animal, extreme_hills, forest, monster, mutated, overworld |
-| flower_forest | flower_forest, monster, mutated, overworld, bee_habitat |
-| forest | animal, forest, monster, overworld, bee_habitat |
-| forest_hills | animal, hills, monster, overworld, forest, bee_habitat |
-| frozen_ocean | frozen, monster, ocean, overworld |
-| frozen_peaks | mountains, monster, overworld, frozen, frozen_peaks |
-| frozen_river | frozen, overworld, river |
-| grove | mountains, monster, overworld, grove |
-| hell | nether, nether_wastes, spawn_magma_cubes, spawn_zombified_piglin, spawn_few_piglins, spawn_ghast, spawn_endermen |
-| ice_mountains | frozen, ice, mountain, overworld |
-| ice_plains | frozen, ice, ice_plains, overworld |
-| ice_plains_spikes | frozen, ice_plains, monster, mutated, overworld |
-| jagged_peaks | mountains, monster, overworld, frozen, jagged_peaks |
-| jungle | animal, jungle, monster, overworld, rare |
-| jungle_edge | animal, edge, jungle, monster, overworld |
-| jungle_edge_mutated | animal, edge, jungle, monster, mutated, overworld_generation |
-| jungle_hills | animal, hills, jungle, monster, overworld |
-| jungle_mutated | animal, jungle, monster, mutated, overworld_generation |
-| legacy_frozen_ocean | frozen, ocean, overworld |
-| lukewarm_ocean | lukewarm, monster, ocean, overworld |
-| lush_caves | caves, lush_caves, overworld, monster |
-| meadow | mountains, monster, overworld, meadow, bee_habitat |
-| mega_taiga | animal, forest, mega, monster, overworld, rare, taiga |
-| mega_taiga_hills | animal, forest, hills, mega, monster, overworld, taiga |
-| mesa | mesa, monster, overworld |
-| mesa_bryce | animal, mesa, monster, mutated, overworld |
-| mesa_plateau | mesa, monster, overworld, plateau, rare |
-| mesa_plateau_mutated | mesa, monster, mutated, overworld, plateau, stone |
-| mesa_plateau_stone | mesa, monster, overworld, plateau, rare, stone |
-| mesa_plateau_stone_mutated | mesa, monster, mutated, overworld, plateau |
-| mushroom_island | mooshroom_island, overworld |
-| mushroom_island_shore | mooshroom_island, overworld, shore |
-| ocean | monster, ocean, overworld |
-| plains | animal, monster, overworld, plains, bee_habitat |
-| redwood_taiga_hills_mutated | animal, forest, hills, mega, monster, mutated, taiga, overworld_generation |
-| redwood_taiga_mutated | animal, forest, mega, monster, mutated, overworld, taiga |
-| river | overworld, river |
-| roofed_forest | animal, forest, monster, no_legacy_worldgen, overworld, roofed |
-| roofed_forest_mutated | animal, forest, monster, mutated, roofed, overworld_generation |
-| savanna | animal, monster, overworld, savanna |
-| savanna_mutated | animal, monster, mutated, overworld, savanna |
-| savanna_plateau | animal, monster, overworld, plateau, savanna |
-| savanna_plateau_mutated | animal, monster, mutated, overworld, plateau, savanna |
-| snowy_slopes | mountains, monster, overworld, snowy_slopes, frozen |
-| soulsand_valley | nether, soulsand_valley, spawn_ghast, spawn_endermen |
-| stone_beach | beach, monster, overworld, stone |
-| stony_peaks | mountains, monster, overworld |
-| sunflower_plains | animal, monster, mutated, overworld, plains, bee_habitat |
-| swampland | animal, monster, overworld, swamp |
-| swampland_mutated | animal, monster, mutated, swamp, overworld_generation |
-| taiga | animal, forest, monster, overworld, taiga |
-| taiga_hills | animal, forest, hills, monster, overworld, taiga |
-| taiga_mutated | animal, forest, monster, mutated, taiga, overworld_generation |
-| the_end | the_end |
-| warm_ocean | monster, ocean, overworld, warm |
-| warped_forest | nether, netherwart_forest, warped_forest, spawn_endermen |
+
-## Biome per Biome Tag
+## 按生物群系列出标签
-| Biome Tag | Biomes |
-| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| animal | bamboo_jungle, bamboo_jungle_hills, birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_taiga, cold_taiga_hills, cold_taiga_mutated, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, forest, forest_hills, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated, mega_taiga, mega_taiga_hills, mesa_bryce, plains, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, sunflower_plains, swampland, swampland_mutated, taiga, taiga_hills, taiga_mutated |
-| bamboo | bamboo_jungle, bamboo_jungle_hills |
-| basalt_deltas | basalt_deltas |
-| beach | beach, cold_beach, stone_beach |
-| bee_habitat | birch_forest, birch_forest_hills, birch_forest_mutated, flower_forest, forest, forest_hills, meadow, plains, sunflower_plains |
-| birch | birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated |
-| caves | dripstone_caves, lush_caves |
-| cold | cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, cold_taiga_mutated, deep_cold_ocean |
-| crimson_forest | crimson_forest |
-| deep | deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean |
-| desert | desert, desert_hills, desert_mutated |
-| dripstone_caves | dripstone_caves |
-| edge | extreme_hills_edge, jungle_edge, jungle_edge_mutated |
-| extreme_hills | extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated |
-| flower_forest | flower_forest |
-| forest | birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_taiga, cold_taiga_hills, cold_taiga_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, forest, forest_hills, mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, taiga, taiga_hills, taiga_mutated |
-| frozen | deep_frozen_ocean, frozen_ocean, frozen_peaks, frozen_river, ice_mountains, ice_plains, ice_plains_spikes, jagged_peaks, legacy_frozen_ocean, snowy_slopes |
-| frozen_peaks | frozen_peaks |
-| grove | grove |
-| hills | bamboo_jungle_hills, birch_forest_hills, birch_forest_hills_mutated, cold_taiga_hills, desert_hills, forest_hills, jungle_hills, mega_taiga_hills, redwood_taiga_hills_mutated, taiga_hills |
-| ice | ice_mountains, ice_plains |
-| ice_plains | ice_plains, ice_plains_spikes |
-| jagged_peaks | jagged_peaks |
-| jungle | bamboo_jungle, bamboo_jungle_hills, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated |
-| lukewarm | deep_lukewarm_ocean, lukewarm_ocean |
-| lush_caves | lush_caves |
-| meadow | meadow |
-| mega | mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated |
-| mesa | mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated |
-| monster | bamboo_jungle, bamboo_jungle_hills, beach, birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, cold_taiga_mutated, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, desert, desert_hills, desert_mutated, dripstone_caves, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, flower_forest, forest, forest_hills, frozen_ocean, frozen_peaks, grove, ice_plains_spikes, jagged_peaks, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated, lukewarm_ocean, lush_caves, meadow, mega_taiga, mega_taiga_hills, mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, ocean, plains, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, snowy_slopes, stone_beach, stony_peaks, sunflower_plains, swampland, swampland_mutated, taiga, taiga_hills, taiga_mutated, warm_ocean |
-| mooshroom_island | mushroom_island, mushroom_island_shore |
-| mountain | extreme_hills_edge, extreme_hills_plus_trees, ice_mountains |
-| mountains | frozen_peaks, grove, jagged_peaks, meadow, snowy_slopes, stony_peaks |
-| mutated | birch_forest_hills_mutated, birch_forest_mutated, cold_taiga_mutated, desert_mutated, extreme_hills_mutated, extreme_hills_plus_trees_mutated, flower_forest, ice_plains_spikes, jungle_edge_mutated, jungle_mutated, mesa_bryce, mesa_plateau_mutated, mesa_plateau_stone_mutated, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest_mutated, savanna_mutated, savanna_plateau_mutated, sunflower_plains, swampland_mutated, taiga_mutated |
-| nether | basalt_deltas, crimson_forest, hell, soulsand_valley, warped_forest |
-| nether_wastes | hell |
-| netherwart_forest | crimson_forest, warped_forest |
-| no_legacy_worldgen | roofed_forest |
-| ocean | cold_ocean, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, frozen_ocean, legacy_frozen_ocean, lukewarm_ocean, ocean, warm_ocean |
-| overworld | bamboo_jungle, bamboo_jungle_hills, beach, birch_forest, birch_forest_hills, cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, desert, desert_hills, dripstone_caves, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, flower_forest, forest, forest_hills, frozen_ocean, frozen_peaks, frozen_river, grove, ice_mountains, ice_plains, ice_plains_spikes, jagged_peaks, jungle, jungle_edge, jungle_hills, legacy_frozen_ocean, lukewarm_ocean, lush_caves, meadow, mega_taiga, mega_taiga_hills, mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, mushroom_island, mushroom_island_shore, ocean, plains, redwood_taiga_mutated, river, roofed_forest, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, snowy_slopes, stone_beach, stony_peaks, sunflower_plains, swampland, taiga, taiga_hills, warm_ocean |
-| overworld_generation | birch_forest_hills_mutated, birch_forest_mutated, cold_taiga_mutated, desert_mutated, jungle_edge_mutated, jungle_mutated, redwood_taiga_hills_mutated, roofed_forest_mutated, swampland_mutated, taiga_mutated |
-| plains | plains, sunflower_plains |
-| plateau | mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, savanna_plateau, savanna_plateau_mutated |
-| rare | jungle, mega_taiga, mesa_plateau, mesa_plateau_stone |
-| river | frozen_river, river |
-| roofed | roofed_forest, roofed_forest_mutated |
-| savanna | savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated |
-| shore | mushroom_island_shore |
-| snowy_slopes | snowy_slopes |
-| soulsand_valley | soulsand_valley |
-| spawn_endermen | hell, soulsand_valley, warped_forest |
-| spawn_few_piglins | hell |
-| spawn_few_zombified_piglins | crimson_forest |
-| spawn_ghast | basalt_deltas, hell, soulsand_valley |
-| spawn_magma_cubes | hell |
-| spawn_many_magma_cubes | basalt_deltas |
-| spawn_piglin | crimson_forest |
-| spawn_zombified_piglin | hell |
-| stone | mesa_plateau_mutated, mesa_plateau_stone, stone_beach |
-| swamp | swampland, swampland_mutated |
-| taiga | cold_taiga, cold_taiga_hills, cold_taiga_mutated, mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated, taiga, taiga_hills, taiga_mutated |
-| the_end | the_end |
-| warm | beach, deep_warm_ocean, warm_ocean |
-| warped_forest | warped_forest |
+| 生物群系名称 | 所属标签 |
+| ---------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| bamboo_jungle | animal(动物生成), bamboo(竹林), jungle(丛林), monster(怪物生成), overworld(主世界) |
+| bamboo_jungle_hills | animal, bamboo, hills(丘陵), jungle, monster, overworld |
+| basalt_deltas | nether(下界), basalt_deltas(玄武岩三角洲), spawn_many_magma_cubes(大量岩浆怪生成), spawn_ghast(恶魂生成) |
+| beach | beach(海滩), monster, overworld, warm(温暖气候) |
+| birch_forest | animal, birch(桦木), forest(森林), monster, overworld, bee_habitat(蜜蜂栖息地) |
+| birch_forest_hills | animal, birch, forest, hills, monster, overworld, bee_habitat |
+| birch_forest_hills_mutated | animal, birch, forest, hills, monster, mutated(变异), overworld_generation(主世界生成) |
+| birch_forest_mutated | animal, birch, forest, monster, mutated, bee_habitat, overworld_generation |
+| cold_beach | beach, cold(寒冷气候), monster, overworld |
+| cold_ocean | cold, monster, ocean(海洋), overworld |
+| cold_taiga | animal, cold, forest, monster, overworld, taiga(针叶林) |
+| cold_taiga_hills | animal, cold, forest, hills, monster, overworld, taiga |
+| cold_taiga_mutated | animal, cold, forest, monster, mutated, taiga, overworld_generation |
+| crimson_forest | nether, netherwart_forest(下界疣森林), crimson_forest(绯红森林), spawn_few_zombified_piglins(少量僵尸猪灵生成), spawn_piglin(猪灵生成) |
+| deep_cold_ocean | cold, deep(深海), monster, ocean, overworld |
+| deep_frozen_ocean | deep, frozen(冰冻), monster, ocean, overworld |
+| deep_lukewarm_ocean | deep, lukewarm(温水), monster, ocean, overworld |
+| deep_ocean | deep, monster, ocean, overworld |
+| deep_warm_ocean | deep, monster, ocean, overworld, warm |
+| desert | desert(沙漠), monster, overworld |
+| desert_hills | desert, hills, monster, overworld |
+| desert_mutated | desert, monster, mutated, overworld_generation |
+| dripstone_caves | caves(洞穴), overworld, dripstone_caves(溶洞), monster |
+| extreme_hills | animal, extreme_hills(峭壁), monster, overworld |
+| extreme_hills_edge | animal, edge(边缘), extreme_hills, monster, mountain(山地), overworld |
+| extreme_hills_mutated | animal, extreme_hills, monster, mutated, overworld |
+| extreme_hills_plus_trees | animal, extreme_hills, forest, monster, mountain, overworld |
+| extreme_hills_plus_trees_mutated | animal, extreme_hills, forest, monster, mutated, overworld |
+| flower_forest | flower_forest(繁花森林), monster, mutated, overworld, bee_habitat |
+| forest | animal, forest, monster, overworld, bee_habitat |
+| forest_hills | animal, hills, monster, overworld, forest, bee_habitat |
+| frozen_ocean | frozen, monster, ocean, overworld |
+| frozen_peaks | mountains(山脉), monster, overworld, frozen, frozen_peaks(冰封山峰) |
+| frozen_river | frozen, overworld, river(河流) |
+| grove | mountains, monster, overworld, grove(雪林) |
+| hell | nether, nether_wastes(下界荒地), spawn_magma_cubes(岩浆怪生成), spawn_zombified_piglin(僵尸猪灵生成), spawn_few_piglins(少量猪灵生成), spawn_ghast, spawn_endermen(末影人生成) |
+| ice_mountains | frozen, ice(冰原), mountain, overworld |
+| ice_plains | frozen, ice, ice_plains(冰原), overworld |
+| ice_plains_spikes | frozen, ice_plains, monster, mutated, overworld |
+| jagged_peaks | mountains, monster, overworld, frozen, jagged_peaks(尖峭山峰) |
+| jungle | animal, jungle, monster, overworld, rare(稀有) |
+| jungle_edge | animal, edge, jungle, monster, overworld |
+| jungle_edge_mutated | animal, edge, jungle, monster, mutated, overworld_generation |
+| jungle_hills | animal, hills, jungle, monster, overworld |
+| jungle_mutated | animal, jungle, monster, mutated, overworld_generation |
+| legacy_frozen_ocean | frozen, ocean, overworld |
+| lukewarm_ocean | lukewarm, monster, ocean, overworld |
+| lush_caves | caves, lush_caves(繁茂洞穴), overworld, monster |
+| meadow | mountains, monster, overworld, meadow(草甸), bee_habitat |
+| mega_taiga | animal, forest, mega(巨型), monster, overworld, rare, taiga |
+| mega_taiga_hills | animal, forest, hills, mega, monster, overworld, taiga |
+| mesa | mesa(平顶山), monster, overworld |
+| mesa_bryce | animal, mesa, monster, mutated, overworld |
+| mesa_plateau | mesa, monster, overworld, plateau(高原), rare |
+| mesa_plateau_mutated | mesa, monster, mutated, overworld, plateau, stone(石质) |
+| mesa_plateau_stone | mesa, monster, overworld, plateau, rare, stone |
+| mesa_plateau_stone_mutated | mesa, monster, mutated, overworld, plateau |
+| mushroom_island | mooshroom_island(蘑菇岛), overworld |
+| mushroom_island_shore | mooshroom_island, overworld, shore(海岸) |
+| ocean | monster, ocean, overworld |
+| plains | animal, monster, overworld, plains(平原), bee_habitat |
+| redwood_taiga_hills_mutated | animal, forest, hills, mega, monster, mutated, taiga, overworld_generation |
+| redwood_taiga_mutated | animal, forest, mega, monster, mutated, overworld, taiga |
+| river | overworld, river |
+| roofed_forest | animal, forest, monster, no_legacy_worldgen(非旧版地形), overworld, roofed(黑森林) |
+| roofed_forest_mutated | animal, forest, monster, mutated, roofed, overworld_generation |
+| savanna | animal, monster, overworld, savanna(热带草原) |
+| savanna_mutated | animal, monster, mutated, overworld, savanna |
+| savanna_plateau | animal, monster, overworld, plateau, savanna |
+| savanna_plateau_mutated | animal, monster, mutated, overworld, plateau, savanna |
+| snowy_slopes | mountains, monster, overworld, snowy_slopes(积雪坡地), frozen |
+| soulsand_valley | nether, soulsand_valley(灵魂沙峡谷), spawn_ghast, spawn_endermen |
+| stone_beach | beach, monster, overworld, stone |
+| stony_peaks | mountains, monster, overworld |
+| sunflower_plains | animal, monster, mutated, overworld, plains, bee_habitat |
+| swampland | animal, monster, overworld, swamp(沼泽) |
+| swampland_mutated | animal, monster, mutated, swamp, overworld_generation |
+| taiga | animal, forest, monster, overworld, taiga |
+| taiga_hills | animal, forest, hills, monster, overworld, taiga |
+| taiga_mutated | animal, forest, monster, mutated, taiga, overworld_generation |
+| the_end | the_end(末地) |
+| warm_ocean | monster, ocean, overworld, warm |
+| warped_forest | nether, netherwart_forest, warped_forest(诡异森林), spawn_endermen |
+
+## 按标签列出生物群系
+
+| 标签名称 | 包含生物群系 |
+| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| animal | bamboo_jungle, bamboo_jungle_hills, birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_taiga, cold_taiga_hills, cold_taiga_mutated, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, forest, forest_hills, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated, mega_taiga, mega_taiga_hills, mesa_bryce, plains, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, sunflower_plains, swampland, swampland_mutated, taiga, taiga_hills, taiga_mutated |
+| bamboo | bamboo_jungle, bamboo_jungle_hills |
+| basalt_deltas | basalt_deltas |
+| beach | beach, cold_beach, stone_beach |
+| bee_habitat | birch_forest, birch_forest_hills, birch_forest_mutated, flower_forest, forest, forest_hills, meadow, plains, sunflower_plains |
+| birch | birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated |
+| caves | dripstone_caves, lush_caves |
+| cold | cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, cold_taiga_mutated, deep_cold_ocean |
+| crimson_forest | crimson_forest |
+| deep | deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean |
+| desert | desert, desert_hills, desert_mutated |
+| dripstone_caves | dripstone_caves |
+| edge | extreme_hills_edge, jungle_edge, jungle_edge_mutated |
+| extreme_hills | extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated |
+| flower_forest | flower_forest |
+| forest | birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_taiga, cold_taiga_hills, cold_taiga_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, forest, forest_hills, mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, taiga, taiga_hills, taiga_mutated |
+| frozen | deep_frozen_ocean, frozen_ocean, frozen_peaks, frozen_river, ice_mountains, ice_plains, ice_plains_spikes, jagged_peaks, legacy_frozen_ocean, snowy_slopes |
+| frozen_peaks | frozen_peaks |
+| grove | grove |
+| hills | bamboo_jungle_hills, birch_forest_hills, birch_forest_hills_mutated, cold_taiga_hills, desert_hills, forest_hills, jungle_hills, mega_taiga_hills, redwood_taiga_hills_mutated, taiga_hills |
+| ice | ice_mountains, ice_plains |
+| ice_plains | ice_plains, ice_plains_spikes |
+| jagged_peaks | jagged_peaks |
+| jungle | bamboo_jungle, bamboo_jungle_hills, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated |
+| lukewarm | deep_lukewarm_ocean, lukewarm_ocean |
+| lush_caves | lush_caves |
+| meadow | meadow |
+| mega | mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated |
+| mesa | mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated |
+| monster | bamboo_jungle, bamboo_jungle_hills, beach, birch_forest, birch_forest_hills, birch_forest_hills_mutated, birch_forest_mutated, cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, cold_taiga_mutated, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, desert, desert_hills, desert_mutated, dripstone_caves, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, flower_forest, forest, forest_hills, frozen_ocean, frozen_peaks, grove, ice_plains_spikes, jagged_peaks, jungle, jungle_edge, jungle_edge_mutated, jungle_hills, jungle_mutated, lukewarm_ocean, lush_caves, meadow, mega_taiga, mega_taiga_hills, mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, ocean, plains, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest, roofed_forest_mutated, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, snowy_slopes, stone_beach, stony_peaks, sunflower_plains, swampland, swampland_mutated, taiga, taiga_hills, taiga_mutated, warm_ocean |
+| mooshroom_island | mushroom_island, mushroom_island_shore |
+| mountain | extreme_hills_edge, extreme_hills_plus_trees, ice_mountains |
+| mountains | frozen_peaks, grove, jagged_peaks, meadow, snowy_slopes, stony_peaks |
+| mutated | birch_forest_hills_mutated, birch_forest_mutated, cold_taiga_mutated, desert_mutated, extreme_hills_mutated, extreme_hills_plus_trees_mutated, flower_forest, ice_plains_spikes, jungle_edge_mutated, jungle_mutated, mesa_bryce, mesa_plateau_mutated, mesa_plateau_stone_mutated, redwood_taiga_hills_mutated, redwood_taiga_mutated, roofed_forest_mutated, savanna_mutated, savanna_plateau_mutated, sunflower_plains, swampland_mutated, taiga_mutated |
+| nether | basalt_deltas, crimson_forest, hell, soulsand_valley, warped_forest |
+| nether_wastes | hell |
+| netherwart_forest | crimson_forest, warped_forest |
+| no_legacy_worldgen | roofed_forest |
+| ocean | cold_ocean, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, frozen_ocean, legacy_frozen_ocean, lukewarm_ocean, ocean, warm_ocean |
+| overworld | bamboo_jungle, bamboo_jungle_hills, beach, birch_forest, birch_forest_hills, cold_beach, cold_ocean, cold_taiga, cold_taiga_hills, deep_cold_ocean, deep_frozen_ocean, deep_lukewarm_ocean, deep_ocean, deep_warm_ocean, desert, desert_hills, dripstone_caves, extreme_hills, extreme_hills_edge, extreme_hills_mutated, extreme_hills_plus_trees, extreme_hills_plus_trees_mutated, flower_forest, forest, forest_hills, frozen_ocean, frozen_peaks, frozen_river, grove, ice_mountains, ice_plains, ice_plains_spikes, jagged_peaks, jungle, jungle_edge, jungle_hills, legacy_frozen_ocean, lukewarm_ocean, lush_caves, meadow, mega_taiga, mega_taiga_hills, mesa, mesa_bryce, mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, mushroom_island, mushroom_island_shore, ocean, plains, redwood_taiga_mutated, river, roofed_forest, savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated, snowy_slopes, stone_beach, stony_peaks, sunflower_plains, swampland, taiga, taiga_hills, warm_ocean |
+| overworld_generation | birch_forest_hills_mutated, birch_forest_mutated, cold_taiga_mutated, desert_mutated, jungle_edge_mutated, jungle_mutated, redwood_taiga_hills_mutated, roofed_forest_mutated, swampland_mutated, taiga_mutated |
+| plains | plains, sunflower_plains |
+| plateau | mesa_plateau, mesa_plateau_mutated, mesa_plateau_stone, mesa_plateau_stone_mutated, savanna_plateau, savanna_plateau_mutated |
+| rare | jungle, mega_taiga, mesa_plateau, mesa_plateau_stone |
+| river | frozen_river, river |
+| roofed | roofed_forest, roofed_forest_mutated |
+| savanna | savanna, savanna_mutated, savanna_plateau, savanna_plateau_mutated |
+| shore | mushroom_island_shore |
+| snowy_slopes | snowy_slopes |
+| soulsand_valley | soulsand_valley |
+| spawn_endermen | hell, soulsand_valley, warped_forest |
+| spawn_few_piglins | hell |
+| spawn_few_zombified_piglins | crimson_forest |
+| spawn_ghast | basalt_deltas, hell, soulsand_valley |
+| spawn_magma_cubes | hell |
+| spawn_many_magma_cubes | basalt_deltas |
+| spawn_piglin | crimson_forest |
+| spawn_zombified_piglin | hell |
+| stone | mesa_plateau_mutated, mesa_plateau_stone, stone_beach |
+| swamp | swampland, swampland_mutated |
+| taiga | cold_taiga, cold_taiga_hills, cold_taiga_mutated, mega_taiga, mega_taiga_hills, redwood_taiga_hills_mutated, redwood_taiga_mutated, taiga, taiga_hills, taiga_mutated |
+| the_end | the_end |
+| warm | beach, deep_warm_ocean, warm_ocean |
+| warped_forest | warped_forest |
+
+::: tip 格式说明
+本表格中部分标签后标注了中文解释(如`animal(动物生成)`),这是为了便于理解添加的注释,实际标签名称仍为英文形式
+:::
\ No newline at end of file
diff --git a/docs/wiki/world-generation/custom-ores.md b/docs/wiki/world-generation/custom-ores.md
index 1edfe1b9..dc3266ec 100644
--- a/docs/wiki/world-generation/custom-ores.md
+++ b/docs/wiki/world-generation/custom-ores.md
@@ -1,6 +1,6 @@
---
-title: Generating Custom Ores
-category: Tutorials
+title: 生成自定义矿物
+category: 巧思案例
tags:
- experimental
mentions:
@@ -10,34 +10,37 @@ mentions:
- Chikorita-Lover
---
-`ore_feature`'s are basic but important features! They can form clusters of blocks by replacing blocks where they are generated. This tutorial will show you how to make mineral ores that naturally generate.
+# 生成自定义矿物
-The use of features and feature rules requires Creation of Custom Biomes to be enabled in your world settings. If your block doesn't generate, make sure it's enabled!
+
+
+`矿石特征`是基础但重要的特性!它们通过替换生成位置的方块来形成方块簇。本教程将展示如何制作自然生成的矿物矿石。
+
+使用特征和特征规则需要在世界设置中启用自定义生物群系功能。如果方块未生成,请确保已启用该选项!
:::tip
-For this tutorial, I'll be using 2 custom blocks, Titanite Ore and Deepslate Titanite Ore. For how to make custom blocks, visit the [Blocks Intro](/blocks/blocks-intro) page.
+本教程将使用两种自定义方块:钛铁矿和深板岩钛铁矿。关于如何制作自定义方块,请访问[方块基础](/wiki/blocks/blocks-intro)页面。
:::
-## The Feature File
+## 特征文件
-BP/features/titanite_ore_feature.json
-
-```json
+::: code-group
+```json [BP/features/titanite_ore_feature.json]
{
"format_version": "1.17.0",
"minecraft:ore_feature": {
"description": {
"identifier": "wiki:titanite_ore_feature"
},
- "count": 8, // Placement attempts
+ "count": 8, // 尝试放置次数
"replace_rules": [
{
- // Replace all stone variants (andesite, granite, and diorite) with titanite ore
+ // 将所有石质变种(安山岩、花岗岩、闪长岩)替换为钛铁矿
"places_block": "wiki:titanite_ore",
"may_replace": ["minecraft:stone"]
},
{
- // Replace deepslate with deepslate titanite ore
+ // 将深板岩替换为深板岩钛铁矿
"places_block": "wiki:deepslate_titanite_ore",
"may_replace": ["minecraft:deepslate"]
}
@@ -45,23 +48,23 @@ For this tutorial, I'll be using 2 custom blocks, Titanite Ore and Deepslate Tit
}
}
```
+:::
-## The Feature Rule
+## 特征规则
-BP/feature_rules/overworld_underground_titanite_ore_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/overworld_underground_titanite_ore_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:overworld_underground_titanite_ore_feature",
- "places_feature": "wiki:titanite_ore_feature" // Identifier from the feature file
+ "places_feature": "wiki:titanite_ore_feature" // 来自特征文件的标识符
},
"conditions": {
"placement_pass": "underground_pass",
"minecraft:biome_filter": [
- // Scatter the ore throughout the Overworld
+ // 在主世界各处散布矿石
{
"any_of": [
{
@@ -79,17 +82,17 @@ For this tutorial, I'll be using 2 custom blocks, Titanite Ore and Deepslate Tit
]
},
"distribution": {
- "iterations": 10, // Placement attempts of the cluster, not the ore blocks
+ "iterations": 10, // 矿簇的生成尝试次数(非单个矿石方块)
"coordinate_eval_order": "zyx",
"x": {
"distribution": "uniform",
"extent": [0, 16]
},
"y": {
- "distribution": "uniform", // You can use "triangle" to make ores more common in the middle of the extent
+ "distribution": "uniform", // 使用"triangle"可使矿石在高度范围中部更常见
"extent": [
- 0, // Minimum y level for the ore to generate
- 62 // Maximum y level for the ore to generate
+ 0, // 矿石生成的最小高度
+ 62 // 矿石生成的最大高度
]
},
"z": {
@@ -100,17 +103,18 @@ For this tutorial, I'll be using 2 custom blocks, Titanite Ore and Deepslate Tit
}
}
```
+:::
-## Testing
+## 测试验证
-You can look for the ore by exploring caves, but if your ores are rare, you can use commands instead to check if they're generating. Simply place this command into a repeating command block, then fly around:
+可以通过探索洞穴寻找矿石,若矿石稀有度较高,建议使用指令验证生成情况。将以下指令放入循环命令方块中,然后四处飞行:
- `execute @a ~ ~ ~ fill ~8 ~8 ~8 ~-8 ~-8 ~-8 air 0 replace wiki:titanite_ore`
-Stone ores:
+普通石质矿石:

-Deepslate ores:
+深板岩矿石:
-
+
\ No newline at end of file
diff --git a/docs/wiki/world-generation/feature-block-conditions.md b/docs/wiki/world-generation/feature-block-conditions.md
index 2136aa91..10fc7cb6 100644
--- a/docs/wiki/world-generation/feature-block-conditions.md
+++ b/docs/wiki/world-generation/feature-block-conditions.md
@@ -1,72 +1,73 @@
---
-title: Block Conditions for Features
-category: Tutorials
+title: 方块的生成条件
+category: 巧思案例
tags:
- - experimental
+ - 实验性
mentions:
- PavelDobCZ23
- SmokeyStack
- ThomasOrs
---
-Sometimes you might need to place any feature conditionally depending on what blocks are below or above it for example. Not many features have the option to conditionally place them like so, but with a simple trick we can use it on anything we want.
+# 方块的生成条件
+
+
+
+有时你可能需要根据下方或上方的方块条件来放置特定特征。虽然多数生成特征本身不具备条件判断功能,但我们可以通过简单的技巧实现这个需求。
:::tip
-This technique utilizes `aggregate_feature` and `single_block_feature` features. If you want to learn more about those, visit [Feature Types](/world-generation/feature-types) article.
+本技巧利用了 `aggregate_feature` 和 `single_block_feature` 特征。若想了解更多相关内容,请参阅[特征类型](/wiki/world-generation/feature-types)文档。
:::
-## Files
+## 文件结构
-### Features
+### 特征文件
-This feature places a `single_block_feature` which can be specified with the conditions we need for some other feature. The block can be kept there if it doesn't interrupt your desired features, but we will replace it with air in the next feature so that it doesn't cause any issues later on. This feature acts as a "dummy" feature because we only want its condition part but we don't need it to actually place anything.
+这个特征通过 `single_block_feature` 实现条件判断功能。我们可以保留这个占位方块(若不影响后续生成),但后续会将其替换为空气方块以避免干扰。该特征本质上是一个"虚拟"特征,因为我们只需要它的条件判断功能而不需要实际生成方块。
-BP/features/block_condition_feature.json
-
-```json
+::: code-group
+```json [BP/features/block_condition_feature.json]
{
"format_version": "1.18.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "wiki:block_condition_feature"
},
- "places_block": "minecraft:cobblestone", //Any block that isn't in "may_replace" list.
+ "places_block": "minecraft:cobblestone", //任何不在"may_replace"列表中的方块
"enforce_placement_rules": false,
"enforce_survivability_rules": false,
- "may_replace": ["minecraft:air"], //Only blocks the feature is allowed to be placed in.
- "may_attach_to": { //Attachment conditions - what blocks can surround the feature when its being placed
- "bottom": ["minecraft:grass"] //Only blocks the feature can be placed on top of.
+ "may_replace": ["minecraft:air"], //仅允许在特定方块上生成
+ "may_attach_to": { //附着条件 - 特征生成时周围允许存在的方块
+ "bottom": ["minecraft:grass"] //仅允许在草方块上方生成
}
}
}
-//This "dummy" feature will only allow the feature to generate in the air, right above a grass block.
+//这个"虚拟"特征只允许在草方块正上方的空气方块位置生成
```
-This next feature is the one that is going to replace the cobblestone with the original air block that was there, however it can be omitted if you choose a block you actually want there or if it won't cause you any issues later.
+接下来的特征负责将圆石替换回原始空气方块。如果你选择保留占位方块或该方块不会造成干扰,可以省略此步骤。
-BP/features/block_replacement_feature.json
-
-```json
+::: code-group
+```json [BP/features/block_replacement_feature.json]
{
"format_version": "1.18.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "wiki:block_replacement_feature"
},
- "places_block": "minecraft:air", //Replaces the block with another one which doesn't cause us any issue.
+ "places_block": "minecraft:air", //将占位方块替换为无影响的方块
"enforce_placement_rules": false,
"enforce_survivability_rules": false,
- "may_replace": ["minecraft:cobblestone"] //The block that we specified in the previous feature.
+ "may_replace": ["minecraft:cobblestone"] //前一个特征中使用的占位方块
}
}
-//This feature will replace the block with air that originally was there so it won't cause us any issue.
+//此特征将占位方块替换回空气,避免后续生成问题
```
-This is a feature that places the condition "dummy" feature, the feature that gets rid of the "dummy" block placed by the condition and after that the actual features we want to conditionally place. It uses `early_out` with value `first_failure` to make the aggregate stop if the conditional placement fails. It is the feature placed by a feature rule.
+这个聚合特征按顺序执行:先放置条件判断方块,然后替换占位方块,最后生成实际特征。设置 `early_out` 为 `first_failure` 确保任一环节失败时立即终止流程。该特征通过特征规则调用。
-BP/features/aggregate_placement_rock_feature.json
-
-```json
+::: code-group
+```json [BP/features/aggregate_placement_rock_feature.json]
{
"format_version": "1.18.0",
"minecraft:aggregate_feature": {
@@ -74,22 +75,21 @@ This is a feature that places the condition "dummy" feature, the feature that ge
"identifier": "wiki:aggregate_placement_rock_feature"
},
"features": [
- "wiki:block_condition_feature", //Single block feature that is used as "dummy" feature to act as our condition.
- "wiki:block_replacement_feature", //This feature replaces the "dummy" block we used in the feature above to not cause us any issues later.
- //Any feature from this point on is what we actually want to place.
+ "wiki:block_condition_feature", //用于条件判断的虚拟特征
+ "wiki:block_replacement_feature", //清理占位方块的特征
+ //从此处开始添加需要条件生成的实际特征
"wiki:rock_ore_feature"
],
- "early_out": "first_failure" //This makes sure that if the first(or any) feature fails, it will not continue to place anything else in the list.
+ "early_out": "first_failure" //任一特征失败则终止后续生成
}
}
-//This is a feature that places all the features one by one in order and is placed by the feature rule.
+//该聚合特征按顺序执行所有子特征,由特征规则调用
```
-This is the actual feature we want to be conditionally placed. It is `ore_feature` which doesn't have actual condition for us to allow it to only be placed in air and on a grass block, so this technique has helped us achieve that.
+这是需要条件生成的矿石特征示例。由于原生 `ore_feature` 无法直接设置生成条件,本技巧完美解决了这个问题。
-BP/features/rock_ore_feature.json
-
-```json
+::: code-group
+```json [BP/features/rock_ore_feature.json]
{
"format_version": "1.18.0",
"minecraft:ore_feature": {
@@ -115,15 +115,16 @@ This is the actual feature we want to be conditionally placed. It is `ore_featur
}
}
```
-:::tip
-If you want to learn more about ore features, you can visit [Generating Custom Ores](/world-generation/custom-ores) tutorial.
:::
-### Feature Rule
+:::tip
+若想深入了解矿石特征,请参考[自定义矿石生成](/wiki/world-generation/custom-ores)教程。
+:::
-BP/feature_rules/overworld_after_surface_rock_feature.json
+### 特征规则
-```json
+::: code-group
+```json [BP/feature_rules/overworld_after_surface_rock_feature.json]
{
"format_version": "1.18.0",
"minecraft:feature_rules": {
@@ -132,7 +133,7 @@ If you want to learn more about ore features, you can visit [Generating Custom O
"places_feature": "wiki:aggregate_placement_rock_feature"
},
"conditions": {
- //Places the feature in any overworld biome along with features in the after_surface_pass
+ //在主世界生物群系的地表生成阶段后执行
"placement_pass": "after_surface_pass",
"minecraft:biome_filter": [
{
@@ -152,7 +153,7 @@ If you want to learn more about ore features, you can visit [Generating Custom O
]
},
"distribution": {
- //1 in 3 chance to attempt 1 placement in chunk
+ //每个区块有1/3概率尝试生成1次
"scatter_chance": 33,
"iterations": 1,
"coordinate_eval_order": "xzy",
@@ -160,7 +161,7 @@ If you want to learn more about ore features, you can visit [Generating Custom O
"distribution": "uniform",
"extent": [0, 15]
},
- //Places the feature along the heightmap
+ //根据地势高度生成
"y": "q.heightmap(v.worldx,v.worldz)",
"z": {
"distribution": "uniform",
@@ -171,12 +172,12 @@ If you want to learn more about ore features, you can visit [Generating Custom O
}
```
-## Summary
+## 总结
-After reading this tutorial you should be able to use block conditions on any feature you want. This was a very basic example as this can be used for far more complex creations and can be used with any feature.
+通过本教程,你已经掌握了如何为任意特征添加方块生成条件。虽然示例较为基础,但此技巧可扩展应用于复杂场景,兼容所有特征类型。
-Like that we have made a rock feature that can only be placed in air blocks and above grass blocks.
+最终我们实现了一个仅在草方块上方空气位置生成的岩石特征。
-Generation screenshot:
+生成效果截图:
-
+
\ No newline at end of file
diff --git a/docs/wiki/world-generation/heightmap-noise.md b/docs/wiki/world-generation/heightmap-noise.md
index 0a78a53d..fd45daee 100644
--- a/docs/wiki/world-generation/heightmap-noise.md
+++ b/docs/wiki/world-generation/heightmap-noise.md
@@ -1,6 +1,6 @@
---
-title: Heightmap Noise
-category: Tutorials
+title: 高度图噪声
+category: 巧思案例
tags:
- experimental
- tutorial
@@ -9,19 +9,22 @@ mentions:
- SirLich
---
+# 高度图噪声
+
+
+
:::tip
-This tutorial assumes you have a basic understanding of molang, features and feature rules.
+本教程假设您已掌握Molang、特征(feature)及特征规则(feature rule)的基础知识。
:::
-In this tutorial we're gonna see how we can make noise based terrain using the `q.noise` molang query.
+在本教程中,我们将学习如何通过`q.noise` Molang查询实现基于噪声的地形生成。
-## Single Block Feature
+## 单方块特征
-First we will define the single block feature. It will define the block that is going to be generated. For this tutorial I'll use stone.
+首先定义用于生成地形的单方块特征。本教程将使用石头作为示例。
-BP/features/stone_feature.json
-
-```json
+::: code-group
+```json [BP/features/stone_feature.json]
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
@@ -34,14 +37,14 @@ First we will define the single block feature. It will define the block that is
}
}
```
+:::
-## Scatter Feature
+## 散布特征
-The scatter feature is the main feature which we'll be using to generate the terrain.
+散布特征(scatter feature)是地形生成的核心组件。
-BP/features/column.json
-
-```json
+::: code-group
+```json [BP/features/column.json]
{
"format_version": "1.13.0",
"minecraft:scatter_feature": {
@@ -59,20 +62,20 @@ The scatter feature is the main feature which we'll be using to generate the ter
}
}
```
+:::
-Let me explain whats happening in the `iterations`:
-In the iterations we've defined a temp `t.height` in which we've defined our main noise function.
-In `t.height` the value that we're adding first is the base height, basically the height at which the function starts.
-After that we're querying perlin using the `q.noise` query which returns values ranging from -1 to 1 and dividing that by a value which smooths out the function.
-Then we're multiplying the whole function by a value which in simple words is basically the variation in the terrain.
+**迭代参数解析**:
+- 我们通过临时变量`t.height`定义噪声函数
+- `64`是基准高度(函数的起始高度)
+- `q.noise`查询Perlin噪声值(范围-1到1),除以64用于平滑噪声曲线
+- 乘以16控制地形起伏幅度
-So what's happening here is that we are getting values from the `t.height` temp and assigning them to the y extent ranging from -64 to the value thus generating a column. Now this value is going to vary column by column but not in a random way as `q.noise` queryies Perlin noise, meaning the values are relative to each other. So instead of getting values like 64,69,45,100,7,56 we are getting values like 64,65,66,68,69,68,66,65 and so on.
+该逻辑通过`y`参数的取值范围[-64, t.height]生成地形柱体。由于`q.noise`基于Perlin噪声算法,相邻柱体高度呈现渐变效果(如64,65,66,68...),而非随机突变。
-## Feature Rule
+## 特征规则
-BP/feature_rules/column_grid_placement.json
-
-```json
+::: code-group
+```json [BP/feature_rules/column_grid_placement.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -110,7 +113,10 @@ So what's happening here is that we are getting values from the `t.height` temp
}
}
```
+:::
-In this we have set the `iteration` to 256 as the area of a whole chunk is 256 (16x16) to make the columns generate in the whole chunk.
+**关键配置**:
+- `iterations`设为256以覆盖整个区块(16x16区域)
+- `fixed_grid`分布模式确保柱体均匀排列
-And our custom noise based terrain is finished! Feel free to mess with the values.
+至此,基于噪声的自定义地形已构建完成!您可以自由调整参数进行地形形态实验。
\ No newline at end of file
diff --git a/docs/wiki/world-generation/index.md b/docs/wiki/world-generation/index.md
index cc5cae1b..0d3a1fba 100644
--- a/docs/wiki/world-generation/index.md
+++ b/docs/wiki/world-generation/index.md
@@ -1,10 +1,10 @@
---
-title: World Generation
+title: 世界生成器
categories:
- - title: General
+ - title: 基础
color: blue
- - title: Tutorials
+ - title: 巧思案例
color: green
- - title: Documentation
+ - title: 文档
color: red
---
diff --git a/docs/wiki/world-generation/structure-features.md b/docs/wiki/world-generation/structure-features.md
index 0b875f7e..66d3caac 100644
--- a/docs/wiki/world-generation/structure-features.md
+++ b/docs/wiki/world-generation/structure-features.md
@@ -1,6 +1,6 @@
---
-title: Generating Custom Structures
-category: Tutorials
+title: 生成自定义结构
+category: 巧思案例
mentions:
- DerpMcaddon
- SirLich
@@ -8,32 +8,35 @@ tags:
- experimental
---
-Structure feature is one of the most basic feature. It places exported `.mcstructure` file in the world.
-This tutorial will show you how to make:
+# 生成自定义结构
-- Surface structure,
+
-- Underground structure,
+结构特征是游戏世界生成的基础功能之一,用于在游戏中放置导出的`.mcstructure`文件。
+本教程将教你如何生成:
-- Floating structure,
+- 地表结构
-- Underwater structure, and
+- 地下结构
-- Water surface structure
+- 浮空结构
+
+- 水下结构
+
+- 水面结构
:::tip
-For exporting structure on android devices, use this [resource pack](https://mcpedl.com/export-structure-button-android-addon/)
+若要在安卓设备导出结构文件,可使用此[资源包](https://mcpedl.com/export-structure-button-android-addon/)
:::
-Make sure you put the `.mcstructure` file inside of `BP/structures/`!
+请确保将`.mcstructure`文件放置在`BP/structures/`目录下!
-## Surface Structure
+## 地表结构
-### Feature File
+### 特征文件
-BP/features/house_feature.json
-
-```json
+::: code-group
+```json [BP/features/house_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -48,19 +51,19 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
"unburied": {},
"block_intersection": {
"block_allowlist": [
- "minecraft:air" //The structure can only replace air
+ "minecraft:air" //结构只能替换空气方块
]
}
}
}
}
```
+:::
-### Feature Rule
+### 特征规则
-BP/feature_rules/plains_house_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/plains_house_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -82,7 +85,7 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
"extent": [0, 16],
"distribution": "uniform"
},
- "y": "q.heightmap(v.worldx, v.worldz)", //Generates the feature on the highest block on the column
+ "y": "q.heightmap(v.worldx, v.worldz)", //在区块最高点生成结构
"z": {
"extent": [0, 16],
"distribution": "uniform"
@@ -95,16 +98,16 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
}
}
```
+:::

-## Underground Structure
+## 地下结构
-### Feature File
+### 特征文件
-BP/features/bunker_feature.json
-
-```json
+::: code-group
+```json [BP/features/bunker_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -117,7 +120,7 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
"constraints": {
"block_intersection": {
"block_allowlist": [
- "minecraft:air", //Makes the feature only replace air and stone
+ "minecraft:air", //结构只能替换空气和石头
"minecraft:stone"
]
}
@@ -125,12 +128,12 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
}
}
```
+:::
-### Feature Rule
+### 特征规则
-BP/feature_rules/overworld_bunker_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/overworld_bunker_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -154,8 +157,8 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
},
"y": {
"extent": [
- 11,
- 50 //Makes the structure generate between y11 and y50
+ 11, //结构将在y11至y50之间生成
+ 50
],
"distribution": "uniform"
},
@@ -171,16 +174,16 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
}
}
```
+:::

-## Floating Feature
+## 浮空结构
-### Feature File
+### 特征文件
-BP/features/balloon_feature.json
-
-```json
+::: code-group
+```json [BP/features/balloon_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -193,19 +196,19 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
"constraints": {
"block_intersection": {
"block_allowlist": [
- "minecraft:air" //Makes the structure only replace air
+ "minecraft:air" //结构只能替换空气
]
}
}
}
}
```
+:::
-### Feature Rule
+### 特征规则
-BP/feature_rules/overworld_balloon_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/overworld_balloon_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -229,7 +232,7 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
},
"y": {
"extent": [
- 100, //Makes the structure generate from y100 to y200
+ 100, //结构将在y100至y200之间生成
200
],
"distribution": "uniform"
@@ -246,20 +249,20 @@ Make sure you put the `.mcstructure` file inside of `BP/structures/`!
}
}
```
+:::

-## Underwater Structure
+## 水下结构
-::: tip
-For underwater structures, make sure you waterlogged the structure, because Minecraft won't waterlog them automatically!
+:::tip
+对于水下结构,请确保对结构进行水淹处理,因为Minecraft不会自动进行水淹操作!
:::
-### Feature File
+### 特征文件
-BP/features/aqua_temple_feature.json
-
-```json
+::: code-group
+```json [BP/features/aqua_temple_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -272,19 +275,19 @@ For underwater structures, make sure you waterlogged the structure, because Mine
"constraints": {
"block_intersection": {
"block_allowlist": [
- "minecraft:water" //Makes the structure only replace water
+ "minecraft:water" //结构只能替换水方块
]
}
}
}
}
```
+:::
-### Feature Rule
+### 特征规则
-BP/feature_rules/ocean_aqua_temple_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/ocean_aqua_temple_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -306,7 +309,7 @@ For underwater structures, make sure you waterlogged the structure, because Mine
"extent": [0, 16],
"distribution": "uniform"
},
- "y": "q.above_top_solid(v.worldx, v.worldz)", //Places the feature on top of the highest solid block on the column, so it won't place it on the surface of the water
+ "y": "q.above_top_solid(v.worldx, v.worldz)", //将结构放置在最高固体方块顶部,避免生成在水面
"z": {
"extent": [0, 16],
"distribution": "uniform"
@@ -319,16 +322,16 @@ For underwater structures, make sure you waterlogged the structure, because Mine
}
}
```
+:::

-## Water Surface Structure
+## 水面结构
-### Feature File
+### 特征文件
-BP/features/raft_feature.json
-
-```json
+::: code-group
+```json [BP/features/raft_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -341,7 +344,7 @@ For underwater structures, make sure you waterlogged the structure, because Mine
"constraints": {
"block_intersection": {
"block_allowlist": [
- "minecraft:water", //Makes the structure only replace air and water
+ "minecraft:water", //结构只能替换水和空气
"minecraft:air"
]
}
@@ -349,12 +352,12 @@ For underwater structures, make sure you waterlogged the structure, because Mine
}
}
```
+:::
-### Feature Rule
+### 特征规则
-BP/feature_rules/ocean_raft_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/ocean_raft_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -376,7 +379,7 @@ For underwater structures, make sure you waterlogged the structure, because Mine
"extent": [0, 16],
"distribution": "uniform"
},
- "y": 62, //Makes the feature generate only on y62, which is Minecraft water level
+ "y": 62, //结构将在y62(默认水位高度)生成
"z": {
"extent": [0, 16],
"distribution": "uniform"
@@ -389,5 +392,6 @@ For underwater structures, make sure you waterlogged the structure, because Mine
}
}
```
+:::
-
+
\ No newline at end of file
diff --git a/docs/wiki/world-generation/surface-builder.md b/docs/wiki/world-generation/surface-builder.md
index 21e2e63f..3c713ed1 100644
--- a/docs/wiki/world-generation/surface-builder.md
+++ b/docs/wiki/world-generation/surface-builder.md
@@ -1,6 +1,6 @@
---
-title: Generating Patches
-category: Tutorials
+title: 地表补丁生成教程
+category: 巧思案例
mentions:
- DerpMcaddon
- SirLich
@@ -8,19 +8,22 @@ tags:
- experimental
---
-Feature based surface builder is a feature that puts together a collection of blocks that serve to add variety and decoration to the Overworld surface. This tutorial will explain what is needed to create this feature, including size, frequency, generation location, and more!
+# 地表补丁生成教程
-## Single Block Features
+
-Single block features are going to be the base of our surface builder. They will define which blocks we are going to use. For this tutorial I'll be using Coarse Dirt, Podzol and Cobblestone.
+基于特征的地表构建器是一种将多种方块组合生成的功能,用于为主世界地表增添多样性和装饰效果。本教程将详细讲解如何创建这种地表特征,包括尺寸、生成频率、生成位置等参数设置!
-Learn more about single block features [here](/world-generation/feature-types#single-block-features)
+## 单方块特征
-Coarse Dirt File
+单方块特征将作为我们地表构建的基础。它们定义了我们将要使用的具体方块类型。本教程将使用粗泥、灰化土和圆石作为示例。
-BP/features/coarse_dirt_feature.json
+了解更多单方块特征知识[请点击此处](/wiki/world-generation/feature-types#single-block-features)
-```json
+粗泥特征文件
+
+::: code-group
+```json [BP/features/coarse_dirt_feature.json]
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
@@ -28,7 +31,7 @@ Coarse Dirt File
"identifier": "wiki:coarse_dirt_feature"
},
"places_block": {
- //Coarse dirt shares same identifier as dirt, set it using name and states
+ // 粗泥与普通泥土共享相同标识符,需通过名称和状态值指定
"name": "minecraft:dirt",
"states": {
"dirt_type": "coarse"
@@ -37,63 +40,63 @@ Coarse Dirt File
"enforce_survivability_rules": false,
"enforce_placement_rules": false,
"may_replace": [
- "minecraft:grass" //The block can only replace grass
+ "minecraft:grass" // 该方块仅可替换草方块
]
}
}
```
+:::
-Podzol File
+灰化土特征文件
-BP/features/podzol_feature.json
-
-```json
+::: code-group
+```json [BP/features/podzol_feature.json]
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "wiki:podzol_feature"
},
- "places_block": "minecraft:podzol", //Podzol can be defined using direct identifier
+ "places_block": "minecraft:podzol", // 灰化土可直接通过标识符定义
"enforce_survivability_rules": false,
"enforce_placement_rules": false,
"may_replace": [
- "minecraft:grass" //The block can only replace grass
+ "minecraft:grass" // 该方块仅可替换草方块
]
}
}
```
+:::
-Cobblestone File
+圆石特征文件
-BP/features/cobblestone_feature.json
-
-```json
+::: code-group
+```json [BP/features/cobblestone_feature.json]
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "wiki:cobblestone_feature"
},
- "places_block": "minecraft:cobblestone", //Cobblestone can be defined using direct identifier
+ "places_block": "minecraft:cobblestone", // 圆石可直接通过标识符定义
"enforce_survivability_rules": false,
"enforce_placement_rules": false,
"may_replace": [
- "minecraft:grass" //The block can only replace grass
+ "minecraft:grass" // 该方块仅可替换草方块
]
}
}
```
+:::
-## Weighted Random Features
+## 权重随机特征
-Weighted random features are going to be our _randomizer_ to select between each type of blocks.
+权重随机特征将作为我们的_随机选择器_,用于在不同方块类型之间进行概率选择。
-Learn more about weighted random features [here](/world-generation/feature-types#weighted-random-features)
+了解更多权重随机特征知识[请点击此处](/wiki/world-generation/feature-types#weighted-random-features)
-BP/features/select_surface_block_feature.json
-
-```json
+::: code-group
+```json [BP/features/select_surface_block_feature.json]
{
"format_version": "1.13.0",
"minecraft:weighted_random_feature": {
@@ -102,31 +105,31 @@ Learn more about weighted random features [here](/world-generation/feature-types
},
"features": [
[
- "wiki:coarse_dirt_feature", //Coarse dirt weighs 5
+ "wiki:coarse_dirt_feature", // 粗泥权重为5
5
],
[
- "wiki:podzol_feature", //Podzol dirt weighs 3
+ "wiki:podzol_feature", // 灰化土权重为3
3
],
[
- "wiki:cobblestone_feature", //Cobblestone weighs 2
+ "wiki:cobblestone_feature", // 圆石权重为2
2
]
]
}
}
```
+:::
-## Scatter Features
+## 散点特征
-Scatter features are an important part of our surface builder. It will determine the size, shape and number of blocks in one blob.
+散点特征是我们地表构建的重要部分。它将决定单个斑块中方块的数量、形状和分布范围。
-Learn more about scatter features [here](/world-generation/feature-types#scatter-features)
+了解更多散点特征知识[请点击此处](/wiki/world-generation/feature-types#scatter-features)
-BP/features/scatter_surface_block_feature.json
-
-```json
+::: code-group
+```json [BP/features/scatter_surface_block_feature.json]
{
"format_version": "1.13.0",
"minecraft:scatter_feature": {
@@ -143,26 +146,26 @@ Learn more about scatter features [here](/world-generation/feature-types#scatter
"distribution": "gaussian"
},
"y": "q.heightmap(v.worldx, v.worldz) -1",
- "places_feature": "wiki:select_surface_block_feature" //Weighted random feature identifier
+ "places_feature": "wiki:select_surface_block_feature" // 权重随机特征的标识符
}
}
```
+:::
-- `iterations` determine how many blocks will be placed. I'm going to use the Molang `math.random_integer` function to randomize the number of blocks. In this case, it'll be 20 to 25 blocks.
+- `iterations` 决定将放置的方块数量。使用Molang的 `math.random_integer` 函数可实现数量随机化。本示例中将在20到25个方块之间随机
-- `extent` use an array to determine the size of the blob. `[0, 8]` means the size is extended from 0 to 8 blocks. So, our blob would be 8 blocks long both on X and Z axis. **Only use this for X and Z distribution**.
+- `extent` 使用数组决定斑块尺寸。`[0, 8]` 表示斑块从0到8格扩展。因此,我们的斑块在X和Z轴上将延伸8格。**该参数仅适用于X和Z轴分布**
-- `"y": "q.heightmap(v.worldx, v.worldz) -1` means it will put the block on the highest block on the y coordinate -1. So it'll always put the feature on the surface.
+- `"y": "q.heightmap(v.worldx, v.worldz) -1` 表示方块将放置于当前地表最高点的Y坐标-1处,即始终在地表生成
-- `distribution` specifies the type of distribution to use. Available include `Gaussian`, `Inverse Gaussian`, `Uniform`,`Fixed Grid` and `Jittered Grid`
+- `distribution` 指定分布类型。可用选项包括:`Gaussian`(高斯分布)、`Inverse Gaussian`(逆高斯分布)、`Uniform`(均匀分布)、`Fixed Grid`(固定网格)和`Jittered Grid`(抖动网格)
-## Feature Rule
+## 特征规则
-This is the final step for our surface builder. The feature rules for our surface builders are slightly different.
+这是地表构建的最后一步。地表构建器的特征规则设置略有不同。
-BP/feature_rules/overworld_surface_blocks_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/overworld_surface_blocks_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -175,7 +178,7 @@ This is the final step for our surface builder. The feature rules for our surfac
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
- "value": "overworld" //You can change this to whatever biometag you want
+ "value": "overworld" // 可更改为任意生物群系标签
}
},
"distribution": {
@@ -190,7 +193,7 @@ This is the final step for our surface builder. The feature rules for our surfac
"distribution": "uniform"
},
"scatter_chance": {
- //Chance of the blob generating each chunk
+ // 每个区块生成斑块的概率
"numerator": 1,
"denominator": 5
}
@@ -198,5 +201,6 @@ This is the final step for our surface builder. The feature rules for our surfac
}
}
```
+:::
-And our surface builder is done! Feel free to modify and mess around with it!
+至此我们的地表构建器就完成了!欢迎自由调整参数并探索更多可能性!
\ No newline at end of file
diff --git a/docs/wiki/world-generation/world-generation-intro.md b/docs/wiki/world-generation/world-generation-intro.md
index f8688f92..f8eb92d6 100644
--- a/docs/wiki/world-generation/world-generation-intro.md
+++ b/docs/wiki/world-generation/world-generation-intro.md
@@ -1,10 +1,10 @@
---
-title: Intro to World Generation
-category: General
+title: 世界生成入门
+category: 基础
nav_order: 1
tags:
- - guide
- - experimental
+ - 指南
+ - 实验性功能
mentions:
- SirLich
- solvedDev
@@ -16,28 +16,31 @@ mentions:
- SmokeyStack
---
+# 世界生成入门
+
+
+
:::warning
-This page is somewhat out-dated, and contains limited information. For the most up-to-date and comprehensive information, view the other pages in this section.
+本文档部分内容已过时,信息量有限。如需获取最新最全面的信息,请查阅本节其他页面。
:::
-You can change the world's generation via Add-ons. The needed folders in the Behavior pack for these are:
+您可以通过附加包修改世界的生成规则。行为包中需要以下文件夹:
-`structures`, `features`, `feature_rules` and `biomes`. It's quite self-explanatory: you can store your .mcstructure files from (or for) structure blocks in `structures`, biome files in `biomes`, terrain features, like ores, in `features` and the rules for their generation in `feature_rules`. Let's go over adding a custom biome first.
+`structures`(结构)、`features`(特征)、`feature_rules`(特征规则)和 `biomes`(生物群系)。顾名思义:您可以将结构方块生成的.mcstructure文件存放在`structures`中,生物群系文件存放在`biomes`中,矿石等地形特征存放在`features`中,其生成规则则存放在`feature_rules`中。让我们先从添加自定义生物群系开始。
-_Note: it might be easier to create biomes using bridge., a Visual software for Add-on creation (also linked in Links and Contact), since the official Documentation is rather incomplete. You can also generate all example files of vanilla biomes, features and feature rules for reference, like shown here:_
+_注:使用 bridge. 这款可视化附加包创作工具(联系方式见"链接与联系")创建生物群系可能更方便,因为官方文档尚不完善。您也可以生成所有原版生物群系、特征和特征规则的示例文件作为参考,如下图所示:_

-_Generating a coal_ore feature using bridge._
+_使用 bridge. 生成 coal_ore 特征_
-However, bridge. is not required.
+当然,bridge. 并非必需工具。
---
-## Custom Biomes
+## 自定义生物群系
-BP/biomes/cold_biome.json
-
-```json
+::: code-group
+```json [BP/biomes/cold_biome.json]
{
"format_version": "1.13.0",
"minecraft:biome": {
@@ -74,76 +77,71 @@ However, bridge. is not required.
}
```
-- Set `format_version` to 1.13.0: it's the latest biome file version as of the current release.
-- `description` takes only one value: `identifier`. This requires **NO namespace** and **MUST** be the same as the **file's name**.
- (If you do use a namespace, for example `wiki:cold_biome`, the file name needs to only match the id, so it has to remain as `cold_biome.json`.
-- `components` is just what you'd expect: something applied to the biome at default. let's look through them:
-- `minecraft:climate` controls everything climate-wise.
-- `downfall` is how often it'll be raining or snowing. 0.0 is for absolutely no rain (like a desert) and 1.0 should mean constant rain.
-- `temperature` is used to define things like water freezing and rain turning into snow.
+- 设置 `format_version` 为 1.13.0:这是当前版本的最新生物群系文件格式
+- `description` 仅需一个值:`identifier`。此处**不需要命名空间**且**必须**与**文件名**一致
+ (如果使用命名空间,例如 `wiki:cold_biome`,文件名仍需保持为 `cold_biome.json`)
+- `components` 即生物群系的基本属性配置,让我们逐一解析:
+- `minecraft:climate` 控制气候相关参数
+- `downfall` 表示降水频率。0.0 代表无降水(如沙漠),1.0 表示持续降水
+- `temperature` 用于定义水体结冰和降雨转雪等效果
-**You can generate default biome files for reference using bridge.**
+**可使用 bridge. 生成原版生物群系文件作为参考**
-- `overworld_surface` controls blocks generated.
-- `floor_depth` is how deep down lakes and rivers go in blocks.
-- `sea_floor_material` defines the material to be used when generating the river and lake's floor.
-- `foundation_material` is the material to be used approximately between y=5 and y=50. For a desert, for example, it's stone.
-- `sea_material` is the material used as show liquid in lakes, rivers, oceans, etc. For example, in all Overworld biomes, this is set to "minecraft:water".
-- `top_material` defines the material for the highest level. E.g for Plains it's grass.
-- `mid_material` is the layer between 'top' and 'foundation'. For Plains it's dirt.
-- `overworld_height` defines how the Biome will look terrain-wise.
+- `overworld_surface` 控制地形生成材质
+- `floor_depth` 表示湖泊河流的底部深度(方块数)
+- `sea_floor_material` 定义水域底部材质
+- `foundation_material` 用于 y=5 至 y=50 之间的基础岩层(例如沙漠使用石头)
+- `sea_material` 水域液体材质(主世界通常设为 "minecraft:water")
+- `top_material` 表层材质(如草方块用于平原)
+- `mid_material` 中间层材质(如泥土用于平原)
+- `overworld_height` 定义地形高度特征
-DO NOT use both `noise_type` and `noise_params` at the same time. `noise_params` is an array of the top level of noise and the lowest level of noise allowed in the biome.
+不可同时使用 `noise_type` 和 `noise_params`。`noise_params` 是包含噪声最高值和最低值的数组

-_A non-smooth transition between the same biome, generated with noise_params as [0.1, 0,1] and then [1.0, 1.0]._
+_使用 noise_params [0.1, 0.1] 和 [1.0, 1.0] 生成的同生物群系非平滑过渡示例_
-- If you want to use `noise_type`, however, you will be presented with a few pre-generated types of noise. You will probably know how some of them look from the Vanilla game. Here's the list:
+- 若使用 `noise_type`,可选预设值包括:
+`beach, default, extreme, taiga, ocean, mountains, default_mutated, deep_ocean, lowlands, less_extreme, stone_beach, swamp, river, mushroom`
-`beach, default, extreme, taiga, ocean, mountains, default_mutated, deep_ocean, lowlands, less_extreme, stone_beach, swamp, river, mushroom`.
+- `minecraft_world_generation_rules` 是最重要的组件,特别是 `generate_for_climates` 数组。游戏中有三种气候:"warm"、"medium" 和 "cold"。在世界生成时这些气候会随机分布[硬编码]。您可以为每个气候设置生物群系的生成权重。若不设置,默认权重为0,生物群系不会生成。示例中测试时将各气候权重设为100,使该生物群系在主世界广泛生成。正式使用时需调整权重(例如原版沙漠在warm气候中的权重为3)
-- `minecraft_world_generation_rules` is the most important component of all, especially the `generate_for_climates` array. Basically, there are three climates in the game: "warm", "medium" and "cold". They are randomly thrown around every world when it's created [hard-coded]. Now, you can choose how often your custom biome will generate in every specific climate. If you do not provide anything in here, the default value is 0 for every climate, and the biome won't generate. In the example, the **weight** (the smaller the number, the smaller the chance of this biome generating instead of a vanilla one in the climate) for every climate is set to 100 for testing purposes: that makes the biome generate almost everywhere in the Overworld. Once I'm done with testing, however, I'll balance the weight how it's supposed to be. For example, the Vanilla _desert_ has the weight of 3 for warm.
-
-- This component also takes Objects such as: `hills_transformation`, `mutate_transformation`, `shore_transformation`, `river_transformation`, but their meaning is unclear to me. Contributions are always appreciated. Same goes for the `surface_meaterial_adjustments` component.
-
-- And, last but not least, BIOME TAGS! They're very simple, but useful. You can set however many of the vanilla or custom tags you want, by adding them in this format in `components`:
+- 该组件还包含 `hills_transformation`、`mutate_transformation`、`shore_transformation`、`river_transformation` 等参数,具体含义尚不明确。欢迎补充说明。`surface_meaterial_adjustments` 组件同理
+- 最后是生物群系标签!使用方式简单但实用。通过在 `components` 中添加如下格式的标签:
```
"tagName": {}
```
+即可在环境传感器、过滤器、生物群系检测、生成规则等场景中使用该标签
-Then, you can test for your tag in _environment_sensors_, _filters_, _has_biome_ tests, _spawn rules_, and more.
-
-Your custom biome is now complete!
+至此,您的自定义生物群系已创建完成!
---
-## Features and Feature Rules
+## 特征与特征规则
-Note: in v.1.15Beta, it is possible to use `.mcstructures` from the `structures` folder instead of `features` to generate custom structures with `feature_rules`. More on that after the update arrives.
+注:在 v1.15Beta 中,可使用 `structures` 文件夹中的 `.mcstructures` 配合 `feature_rules` 生成自定义结构。更多详情将在更新发布后补充
-Features and Feature Rules are used to generate everything from ores to grass and flowers, vegetation to granite or clay patches.
-It is even possible to create custom structures using those, but as it is very grindy and will be much easier after the mentioned update, we won't talk about it just yet.
+特征与特征规则用于生成矿石、花草、植被、花岗岩或黏土矿脉等各类地形元素。虽然目前可用其创建自定义结构,但操作繁琐,建议等待后续更新简化流程
-Now, it's worthwhile to mention that the easiest way to generate Custom Structures is this [auto generator](https://machine-builder.itch.io/frg-v2) by [MACHINE_BUILDER](https://www.youtube.com/channel/UC8FBQgo4AWwKFX97h60NKOQ), you should note that this tool has a free version with limited functionality and to enjoy the full functionality use the payware version. However, we'll still learn some other manual feature generation here, because some things like Ores are much more efficient to generate as `ore_feature`s and not `structure_template_feature`s.
+推荐使用 [MACHINE_BUILDER](https://www.youtube.com/channel/UC8FBQgo4AWwKFX97h60NKOQ) 开发的[自动生成工具](https://machine-builder.itch.io/frg-v2)来创建自定义结构。该工具免费版功能有限,完整功能需购买专业版。不过我们仍将学习手动创建特征的方法,因为矿石等元素使用 `ore_feature` 比 `structure_template_feature` 更高效
-Let's make our `wiki:blocky` custom block generate as an ore for the tutorial's sake. I'll do it the easy way, like this:
+让我们以生成自定义方块 `wiki:blocky` 的矿石为例:
-1. Open _bridge._, choose your Add-on.
-1. _Add new file>features>diamond_ore and Add new file>feature_rules>diamond_ore_.
-1. Now I'll save the files and open them in my Code Editor and make the necessary modifications.
+1. 打开 bridge. 选择附加包
+1. 新建文件 > features > diamond_ore 和 feature_rules > diamond_ore
+1. 保存文件后用代码编辑器进行必要修改
-_You could've easily just written the files from scratch or copied them from somewhere without using bridge. in case you are having trouble installing it. **One place to find the Vanilla Files are the [Example Packs](https://www.minecraft.net/en-us/addons), another, a more complete one is [bridge.'s repository](https://github.com/bridge.-core/bridge../tree/master/static/vanilla)**._
+_若无安装 bridge.,也可手动创建或从[示例包](https://www.minecraft.net/en-us/addons)或 [bridge. 仓库](https://github.com/bridge.-core/bridge../tree/master/static/vanilla)获取原版文件_
-## Features
+## 特征
-Features are located in `BP/features` and are basically a group of blocks stored in the game's files, which can be placed with a _feature_rule_. The **file name** of a _feature_ **must match** the **identifier** as well.
+特征文件位于 `BP/features` 目录,本质上是游戏中可被特征规则放置的区块集合。**文件名**必须与**标识符**匹配
-You can find their Documentation on [bedrock.dev/r/Features](https://bedrock.dev/r/Features)
+完整文档请参考 [bedrock.dev/r/Features](https://bedrock.dev/r/Features)
-BP/features/blocky_ore_feature.json
-
-```json
+::: code-group
+```json [BP/features/blocky_ore_feature.json]
{
"format_version": "1.13.0",
"minecraft:ore_feature": {
@@ -200,19 +198,18 @@ You can find their Documentation on [bedrock.dev/r/Features](https://bedrock.dev
}
```
-- `minecraft_ore_feature` is type of the specific feature that places ores automatically. Each feature type has it's own specific syntax. (There's also `single_block_feature` that places a single block instead of an ore group, etc)
-- `identifier` doesn't require a namespace in this scenario. The namespace is optional, and is not to be added in the filename.
-- `count` is how big the ore "cluster" will be at maximum, or how many actual ore blocks will generate together.
-- `places_block` takes the identifier of the block to be placed as the value.
-- `may_replace` takes all the blocks that the feature can replace as arguments. If it generates over one of the blocks not included in here, the block will remain where it was without being replaced.
+- `minecraft_ore_feature` 是自动生成矿石的特定特征类型。每种特征类型都有独特语法(另有 `single_block_feature` 用于生成单个方块等)
+- `identifier` 此处不需要命名空间。文件名不包含命名空间
+- `count` 表示矿簇的最大方块数
+- `places_block` 设置要生成的方块标识符
+- `may_replace` 列出可被替换的方块类型。遇到未列出的方块时将保留原方块
-## Feature Rules
+## 特征规则
-**Feature Rules** control where and how _features_ (and, in the future, _structures_) are placed.
+**特征规则**控制特征(及未来的结构)的生成位置和方式
-BP/feature_rules/overworld_underground_blocky_ore_feature.json
-
-```json
+::: code-group
+```json [BP/feature_rules/overworld_underground_blocky_ore_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
@@ -260,42 +257,36 @@ You can find their Documentation on [bedrock.dev/r/Features](https://bedrock.dev
```
- `description`
- - `identifier` needs no namespace, but the filename needs to match.
- - `places_feature` takes the identifier of the feature that is controlled by this rule as the value.
+ - `identifier` 不需要命名空间,但文件名需匹配
+ - `places_feature` 设置要控制的特征标识符
- `conditions`
- - `placement_pass` HOW the feature will be passed.
- - `biome_filter` tests for biome tags where the feature will generate, exactly as a spawn rule.
+ - `placement_pass` 控制特征生成阶段
+ - `biome_filter` 通过生物群系标签过滤生成位置(与生成规则类似)
- `distribution`
- - `iterations` basically chance. I set mine to 100 to make it generate everywhere, but for a diamond_ore, this is set to 1.
- - The next four components show in which directions the ore will be 'dragged' towards.
- _Needs more clarification_
+ - `iterations` 生成概率。设为100表示全图生成(钻石矿通常设为1)
+ - 后续参数控制矿脉延伸方向(需要更多说明)
-The easiest way to test wether your ores generated is /fill ~15 ~5 ~15 ~-15 ~-15 ~-15 air 0 replace stone using this command at a low y level. it'll keep everything BUT stone in the selected area, like this:
+测试矿石生成建议在低Y坐标使用指令 `/fill ~15 ~5 ~15 ~-15 ~-15 ~-15 air 0 replace stone`,该指令会清除选定区域内所有石头,保留其他方块:

-And yes, 100 as "iterations" is definitely waaay too much ;)
+显然,将"iterations"设为100确实过量 ;)
-It's a good idea to proceed checking out other feature and feature_rule vanilla files to learn further techniques. However, the ones you were just walked through are enough to create most of what needs to be generated.
+建议通过研究原版特征和特征规则文件来学习更多技巧。不过上文所述内容已能满足大部分生成需求
---
-## Custom Structures
+## 自定义结构
-As of MCBE v1.16.20, **Custom Generated structures are possible**.
-A simple way to generate Structures is [this](https://machine-builder.itch.io/frg-v2) auto generator by MACHINE_BUILDER, mentioned earlier. It generates all three of the required files for your structure: `feature_rules/mystructure.feature_rule.json`, `feature_rules/mystructure.feature.json` and `structures/mystructure.mcstructure.` You can learn more about defining `.mcstructures` with Structure Blocks in Minecraft itself [here](/nbt/mcstructure).
+自 MCBE v1.16.20 起,**支持自定义生成结构**
+推荐使用前文提到的 [MACHINE_BUILDER 工具](https://machine-builder.itch.io/frg-v2)自动生成结构文件。该工具会生成三个必要文件:`feature_rules/mystructure.feature_rule.json`、`feature_rules/mystructure.feature.json` 和 `structures/mystructure.mcstructure`。更多关于使用结构块定义 `.mcstructure` 的内容请参考[此文档](/wiki/nbt/mcstructure)
---
-Now that you have your `.mcstructure`, time to write your `feature` and `feature rule`. The last is the same as with ores (see the beginning of this article). Let's continue to the **Feature**.
+准备好 `.mcstructure` 文件后,需要编写对应的 `feature` 和 `feature rule`。特征规则与矿石生成类似(参见前文),以下是**特征**示例(来自[特征文档](https://bedrock.dev/r/Features#minecraft:structure_template_feature)):
-- Remember that the namespace is not required and that the filename must match the identifier, excluding the namespace. So if you have a feature rule with the identifier `wiki:myfeaturerule` or simply `myfeaturerule`, the file name can be be `myfeaturerule.json` in both cases.
-
-Here's an code example from the [Features Documentation](https://bedrock.dev/r/Features#minecraft:structure_template_feature):
-
-
-
-```json
+::: code-group
+```json [示例]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
@@ -317,24 +308,22 @@ Here's an code example from the [Features Documentation](https://bedrock.dev/r/F
}
```
-- `structure_name` is the structure's identifier, the one you saved via a Structure Block.
+- `structure_name` 是结构块的保存标识符
-That's pretty much it! Now you're able to generate your own custom Structures in the world.
+至此,您已掌握在游戏中生成自定义结构的方法!
---
----
+## 当前进度
-## Your progress so far
-
-**What you've done:**
+**已完成内容:**
-- [x] Created you very first biome.
-- [x] Made your very first ore generate naturally.
-- [x] Learned to use bridge. for vanilla files generation and referencing.
-- [x] Learned about other Custom Generation methods.
-- [x] Created custom Structures
+- [x] 创建第一个生物群系
+- [x] 实现首个自然生成的矿石
+- [x] 掌握使用 bridge. 生成原版参考文件
+- [x] 了解其他自定义生成方法
+- [x] 创建自定义结构
-
+
\ No newline at end of file
diff --git a/scripts/ai-translate.mjs b/scripts/ai-translate.mjs
index 4741656e..2b85c800 100644
--- a/scripts/ai-translate.mjs
+++ b/scripts/ai-translate.mjs
@@ -58,11 +58,17 @@ async function findMarkdownFiles(dir) {
if (entry.isDirectory()) {
await traverse(fullPath);
- } else if (entry.isFile() && entry.name.endsWith('.md')) {
+ } else if (entry.isFile() && entry.name.endsWith('.md') && entry.name !== 'index.md') {
try {
// 读取文件内容
const content = await fs.readFile(fullPath, 'utf-8');
-
+ // 如果超过600行,跳过
+ const lines = content.split('\n').length;
+ if (lines > 600) {
+ console.log(`⏭️ 跳过超过600行的文件: ${path.relative(targetDir, fullPath)}`);
+ continue;
+ }
+
// 如果文件不包含中文,则添加到待翻译列表
if (!containsChinese(content)) {
files.push(fullPath);
diff --git a/scripts/sidebar-wiki.ts b/scripts/sidebar-wiki.ts
new file mode 100644
index 00000000..9278961f
--- /dev/null
+++ b/scripts/sidebar-wiki.ts
@@ -0,0 +1,266 @@
+import fs from 'fs'
+import path from 'path'
+import matter from 'gray-matter'
+import fetch from 'node-fetch'
+
+const baseUrl = '/'
+
+// define whether big pages should be built.
+// fastBuild should only be used when testing, since it will not compile some of the wikis content.
+const excludeFiles = [
+ 'entities/vanilla-usage-components.md',
+ 'entities/vanilla-usage-spawn-rules.md',
+ 'entities/vuc-full.md',
+ 'entities/vusr-full.md',
+]
+
+const fastBuild = process.env.fastBuild === 'true ' // SPACE has to be there, since the SET var=val command adds a space at the end!
+
+if (fastBuild && process.env.NODE_ENV == 'production') {
+ console.log(
+ `\nINFO: fastBuild selected. the files:\n${JSON.stringify(
+ excludeFiles,
+ null,
+ 4
+ )}\nwill not be compiled!\n`
+ )
+}
+
+function formatLink(path: string) {
+ return path.split(/\\|\//g).join('/').replace('.md', '')
+}
+
+/*
+Gets the categories from within the frontmatter of an index.md file, and returns them as list.
+ */
+function getCategoryOrder(frontMatter: matter.GrayMatterFile) {
+ const data: { [Key: string]: number } = {}
+ if (!frontMatter.data.categories) {
+ return data
+ }
+
+ frontMatter.data.categories.forEach(function (
+ category: { title: string | number },
+ index: number
+ ) {
+ data[category.title] = index + 1
+ })
+
+ return data
+}
+
+function getCategories(frontMatter: matter.GrayMatterFile) {
+ const data: {
+ text: any
+ data: any
+ tags: any
+ prefix: any
+ section: boolean
+ color: any
+ link: string
+ activeMatch: string
+ }[] = []
+ if (!frontMatter.data.categories) {
+ return data
+ }
+
+ frontMatter.data.categories.forEach(function (
+ category: {
+ nav_order: number
+ category: any
+ title: any
+ tags: any
+ prefix: any
+ color: any
+ },
+ index: any
+ ) {
+ category.nav_order = -1
+ category.category = category.title
+ data.push({
+ text: category.title,
+ data: category,
+ tags: category.tags,
+ prefix: category.prefix,
+ section: true,
+ color: category.color,
+ link: '',
+ activeMatch: ' ',
+ })
+ })
+
+ return data
+}
+
+let order: { [Key: string]: number }
+
+/*
+Recursively generate the navigation links for the sidebar.
+*/
+export function generateWikiSidebar(base: string, dir: string) {
+ const data: {
+ text: any
+ data: { [key: string]: any }
+ children?: any
+ tags?: any
+ prefix?: any
+ section?: any
+ color?: any
+ link?: string
+ activeMatch?: string
+ }[] = []
+ const files = fs.readdirSync(dir)
+
+ files.forEach(function (file) {
+ let joinedPath = path.join(dir, file)
+ const stats = fs.statSync(joinedPath)
+ // Handle top level directories
+ if (
+ stats.isDirectory() &&
+ fs.existsSync(path.join(joinedPath, 'index.md'))
+ ) {
+ const str = fs.readFileSync(
+ path.join(joinedPath, 'index.md'),
+ 'utf8'
+ )
+ let frontMatter
+ try {
+ frontMatter = matter(str)
+ } catch (e) {
+ joinedPath = path.relative(
+ process.cwd(),
+ path.join(joinedPath, 'index.md')
+ )
+ console.log(
+ // @ts-ignore
+ `::error file=${joinedPath},line=1,col=1::File ${joinedPath} has invalid frontmatter! ${e.message}`
+ )
+ throw new Error(
+ // @ts-ignore
+ `File ${joinedPath} has invalid frontmatter! ${e.message}`
+ )
+ }
+
+ order = getCategoryOrder(frontMatter)
+
+ const children = generateWikiSidebar(base, joinedPath).concat(
+ getCategories(frontMatter)
+ )
+
+ children.sort(
+ (
+ { data: dataA, text: textA },
+ { data: dataB, text: textB }
+ ) => {
+ // Default to max int, so without nav order you will show second
+ // Multiply by category value if it exists
+ const navA =
+ (dataA.nav_order || 50) +
+ (order[dataA.category] || 0) * 100 ||
+ Number.MAX_SAFE_INTEGER
+ const navB =
+ (dataB.nav_order || 50) +
+ (order[dataB.category] || 0) * 100 ||
+ Number.MAX_SAFE_INTEGER
+
+ // Tie goes to the text compare! (Will also apply for elements without nav order)
+ if (navA == navB) {
+ return textA.localeCompare(textB)
+ }
+
+ // Return nav order
+ return navA - navB
+ }
+ )
+ data.push({
+ text: frontMatter.data.title,
+ data: frontMatter.data,
+ children: children,
+ })
+
+ if (frontMatter.data.title === void 0) {
+ throw new Error(
+ 'File ' +
+ path.join(joinedPath, 'index.md') +
+ ' has invalid frontmatter!'
+ )
+ }
+ }
+
+ // Handle the normal files
+ else if (stats.isFile()) {
+ // Don't include non-markdown files, or the index page itself
+ if (!file.endsWith('.md') || file.endsWith('index.md')) return
+
+ const str = fs.readFileSync(joinedPath, 'utf8')
+ let frontMatter
+ try {
+ frontMatter = matter(str)
+ } catch (e) {
+ joinedPath = path.relative(process.cwd(), joinedPath)
+ console.log(
+ // @ts-ignore
+ `::error file=${joinedPath},line=1,col=1::File ${joinedPath} has invalid frontmatter! ${e.message}`
+ )
+ throw new Error(
+ // @ts-ignore
+ `File ${joinedPath} has invalid frontmatter! ${e.message}`
+ )
+ }
+ const link = formatLink(joinedPath.toString().replace(base, ''))
+
+ // Don't include hidden pages (ignores children)
+ if (frontMatter.data.hidden === true) return
+
+ let prefix = null
+
+ if (frontMatter.data.prefix != null) {
+ prefix = frontMatter.data.prefix
+ }
+
+ let tags = null
+
+ if (frontMatter.data.tags != null) {
+ tags = frontMatter.data.tags
+ }
+ data.push({
+ text: frontMatter.data.title,
+ data: frontMatter.data,
+ tags: tags,
+ prefix: prefix,
+ section: frontMatter.data.section || false,
+ color: frontMatter.data.color || 'none',
+ link,
+ activeMatch: `^${link}`,
+ })
+ if (frontMatter.data.title === void 0) {
+ joinedPath = path.relative(process.cwd(), joinedPath)
+ console.log(
+ `::error file=${joinedPath},line=1,col=1::File ${joinedPath} has invalid frontmatter!`
+ )
+ throw new Error(`File ${joinedPath} has invalid frontmatter!`)
+ }
+ }
+ })
+
+ return data.sort(
+ ({ data: dataA, text: textA }, { data: dataB, text: textB }) => {
+ // Default to max int, so without nav order you will show second
+ // Multiply by category value if it exists
+ const navA =
+ (dataA.nav_order || 50) + (order[dataA.category] || 0) * 100 ||
+ Number.MAX_SAFE_INTEGER
+ const navB =
+ (dataB.nav_order || 50) + (order[dataB.category] || 0) * 100 ||
+ Number.MAX_SAFE_INTEGER
+
+ // Tie goes to the text compare! (Will also apply for elements without nav order)
+ if (navA == navB) {
+ return textA.localeCompare(textB)
+ }
+
+ // Return nav order
+ return navA - navB
+ }
+ )
+}
\ No newline at end of file
diff --git a/scripts/sidebar.ts b/scripts/sidebar.ts
index 95bcfadb..d4ec7618 100644
--- a/scripts/sidebar.ts
+++ b/scripts/sidebar.ts
@@ -1,7 +1,8 @@
import fs from 'fs/promises';
import path from 'path';
import fg from 'fast-glob';
-import matter from 'gray-matter'
+import matter from 'gray-matter';
+import { generateWikiSidebar } from './sidebar-wiki';
// 定义侧边栏项目接口
interface SidebarItem {
@@ -54,8 +55,10 @@ async function generateSidebar(): Promise> {
const sidebar: Record = {};
const files = await fg([`${DOCS_DIR}/**/*.md`]);
- // 处理所有非 index.md 文件
+ // 处理所有非 wiki 文件
for (const filePath of files) {
+ // 跳过wiki
+ if (filePath.includes('wiki')) continue;
const relativePath = path.relative(DOCS_DIR, filePath);
if (IGNORE_PATHS.some(ignore => relativePath.toLowerCase().includes(ignore.toLowerCase()))) continue;
@@ -149,6 +152,69 @@ async function generateSidebar(): Promise> {
});
}
+ // 处理wiki
+ const wiki = generateWikiSidebar(path.join(process.cwd(), 'docs'), path.join(process.cwd(), 'docs/wiki'));
+ const wikiSidebar: SidebarItem[] = [];
+ wiki.forEach(item => {
+ if (item.data.categories) {
+ // 一级大分类
+
+ // 二级分类
+ const secondUrls: string[] = [];
+ const second = item.data.categories.map((category: any) => {;
+ return {
+ text: category.title,
+ collapsed: false,
+ items: item.children
+ .filter(child => child.data.category === category.title)
+ .filter(child => child.link)
+ .map(child => {
+ secondUrls.push(child.link);
+ return {
+ text: child.text,
+ link: child.link,
+ activeMatch: child.activeMatch
+ }
+ })
+ }
+ });
+ // 匹配到一级但是未匹配到二级
+ const notMatched = item.children
+ .filter(child => !secondUrls.includes(child.link))
+ .filter(child => child.link)
+ .map(child => {
+ return {
+ text: child.text,
+ link: child.link,
+ activeMatch: child.activeMatch
+ }
+ });
+
+ wikiSidebar.push({
+ text: item.data.title,
+ collapsed: true,
+ items: [...second, ...notMatched]
+ });
+ } else {
+ // 一级大分类
+ wikiSidebar.push({
+ text: item.text,
+ collapsed: true,
+ items: item.children
+ .filter(child => child.link)
+ .map(child => {
+ return {
+ text: child.text,
+ link: child.link,
+ activeMatch: child.activeMatch
+ }
+ })
+ });
+ }
+ });
+ // 添加 wiki
+ sidebarFlat['wiki'] = wikiSidebar;
+
return sidebarFlat;
}