Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
244ea8c
Chinese translation
PEQB1145 Dec 19, 2025
1de1759
Chinese Translation
PEQB1145 Dec 19, 2025
c983d6a
Chinese Translation
PEQB1145 Dec 19, 2025
440ea37
Chinese Translation
PEQB1145 Dec 19, 2025
cc45fbd
Chinese Translation
PEQB1145 Dec 19, 2025
629ae69
add block-models.md
PEQB1145 Dec 19, 2025
5f3aba1
add transparency-and-tinting.md
PEQB1145 Dec 19, 2025
4e8d319
add attributes.md
PEQB1145 Dec 19, 2025
fea4ab4
add item-appearance.md
PEQB1145 Dec 19, 2025
82ebde8
add item-models.md
PEQB1145 Dec 19, 2025
355890a
add world,md
PEQB1145 Dec 20, 2025
c2ea4ef
add dynamic-sounds.md
PEQB1145 Dec 20, 2025
e819a8b
Merge branch 'main' into main
PEQB1145 Dec 20, 2025
75e3dcb
Merge branch 'main' into main
PEQB1145 Dec 20, 2025
1487d7f
Merge branch 'FabricMC:main' into main
PEQB1145 Dec 22, 2025
d595257
Fix some grammatical errors.
PEQB1145 Dec 22, 2025
784a2bd
add spawn-egg.md
PEQB1145 Dec 22, 2025
1924499
add item-models.md
PEQB1145 Dec 22, 2025
08f907e
Update sidebar_translations.json
PEQB1145 Dec 22, 2025
5b71dba
Replace "魔咒" with "附魔".
PEQB1145 Dec 22, 2025
fc16ec8
Correct a typo.
PEQB1145 Dec 22, 2025
2ebc7c5
Update sidebar_translations.json
PEQB1145 Dec 22, 2025
b45d1c9
Fix JSON syntax in sidebar_translations.json
PEQB1145 Dec 22, 2025
bd1dc9a
Make the sentence flow better.
PEQB1145 Dec 22, 2025
7f8b629
Update custom-item-interactions.md
PEQB1145 Dec 23, 2025
b104696
Update finding-mods.md
PEQB1145 Dec 23, 2025
94b7a07
Update faq.md
PEQB1145 Dec 23, 2025
b5a2419
add installing-java index.md
PEQB1145 Dec 23, 2025
22f3d92
Rename setting-up-a-development-environment.md to setting-up.md
PEQB1145 Dec 23, 2025
fe84521
Merge branch 'main' into main
PEQB1145 Dec 23, 2025
d187e1a
Update sidebar_translations.json
PEQB1145 Dec 23, 2025
b614c81
Update sidebar_translations.json
PEQB1145 Dec 23, 2025
46cfef0
Create generating-sources.md
PEQB1145 Dec 23, 2025
f277f13
Create guide for opening a project in IntelliJ IDEA
PEQB1145 Dec 23, 2025
a204650
Update sidebar_translations.json
PEQB1145 Dec 23, 2025
cf19101
Rename translated/zh_cn/develop/ide-tips-and-tricks.md to translated/…
PEQB1145 Dec 23, 2025
800543a
Update website_translations.json
PEQB1145 Dec 24, 2025
9740214
Update item-models.md
PEQB1145 Dec 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 125 additions & 0 deletions translated/zh_cn/develop/blocks/block-models.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
---
title: 方块模型
description: 一份编写和理解方块模型的指南。
authors:
- PEQB1145
---

<!-- markdownlint-disable search-replace -->

本页将指导你如何编写自己的方块模型,并了解其所有的选项和可能性。

## 什么是方块模型? {#what-are-block-models}

方块模型本质上定义了方块的外观和视觉效果。它们指定了纹理、模型平移、旋转、比例及其他属性。

模型以 JSON 文件的形式存储在你的 `resources` 文件夹中。

## 文件结构 {#file-structure}

每个方块模型文件都有一个必须遵循的固定结构。它以一个表示模型**根标签**的空花括号开始。以下是方块模型结构的一个简要示意:

```json
{
"parent": "...",
"ambientocclusion": "true/false",
"display": {
"<position>": {
"rotation": [0.0, 0.0, 0.0],
"translation": [0.0, 0.0, 0.0],
"scale": [0.0, 0.0, 0.0]
}
},
"textures": {
"particle": "...",
"<texture_variable>": "..."
},
"elements": [
{
"from": [0.0, 0.0, 0.0],
"to": [0.0, 0.0, 0.0],
"rotation": {
"origin": [0.0, 0.0, 0.0],
"axis": "...",
"angle": "...",
"rescale": "true/false"
},
"shade": "true/false",
"light_emission": "...",
"faces": {
"<key>": {
"uv": [0, 0, 0, 0],
"texture": "...",
"cullface": "...",
"rotation": "...",
"tintindex": "..."
}
}
}
]
}
```

<!--@include: ../items/item-models.md#parent-->

将此标签设置为 `builtin/generated` 可使用根据指定图标生成的模型。旋转可以通过[方块状态](./blockstates)来实现。

### 环境光遮蔽 {#ambient-occlusion}

```json
{
"ambientocclusion": "true/false"
}
```

此标签指定是否使用[环境光遮蔽](https://en.wikipedia.org/wiki/Ambient_occlusion)。默认为 `true`。

<!--@include: ../items/item-models.md#display-->

### 纹理 {#textures}

```json
{
"textures": {
"particle": "...",
"<texture_variable>": "..."
}
}
```

`textures` 标签以标识符或纹理变量的形式保存模型的纹理。它包含三个附加对象:

1. `particle`:*字符串*。定义粒子效果所使用的纹理。该纹理也用于下界传送门内的叠加效果、静止的水和熔岩的纹理。它也被视为纹理变量,可通过 `#particle` 引用。
2. `<texture_variable>`:*字符串*。创建一个变量并分配一个纹理。之后可通过 `#` 前缀引用(例如,`"top": "namespace:path"` ⇒ `#top`)

<!--@include: ../items/item-models.md#elements-->

<!--@include: ../items/item-models.md#from-->

`from` 根据 `[x, y, z]` 模式指定长方体的起点(相对于左下角)。`to` 指定终点。一个标准大小的方块将从 `[0, 0, 0]` 开始并在 `[16, 16, 16]` 结束。
两者的值必须介于 **-16** 到 **32** 之间,这意味着每个方块模型的最大尺寸为 3×3 个方块。

<!--@include: ../items/item-models.md#rotation-->

`rotation` 定义元素的旋转。它包含四个值:

1. `origin`:*三个浮点数*。根据 `[x, y, z]` 模式设置旋转中心。
2. `axis`:*字符串*。指定旋转方向,必须是 `x`、`y` 或 `z` 之一。
3. `angle`:*浮点数*。指定旋转角度。范围从 **-45** 到 **45**。
4. `rescale`:*布尔值*。指定是否在整个方块上缩放面。默认为 `false`。

<!--@include: ../items/item-models.md#shade-to-faces-->

1. `uv`:*四个整数*。根据 `[x1, y1, x2, y2]` 模式定义要使用的纹理区域。如果未设置,则默认为等于元素 xyz 坐标的值。
交换 `x1` 和 `x2` 的值(例如从 `0, 0, 16, 16` 到 `16, 0, 0, 16`)会翻转纹理。UV 是可选的,如果没有提供,则根据元素的位置自动生成。
2. `texture`:*字符串*。以[纹理变量](#textures)的形式指定面的纹理,前缀为 `#`。
3. `cullface`:*字符串*。可以是:`down`、`up`、`north`、`south`、`west` 或 `east`。指定当指定位置有方块接触时,是否不需要渲染该面。
它还确定用于照亮该面的方块光源来自哪一侧;如果未设置,则默认使用该侧。
4. `rotation`:*整数*。以 90 度为增量,按指定度数顺时针旋转纹理。旋转不影响使用了纹理的哪一部分。
相反,它相当于对选定的纹理顶点(隐式选定或通过 `uv` 显式选定)进行排列。
5. `tintindex`:*整数*。使用色调值对该面的纹理进行着色。默认值 `-1` 表示不使用色调。
任何其他数字将传递给 `BlockColors` 以获取相应索引的色调值(当方块未定义色调索引时返回白色)。

## 来源与链接 {#sources-and-links}

如需更详细的操作说明,你可以访问 Minecraft Wiki 的[方块模型页面](https://minecraft.wiki/w/Model#Block_models)。本页中的许多信息来自该页面。
3 changes: 2 additions & 1 deletion translated/zh_cn/develop/blocks/blockstates.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: 方块状态
description: 学习为什么方块状态是一个向你的方块添加可视化功能的好方法。
authors:
- IMB11
- PEQB1145
---

方块状态是附加到 Minecraft 世界中的单个方块上的一段数据,包含属性形式的方块块信息——原版存储在方块状态中的属性的一些示例:
Expand Down Expand Up @@ -41,7 +42,7 @@ Minecraft 已经有些自定义的类,允许你快速创建特定类型的方
@[code](@/reference/latest/src/main/generated/assets/example-mod/models/block/condensed_oak_log_horizontal.json)

::: info
Remember, blockstate files can be found in the `assets/example-mod/blockstates` folder, the name of the blockstate file should match the block ID used when registering your block in the `ModBlocks` class. For instance, if the block ID is `condensed_oak_log`, the file should be named `condensed_oak_log.json`.
注意,方块状态文件可在 `assets/example-mod/blockstates` 文件夹中找到,当在 `ModBlocks` 类中注册你的方块时,方块状态的文件名必须与方块 ID 相同。举个例子,如果方块的 ID `condensed_oak_log`,那么文件应该名为 `condensed_oak_log.json`

更加深入了解方块状态文件中可用的所有修饰器,可看看 [Minecraft Wiki - 模型(方块状态)](https://zh.minecraft.wiki/w/Tutorial:模型/方块状态)页面。
:::
Expand Down
64 changes: 64 additions & 0 deletions translated/zh_cn/develop/blocks/transparency-and-tinting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
title: 透明度与染色
description: 学习如何动态操控方块外观并为其染色。
authors:
- PEQB1145
---

有时你可能希望方块的视觉效果在游戏中进行特殊处理。例如,有些方块可能显示为透明,而另一些方块可能需要应用染色效果。

让我们看看如何操控方块的外观。

以注册一个方块为例。如果你对这个过程不熟悉,请先阅读关于[方块注册](./first-block)的内容。

@[code lang=java transcludeWith=:::block](@/reference/latest/src/main/java/com/example/docs/appearance/ExampleModAppearance.java)

请确保添加:

- 在`/blockstates/waxcap.json`中添加一个[方块状态](./blockstates)。
- 在`/models/block/waxcap.json`中添加一个[模型](./block-models)。
- 在`/textures/block/waxcap.png`中添加一张[纹理](./first-block#models-and-textures)。

如果一切正确,你将在游戏中看到这个方块。但是,你会发现当方块放置时,它的外观看起来不太对。

![错误的方块外观](/assets/develop/transparency-and-tinting/block_appearance_0.png)

这是因为带有透明度的纹理需要一些额外的设置。

## 操控方块外观 {#manipulating-block-appearance}

即使你的方块纹理是透明或半透明的,它依然会显示为不透明。要解决这个问题,你需要设置方块的 _区块切面层级_。

区块切面层级是用于对不同类型方块表面进行分类渲染的类别。这允许游戏为每种类型使用正确的视觉效果和优化。

我们需要用正确的区块切面层级注册我们的方块。原版提供了以下选项。

- `SOLID`:默认值,是一个没有任何透明度的实心方块。
- `CUTOUT` 和 `CUTOUT_MIPPED`:一个利用了透明度的方块,例如玻璃或花朵。`CUTOUT_MIPPED`在远距离看起来效果更好。
- `TRANSLUCENT`:一个利用了半透明(部分透明)像素的方块,例如染色玻璃或水。

我们的示例具有透明度,因此将使用`CUTOUT`。

在你的**客户端初始化器**中,使用Fabric API的`BlockRenderLayerMap`以正确的`ChunkSectionLayer`注册你的方块。

@[code lang=java transcludeWith=:::block_render_layer_map](@/reference/latest/src/client/java/com/example/docs/appearance/ExampleModAppearanceClient.java)

现在,你的方块应该具有正确的透明度了。

![正确的方块外观](/assets/develop/transparency-and-tinting/block_appearance_1.png)

## 方块颜色提供器 {#block-color-providers}

尽管我们的方块在游戏中看起来很好,但其纹理是灰度的。我们可以动态应用一个颜色染色效果,就像原版树叶根据生物群系改变颜色那样。

Fabric API提供了`ColorProviderRegistry`来注册一个染色颜色提供器,我们将用它来动态地为方块上色。

让我们使用这个API来注册一个染色效果,使得当我们的`Waxcap`方块放置在草上时,它看起来是绿色的,否则就看起来是棕色的。

在你的**客户端初始化器**中,将你的方块注册到`ColorProviderRegistry`,并附上相应的逻辑。

@[code lang=java transcludeWith=:::color_provider](@/reference/latest/src/client/java/com/example/docs/appearance/ExampleModAppearanceClient.java)

现在,方块将根据其放置的位置而被染色。

![带颜色提供器的方块](/assets/develop/transparency-and-tinting/block_appearance_2.png)
10 changes: 4 additions & 6 deletions translated/zh_cn/develop/commands/basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ authors:
- Technici4n
- Treeways
- xpple
- PEQB1145
---

创建命令可以允许模组开发者添加一些可以通过命令使用的功能。 这个指南将会教会你如何注册命令和 Brigadier 的一般命令结构。

::: info
Brigadier is a command parser and dispatcher written by Mojang for Minecraft. It is a tree-based command library where
you build a tree of commands and arguments.
Brigadier 是 Mojang 为 Minecraft 编写的一个命令解析器和调度器。它是一个基于树的命令库,你可以通过它构建由命令和参数组成的树形结构。

Brigadier 是开源的:<https://github.com/Mojang/brigadier>
:::
Expand Down Expand Up @@ -153,8 +153,7 @@ Brigadier [只会重定向有参数的命令节点](https://github.com/Mojang/br
### 可以运行时注册命令吗? {#can-i-register-commands-at-runtime}

::: warning
You can do this, but it is not recommended. You would get the `CommandManager` from the server and add anything commands
you wish to its `CommandDispatcher`.
你可以这么做,但并不建议。你需要从服务器获取 `CommandManager` 并将其中的 `CommandDispatcher` 添加你想要的任何命令。

然后需要通过 `CommandManager.sendCommandTree(ServerPlayerEntity)` 向每个玩家再次发送命令树。

Expand All @@ -164,8 +163,7 @@ you wish to its `CommandDispatcher`.
### 可以在运行时取消注册命令吗? {#can-i-unregister-commands-at-runtime}

::: warning
You can also do this, however, it is much less stable than registering commands at runtime and could cause unwanted side
effects.
你同样可以这么做,但这种方式比在运行时注册命令的稳定性要差得多,并可能引发意料之外的副作用。

为简化事情,你需要在 brigadier 中使用反射并移除这个节点, 然后还需要再次使用 `sendCommandTree(ServerPlayerEntity)` 向每个玩家发送命令树。

Expand Down
Loading