地牢房间(Room)
基本信息
| 属性 | 值 |
|---|---|
| 枚举 | greymerk.roguelike.dungeon.base.DungeonRoom(dungeon/base/DungeonRoom.java:41) |
| 常量数 | 37 |
| 工厂方法 | DungeonRoom.getInstance(DungeonRoom)(dungeon/base/DungeonRoom.java:81) |
| 实现类数 | 37 个 Dungeon* / Dungeons*(dungeon/rooms/,共 37 个 .java) |
| 抽象基类 | DungeonBase(dungeon/base/DungeonBase.java) |
| 接口 | IDungeonRoom(dungeon/base/IDungeonRoom.java):generate / getSize / validLocation |
| 一致性 | 37 个常量 ↔ 37 个 import ↔ 37 个 case ↔ 37 条 return new(逐条核对,无遗漏、无多余) |
功能
房间是地牢的最小组成单元。每种房间实现 IDungeonRoom.generate(...),在给定 LevelSettings、入口朝向数组 Cardinal[] entrances 与原点 Coord origin 时把结构写入世界。
房间实例由 DungeonRoom.getInstance 按需 new 出来(非预注册对象),真实调用点有 6 处:
DungeonFactory.java:80-82—— 三种取法:单例池非空取单例、否则按权重随机、否则取 baseSecretRoom.java:21与SecretRoom.java:65—— 密室原型DungeonWeightedChoice.java:22—— 带权随机的IWeighted实现
⚠️ 本 mod 不注册任何房间方块/物品;房间全部在生成时直接写入原版方块。
房间表
getSize() 列取自各实现类的 public int getSize() 返回语句(逐文件读取)。行数为各 .java 的总行数。
| 常量 | 实现类 | getSize() |
行数 |
|---|---|---|---|
BRICK |
DungeonsBrick |
6 | 155 |
CREEPER |
DungeonsCreeperDen |
7 | 93 |
CRYPT |
DungeonsCrypt |
10 | 386 |
ENCHANT |
DungeonsEnchant |
6 | 325 |
ENDER |
DungeonsEnder |
7 | 81 |
FIRE |
DungeonsFire |
10 | 227 |
MUSIC |
DungeonsMusic |
7 | 187 |
NETHER |
DungeonsNetherBrick |
6 | 91 |
NETHERFORT |
DungeonsNetherBrickFortress |
10 | 205 |
PIT |
DungeonsPit |
4 | 198 |
PRISON |
DungeonsPrison |
12 | 340 |
SLIME |
DungeonsSlime |
8 | 165 |
SMITH |
DungeonsSmithy |
9 | 498 |
SPIDER |
DungeonsSpiderNest |
4 | 89 |
CAKE |
DungeonsWood |
6 | 106 |
LAB |
DungeonLab |
9 | 292 |
CORNER |
DungeonCorner |
4 | 102 |
MESS |
DungeonMess |
10 | 461 |
ETHO |
DungeonEtho |
8 | 23 |
ENIKO |
DungeonEniko |
7 | 127 |
BTEAM |
DungeonBTeam |
8 | 441 |
OSSUARY |
DungeonOssuary |
10 | 273 |
OBSIDIAN |
DungeonObsidian |
10 | 369 |
AVIDYA |
DungeonAvidya |
10 | 288 |
STORAGE |
DungeonStorage |
10 | 156 |
ASHLEA |
DungeonAshlea |
10 | 22 |
FIREWORK |
DungeonFirework |
10 | 282 |
BEDROOM |
DungeonBedRoom |
5 | 192 |
REWARD |
DungeonReward |
10 | 208 |
LIBRARY |
DungeonLibrary |
8 | 293 |
PYRAMIDTOMB |
DungeonPyramidTomb |
8 | 260 |
DARKHALL |
DungeonDarkHall |
9 | 224 |
TREETHO |
DungeonTreetho |
12 | 167 |
LINKER |
DungeonLinker |
6 | 80 |
LINKERTOP |
DungeonLinkerTop |
6 | 93 |
PYRAMIDSPAWNER |
DungeonPyramidSpawner |
4 | 151 |
PYRAMIDCORNER |
DungeonPyramidCorner |
4 | 93 |
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 房间常量数 | 37 | dungeon/base/DungeonRoom.java:42-79 |
最小 getSize() |
4(PIT、SPIDER、CORNER、PYRAMIDSPAWNER、PYRAMIDCORNER) |
上表 |
最大 getSize() |
12(PRISON、TREETHO) |
上表 |
| 实现类最大行数 | 498(DungeonsSmithy) |
dungeon/rooms/DungeonsSmithy.java |
| 实现类最小行数 | 22(DungeonAshlea)、23(DungeonEtho) |
对应文件 |
交互
| 触发 | 行为 |
|---|---|
| 地牢生成 | DungeonFactory 按权重从 DungeonRoom 池中取实例并调用 generate |
| 密室生成 | SecretRoom 复用同一工厂;原型在 SecretRoom.java:21 / :65 |
getSize() |
房间占位边长,validLocation 用它做边界检测 |
| 玩家 | 无直接交互;房间内可找到战利品箱与刷怪笼 |
三个「配置敏感」房间
以下三个房间读取 generous 配置项,配置为 false 时会降级:
| 房间 | 行为 | 来源 |
|---|---|---|
DungeonLab |
generous 为真时额外给实验器材 |
dungeon/rooms/DungeonLab.java:153 |
DungeonBTeam |
generous 为真时用绿宝石块,否则用其他方块 |
dungeon/rooms/DungeonBTeam.java:322 |
DungeonsSmithy |
generous 为真时给 Anvil.NEW_ANVIL,否则 Anvil.DAMAGED_ANVIL |
dungeon/rooms/DungeonsSmithy.java:434 |
相关条目
- 主题(Theme) - 房间从
settings.getTheme()取材质 - 房间段(Segment) - 房间之间的连接件
- 配置项 -
generous等键的完整列表 - 战利品表 - 房间内箱子按分类抽取战利品