警报器(工业警报器 / 蜂鸣报警器)
基本信息
| 属性 | 工业警报器 | 蜂鸣报警器 |
|---|---|---|
| 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)。