Описание
# [PECA] Player Extend Carpet Addition

这是一个对 [地毯 carpet mod](https://github.com/gnembon/fabric-carpet) 假人方面的**扩展**
扩展了 **carpet** 多假人操作, 添加假人组控制, 假人队形, 假人保存/管理, 与各种假人特性
## 指令
### /playerGroup
使用此指令进行多假人操作, 进行多假人操作前必须创建一个组
使用此指令创建一个组 `/playerGroup [组名] spawn [假人数] `成功将召唤名称为 `组名 _ 假人编号的 ` 的假人, 数量为你输入的假人数
其它指令与 `/player` 一致, 不过填写的假人名变为组名, 并且组内所有假人都将执行, 唯一不一样的是 `stop`
`/playerGroup [组名] stop` 可以使用 `from ...假人编号 to ...假人编号` 来控制停止的组内假人范围
`from` 代表从哪里开始停止, 不填写 `to` 将一直停止到最后一个, `to` 代表从哪里结束停止
#### 例子
```markdown
# bot 组内有 10 名假人, 停止所有假人
/playerGroup bot stop
# bot 组内有 10 名假人, 从假人 5 停止到假人 10 (最后一个)
/playerGroup bot stop from 5
# test 组内有 10 名假人, 从假人 3 停止到假人 8
/playerGroup test stop from 3 to 8
```
#### 假人队形
你一定会发现 `/playerGroup` 创建出来的假人组所有假人都挤在一起, 这样的假人组根本不能完成更复杂的功能, 假人队形就是解决这个问题
在创建假人时使用 `formation` 来选择假人队形, 在队形后面填写行数 (仅支持多行的队形有行数), 最后可以填写方向 (默认视线方向)
使用 `interstice` 可以填写每个假人之间的间隔
#### formation 队形
```markdown
# 列
column
# 可叠加列 (可以一格内存在多个假人)
columnFold
# 排
row
# 可叠加排 (可以一格内存在多个假人)
rowFold
# 四边形
quadrangle
```
#### 例子
```markdown
# 创建一个组名为 bot 的假人组, 有 10 个假人, 并且排成一排
/playerGroup bot spawn 10 formation row
# 创建一个组名为 bot 的假人组, 有 10 个假人, 并且排成一列, 方向南
/playerGroup bot spawn 10 formation row north
# 创建一个组名为 bot 的假人组, 有 9 个假人, 并且排成四边形, 有三行
/playerGroup bot spawn 9 formation quadrangle 3
# 创建一个组名为 bot 的假人组, 有 9 个假人, 并且排成四边形, 有三行, 每一个假人间隔三格
/playerGroup bot spawn 9 formation quadrangle 3 interstice 3
# 创建一个组名为 bot 的假人组, 有 9 个假人, 并且排成一排, 格内存在 3 个假人, 每格假人间隔三格
/playerGroup bot spawn 9 formation rowFold 3 interstice 3
```
#### 空假人组
你可以使用 `/playerGroup bot spawn` 直接创建一个组名为 bot 的假人组, 里面没有任何假人, 然后手动编辑假人组成员后保存,
用于需要多个假人且位置没有队形的情况
`/playerGroup bot add [假人]` 向组添加假人, 如果组已经保存在数据库将更新数据
`/playerGroup bot del [假人]` 向组删除假人, 如果组已经保存在数据库将更新数据
#### 假人组保存
使用此指令进行假人组保存 `/playerGroup [假人组名] save` 将使用 `splite` 保存数据
数据将保存在当前世界存档根目录下的 `pecaPlayer.db` 文件, 可以使用 sql/[sql 可视化工具](https://sqlitebrowser.org/) 查询
使用 `/playerGroup list` 查询所有已保存假人组
`/playerGroup id [假人组ID] execute` 执行假人组所有假人保存的操作
假人组 id 可以使用 `/playerGroup list` 找到对应假人组查看详细获得
`/playerGroup id [假人组ID] execute add [假人操作指令]` 向假人组所有假人添加操作, 使用 `%s` 代替假人名, `%s` 会被替换成下一个假人名
#### 例子
```markdown
# 有一个 id 为 1 的假人组, 内有假人 bot_1, bot_2, bot_3, bot_...
# %s 将会替换成 bot_1, bot_2, bot_3, bot_...
# id 为 1 的假人组, 内所有假人添加向上看操作
/playerGroup id 1 execute add "/player %s look up"
```
`/playerGroup id [假人组ID] execute set [假人操作位置] [假人操作指令]` 修改假人组所有假人在第几个的操作
`/playerGroup id [假人组ID] execute del [假人操作位置]` 删除假人组所有假人在第几个的操作
`/playerGroup id [假人组ID] execute clear` 清空假人组所有假人的操作
使用 `index` 选择仅操作第几个假人
#### 例子
```markdown
# 有一个 id 为 1 的假人组, 内有假人10个, 修改第5个假人的第2个操作为向上看
/playerGroup id 1 execute set 2 "/player %s look up" index 5
# 有一个 id 为 1 的假人组, 内有假人10个, 删除第2个假人的第1个操作
/playerGroup id 1 execute del index 2
```
### /playerManage
使用此指令进行假人保存/管理/快捷操作, `/playerManage` 将使用 `splite` 保存数据
数据将保存在当前世界存档根目录下的 `pecaPlayer.db` 文件, 可以使用 sql/[sql 可视化工具](https://sqlitebrowser.org/) 查询
使用此指令将当前玩家的数据保存为假人数据 `/playerManage clone [用途]`
`/playerManage clone` 可以使用 `in` 修改保存数据的游戏模式, 使用 `to` 修改保存假人的名称
使用 `/playerManage [玩家名] save [用途]` 来保存指定假人/玩家的数据
使用 `/playerManage list` 列出所有保存假人
#### find 搜索
如果你保存了大量假人, 想找到一个假人, 或者你想看看一个范围有没有保存假人, 使用 `/playerManage list` 显然是不行的
这时候就可以使用 `/playerManage find` 来在数据库搜索假人, 可以从 4 种方面搜索假人
#### 例子
```markdown
# 搜索名称
/playerManage find [名称]
# 搜索游戏模式
/playerManage find gamemode [模式]
# 搜索维度
/playerManage find dimension [维度]
# 搜索坐标
/playerManage find pos [坐标]
```
可以一次从两个方面搜索假人
#### 例子
```markdown
# 搜索在主世界, 并且名称内带有 bot 的假人
/playerManage find dimension minecraft:overworld is bot
# 搜索名称内带有 test, 并且游戏模式为生存的假人
/playerManage find test in survival
# 搜索在当前玩家坐标不超过 50 的范围, 并且在地狱的假人
/playerManage find pos ~ ~ ~ inside 50 in minecraft:the_nether
# 搜索名称内带有 bot, 并且在当前玩家坐标不超过 20 的范围
/playerManage find bot at ~ ~ ~ inside 20
```
#### 假人 保存/执行 操作
假人 id 可以使用 `/playerManage list` / `/playerManage find` 找到对应假人组查看详细获得
`/playerManage id [假人ID] execute` 执行假人保存的操作
`/playerManage id [假人ID] execute add [假人操作指令]` 假人添加操作
`/playerManage id [假人ID] execute del [假人操作位置]` 删除假人在第几个的操作
`/playerManage id [假人ID] execute set [假人操作位置] [假人操作指令]` 修改假人在第几个的操作
`/playerManage id [假人ID] execute clear` 清空假人所有的操作
#### 例子
```markdown
# 有一个 id 为 1 的假人, 名称为 bot_1, 添加操作向上看
`/playerManage id [假人ID] execute add "/player bot_1 look up"`
# 有一个 id 为 1 的假人, 名称为 bot_1, 修改第二个操作向上看
`/playerManage id [假人ID] execute set 2 "/player bot_1 look up"`
# 有一个 id 为 1 的假人, 删除第二个操作
`/playerManage id [假人ID] del 2`
```
#### 搜索坐标范围
搜索坐标时使用 `inside` 指定搜索范围, 搜索范围为
`传入坐标(x, y, z) - inside