警报器(工业警报器 / 蜂鸣报警器)

基本信息

属性 工业警报器 蜂鸣报警器
metadata 1(DAMAGE_INDUSTRIAL_ALARM,BlockDamages.java:8) 2(DAMAGE_HOWLER_ALARM,BlockDamages.java:9)
子方块类 blocks/subblocks/IndustrialAlarm.java blocks/subblocks/HowlerAlarm.java
TileEntity TileEntityIndustrialAlarm(IC2IndustrialAlarm) TileEntityHowlerAlarm(IC2HowlerAlarm)
TE 注册名来源 CommonProxy.java:34 CommonProxy.java:33
继承关系 继承 TileEntityHowlerAlarm(TileEntityIndustrialAlarm.java:11) 基类
中文名 工业警报器(zh_CN.lang:36) 蜂鸣报警器(zh_CN.lang:37)
需依附方块 是(IndustrialAlarm.java:54-56) 是(HowlerAlarm.java:43-45)
碰撞箱 0.125,0,0.125 → 0.875,0.4375,0.875 同左(HowlerAlarm.java:17)
GUI GuiIndustrialAlarm + ContainerEmpty GuiHowlerAlarm + ContainerEmpty
贴图 IndustrialAlarm.java:80-85 HowlerAlarm.java:69-74

功能

两个方块构成「视觉告警 + 听觉告警」的一对,都由红石信号驱动(RedstoneHelper.checkPowered,TileEntityHowlerAlarm.java:75):

  • 蜂鸣报警器(meta 2):被红石激活时循环播放一个「工业警报音」,通过客户端 PositionedSoundRecord 定位播放。声音对象由辅助类 TileEntitySound 持有,负责播放/停止/查询状态(tileentities/TileEntitySound.java:7-31)
  • 工业警报器(meta 1):继承蜂鸣报警器的全部声音能力,额外实现 ITextureHelper,用灯光闪烁表现告警状态

工业警报器的闪烁逻辑(TileEntityIndustrialAlarm.java:22-32):以 { 0, 7, 15, 7, 0 } 为灯光序列循环,未通电时 lightLevel 归 0,通电时 internalFire 每 tick 递增并对序列长度取模,索引除 2 取灯光等级。贴图按灯光等级偏移(等级 7 偏移 1,等级 15 偏移 2,TileEntityIndustrialAlarm.java:34-45)。

数值

数值名 值 引用
默认声音名 default DEFAULT_SOUND_NAME(TileEntityHowlerAlarm.java:30)
默认告警范围 64 配置项 alarmRange(ConfigurationHandler.java:24-25)
客户端声音基础范围 16 SoundHelper.DEFAULT_RANGE = 16F(SoundHelper.java:11)
范围放大规则 range 仅在 volume > 1.0F 时乘以 volume SoundHelper.java:21-23
播放条件 观察者与声源距离平方 < range² SoundHelper.java:27
服务端广播最大范围 128 配置项 maxAlarmRange(ConfigurationHandler.java:26-27)
SMP 模式最大范围 256 配置项 SMPMaxAlarmRange(ConfigurationHandler.java:42-43)
工业警报灯序列 0, 7, 15, 7, 0 lightSteps(TileEntityIndustrialAlarm.java:13)

range 在 TileEntity 构造时取自配置项 alarmRange(TileEntityHowlerAlarm.java:65),并持久化到 NBT 的 range 字段(TileEntityHowlerAlarm.java:270)。

允许的警报音

声音名来自配置项 allowedAlarms,默认 "default,sci-fi,factorio-rocket-silo"(ConfigurationHandler.java:28-30),加载时会 replaceAll(" ", "") 去掉空格。服务端在每个 tick 由 ServerTickHandler 把该列表与 maxAlarmRange 打包成 PacketAlarm 广播给客户端(ServerTickHandler.java:30);客户端 ClientTickHandler 校验并填充 availableAlarms(ClientTickHandler.java:56,73,77)。

交互

触发 行为
红石通电 开始播放警报;断电则停止
右键(手持染料) 仅蜂鸣报警器(meta 2)支持:改变颜色,消耗 1 个染料(BlockNuclearControlMain.java:406-420)
右键(手持 IC2 涂装器) 仅蜂鸣报警器支持:套用涂装器颜色,工具损耗 1 点耐久(BlockNuclearControlMain.java:421-428)
右键(其他情况) 打开对应 GUI(BlockNuclearControlMain.java:437-447)
扳手拆下 掉落对应 metadata(TileEntityIndustrialAlarm.java:52-54)
失去支撑 自动掉落(BlockNuclearControlMain.java:248-256)

注意染色逻辑写在 BlockNuclearControlMain.onBlockActivated 中,且被 tileEntity instanceof TileEntityHowlerAlarm 判定(BlockNuclearControlMain.java:406)—— 因为工业警报器继承自蜂鸣报警器,该判定对两者都成立,所以工业警报器同样可染色。

合成配方

蜂鸣报警器(RecipesNew.java:57-60):

NNN
IMI
ICI
字符 物品
N Blocks.noteblock(音符盒)
I plateIron(铁板)
M IC2 elemotor(电动机)
C circuitBasic(基础电路)

工业警报器(RecipesNew.java:66-68):

BBB
BLB
BHB
字符 物品
B plateBronze(青铜板)
L 橙色灯(metadata 2)
H 蜂鸣报警器(metadata 2)

旧版配方(recipes = old)中两者材料不同:蜂鸣报警器用 advIronIngot + dustRedstone(RecipesOld.java:38-41),工业警报器用 reinforcedGlass + dyeOrange + dustRedstone(RecipesOld.java:48-52)。

相关条目