给 Minecraft 加一条
/update指令:用两个坐标框出一个长方体,对区域批量刷方块更新(NC / PP)。 面向建筑、验证形状更新、批量让方块重新自检。
B站传送门 https://b23.tv/V2a0dQk
使用辅助mod执行批量复制、粘贴操作时,容易出现大量bud方块,不便于投影保存。此mod提供了一条新指令,令指定区域内的方块进行一次特定更新,以解决该问题。 模式表格:
| 模式 | 说明 |
|---|---|
nc |
让区域内每个坐标自身的方块收到一次 NC 更新(Neighbor Changed,最常见的"方块更新") |
pp |
扫描区域(跳过空气),对每个非空气方块进行一次以 6 个面邻居各当作一次"更新核" 做一次 PP 更新(形状更新) |
它不依赖除 Fabric API 之外的任何 mod,也不会改变任何原版机制——只是把"制造方块更新"这件事变成可批量执行的操作。
两点框选范围,操作直观且符合直觉。操作权限需要op 允许手动填写精确坐标。并支持绝对坐标、相对坐标两种模式(~ 相对坐标、^ 局部坐标,可用 Tab 补全) 仅在已加载区块执行。pp模式跳过空气。且并不会真的以六个面作为更新核进行一次pp更新,仅为目标方块收到六次更新,每个更新来自更新核,等价于以邻居为更新核进行更新,尽可能减小性开销。 仅服务端mod,无需客户端安装。 经测试,对一万个方块执行pp更新,平均耗时4ms
| 项 | 要求 |
|---|---|
| Minecraft | 26.2(Java 版) |
| 模组加载器 | Fabric Loader ≥ 0.19.3 |
| 依赖 | Fabric API(必需) |
| Java | ≥ 25 |
| 安装位置 | 客户端实例 mods\;联机时服务端也必须装 |
- 从 Releases 下载
updatecmd-<版本>.jar - 放进游戏实例的
mods\目录(该实例需已安装 Fabric API) - 重启游戏
⚠️ 同一个 mod id 只能存在一个 jar。 升级时请先删除旧版本,否则 Fabric 会因重复 mod 拒绝启动。
区域内每个坐标让它自身的方块收到一次 NC 更新。
/update nc 100 -59 100 100 -59 100 ← 单格
/update nc ~-5 ~-5 ~-5 ~5 ~5 ~5 ← 以自己为中心 11×11×11
- 效果:被框住的方块像"旁边有方块变化"那样重新自检(活塞/红石灯/铁轨/漏斗…会立刻响应)
- 边界:区域外的方块不会被这条指令直接更新
扫描区域:空气跳过;非空气的坐标,把它的 6 个面邻居(西、东、北、南、下、上)各当作一次更新核, 每个核做一次 PP 更新(形状更新)。
/update pp 100 -59 100 100 -59 100 ← 只处理这一格(它的 6 个邻居各当一次核)
- 效果:区域内每个非空气方块都会收到 PP 更新(因为它的每个邻居都当过一次核)
- 权限:需要 OP(权限等级同
/setblock)。无权限的指令源会被直接拒绝 - 未加载区块:跳过并计入回显,绝不加载
- 回显示例:
已对 1 个坐标执行 nc 更新(区域总量 1,跳过 0 个未加载/越界坐标,耗时 5 ms)已执行pp更新:扫描10201个坐标(跳过空气0、未加载/越界0),让目标方块收到61206次形状更新(邻居未加载跳过0次),耗时4ms
同一个说法"给某坐标一次更新"至少有两种相反的实现,本 mod 的选择如下:
| 模式 | 方向 | 该坐标的角色 | 谁能观察到效果 |
|---|---|---|---|
nc |
该坐标自身收到一次 NC 更新 | 接收方 | 该坐标上的方块(卡住的铁轨会掉、活塞会伸出…) |
pp |
邻居向外发 PP 更新,该坐标被刷到 | 接收方(由 6 个邻居当核) | 该坐标上的方块(悬空火把会掉、栅栏/箱子会重新连接…) |
注意:铁轨不能用来验证
pp。PP 更新时铁轨不检查附着(只有 NC 更新才会让它掉落)。
技术细节、反编译源码行号依据、为什么这么调用,见 MAINTENANCE.md。
| 模式 | 开销 |
|---|---|
nc |
每个坐标 1 次 NC 更新调用 |
pp |
每个非空气坐标最多 6 个核 × 6 个方向 = 36 次形状更新传播 |
- 无体积上限:指令在主线程同一 tick 内同步执行完。请先在小范围试手感,再放大
- 空气占多数的大框非常便宜(跳空气);密实区域开销大,请谨慎
- 实测参考:
扫描 1030301 个坐标(跳过空气 1030298)→ 18 次核 → 28 ms
nc:悬空铁轨
/setblock 100 -60 100 stone
/setblock 100 -59 100 rail strict
/setblock 100 -60 100 air strict
/update nc 100 -59 100 100 -59 100
前三条后铁轨悬空不掉;执行 /update nc 后应立即掉落。
pp:悬空火把(strict 表示"放方块但不产生任何更新")
/setblock 100 -60 100 stone
/setblock 100 -59 100 torch
/setblock 100 -60 100 air strict
/update pp 100 -59 100 100 -59 100
第三条后火把悬空不掉;执行 /update pp 后应立即掉落。
注意:
pp的选定区域必须给火把那一格——给支撑位置(此时是空气)会被"跳过空气"跳过,什么都不会发生。
| 目标版本 | 状态 |
|---|---|
| 26.2 | ✅ 支持(构建与实机验收版本) |
| 26.1.x / 26.3.x | |
| ≤ 1.21.x | ❌ 不支持。该世代运行时使用 intermediary 命名空间,且权限 API、Java 版本均不同,需要移植而非改版本号 |
⚠️ 不要自行修改fabric.mod.json里的depends.minecraft来强行加载:那只会把"启动时明确报错"变成"运行时随机崩溃"。
需要 JDK 25、Gradle 9.7+(仓库自带 wrapper)。
git clone https://github.com/zQianWan/minecraft-updatecmd.git
cd UpdateCmd
./gradlew build # Windows: gradlew.bat build
# 产物:build/libs/updatecmd-<版本>.jar无游戏环境自测(4 套 91 项断言,含真实 Brigadier 解析与 PP 调用契约的代理录像测试):
Invoke-Expression (Get-Content '.\_selftest\run-selftest.ps1' -Raw -Encoding UTF8)| 限制 | 说明 |
|---|---|
| 无体积上限 | 大范围指令会阻塞服务端主线程,可能长时间无响应 |
| 不处理未加载区块 | 跳过并报告(刻意设计,避免生成地形) |
pp 核不去重 |
语义与代价见上 |
| 联机 | 必须装在服务端;只装客户端无效 |
| 不改变原版机制 | 本 mod 只是"制造更新",不修改更新规则本身 |
| 版本 | 内容 |
|---|---|
| 1.1.0 | 新增 /update pp(跳空气 + 6 邻居各当一次核 + 不去重 + vanilla 顺序 西→东→北→南→下→上);内部区域类型更名 BoxRegion,两种模式共用遍历顺序契约 |
| 1.0.0 | 首个版本:/update nc |
MIT © 2026 zQianWan
zQianWan(bilibili) —— 仓库:https://github.com/zQianWan/minecraft-updatecmd
| 文件 | 内容 |
|---|---|
| README.md | 本文档:使用者视角的安装 / 用法 / 验收 / 兼容性 |
| MAINTENANCE.md | 技术文档:反编译源码行号依据、构建与自测方法、真实验证记录、踩过的坑、二次开发约定 |