Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

UpdateCmd

给 Minecraft 加一条 /update 指令:用两个坐标框出一个长方体,对区域批量刷方块更新(NC / PP)。 面向建筑、验证形状更新、批量让方块重新自检。

Minecraft Loader Java License


这是什么

使用辅助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\;联机时服务端也必须装

安装

  1. 从 Releases 下载 updatecmd-<版本>.jar
  2. 放进游戏实例的 mods\ 目录(该实例需已安装 Fabric API)
  3. 重启游戏

⚠️ 同一个 mod id 只能存在一个 jar。 升级时请先删除旧版本,否则 Fabric 会因重复 mod 拒绝启动。


使用

/update nc <x1> <y1> <z1> <x2> <y2> <z2>

区域内每个坐标让它自身的方块收到一次 NC 更新。

/update nc 100 -59 100 100 -59 100      ← 单格
/update nc ~-5 ~-5 ~-5 ~5 ~5 ~5         ← 以自己为中心 11×11×11
  • 效果:被框住的方块像"旁边有方块变化"那样重新自检(活塞/红石灯/铁轨/漏斗…会立刻响应)
  • 边界:区域外的方块不会被这条指令直接更新

/update pp <x1> <y1> <z1> <x2> <y2> <z2>

扫描区域:空气跳过;非空气的坐标,把它的 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 ⚠️ 未支持、未实机验证。本 mod 用到的 18 个类与关键方法签名在这两版里经逐一比对完全一致,理论上有重编译即可支持的可能,但运行时行为未经测试,请勿直接尝试加载
≤ 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 技术文档:反编译源码行号依据、构建与自测方法、真实验证记录、踩过的坑、二次开发约定

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages