一个用于在 ToolDelta 中导出/导入 Minecraft Bedrock 命令方块链的插件。支持从指定坐标定位链表头、跨区块顺序遍历、断链与 deny 方块处理、环检测、流式导出以及可靠导入放置。
- 作者: 猫七街
- 版本: 0.1.0
- 插件名: 命令链导出器
- 导出命令链为 txt: 交互式指定导出文件名,逐行输出到插件数据目录。
- 从 txt 导入命令链: 交互式选择文件与目标坐标,可靠放置命令方块并恢复属性。
- 自动定位链头: 若给定坐标不在链头,会自动追溯到真正的起点。
- 跨区块遍历: 内置区块分片缓存 (16x64x16) 与 Y 轴切片,支持大范围连续遍历。
- 断链识别: 对“间隔一格”的断链输出
[deny]行,导入时自动放置 deny 方块。 - 环检测: 自动检测已访问坐标,避免死循环。
- 安装并运行 ToolDelta,并确保本插件被加载。
- 依赖前置插件/接口
前置-世界交互(用于读取结构、放置命令方块)。 - 需要有执行放置命令方块与
/setblock的足够权限。
将本目录整体放置到 ToolDelta 的插件目录中,重启/热加载后插件会自动注册以下控制台命令:
export x y z: 导出指定坐标处的命令方块链为 txtimport: 从 txt 导入命令方块链到指定坐标
插件主入口:
entry = plugin_entry(ChainExporter)。
- 在控制台输入:
export <x> <y> <z> - 按提示输入输出文件名(默认
chain.txt)。 - 导出文件将写入插件数据目录:
- 路径:
{插件数据目录}/chain.txt
- 路径:
- 控制台会显示导出行数与完整路径:
已导出 N 行到 <.../数据目录/chain.txt>
- 在控制台输入:
import - 选择要导入的文件序号(列自数据目录下的
*.txt)。 - 输入目标起点坐标
x y z。 - 插件会逐行解析并可靠放置命令方块(含模式、条件、红石、朝向、延迟、名称、命令),并在需要时放置 deny 方块。
导出为逐行文本。普通行示例:
[abcd]<x?>[~dx ~dy ~dz]<name?> command
- [abcd] (四位 flags):由
encode_flags生成a: 模式,0=脉冲,1=循环,2=连锁(三态)b: 条件,0=无条件,1=有条件c: 红石,0=需要红石,1=始终开启d: 朝向,0~5(见下文)
- <x?>:命令方块延迟 Tick,可选;不写则为 0。
- [~dx ~dy ~dz]:相对上一个命令方块的相对位移。
- <name?>:命令方块自定义名称,可选。
- command:原始命令字符串,可能以
/开头或不以/开头。
特殊行(断链/deny):
[deny][~dx ~dy ~dz]
- 表示在相对位移处应放置
deny方块(或minecraft:deny)。
facing_direction 数值与输出方向的对应:
- 0: 下
(0, -1, 0) - 1: 上
(0, 1, 0) - 2: 北
(0, 0, -1) - 3: 南
(0, 0, 1) - 4: 西
(-1, 0, 0) - 5: 东
(1, 0, 0)
- 链头定位:若起始坐标不是链头,使用拓扑反向匹配
get_prev_pos_any追溯上一块,直到无前驱。 - 遍历:根据朝向用
get_next_pos前进,允许“间隔一格”的断链;若断链后继是setblock命令,则以[deny]标记。 - 区块缓存:以
(cx, cy, cz)为键缓存结构,分片大小16x64x16,Y 最小值-64,避免一次性读取过大体素范围。 - 流式导出:
export_chain_iter逐行生成文本,适配大链路导出。 - 可靠导入:调用
make_packet_command_block_update组包并通过place_command_block放置,附带追踪与首 tick 执行参数;deny 方块通过多策略/setblock放置。
- 找不到前置-世界交互:确保安装并启用对应前置插件/接口。
- 没有足够权限:导入需要放置方块与执行命令权限,必要时以管理员/OP 运行。
- 导出为空或中断:确认起始坐标确为命令方块;若链上存在不可读区块,插件会跳过并结束。
- deny 未放置成功:插件会尝试
deny与minecraft:deny两种名称,并在失败时退化为无回执命令。
- 版本:
(0, 1, 0) - 作者:猫七街
若未在仓库中另行说明,本插件默认遵循与 ToolDelta 主项目一致的许可策略。