地牢房间(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 —— 三种取法:单例池非空取单例、否则按权重随机、否则取 base
  • SecretRoom.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

相关条目