BetterBuildersWands
[!INFO] Git Commit:
a39985b| Updated: 2026-08-23 | Minecraft 1.7.10 / Forge 10.13.4.1614
BetterBuildersWands 是一个纯物品的建筑辅助模组:右键一个方块,魔杖会沿着你 点中的那个面用 BFS(广度优先搜索)批量铺开同类方块。它不注册任何方块、实体、 附魔、维度或世界生成 —— 全部内容就是 4 根魔杖和围绕它们的机制系统。
模组 id betterbuilderswands,作者 Portablejim,当前为 GTNewHorizons 的 fork。
物品
本 mod 只注册 4 个物品,全部继承 ItemBasicWand:
| 注册名 | 物品类 | IWand 实现 |
最大耐久 | 单次方块上限 |
|---|---|---|---|---|
wandStone |
ItemRestrictedWandBasic |
RestrictedWand(5) |
131 | 5 |
wandIron |
ItemRestrictedWandAdvanced |
RestrictedWand(9) |
250 | 9 |
wandDiamond |
ItemUnrestrictedWand |
RestrictedWand(1561) |
10000(可配) | 1561 |
wandUnbreakable |
ItemUnrestrictedWand |
UnbreakingWand() |
不掉耐久 | 4096(按 meta) |
- Stone Wand - 基础级魔杖,上限 5 方块,只能盖平面
- Iron Wand - 中级魔杖,上限 9 方块,2 种锁定模式
- Diamond Wand - 高级魔杖,上限 1561 方块,7 种锁定模式
- Unbreakable Wand - 顶级魔杖,7 个 meta 形态,永不掉耐久
- 魔杖物品通用行为 - 共用属性、耐久扣除规则与 NBT 结构
核心机制
搜索与放置
- BFS 方块扩展算法 - 本 mod 的核心:种子判定、双掩码邻接扩展、九道过滤、NBT 敏感比对
- 魔杖等级系统 - 四根魔杖的方块上限、锁定模式自由度、Unbreakable 的 7 个 meta 等级
- Custom Mapping - 指定"看到某方块时用什么建、放成什么",含 NBT 复制机制
- 放置范围客户端预览 - 瞄准时用白色线框画出将放置的范围
枚举与模式
- EnumLock - 7 种方向锁定枚举,同时用作位掩码
- EnumFluidLock - 2 种流体锁定枚举
指令
- /wandOops Command - 撤销最近一次放置(权限等级 0)
配置
- Configuration -
config/betterbuilderswands.cfg全部 7 个选项
热键
网络
- 网络协议 - 通道
bbwands,3 个包
Mod 集成
模组与 6 个其它 mod 集成,全部通过 Loader.isModLoaded() + @Optional.Method
做可选依赖,未安装时自动失效:
| 集成 | 状态 | 作用 |
|---|---|---|
| AE2 Integration | 有条目 | 从 ME 网络抽取方块作为材料 |
| Baubles 集成 | 有条目 | 无线终端放在饰品栏时也能识别 |
| Botania 集成 | 有条目 | 通过 IBlockProvider 从花盆抽方块 |
| Backhand 集成 | 有条目 | 用副手方块作为建造目标 |
| ArchitectureCraft | 记于 Custom Mapping | TileShape 的 NBT 复制 |
| Forestry | 记于 Custom Mapping | 原木/木板等的 TileWood NBT 复制 |
| ExtraUtilities | 记于 Unbreakable Wand | meta 4/5/6 的合成链 |
| Ztones | 记于 Custom Mapping | ofanix 让圆石无限供应 |
ArchitectureCraft / Forestry / ExtraUtilities / Ztones 的条目已合并进 对应的主条目,未单独建页 —— 它们都是某个既有机制的附带分支, 单独成页会与主条目大量重复。
本 mod 没有的东西
以下内容在源码中不存在(结论均有 grep 证据):
$ grep -rn "registerBlock\|registerTileEntity\|registerEntity\|registerWorldProvider\|registerDimension" src/main/java/
(无输出)
| 维度 | 状态 | grep 证据 |
|---|---|---|
| 方块 / TileEntity / 多方块结构 | ❌ 完全没有 | registerBlock、registerTileEntity 均无输出;目录中无 *Block*.java 或 *TileEntity*.java |
| 实体 | ❌ 没有 | 无 Entity*.java 文件;registerEntity、registerModEntity 无输出。魔杖是纯物品 |
| 附魔 | ❌ 没有 | grep -rn "Enchantment|addEnchantment" src/main/java/ 无输出;魔杖也未覆写任何附魔相关方法 |
| 维度 / WorldProvider | ❌ 没有 | registerWorldProvider、registerDimension、DimensionManager 无输出 |
| 世界生成 / 群系 | ❌ 没有 | WorldGen、BiomeGen、registerBiome、IFireCharge 均无输出 |
| PotionEffect / Buff | ❌ 没有 | grep -rn "Potion" src/main/java/ 无输出 |
| 成就 | ❌ 没有 | Achievement 无输出 |
| 结构(Structure) | ❌ 没有 | 唯一与 structure 相关的 TileShape 是 ArchitectureCraft 的方块实体,不是本 mod 注册的结构 |
| NEI / REI / JEI 集成 | ❌ 没有 | grep -rn "nei|rei|jei|IRecipe|ICraftingHandler" src/main/java/ 无输出。配方全部用原版 GameRegistry.addRecipe 注册,物品浏览器会自动读取 |
| 物品效果(Item Effect) | ❌ 没有独立条目 | 魔杖不施加药水效果,唯一的"持续效果"是左键挖/打时掉 2 点耐久(见 魔杖物品通用行为) |
特别说明:Wood Wand 并不存在
资源目录里有 assets/betterbuilderswands/textures/items/wandWood.png,
容易让人以为存在木制魔杖。但源码中没有任何引用:
$ grep -rn "wandWood" src/main/java/
(无输出)
BetterBuildersWandsMod只注册 4 个物品:wandStone、wandIron、wandUnbreakable、wandDiamonden_US.lang只定义了 4 个物品名:wandBasic、wandAdvanced、wandUnrestricted、wandUnbreakablewandWood.png是一个未被使用的残留贴图(上游 fork 时遗留)
betterbuilderswands:wandWood在游戏中不可获得。 官方 BetterBuildersWands 1.7.10 版曾有木魔杖,GTNH fork 已将其移除, 但没删干净贴图。
死代码
| 类 | 状态 |
|---|---|
shims/BlockShim.java |
全项目零调用点。ItemBasicWand.onItemUse 与 BlockEvents 中对应的 getPickBlock 调用均被注释掉 |
IWorldShim.copyBlock / setBlock / playPlaceAtBlock |
接口中声明且有实现,但 WandWorker / BlockEvents 均不调用(放置走 ItemStack.tryPlaceItemIntoWorld) |
IPlayerShim.getNextItem |
BasicPlayerShim 的实现是空循环(for (…) { })后 return null,实际未被调用链使用 |
EnumLock.fromMask / EnumFluidLock.fromMask 的 mask 0 |
locks[safeMask - 1] 在 mask 为 0 时越界;调用方有 NOLOCK / STOPAT 兜底所以不会触发 |
关键机制速查
| 问题 | 答案 | 依据 |
|---|---|---|
| 一次最多放多少方块? | min(wand.getMaxBlocks, 背包+花盆+AE2 总数) |
ItemBasicWand.onItemUse |
| 为什么 Stone Wand 只能盖平面? | getMode() 和 getFaceLock() 都恒为 HORIZONTAL,点顶面时种子被拒 |
BFS 方块扩展算法 |
| 为什么切换模式按了没反应? | 两个热键都默认 KEY_NONE 未绑定 |
模式切换热键 |
| 撤销命令叫什么? | /wandOops(不是 /oo,没有别名) |
/wandOops Command |
| 钻石魔杖耐久调到 2 万有用吗? | 没用,上限被 blocklimit = 1561 卡死 |
魔杖等级系统 |
| ExtraUtilities 合成链更强吗? | 更弱,meta 4/5/6 上限只有 16/32/64,低于默认的 4096 | Unbreakable Wand |
| 撤销能恢复 Forestry 原木的树种吗? | 不能,只 setBlockToAir,不返还 TileEntity NBT |
/wandOops Command |