# 大别墅，对话框批量刷怪笼管理工具 (DaBsu)

## 版本信息

| Minecraft | 大别墅 |
| -------- | -------- |
| 1.21.6~1.21.10 | [v1.0.6](https://github.com/Dahesor/DaBsu-Batch-Spawner-Utils/releases/edit/v1.0.6) |
| 1.21.11 | [v1.0.7](https://github.com/Dahesor/DaBsu-Batch-Spawner-Utils/releases/tag/v1.0.7) |
| 26.1 | [v1.1.0](https://github.com/Dahesor/DaBsu-Batch-Spawner-Utils/releases/tag/v1.1.0) |
| 26.2 | [v1.1.1](https://github.com/Dahesor/DaBsu-Batch-Spawner-Utils/releases/tag/v1.1.1) |

## 简介

**大别墅** 是一个基于新版本dialog的刷怪笼编辑工具，适用于Minecraft Java 1.21.6+。它为地图制作者提供了方便直观的方式来管理大量刷怪笼。通过“大别墅”的快速编辑功能，用户可以轻松地修改单个刷怪笼或所有相同配置的刷怪笼；通过批量编辑功能，用户可以使用多种筛选方式选中多个刷怪笼并一起编辑它们。

## 多语言支持

大别墅支持多语言。玩家首次进入服务器时，数据包会提示选择语言（目前支持英文和简体中文），也可以通过运行命令 `function dabsu:lang` 来修改语言设置。玩家进入时默认英文。所您想要所有新进入服务器的玩家默认使用简体中文，输入`scoreboard players set $default lang.dabsu 1`

## 获取DaBsu操作杖

大别墅的大多数功能都通过**DaBsu操作杖**来使用。你可以使用以下任意命令获得操作杖：

```mcfunction
function #dabsu:a
function dabsu:a
function dabsu:wand
```
如果你安装的是“With Quick Actions”的版本，也可以按下 `G` 键打开快速对话菜单，选择“获取大别墅调试棒”。

- 手持操作杖并**潜行 + 右键**：打开**大别墅主菜单**
- 手持操作杖对准刷怪笼显示该刷怪笼的详细信息
- 丢弃操作杖：**潜行 + Q**

## 功能总览

以下是“大别墅”提供的所有主要功能。每项功能的具体使用方法请参考对应章节。

- 快速编辑
  - 世界内可视化编辑
  - 对话框属性编辑
  - 对话框编辑`SpawnPotentials`
  - 快速修改实体属性与装备
  - 同步对`SpawnPotentials`的修改到其他拥有相同`SpawnPotentials`的刷怪笼
- 扫描并注册已存在的刷怪笼
- 批量编辑
  - 选择刷怪笼（立方体选择，范围选择，nbt=选择，相同`SpawnPotentials`选择，全选，修改选择集（添加，删除，取重叠部分））
  - 批量修改（设定下次生成时间，变更或调整属性，管理`SpawnPotentials`，执行任意命令）
- 偏好设置
- 使大别墅休眠并卸载
- 试炼刷怪笼转换器
- 服务器末影箱
- 生成分析器

---

## 快速编辑

快速编辑允许你便捷地，可视化地更改一个指定的刷怪笼。你可以选择将更改发布至所有带有相同`SpawnPotentials`的其他刷怪笼。\
**潜行并右键点击一个刷怪笼**以进入快速编辑状态.

### 可视化编辑

默认情况下，你会看到一个方形轮廓线表示该刷怪笼的`SpawnRange`，一个球形轮廓代表其`RequiredPlayerRange`，和一个位于刷怪笼上方的柱子代表其`SpawnCount`。

每个轮廓上都有至少一个绿色的小正方体节点。**按住右键并拖动这些节点**以可视化地调整对应的属性。

![Visual Edit](/readme/en/img/0.png)

### 对话框编辑属性

快速编辑时，**手持操作杖按Q**可以打开**快速编辑面板**。\
在这里可以选择**调整属性**来编辑刷怪笼除`SpawnPotentials`外的各项设置，包括 `SpawnCount`、`SpawnRange`、`RequiredPlayerRange`、`Min/MaxSpawnDelay` 和 `MaxNearbyEntities`。\
可以**按 F**直接进入编辑属性页面。

点击**修改该刷怪笼**将使用你的输入修改被选择的单个刷怪笼，点击**修改所有相同生成刷怪笼**将修改所有具有完全相同`SpawnPotentials`的刷怪笼。

### 对话框管理生成项

快速编辑中，**按 Q**将打开**快速编辑面板**。
在这里，您可以选择**编辑生成数据** 来管理刷怪笼的 `SpawnPotentials`标签。

![Select Potentials](/readme/zh/img/1.png)

首先，你会看到**选择生成项**菜单，该页面按顺序列出刷怪笼的所有`SpawnPotentials`条目：
* 点击** [+] **按钮可向`SpawnPotentials`中追加新的生成项。
* **限制光照条件**可覆盖所有生成项的自定义光照规则。
* **合并到所有**可以将任意复合标签合并到`SpawnPotentials`列表中的每个条目中。
* **编辑完整NBT**可让使用者直接编辑整个`SpawnPotentials`标签。

你也可以**选择一个特定的项目以详细编辑它**。

这里同样有个快捷键**潜行 + F**。如果该刷怪笼只有一个生成项，那么这个快捷键会直接打开那个生成项的详情。如果它没有生成项或者有不止一个，那么该快捷键会打开选择生成项菜单。

当详细编辑项目时，你可以在输入框中随意编辑实体数据`data.entity`，装备战利品表数据`data.equipment`以及改项目的权重`weight`，点击**修改该刷怪笼**以确认更改。\

![Single Potential](/readme/zh/img/2.png)

#### 快速编辑常见NBT

在**编辑常见NBT**选项中，你可以快速编辑一些常见的实体NBT，比如基础属性以及装备。\
想要编辑基础属性，直接键入数字；\
想要管理装备，你可以选择将实体身上的一件装备复制入自己的物品栏，或者使用自己物品栏或末影箱中的一个物品替换实体的一个槽位。

#### 同步SpawnPotentials更改

在快速编辑目标的`SpawnPotentials`被以任何手段更改后，你可以**按Q**打开**快速编辑面板**并看到它多出了**同步编辑**和**撤回更改**的选项。

**同步编辑**会将你对该刷怪笼`SpawnPotentials`的修改同步给在修改前所有拥有相同`SpawnPotentials`的刷怪笼。

**撤回更改**会取消所有对该刷怪笼`SpawnPotentials`的修改。

### 退出快速编辑

想要退出快速编辑，执行任意一下操作：
* 再次对着刷怪笼**潜行 + 右键**
* 拿着操作杖**潜行 + Q**
* 距离刷怪笼足够远
* 在**快速编辑面板**中点击**结束快速编辑**
* 离开服务器

---

## 注册刷怪笼

大别墅只能追踪和修改注册的刷怪笼。在大别墅安装后，所有玩家手动放置的刷怪笼都会自动注册。

想要注册之前已经存在的刷怪笼，或是非手动放置的刷怪笼，请在大别墅主菜单中选择**开始扫描与注册**。该功能打开时，每0.1秒大别墅就会扫描玩家视线周围的区域尝试寻找未注册的刷怪笼。

在此期间，拿着操作杖按`Q`可以设置扫描的范围以及是否可以穿透方块。

此外，拿着操作杖右键未注册的刷怪笼也会注册它。

---

## 批量编辑

批量编辑是一种更加高级的编辑方法。你可以以非常全面多样的方式精细地选取任意数量的刷怪笼然后一起编辑它们。

### 批量编辑：选择刷怪笼

要选择刷怪笼以进行批量编辑，使用大别墅操作杖**潜行 + 右键**打开主菜单，然后点击 **批量编辑：选择刷怪笼**以进入选择界面。如果当前没有已选中的刷怪笼，使用魔杖按`Q`键可以直接进入该界面。

![Select](/readme/zh/img/3.png)

系统提供了五种不同的选择方式：

* **长方体选择**

定义两个角落，系统会选中这两个点构成的立方体内的所有已注册刷怪笼，逻辑与`/fill`命令相同。可作用于未加载区块。

你可以通过以下方式设置这两个坐标：可以在输入框中手动输入；可以点击**设置长方体选择位置1/2**以将其设为你当前的位置；或点击**快速立方体选则**后，用操作杖右键点击两个位置（有点类似WorldEdit的操作）。

* **距离选择**

选中距离你一定范围内的所有刷怪笼。这是唯一无法选中未加载区块中刷怪笼的方式。
你可以通过页面顶部的滑块来调整这个范围。

* **nbt=检查**

其逻辑与`nbt=`选择器参数相同。系统会提示你输入一个复合标签，所有包含该NBT的实体的刷怪笼都会被选中。例如，输入`{id:"minecraft:zombie"}`将选中所有生成僵尸的刷怪笼。

该选择可跨维度与未加载区块生效。

* **选择相同生成项**

你必须站在一个刷怪笼上才能使用此选择方式。系统会选中所有与你脚下刷怪笼的`SpawnPotentials`相同的刷怪笼。该选择可跨维度与未加载区块生效。

* **选择全部**

选中所有已注册的刷怪笼。该选择跨维度与未加载的区块。

* **添加选择**

勾选页面顶部的**添加至选区而非替换**后，新选中的刷怪笼将被加入到现有的选择列表中，而不是替换原有的选择。

所有被选中的刷怪笼都会闪烁蓝色。

### 批量编辑：修改选区

你可以像使用PhotoShop那样，对已有的选择进行修改，例如移除部分刷怪笼，或与另一组刷怪笼取交集。
使用大别墅操作杖**潜行 + 右键**打开主菜单，然后点击**批量编辑：编辑选区**。

点击页面顶部的按钮可以在**从选择中移除**和**取重叠部分**模式之间进行选择。其余操作方式与“选择刷怪笼”页面相同。

### 批量编辑：取消选择

想要清空选区，在主界面中点击**批量编辑：取消选择**。

### 批量编辑选中的刷怪笼

要编辑选中的刷怪笼，在主菜单中点击**批量编辑所选刷怪笼**。只要你已经选择了至少一个刷怪笼，在拿着操作杖时按`Q`也可以作为快捷方式直接进入该页面。

你可以通过以下四种方式对选中的刷怪笼进行修改：

* **设置下次生成时间**

将刷怪笼的`Delay`标签设置为你输入的数值（即刷怪笼下次生成的时间）。

* **编辑属性**

设置刷怪笼除了`SpawnPotentials`之外的属性。将一个输入留空不会修改原始值。将模式切换为“**增加或减少**”后，系统会将你的输入值加在原始值上，而不是进行替换。比如说，你可以将所有选中刷怪笼的`SpawnCount`减少1。

* **管理SpawnPotentials**

管理刷怪笼的`SpawnPotentials`。根据你选中的刷怪笼的情况，系统会显示不同的操作选项：

如果所有选中刷怪笼具有完全相同的`SpawnPotentials`，你就可以像快速编辑一样自由地编辑每一项内容；\
如果不同，则只能进行一些通用操作，例如替换所有的光照规则。

* **执行任意指令**

你可以在刷怪笼的位置，以其标记实体的身份运行任意命令。

注意：如果你运行的指令修改了刷怪笼的NBT，则必须在编辑后从大别墅主菜单中运行**自检与优化**功能，以确保你所做的更改被大别墅系统正确同步。

---

## 自定义选项

大别墅为用户提供了一些可调整的选项，分为两个类别：**全局设置**和**个人设置**。

* **全局设置**管理大别墅的兼容性与性能；
* **个人设置**仅影响你自己的偏好设置。

你可以从大别墅主菜单进入这两个设置界面。

在**个人设置**中，你还可以更改语言。

---

## 休眠（卸载）

如果你即将发布地图，那么你**必须**使大别墅休眠。

你可以在**全局设置**中点击休眠的选项，也可以运行命令`function dabsu:hibernate`。

这会移除所有标记实体、记分板以及几乎所有大别墅用到的组件（除了storage文件）。\
在数据包进入休眠状态后，请将大别墅从datapacks文件夹中删除，以防玩家使用它。

你可以随时唤醒大别墅：将其放回datapacks，`reload`，然后执行`function dabsu:resume`。\
只要你没有删除大别墅的storage文件，所有已注册的刷怪笼都会保留。

---

## 多人游戏

多个玩家可以**同时**使用大别墅的快速编辑功能，**只要不尝试编辑同一个刷怪笼**，就不会互相干扰。
但在**批量编辑**中，刷怪笼的选择是**全服共享**的，意味着同一时间**只能有一组选中的刷怪笼**，由所有玩家共同使用。

---
## 杂项

以下是一些额外的"小"功能：

* **服务器末影箱**

可在主菜单中找到。几乎无限容量的存储空间，**实时同步共享**给所有用户。\
适合开发者快速共享常用物品。

* **自检与优化**

可在主菜单中找到。该功能会强制所有已注册刷怪笼检查自身是否被更改，并将信息同步更新至大别墅系统。\
正常情况下，刷怪笼仅在被编辑或附近有玩家时才会自动更新。

* **生成分析器**

在快速编辑时，你可以在快速编辑面板中选择运行一个持续5秒的生成分析。该分析将以可视化方式展示当前空间、光照与其他条件下，怪物可能的生成位置。\
原理是让刷怪笼高频生成一个特殊版本的相同生物，并记录其生成点。

* **试炼刷怪笼**

大别墅并不完全支持试炼刷怪笼。除非你有非常具体的原因，否则您应该使用数据包中的**试炼刷怪笼配置文件**。它能高效地管理大量试炼刷怪笼的生成项。

大别墅附带一个转换器，可将试炼刷怪笼内联的NBT配置转换为等价的JSON结构，可以直接复制粘贴进数据包的JSON配置文件中。
想要使用本功能，对着试炼刷怪笼进入快速编辑模式，然后按下`Q`打开试炼刷怪笼转换面板。

---

## 技术信息

* **性能消耗**：在空闲状态下。开发环境中，大别墅的性能开销可忽略不计。

* **快速操作版本**：大别墅发布包中包含两个版本。其中标注为"With Quick Action"的版本使用了一个用JSON定义的对话框，可通过暂停菜单或按`G`键随时快速唤出。如果你的地图没有使用这些位置，建议使用这个版本以提高便捷性。

* **查看版本号**：运行命令 `function dabsu:version`可查看当前版本信息。该命令还会返回数值版本号，并将 `storage dabsu:sys pong__` 设置为 `true`。
