Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion pages/addon/learn-to-write-addons-information.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ version: "1.0"
description: "RSC示例附属"
authors: ["mmmjjkx"]
repo: "SlimefunReloadingProject/rsc-example"
idPattern: EXAMPLE_%0
idPattern: EXAMPLE_%0 # 此配置可能会导致附属加载失败,谨慎使用
loadStartTexts:
- "===="
- "Example附属 开始加载"
Expand Down
2 changes: 2 additions & 0 deletions pages/file/context-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ OBJECT_FOR_REGISTER_2:
- "version >= 1.18.1"
- "itemexist EXAMPLE_ITEM"
unfinished: false
logitech_stackable: true
```

| 内容 | 描述 |
Expand All @@ -32,6 +33,7 @@ OBJECT_FOR_REGISTER_2:
| register.warn | 当不满足内容注册条件时发出警告。 |
| register.conditions | 详见**关于 conditions**。 |
| register.unfinished | 设置当前内容是否未完成,如果内容未完成会直接跳过加载。 |
| register.logitech_stackable | 设置机器是否能在逻辑工艺-堆叠机器/生成器中被堆叠 |

## 关于 id_alias

Expand Down
30 changes: 20 additions & 10 deletions pages/file/super_multi_block_machines.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
-
Expand All @@ -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:
Expand Down Expand Up @@ -103,11 +108,16 @@ RSC_EXAMPLE_SUPER_MULTIBLOCK_MACHINE:
| script | 物品引用的脚本,设置物品对应的脚本文件,双引号内填脚本对应的文件名称。 | |
| \*input | 物品输入的对应槽位。<br>**请不要在菜单中为这些槽位设置物品!** | |
| \*output | 物品输出的对应槽位。<br>**请不要在菜单中为这些槽位设置物品!** | |
| 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 | 合成所需的输入物品。 | |
Expand All @@ -127,20 +137,20 @@ 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. **空位置**:使用若干个`_`表示空位置,不放置任何方块

### 映射配置说明

`mapping`字段定义结构中字符到方块的对应关系:

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`材质类型

### 工作原理

Expand Down
139 changes: 131 additions & 8 deletions pages/scripts-basic/super_multi_block_machines.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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) {

}
```
Expand All @@ -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) {

}
```
Expand Down Expand Up @@ -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)|超大多方块机器的实例|