diff --git a/pages/addon/learn-to-write-addons-information.md b/pages/addon/learn-to-write-addons-information.md
index e062e9c..ae7a720 100644
--- a/pages/addon/learn-to-write-addons-information.md
+++ b/pages/addon/learn-to-write-addons-information.md
@@ -14,7 +14,7 @@ version: "1.0"
description: "RSC示例附属"
authors: ["mmmjjkx"]
repo: "SlimefunReloadingProject/rsc-example"
-idPattern: EXAMPLE_%0
+idPattern: EXAMPLE_%0 # 此配置可能会导致附属加载失败,谨慎使用
loadStartTexts:
- "===="
- "Example附属 开始加载"
diff --git a/pages/file/context-options.md b/pages/file/context-options.md
index 68e9a21..654f35f 100644
--- a/pages/file/context-options.md
+++ b/pages/file/context-options.md
@@ -22,6 +22,7 @@ OBJECT_FOR_REGISTER_2:
- "version >= 1.18.1"
- "itemexist EXAMPLE_ITEM"
unfinished: false
+ logitech_stackable: true
```
| 内容 | 描述 |
@@ -32,6 +33,7 @@ OBJECT_FOR_REGISTER_2:
| register.warn | 当不满足内容注册条件时发出警告。 |
| register.conditions | 详见**关于 conditions**。 |
| register.unfinished | 设置当前内容是否未完成,如果内容未完成会直接跳过加载。 |
+| register.logitech_stackable | 设置机器是否能在逻辑工艺-堆叠机器/生成器中被堆叠 |
## 关于 id_alias
diff --git a/pages/file/super_multi_block_machines.md b/pages/file/super_multi_block_machines.md
index 0c55a52..64ff218 100644
--- a/pages/file/super_multi_block_machines.md
+++ b/pages/file/super_multi_block_machines.md
@@ -36,6 +36,11 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
output: [24, 25]
displayProjectiles: true
+ checkFormed: true
+ openMenuWhenClickedParts: true
+ noMenuWhenNotFormed: true
+ allowSwitchDisplayLayer: true
+ defaultNotice: true
structure:
-
@@ -54,7 +59,7 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
mapping:
o:
material_type: slimefun
- material: RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE
+ material: RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE # 引用自身
core: true
a1:
@@ -103,11 +108,16 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
| script | 物品引用的脚本,设置物品对应的脚本文件,双引号内填脚本对应的文件名称。 | |
| \*input | 物品输入的对应槽位。
**请不要在菜单中为这些槽位设置物品!** | |
| \*output | 物品输出的对应槽位。
**请不要在菜单中为这些槽位设置物品!** | |
-| displayProjectiles | 是否显示投射物效果。 | |
+| displayProjectiles | 是否显示方块投影。默认 `true` | |
+| checkFormed | 机器tick是否需要检测是否搭建完成。默认 `true` | |
+| openMenuWhenClickedParts | 点击机器部件时是否同样打开核心菜单。默认 `true` | |
+| noMenuWhenNotFormed | 结构未形成时是否禁止打开菜单。默认 `true` | |
+| allowSwitchDisplayLayer | 是否允许切换方块投影显示层。默认 `true` | |
+| defaultNotice | 是否显示默认提示信息。默认 `true` | |
| \*structure | 多方块机器的3D结构布局,每一层为一个列表,每一行用字符串表示,每个字符代表一个方块位置。其中,若干个 "_" 组成的字符串表示空位 | |
| \*mapping | 结构中字符到方块的映射,定义每个字符代表的方块类型。 | |
| mapping.#.material_type | 方块材质类型,支持`mc`(原版物品)、`slimefun`(粘液物品)、`custom`(脚本检测)。 | |
-| mapping.#.material | 方块显示材质/方块显示数据。 | |
+| mapping.#.material | 方块显示材质/投影显示数据。 | |
| mapping.#.core | 是否为核心方块,标记为`true`的方块是机器的核心,放置该方块后检测结构。 | |
| recipes.#.seconds | 合成所需时间,最大为 2147483647。 **实际合成时间(单位:粘液刻):(秒数×2) / 机器运行速度** | |
| recipes.#.input | 合成所需的输入物品。 | |
@@ -127,9 +137,9 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
1. **分层结构**:每一个外层列表项代表一层,从上到下排列
2. **每行表示**:每层中的每个字符串代表一行
-3. **字符映射**:字符串中的每个字符(或字符组合)对应`mapping`中定义的方块类型
-4. **空格分隔**:每个字符或字符组合之间用空格分隔,如`"a1 b1 c1"`表示一行有三个方块,分别对应`a1`、`b1`、`c1`
-5. **空位置**:使用`__`表示空位置,不放置任何方块
+3. **字符映射**:每行中以空格分隔的每个字符串对应`mapping`中定义的方块类型
+4. **空格分隔**:每个方块表示之间用空格分隔,如`"a1 b1 c1"`表示一行有三个方块,分别对应`a1`、`b1`、`c1`
+5. **空位置**:使用若干个`_`表示空位置,不放置任何方块
### 映射配置说明
@@ -137,10 +147,10 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
1. **核心方块**:必须有且仅有一个方块标记为`core: true`,这个方块是机器的核心,玩家放置该方块后会自动检测周围结构是否匹配
2. **材质类型**:
- - `mc`:使用Minecraft原版方块,材质名使用方块ID(如`IRON_BLOCK`)或完整路径(如`minecraft:iron_block`)
- - `slimefun`:使用粘液科技物品,材质名使用粘液科技物品ID
- - `custom`:使用自定义物品,材质名使用完整的物品路径(如`minecraft:stone`),适用于需要指定具体方块状态的情况
-3. **方块状态**:可以使用方块状态,如`minecraft:furnace[lit=true]`,适用于`mc`和`custom`材质类型
+ - `mc`:使用原版方块
+ - `slimefun`:使用粘液科技方块
+ - `custom`:使用自定义脚本检测
+3. **投影显示数据**:可以使用方块数据 (如`minecraft:furnace[lit=true]`) 或 方块ID (`iron_block`), 适用于`mc`和`custom`材质类型
### 工作原理
diff --git a/pages/scripts-basic/super_multi_block_machines.md b/pages/scripts-basic/super_multi_block_machines.md
index 6c5185a..45f5bc4 100644
--- a/pages/scripts-basic/super_multi_block_machines.md
+++ b/pages/scripts-basic/super_multi_block_machines.md
@@ -7,13 +7,21 @@
超大多方块机器脚本支持以下函数:
* `onTick(block, machine, ctx)` - 每粘液刻触发
-* `onFormed(machine)` - 结构形成时触发
-* `onUnformed(machine)` - 结构破坏时触发
+* `onFormed(partLocation, machine)` - 多方块结构形成时触发
+* `onUnformed(partLocation, machine)` - 多方块结构破坏时触发
+* `onDestroy(machine)` - 多方块结构破坏或核心破坏时触发
* `onInteract(event, machine)` - 玩家交互时触发
* `isOfPart(location, multiblock)` - 检查位置是否为多方块的一部分
-* `cannotStartSuperMultiBlock(location, machine)` - 阻止机器启动
+* `cannotStartSuperMultiBlock(location, machine)` - 多方块无法开始搭建时触发
+* `onClickedPartBlock(event, machine)` - 点击部件方块时触发
+* `onClickedPartBlockNotFormed(event, machine)` - 多方块结构未形成时,点击部件方块触发
+* `autoSwitchedDisplayLayer(layer, machine)` - 自动切换显示层时触发
+* `switchDisplayLayer(layerIndex, machine)` - 手动切换显示层时触发
+* `formedLayer(layer, machine)` - 一层搭建完成时触发
其中:
+* `ctx` = TickContext
+* `event` = PlayerInteractEvent
* `machine` = [CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)
* `multiblock` = [SuperMultiBlock](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/super_multiblock/SuperMultiBlock.java)
@@ -37,16 +45,16 @@ function onTick(block, machine, ctx) {
|--|---|--|
|block|[Block](https://jd.papermc.io/paper/26.2/org/bukkit/block/Block.html)|多方块机器的核心方块|
|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
-|ctx|[TickContext](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java#L103)|脚本上下文,用于控制默认调用|
+|ctx|[TickContext](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/TickContext)|脚本上下文,用于控制默认调用|
## onFormed
-当超大多方块结构形成后触发。
+当超大多方块结构搭建完成时触发。
### 方法体
```js
-function onFormed(machine) {
+function onFormed(partLocation, machine) {
}
```
@@ -55,16 +63,36 @@ function onFormed(machine) {
|字段|类型|描述|
|--|---|--|
+|partLocation|[Location](https://jd.papermc.io/paper/26.2/org/bukkit/Location.html)|部件位置|
|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
## onUnformed
-当超大多方块结构被破坏后触发。
+当超大多方块结构被破坏时触发
### 方法体
```js
-function onUnformed(machine) {
+function onUnformed(partLocation, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|partLocation|[Location](https://jd.papermc.io/paper/26.2/org/bukkit/Location.html)|部件位置|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## onDestroy
+
+当超大多方块结构破坏或核心破坏时触发
+
+### 方法体
+
+```js
+function onDestroy(machine) {
}
```
@@ -137,3 +165,98 @@ function cannotStartSuperMultiBlock(location, machine) {
|--|---|--|
|location|[Location](https://jd.papermc.io/paper/26.2/org/bukkit/Location.html)|多方块机器核心的位置|
|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## onClickedPartBlock
+
+当玩家点击部件方块时触发。
+
+### 方法体
+
+```js
+function onClickedPartBlock(event, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|event|[PlayerInteractEvent](https://jd.papermc.io/paper/26.2/org/bukkit/event/player/PlayerInteractEvent.html)|玩家交互事件|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## onClickedPartBlockNotFormed
+
+当玩家点击未形成的部件方块,且多方块结构未搭建完成,且 `noMenuWhenNotFormed = true` 时触发。
+
+### 方法体
+
+```js
+function onClickedPartBlockNotFormed(event, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|event|[PlayerInteractEvent](https://jd.papermc.io/paper/26.2/org/bukkit/event/player/PlayerInteractEvent.html)|玩家交互事件|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## autoSwitchedDisplayLayer
+
+当 RSC 自动调用切换显示层时触发。
+
+### 方法体
+
+```js
+function autoSwitchedDisplayLayer(layer, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|layer|int|指定的层的y|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## switchDisplayLayer
+
+当玩家手动切换显示层时触发。
+
+### 方法体
+
+```js
+function switchDisplayLayer(layerIndex, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|layerIndex|int|切换的层的索引,其中 `-999` 表示显示全部投影|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
+
+## formedLayer
+
+当某一层完全搭建完成时触发。
+
+### 方法体
+
+```js
+function formedLayer(layer, machine) {
+
+}
+```
+
+### 入参
+
+|字段|类型|描述|
+|--|---|--|
+|layer|int|搭建完成的层的y|
+|machine|[CustomSuperMultiBlockMachine](https://github.com/balugaq/RykenSlimeCustomizer/blob/main/src/main/java/org/lins/mmmjjkx/rykenslimefuncustomizer/objects/customs/machine/CustomSuperMultiBlockMachine.java)|超大多方块机器的实例|
\ No newline at end of file