房间段(Segment)
基本信息
| 属性 | 值 |
|---|---|
| 枚举 | greymerk.roguelike.dungeon.segment.Segment(dungeon/segment/Segment.java:38) |
| 常量数 | 34 |
| 工厂方法 | Segment.getSegment(Segment)(dungeon/segment/Segment.java:75) |
| 实现类数 | 34 个(dungeon/segment/part/ 共 35 个 .java,减去抽象基类 SegmentBase) |
| 抽象基类 | SegmentBase implements ISegment(dungeon/segment/part/SegmentBase.java:12) |
| 一致性 | 34 个常量 ↔ 34 个 import ↔ 34 个 case ↔ 34 条 new Segment* |
功能
段(Segment)填充地牢房间之间的空白,用来在两层楼板之间造拱门、开壁龛、铺书架、点火把等。它与房间的关键区别是:段一定会读取当前主题(level.getSettings().getTheme()),因此外观随地牢主题变化;房间也读主题,但段用得更密集。
Segment.getSegment 的真实调用点共 8 处,全部集中在两个生成器里:
dungeon/segment/SegmentGenerator.java:82,84,89,91dungeon/segment/SegmentGeneratorBase.java:62,64,69,71
两个生成器都遵循同一模式:若当前位置在已建墙体的正下方则放对应的拱门变体(arch),否则从当前段的池中随机取:
if (...) return Segment.getSegment(arch);
return Segment.getSegment(this.segments.get(rand));
段表
行数为各实现类 .java 的总行数。
| 常量 | 实现类 | 行数 | 备注 |
|---|---|---|---|
ARCH |
SegmentArch |
46 | 通用石拱 |
FIREARCH |
SegmentFireArch |
61 | 壁炉拱 |
FIREPLACE |
SegmentFirePlace |
85 | 完整壁炉 |
SHELF |
SegmentShelf |
52 | 书架 |
INSET |
SegmentInset |
64 | 墙面内凹 |
MOSSYARCH |
SegmentMossyArch |
77 | 苔石拱 |
MUSHROOM |
SegmentMushrooms |
63 | 蘑菇丛 |
NETHERARCH |
SegmentNetherArch |
60 | 下界砖拱 |
NETHERSTRIPE |
SegmentNetherStripes |
71 | 下界条纹 |
NETHERWART |
SegmentNetherWart |
65 | 下界疣 |
NETHERLAVA |
SegmentNetherLava |
74 | 下界岩浆 |
JUNGLE |
SegmentJungle |
60 | 丛林植被 |
BOOKS |
SegmentBooks |
58 | 成堆书籍 |
SPAWNER |
SegmentSpawner |
71 | 刷怪笼 |
WHEAT |
SegmentWheat |
78 | 麦田 |
TOMB |
SegmentTomb |
102 | 墓室构件 |
CHEST |
SegmentChest |
81 | 战利品箱 |
SILVERFISH |
SegmentSilverfish |
72 | 蠹鱼窝 |
SKULL |
SegmentSkull |
79 | 头颅墙 |
FLOWERS |
SegmentFlowers |
65 | 花丛 |
DOOR |
SegmentDoor |
62 | 门 |
ANKH |
SegmentAnkh |
73 | 安卡十字饰 |
CAVE |
SegmentCave |
51 | 天然洞口 |
SEWER |
SegmentSewer |
49 | 下水道壁面 |
SEWERARCH |
SegmentSewerArch |
77 | 下水道拱 |
SEWERDOOR |
SegmentSewerDoor |
94 | 下水道门 |
SEWERDRAIN |
SegmentSewerDrain |
77 | 下水道排水口 |
MINESHAFT |
SegmentMineShaft |
59 | 矿井支护 |
LAMP |
SegmentLamp |
122 | 灯(最长实现) |
ARROW |
SegmentTrap |
108 | 陷阱发射器 |
SQUAREARCH |
SegmentSquareArch |
48 | 方柱拱 |
CELL |
SegmentPrisonCell |
69 | 牢房 |
WALL |
SegmentWall |
65 | 墙 |
PLANT |
SegmentPlant |
73 | 植物 |
⚠️ 常量名与实现类名并非逐一对应:ARROW → SegmentTrap、CELL → SegmentPrisonCell、MUSHROOM → SegmentMushrooms(复数)、NETHERSTRIPE → SegmentNetherStripes(复数)。按常量名去猜文件名会漏掉这 4 个。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 段常量数 | 34 | dungeon/segment/Segment.java:39-72 |
| 实现类行数区间 | 46(SegmentArch)– 122(SegmentLamp) |
上表 |
| 壁龛(Alcove)实现数 | 2 | dungeon/segment/alcove/:PrisonCell.java、SilverfishNest.java |
getSegment 调用点数 |
8 | 4 个在 SegmentGenerator.java,4 个在 SegmentGeneratorBase.java |
陷阱段与喷溅药水
SegmentTrap(常量 ARROW)会发射用本 mod 自带药水系统生成的喷溅药水:
dungeon/segment/part/SegmentTrap.java:101——Potion.getSpecific(rand, PotionType.SPLASH, Potion.POISON, false, false)dungeon/segment/part/SegmentTrap.java:103——Potion.getSpecific(rand, PotionType.SPLASH, Potion.HARM, false, false)
此处 Potion 是 mod 自己的枚举 greymerk.roguelike.treasure.loot.Potion(由 SegmentTrap.java:10 显式 import),不是 net.minecraft.potion.Potion。其药水 ID 映射存在问题,详见 药水与药剂。
相关条目
- 主题(Theme) - 段从主题取 floor/wall/stair/pillar
- 地牢房间(Room) - 段连接的房间
- 药水与药剂 -
SegmentTrap使用的自建药水 ID 表