跳到正文
烈焰甘蔗Wiki

流体模式切换热键

KeyEvents(core/client/KeyEvents.java)注册的第二个热键,控制魔杖遇到流体时是否继续扩展。

基本信息

属性 值
注册类 portablejim.bbw.core.client.KeyEvents
识别语言键 bbw.key.fluidmode
分类语言键 bbw.key.category
默认按键 Keyboard.KEY_NONE(未绑定)
中文名 转换流体模式
英文名 Change Fluid Mode
字段名 keyBindingFluid

与 模式切换热键 共用同一个 KeyEvents 实例、同一条 InputEvent 边沿检测逻辑、同一发包路径,仅语言键和初始状态字段不同 (isPressedFluid)。

⚠️ 默认未绑定,必须玩家自行在按键设置中指定。

客户端行为

与模式键共用一个 PacketWandActivate 包,两个 boolean 分别对应两个键:

PacketWandActivate packet = new PacketWandActivate(currentIsPressed, currentFluidIsPressed);

所以两个键在同一条包里传输,同一次边沿可能同时触发两个键的模式切换。

服务端行为

PacketWandActivate.Handler 收到后调用 nextFluidMode(itemStack, player), 回复聊天消息 bbw.chat.fluidmode.<当前模式名小写>。

nextFluidMode 的实现由物品类决定,因此三根魔杖的流体模式自由度不同:

物品类 nextFluidMode() 实现 可达模式
ItemUnrestrictedWand STOPAT → IGNORE,IGNORE → STOPAT STOPAT、IGNORE
ItemRestrictedWandAdvanced(Iron Wand) 恒 setFluidMode(itemStack, EnumFluidLock.STOPAT) 只有 STOPAT
ItemRestrictedWandBasic(Stone Wand) 恒 setFluidMode(itemStack, EnumFluidLock.STOPAT) 只有 STOPAT

⚠️ Stone Wand 和 Iron Wand 按下这个热键不会有任何效果,因为它们的 nextFluidMode() 无条件写回 STOPAT。只有 Diamond Wand 和 Unbreakable Wand 能在两种流体模式间切换。

两种模式的实际差异

差异发生在 BFS 的第一道过滤(WandWorker.shouldContinue):

模式 mask 遇到水/岩浆源块与流动块时
STOPAT 1 判定为"非空气" → 拒绝该点 → 扩展在此终止
IGNORE 2 判定为可覆盖 → 正常放置 → 继续向外 BFS

IGNORE 匹配的范围包含 Forge 的 IFluidBlock(各 mod 的自定义流体) 和原版 BlockLiquid(水、岩浆),源码与 en_US.lang 的描述一致:

bbw.chat.fluidmode.ignore = “Fluid: Ignore - Builds through fluid (both source blocks and flowing blocks).”

模式 聊天消息(zh_CN)
STOPAT 流体模式:禁止 ——不会在流体中覆盖任何方块
IGNORE 流体模式:忽略 ——会覆盖任何流体方块(包括源头和流动的部分)

⚠️ IGNORE 只放宽流体。其他非空气方块(墙、箱子、生物方块)依然会终止扩展。 它不是"穿透一切"模式。

相关条目

浏览全部模组