# Schneckenhaus 插件
你是否想知道一个箱中信箱内部是什么样子?
你是否想进入一个箱子?
你是否想把你的房子存储在你的物品栏里?
这个插件为你准备好了!
# 视频
每一个蜗牛壳(一个可进入的方块)都可以使用图形界面进行自定义:
- 重命名你的蜗牛壳
- 管理权限(所有者、进入权限、建造权限、白名单、黑名单)
- 追踪你放置蜗牛壳的位置
- 升级它的尺寸
- 改变它的颜色(对于箱中信箱)
- 改变它的木质类型(对于箱子)
如果你还不信服,这个插件还包含:
- 对 **完全自定义的壳类型** 的支持!
- 配置模板、物品、生成位置、退出方块、菜单方块、初始方块等等
- 简单地 **导入和导出** 到自定义文件格式。
- 在我们的 Discord 服务器上分享和下载你的自定义壳类型。
- **嵌套的蜗牛壳**: 进入另一个蜗牛壳内部时再进入一个蜗牛壳! (递归是指某事物是递归的)
- 精细的 **权限**
- 启用 **家园壳** 以自动为每个新玩家提供一个新的蜗牛壳
- 在配置文件中配置它的类型、颜色、尺寸等。
- 防止服务器上的无家可归,并使家园壳不可能丢失
- 自定义、高度可配置的 **制作配方**
- 指定增加蜗牛壳尺寸的选定材料
- 指定启用彩虹模式的选定材料
- 支持带有自定义模型数据的物品
- 使用漏斗将物品转移到壳中和从壳中转移出来。你可以在一个壳内建造整个工厂并将它们连接到外部世界!
- 你的蜗牛壳将在你拥有它在物品栏中或者放置在已加载的区块中时保持加载
- 对 **多个世界** 的支持,例如,一个存储玩家制作的壳的世界和一个用于命令创建的壳的世界
- 强大的带有语法高亮显示的命令补全
- **超强大的壳管理工具**:
你是否想删除所有浅蓝色箱中信箱壳,尺寸为13,启用白名单,并且由玩家在过去一周内制作?
说实话:你一直都想这样做。这个插件可以实现它。
- 数据以 **SQLite 数据库** 的方式高效和安全地存储
- ...等等!
## 文档
目录:
1. [命令系统](#command-system)
2. [自定义壳](#custom-shells)
3. [配置](#configuration)
4. [权限](#permissions)
## 命令系统
### 壳选择器
当命令需要你指定一个或多个壳,例如 `/sh tp shell ` 或 `/sh info ` 时,
你有多种方法可以做到:
- `here` 解析为你的位置上的壳,这是许多命令的默认值
- `selection` 解析为所有你选中的壳,请参考 [选择](#selections)
- `` 解析为指定的 id 的壳
### 命令
- `sh`
- `tp`
- `shell ` 传送到一个壳
- `world ` 传送到包含蜗牛壳的世界
- `info ` 在聊天中显示有关某个壳的大量信息
- `menu ` 打开一个蜗牛壳的菜单
- `item ` 给予你与给定壳关联的物品
- `count`
- `total` 显示服务器上蜗牛壳的总数
- `world ` 显示存储在世界中的蜗牛壳数量
- `delete ` 删除一个壳,无法撤销
- `create ` 类型可以是 `shulker`、`chest`、`head` 或 `custom`;根据类型,你需要指定一个或多个以下选项:
- `owner `
- `world ` 壳将存储的世界
- `permission`
- `enter `
- `build `
- `size ` 仅适用于箱中信箱和箱子壳,未指定时为随机
- `color ` 仅适用于箱中信箱壳,未指定时为随机
- `rainbow ` 仅适用于箱中信箱壳,默认值为 false
- `head-owner ` 仅适用于头颅壳,默认情况下为创建者
- `template ` 仅适用于自定义壳,**创建自定义壳时必需**
- `position` 指定在网格中生成壳的位置,有一些小技巧
- `id ` 站点的 id
- `grid ` 位置的坐标
- `here` 你的当前位置
- `home`
- `tp` 传送到你自己的家园壳
- `tp ` 传送到其他人的家园壳
- `set `
- `unset `
- `language ` 更改插件的语言
- `discord` 显示链接以加入我们的 Discord 服务器
- `tag `
- `list`
- `add `
- `remove `
- `clear`
### 选择
选择是一个强大的功能,它可以让你使用各种标准搜索蜗牛壳。
此外,选择使得在所有选定的蜗牛壳上运行其他命令成为可能。
每个玩家和服务器控制台都有一个当前选择,默认情况下为空。
- `sh`
- `selection`
- `clear` 删除你当前的选定内容
- `list` 列出当前选定的蜗牛壳的 ID
- `select` 此命令接受一个或多个必须都为 true 的标准:
- `id ` 你也可以指定范围,例如 `7..` 或 `7..42`
- `world ` 壳存储的世界
- `position ` 壳位置的 ID,也可以是范围
- `type ` 壳的类型,例如 `shulker`、`chest`、`head` 或 `custom`
- `creation`
- `reason ` 可以是 `crafting`、`command` 或 `home`
- `time` 时间戳必须以这种格式指定: '2025-08-21 21:01:42'
- `after `
- `before `
- `between and `
- `creator ` 可以是 uuid、名称或玩家选择器
- `name ` 壳的名称
- `permission` 权限模式可以是 `whitelist`、`blacklist`、`everybody`、`nobody`
- `enter `
- `build `
- `size ` 箱子和箱中信箱的尺寸,也可以是范围,例如 `4..8`
- `color ` 箱中信箱的颜色
- `rainbow ` 一个布尔值,指示箱中信箱壳是否启用了彩虹模式
- `wood ` 箱子壳的木质类型,例如 `oak`
- `template ` 自定义壳的模板名称
- `head ` 头颅壳的所有者
- `tag ` 选择具有特定标签的壳
- `owner `
- `sort by `
- 排序准则可以是 `id`、`position`、`size` 或 `creation_date`
- 排序顺序可以是 `ascending` 或 `descending`
- `limit ` 仅在选择中包含前 `` 个结果
- `offset `
- `combine ` 指定旧的选择和新的选择应该如何合并
- `replace` (默认)表示用新的替换旧的选择
- `append` 表示将新的追加到旧的 (排除重复项)
- `remove` 保留旧的选择,除了新选择中的壳
- `intersect` 保留新旧选择中都存在的壳
## 自定义壳
### 创建自定义壳
你首先必须为你的自定义壳类型构建一个模板。
当自定义壳类型被实例化时,例如通过制作,模板的副本将创建在蜗牛壳世界中。
模板可以在任何世界中建立,但建议在蜗牛壳世界中建立。
要做到这一点,请执行 `/sh tp world schneckenhaus` 将你传送到默认的蜗牛壳世界。
你必须在你所有的模板方块的 x 或 z 坐标为负数的地方构建你的模板。
否则,插件创建的壳和你的模板之间可能存在冲突。
完成建造后,运行 `/sh custom add -
`。
`` 可以自由地由你选择,并用于标识你的自定义壳类型。
之后重命名你的自定义壳类型是不可能的。
`` 是你构建模板的世界,例如 `schneckenhaus`。
`` 和 `` 是模板的角落位置。
请看这些角落方块,并使用标签自动完成功能,以让你的生活更轻松。
`- ` 是代表你的自定义壳实例的物品/方块。
`
` 是用于制作你的自定义壳类型的成分。
你稍后可以在配置文件中编辑和添加成分。
使用命令 `/sh custom edit ...` 你可以设置自定义壳类型的其他属性。
你也可以在配置文件中更改这些属性。
#### 生成点
`/sh custom edit set-spawn`
配置玩家在蜗牛壳中生成的位置以及观察方向。
#### 初始方块
`/sh custom edit add-initial-block `
`/sh custom edit add-initial-block-area `
如果你想复制一个方块,但希望玩家能够破坏它并替换它,请将该方块配置为初始方块。
#### 菜单方块
`/sh custom edit set-menu-block `
单击此方块将打开蜗牛壳菜单。
#### 退出方块
`/sh custom edit add-exit-block `
单击这些方块之一将使玩家离开壳。
#### 方块限制
`/sh custom edit set-block-restrictions [] [] []`
`/sh custom edit set-block-area-restrictions [] [] []`
`/sh custom edit clear-block-restrictions `
对于蜗牛壳中的每个方块,都有一个方块类型列表,称为“方块限制”。
如果此列表为空,则意味着没有任何限制,
并且玩家可以破坏该方块并在此位置放置另一个方块。
实际上将一个方块添加为初始方块 (使用 `/sh custom edit add-initial-block`),
实际上将在该方块的位置设置方块限制列表为空。
如果方块的限制列表不为空,则该非空方块的类型必须包含在此列表中。
如果未满足此不变式,玩家将无法放置/破坏方块。
此外,修复系统也会执行此操作。
默认情况下,如果没有明确指定方块的限制列表,则列表的默认值取决于该非空气方块是否为空气方块。
如果它是一个空气方块,则限制列表的默认值是一个空列表,这意味着玩家可以放置任何他们想要的东西。
如果它是一个非空气方块,则限制列表的默认值是一个只包含该非空气方块类型的列表。
这意味着玩家默认情况下无法破坏属于模板的任何方块。
默认值也可以通过使用 `/sh custom edit set-protect-air true` 来更改。
如果 `protect_air` 属性设置为 true,则模板中的空气方块的限制列表将默认为一个只包含空气的列表。
因此,除非明确允许,否则玩家无法在自定义壳中放置方块。
### 导出自定义壳类型
运行 `/sh custom export `。复制在 `plugins/Schneckenhaus/export` 目录中创建的文件。
你可以在我们的 Discord 服务器上分享你的创作。
### 导入自定义壳类型
将要导入的文件放在 `plugins/Schneckenhaus/import` 目录中。
移动到要放置模板的世界和位置。
建议在默认的蜗牛壳世界中放置你的模板。
要做到这一点,请输入 `/sh tp world schneckenhaus` 将你传送到这个世界.
确保你的 x 和 z 坐标都是负数,并且远离正 x 或 z 坐标(例如 x = z = -100)。
这很重要,因为如果你将模板放置在离其他壳太近的地方(这些壳总是具有正 x 和 z 坐标),
模板区域和壳区域可能会重叠。
现在运行 `/sh custom import as `
`` 将是用于引用新导入的壳类型的别名。
在之后重命名自定义壳类型是不可能的。
导入后,你可以使用制作配方(见配置文件)或 `/sh create custom template ` 来创建你自定义壳类型的实例。
## 配置
### 箱中信箱 / 箱子 / 头颅壳配置
```yaml
# 此文档适用于箱子和头颅壳
shulker:
# 蜗牛壳是否可以制作
crafting: true
# 制作所需的配料,除了(彩色)箱中信箱
ingredients:
- item: 'minecraft:spyglass'
amount: 1
# model 指的是附加到物品上的自定义模型数据(用于创建自定义物品)
model: null
# 如果未使用尺寸配料,则尺寸
initial_size: 4
# 可通过添加尺寸配料达到的最大尺寸
max_size: 30
# 可以可选地添加到制作配方中以增加壳的尺寸
size_ingredient: { item: 'minecraft:gold_ingot', amount: 1, model: null }
# 如果添加一个尺寸配料,尺寸将增加多少
size_per_ingredient: 2
# 可通过升级实现的尺寸最大值
max_upgrade_size: 30
# 用于通过蜗牛壳菜单升级尺寸
upgrade_ingredient: { item: 'minecraft:gold_ingot', amount: 1, model: null }
# 每个升级配料尺寸增加多少
size_per_upgrade_ingredient: 2
# 彩虹模式之间的滴答数
# 此值也受 shell_instances_sync 限制
rainbow_delay: 60
# 可添加到制作配方中以启用彩虹模式
rainbow_ingredient: { item: 'minecraft:clock', amount: 1, model: null }
```
### 自定义壳配置
*注意*: 虽然可以通过配置文件添加和编辑自定义壳类型,但使用命令 [在此处描述](#creating-custom-shells) 更容易。
```yaml
custom:
# 你的自定义壳类型的名称,除非你知道你在做什么,否则不要更改此属性
portable-garden:
item: minecraft:birch_wood # 代表此壳类型的物品 / 方块
crafting: true
# 制作此自定义壳类型所需的配料
ingredients:
- {item: 'minecraft:birch_log', amount: 64, model: null}
- {item: 'minecraft:birch_sapling', amount: 1, model: null}
- {item: 'minecraft:bone_meal', amount: 16, model: null}
- {item: 'minecraft:moss_block', amount: 32, model: null}
- {item: 'minecraft:spyglass', amount: 1, model: null}
template_world: schneckenhaus # 模板放置所在世界
template_position: -30 0 -30 -20 10 -20 # 模板区域
protect_air: false # 默认情况下玩家是否可以在壳内建造
block_restrictions: # 请参考创建自定义壳部分以了解此内容的详细说明
-25 1 -25: ['minecraft:cauldron', 'minecraft:lava_cauldron', 'water_cauldron']
spawn_position: {x: -188.50940344422307, y: 122.9375, z: 219.30000001192093, yaw: -18.117798,
pitch: 3.7506914}
# 单击这些方块之一会传送到你
exit_blocks: [-189 124 218, -189 123 218]
# 打开蜗牛壳菜单
menu_block: -188 123 218
```
### 家园壳配置
如果启用家园壳,玩家在加入服务器时将自动获得一个新的壳,
并且他们还没有属于自己的家园。
玩家必须拥有权限 `schneckenhaus.home_shell`(默认值为 false)。
如果玩家还拥有权限 `schneckenhaus.never_homeless`(默认值为 true),
那么他们将不可能丢失他们的家园。
因为如果他们丢失了它,在重新加入 / 重新出现时将会归还他们。
示例:
```yaml
home_shell:
type: shulker,
size: 16,
color: white
enter_permission_mode: everybody # 无论壳类型如何,都可以指定此属性
build_permission_mode: whitelist # 但不会重复
```
```yaml
home_shell:
type: chest
size: 16
wood: birch
```
```yaml
home_shell:
type: head
```
```yaml
home_shell:
type: custom
template: your-template-name
```
### 世界配置
示例:
```yaml
worlds:
# 世界名称
schneckenhaus:
fallback: true # 是否为蜗牛壳创建的默认世界,一个世界只能为 true
biome: 'plains' # 虚空世界的生物群系, 此值仅用于创建新世界,而不是用于现有的
time_sync_world: world # 将同步另一个世界的时间
conditions: []
schneckenhaus_homes: # 例如,包含所有家园壳的第二个世界
fallback: false
time_sync_world: world
conditions: # 至少必须为 true 一个条件才能在世界中创建壳
# 示例条件:所有家庭壳系统创建的壳都将在此世界中创建
type: creation
creation_type: home
```
### 壳条件
壳条件是 YAML 对象,可以评估已创建或正在创建的壳。
使用这些条件,您可以仅为某些壳启用某些功能。
存在多种类型的壳条件。
如果需要指定条件列表,通常至少一个必须为 true。
不同条件类型的示例:
```yaml
type: shulker
size: {min: 5, max: 10} # 可选
colors: green, red, white # 可选
rainbow: false # 可选
```
```yaml
type: chest
size: {min: 5, max: 10} # 可选
wood: birch # 可选
```
```yaml
type: head
```
```yaml
type: custom
template: your_template_name # 可选
```
```yaml
type: creation
creator: 7370723c-1f89-4e7c-a9fe-30ba8b4f0ae3 # 可选
creation_type: crafting # 可选,也可以是 command 或 home
permission: some.permission # 可选,创建者必须拥有的权限,
# 只能检查在线玩家
```
```yaml
type: tag
tag: some-tag-name
```
```yaml
type: not
condition:
type: shulker
size: {min: 10}
```
```yaml
type: and
conditions:
- type: shulker
- type: creation
creation_type: crafting
```
### 其他配置选项
```yaml
# 如果启用,蜗牛壳的区块如果它在在线玩家的物品栏中或放置在已加载的区块中将保持加载
chunk_loading:
enabled: true
conditions: []
delay: 100
# 如果启用,漏斗可用于将物品转移到壳中和从壳中转移出来
hoppers:
enabled: true
conditions: []
# 此系统处理动画(彩虹模式)和手动颜色更改
shell_instances_sync:
enabled: true
conditions: []
delay: 20
shells: true
placed_shells: true
placed_shells_range: 32
items: true # 动画物品栏中的物品
dropped_items: true # 动画掉落的物品
dropped_items_range: 16 # 玩家附近的范围上限
# 如果启用,玩家将无法破坏其他玩家的蜗牛壳
# 可以通过权限设置例外情况
theft_prevention:
enabled: true
conditions: []
# 将防止诸如使用活塞 / 鞘翅等漏洞逃脱壳
escape_prevention:
enabled: true
conditions: []
delay: 20
# 将恢复蜗牛壳 (WorldEdit 等) 的任何严重损坏
repair_system:
enabled: true
conditions: []
delay: 200
# 玩家将传送到这里当离开一个壳,但没有已知的退出位置
# 设置为 null 以使用世界生成点
fallback_exit_location:
world: world
x: 0
y: 80
z: 0
yaw: 0
pitch: 0
# 不要更改此属性
data_version: 3.0.0
```
## 权限
- `schneckenhaus.craft_shell` (默认: true)
- `schneckenhaus.place_shell` (默认: true)
- `schneckenhaus.enter_shell` (默认: true)
- `schneckenhaus.quickly_enter_shell` (默认: false)
- `schneckenhaus.enter_nested_shells` (默认: true)
- `schneckenhaus.ask_for_enter_permission` (默认: true)
- `schneckenhaus.change_enter_permission` (默认: true)
- `schneckenhaus.bypass_shell_enter_permission` (默认: op)
- `schneckenhaus.change_build_permission` (默认: true)
- `schneckenhaus.bypass_shell_build_permission` (默认: op)
- `schneckenhaus.bypass_theft_prevention` (默认: op)
- `schneckenhaus.home_shell` (默认: false)
- `schneckenhaus.never_homeless` (默认: true)
- `schneckenhaus.shell_in_ender_chest` (默认: true)
- `schneckenhaus.open_own_snail_shell_menu` (默认: true)
- `schneckenhaus.open_other_snail_shell_menus` (默认: op)
- `schneckenhaus.create_snail_shell_copies` (默认: op)
- `schneckenhaus.rename_snail_shell` (默认: true)
- `schneckenhaus.edit_owners` (默认: true)
- `schneckenhaus.change_snail_shell_color` (默认: true)
- `schneckenhaus.toggle_rainbow_mode` (默认: true)
- `schneckenhaus.upgrade_snail_shell_size` (默认: true)
- `schneckenhaus.change_shell_wood` (默认: true)
- `schneckenhaus.delete_shell` (默认: op)
- `schneckenhaus.placements.view` (默认: true)
- `schneckenhaus.placements.view_positions` (默认: true)
- `schneckenhaus.placements.teleport` (默认: op)
- `schneckenhaus.bypass_escape_prevention` (默认: op)
- `schneckenhaus.command.select` (默认: op)
- `schneckenhaus.command.list` (默认: op)
- `schneckenhaus.command.create` (默认: op)
- `schneckenhaus.command.info` (默认: op)
- `schneckenhaus.command.tag` (默认: op)
- `schneckenhaus.command.item` (默认: op)
- `schneckenhaus.command.count` (默认: op)
- `schneckenhaus.command.delete` (默认: op)
- `schneckenhaus.command.tp` (默认: op)
- `schneckenhaus.command.home.tp.own` (默认: op)
- `schneckenhaus.command.home.tp.others` (默认: op)
- `schneckenhaus.command.home.manage` (默认: op)
- `schneckenhaus.command.discord` (默认: op)
- `schneckenhaus.command.menu` (默认: op)
- `schneckenhaus.command.language` (默认: op)
- `schneckenhaus.command.custom` (默认: op)
- `schneckenhaus.command.debug` (默认: false)