Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

命令链导出器 (ChainExporter)

一个用于在 ToolDelta 中导出/导入 Minecraft Bedrock 命令方块链的插件。支持从指定坐标定位链表头、跨区块顺序遍历、断链与 deny 方块处理、环检测、流式导出以及可靠导入放置。

  • 作者: 猫七街
  • 版本: 0.1.0
  • 插件名: 命令链导出器

功能概览

  • 导出命令链为 txt: 交互式指定导出文件名,逐行输出到插件数据目录。
  • 从 txt 导入命令链: 交互式选择文件与目标坐标,可靠放置命令方块并恢复属性。
  • 自动定位链头: 若给定坐标不在链头,会自动追溯到真正的起点。
  • 跨区块遍历: 内置区块分片缓存 (16x64x16) 与 Y 轴切片,支持大范围连续遍历。
  • 断链识别: 对“间隔一格”的断链输出 [deny] 行,导入时自动放置 deny 方块。
  • 环检测: 自动检测已访问坐标,避免死循环。

依赖与前置

  • 安装并运行 ToolDelta,并确保本插件被加载。
  • 依赖前置插件/接口 前置-世界交互 (用于读取结构、放置命令方块)。
  • 需要有执行放置命令方块与 /setblock 的足够权限。

安装

将本目录整体放置到 ToolDelta 的插件目录中,重启/热加载后插件会自动注册以下控制台命令:

  • export x y z: 导出指定坐标处的命令方块链为 txt
  • import: 从 txt 导入命令方块链到指定坐标

插件主入口:entry = plugin_entry(ChainExporter)。

使用方法

导出

  1. 在控制台输入:
    export <x> <y> <z>
    
  2. 按提示输入输出文件名(默认 chain.txt)。
  3. 导出文件将写入插件数据目录:
    • 路径:{插件数据目录}/chain.txt
  4. 控制台会显示导出行数与完整路径:
    已导出 N 行到 <.../数据目录/chain.txt>
    

导入

  1. 在控制台输入:
    import
    
  2. 选择要导入的文件序号(列自数据目录下的 *.txt)。
  3. 输入目标起点坐标 x y z。
  4. 插件会逐行解析并可靠放置命令方块(含模式、条件、红石、朝向、延迟、名称、命令),并在需要时放置 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)。

朝向映射 (Bedrock)

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 主项目一致的许可策略。