天境地牢方块
基本信息
地牢方块共 15 个,全部使用 BlockDungeonBase 或 BlockDungeonTrap,在 BlocksAether.initialization() 的 :206-257 注册。
| 注册名 | 中文名 | 类 | 构造参数 | 发光 | 创造栏 |
|---|---|---|---|---|---|
carved_stone |
雕纹石 | BlockDungeonBase |
false |
否 | 有 |
sentry_stone |
岗哨石 | BlockDungeonBase |
true |
是 | 有 |
angelic_stone |
天灵石 | BlockDungeonBase |
false |
否 | 有 |
light_angelic_stone |
流光天灵石 | BlockDungeonBase |
true |
是 | 有 |
hellfire_stone |
狱炎石 | BlockDungeonBase |
false |
否 | 有 |
light_hellfire_stone |
流光狱炎石 | BlockDungeonBase |
true |
是 | 有 |
locked_carved_stone |
雕纹石(锁) | BlockDungeonBase |
carved_stone, false |
否 | 无 |
locked_sentry_stone |
岗哨石(锁) | BlockDungeonBase |
sentry_stone, true |
是 | 无 |
locked_angelic_stone |
天灵石(锁) | BlockDungeonBase |
angelic_stone, false |
否 | 无 |
locked_light_angelic_stone |
流光天灵石(锁) | BlockDungeonBase |
light_angelic_stone, true |
是 | 无 |
locked_hellfire_stone |
狱炎石(锁) | BlockDungeonBase |
hellfire_stone, false |
否 | 无 |
locked_light_hellfire_stone |
流光狱炎石(锁) | BlockDungeonBase |
light_hellfire_stone, true |
是 | 无 |
carved_trap |
雕纹石(陷阱) | BlockDungeonTrap |
carved_stone |
— | 无 |
angelic_trap |
天灵石(陷阱) | BlockDungeonTrap |
angelic_stone |
— | 无 |
hellfire_trap |
狱炎石(陷阱) | BlockDungeonTrap |
hellfire_stone |
— | 无 |
locked_* 六个方块与三个 *_trap 在 zh_CN.lang 中复用基础方块的显示名(如 locked_carved_stone 的中文名仍是「雕纹石」),因此在游戏内无法从名字区分锁定态。
功能
锁定态方块(BlockDungeonBase)
BlockDungeonBase 有两个构造(BlockDungeonBase.java:19-34):
BlockDungeonBase(boolean isLit)—— 普通态,pickBlock为nullBlockDungeonBase(Block pickBlock, boolean isLit)—— 锁定态,pickBlock指向其对应的可破坏版本
锁定态方块的行为差异:
| 行为 | 普通态 | 锁定态 |
|---|---|---|
| 硬度 | 0.5 | -1(不可破坏) |
| 爆炸抗性 | 默认 | 6000000.0 |
| 创造标签 | AetherCreativeTabs.blocks |
null(不出现在创造栏) |
getPickBlock |
返回自身物品 | 返回基础方块的物品(:55-59) |
getUnlockedBlock() |
返回自身 | 返回基础方块(:61-63) |
发光值:getLightValue 在 isLit 为真时返回 15.0F * 0.75f,即 11(BlockDungeonBase.java:38-51)。sentry_stone、light_angelic_stone、light_hellfire_stone 及其锁定版本都是发光方块。
脚步声统一为 soundTypeStone(BlockDungeonBase.java:32)。
陷阱方块(BlockDungeonTrap)
BlockDungeonTrap 构造时调用 setBlockUnbreakable()(BlockDungeonTrap.java:22),不可破坏。
onEntityWalking(BlockDungeonTrap.java:26-59)在玩家踩上时触发:
- 方块自身被替换回其
pickBlock(基础方块),陷阱消失 - 按种类刷出对应敌人:
| 陷阱 | 刷出实体 | 位置 | 来源 |
|---|---|---|---|
carved_trap |
EntitySentry(哨卫) |
x+2, y+1, z+2 |
BlockDungeonTrap.java:32-38 |
angelic_trap |
EntityValkyrie(女武神) |
x+0.5, y+1, z+0.5 |
BlockDungeonTrap.java:39-45 |
hellfire_trap |
EntityFireMinion(火之仆从) |
x+0.5, y+1, z+0.5 |
BlockDungeonTrap.java:46-52 |
- 播放关门音效
random.door_close,音量2.0F,音高world.rand.nextFloat() - world.rand.nextFloat() * 0.2F + 1.2F(BlockDungeonTrap.java:52-58)
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 普通地牢石硬度 | 0.5 | BlockDungeonBase.java:33 |
| 锁定地牢石硬度 | -1 | BlockDungeonBase.java:33(三元表达式) |
| 锁定地牢石抗性 | 6000000.0 | BlockDungeonBase.java:28 |
| 发光方块亮度 | 11 | BlockDungeonBase.java:46(15.0F * 0.75f) |
| 陷阱音效音量 | 2.0 | BlockDungeonTrap.java:57 |
| 陷阱音效音高区间 | 1.2 – 2.2 | BlockDungeonTrap.java:58 |
交互
解锁
锁定方块的替换由 Boss 死亡触发。EntitySlider.unlockBlock(EntitySlider.java:709-721)在滑块死亡时递归检查 6 个相邻方块:
if (block == BlocksAether.locked_carved_stone || block == BlocksAether.locked_sentry_stone) {
this.worldObj.setBlock(x, y, z, ((BlockDungeonBase) block).getUnlockedBlock());
// 递归 6 个方向
}
即击杀滑块 Boss 会解锁其所在房间四周的锁定雕纹石与岗哨石,递归传播到整个房间墙面。
黄金地牢使用 locked_hellfire_stone / locked_light_hellfire_stone(ComponentGoldenDungeon.java:38、:106-107、:125-126、:138),白银地牢使用 locked_angelic_stone / locked_light_angelic_stone(ComponentSilverDungeon.java:24、:26)。
拾取外观
因为锁定态的 getPickBlock 返回基础方块(BlockDungeonBase.java:53-59),中键拾取锁定石会得到普通版,因此可以用普通版在地牢外重建房间。