Configuration
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | config/SGCraft.cfg(BaseMod.java:117 用 e.getSuggestedConfigurationFile()) |
| 声明总数 | 35 个带类型的键 + 1 个自动分配键 = 36 |
| 类别数 | 7(options / stargate / naquadah / dhd / iris / debug / opencomputers)+ 1 隐式类别 villagers |
| 读取时机 | configure() 在 preInit(BaseMod.java:119)与 init(SGCraft.java:133)各跑一次 |
功能
配置读取统一走 BaseConfiguration,它继承 Forge 的 Configuration。所有键都在 SGCraft.configure()(SGCraft.java:148-155)与各子系统的 configure(config) 中显式声明。
三条"三阶段"链路都成立:每个键都有声明(config.getX("category", "key", default))、有赋值(赋给某个静态字段)、且有外部读取方。少数例外已在下表"备注"中标出。
数值
options 类别(7 个)
| 键 | 类型 | 默认值 | 作用 | 来源 |
|---|---|---|---|---|
enableNaquadahOre |
Boolean | true |
是否注册矿石世界生成器 | SGCraft.java:335 |
augmentStructures |
Boolean | false |
是否给沙漠金字塔加装星门遗迹 | worldgen/FeatureGeneration.java:29 |
chunkLoadingRange |
Integer | 1 | 星门保持加载的区块半径 | tileentities/SGBaseTE.java:199 |
logStargateEvents |
Boolean | false |
输出星门事件日志 | tileentities/SGBaseTE.java:201 |
addOresToExistingWorlds |
Boolean | false |
为已生成区块补矿石 | SGCraft.java:154 |
allowCraftingNaquadah |
Boolean | false |
是否提供硅岩的无序合成 | SGCraft.java:199 |
allowCraftingCrystals |
Boolean | false |
是否提供两种水晶的合成 | SGCraft.java:284 |
后两个是配方开关:关闭时对应的 newRecipe / newShapelessRecipe 调用根本不执行,配方在游戏中不存在。
stargate 类别(15 个)
| 键 | 类型 | 默认值 | 来源 |
|---|---|---|---|
energyPerFuelItem |
Double | 96000 | tileentities/SGBaseTE.java:182 |
gateOpeningsPerFuelItem |
Integer | 24 | :183 |
minutesOpenPerFuelItem |
Integer | 80 | :184 |
secondsToStayOpen |
Integer | 300 | :185 |
oneWayTravel |
Boolean | false |
:186 |
closeFromEitherEnd |
Boolean | true |
:187 |
maxEnergyBuffer |
Double | 1000 | :188 |
distanceFactorMultiplier |
Double | 1.0 | :191 |
interDimensionMultiplier |
Double | 4.0 | :192 |
transparency |
Boolean | true |
:200 |
soundVolume |
Double | 1.0 | :203 |
variableChevronPositions |
Boolean | true |
:204 |
explosionRadius |
Integer | 10 | blocks/SGBaseBlock.java:57 |
explosionFlame |
Boolean | true |
blocks/SGBaseBlock.java:58 |
explosionSmoke |
Boolean | true |
blocks/SGBaseBlock.java:59 |
energyPerFuelItem 有两个下游读取方:DHDTE.availableEnergy / useFuelItem 把它当作每件燃料的能量(guis/DHDTE.java:191、guis/DHDTE.java:218),SGBaseTE.configure 又用它推导 energyToOpen 与 energyUsePerTick(tileentities/SGBaseTE.java:189-190)。改这一个键会同时改三处数值。
下面 7 个键的静态字段在逻辑与渲染深处被读取,读取点如下(grep 可复核):
| 键 | 静态字段 | 读取点 |
|---|---|---|
transparency |
SGBaseTE.transparency |
渲染器分支 renderers/SGBaseTERenderer.java:112 |
soundVolume |
SGBaseTE.soundVolume |
播放音效时相乘 tileentities/SGBaseTE.java:585 |
oneWayTravel |
SGBaseTE.oneWayTravel |
决定能否从对端发起 tileentities/SGBaseTE.java:876 |
closeFromEitherEnd |
SGBaseTE.closeFromEitherEnd |
决定非发起端能否关闭 tileentities/SGBaseTE.java:530 |
maxEnergyBuffer |
SGBaseTE.maxEnergyBuffer |
能量目标上限 tileentities/SGBaseTE.java:733 |
distanceFactorMultiplier |
SGBaseTE.distanceFactorMultiplier |
距离因子 1 + 14 * f * lr² tileentities/SGBaseTE.java:579 |
interDimensionMultiplier |
SGBaseTE.interDimensionMultiplier |
跨维度时额外乘 tileentities/SGBaseTE.java:580 |
另有三个 options 键的读取点:chunkLoadingRange 决定强制加载的区块数(tileentities/SGBaseTE.java:238)、logStargateEvents 控制事件日志(tileentities/SGBaseTE.java:269)、iris.preserveInventory 在奇点致死时与原版 keepInventory 游戏规则并列判定(tileentities/SGBaseTE.java:1034)。
naquadah 类别(7 个)
全部在 worldgen/NaquadahOreWorldGen.java:42-48,默认值见同文件 :23-30:genUnderLavaOdds=4、maxNodesUnderLava=8、genIsolatedOdds=8、maxIsolatedNodes=4、debugLava=false、debugRandom=false、debugLevel=0。详见 Naquadah 矿石世界生成。
dhd 类别(3 个)
| 键 | 类型 | 默认值 | 作用 | 来源 |
|---|---|---|---|---|
linkRangeX |
Integer | 5 | 控制器向左右搜索星门的格数 | guis/DHDTE.java:59 |
linkRangeY |
Integer | 1 | 向上下搜索的格数 | guis/DHDTE.java:60 |
linkRangeZ |
Integer | 6 | 向正前方搜索的格数 | guis/DHDTE.java:61 |
iris / debug / opencomputers 类别(各 1 个)
| 键 | 类型 | 默认值 | 作用 | 来源 |
|---|---|---|---|---|
iris.preserveInventory |
Boolean | false |
奇点杀死玩家时是否保留物品 | tileentities/SGBaseTE.java:202 |
debug.debugStructures |
Boolean | false |
打印遗迹注入日志 | worldgen/FeatureGeneration.java:30 |
opencomputers.wirelessRebroadcastStrength |
Double | 50.0 | 无线包跨星门转发的强度 | compat/oc/OCWirelessEndpoint.java:27 |
opencomputers.* 只有在 OC 存在时才被声明:OCIntegration.configure 由 BaseMod.java:122 的子系统循环调用,而该子系统只在检测到 OC 时才被创建。
villagers 类别(1 个,自动分配)
| 键 | 类型 | 默认值 | 作用 | 来源 |
|---|---|---|---|---|
villagers.tokra |
Integer | 自动分配 | Tok’ra 村民的职业 ID | SGCraft.java:346 → BaseMod.java:353 → BaseConfiguration.java:38-48 |
这是唯一不通过 getX(category, key, default) 读取的键。getVillager 以 -1 作为哨兵:读到 -1 就调 allocateVillagerId 取一个未被占用的 ID 并写回配置文件(BaseConfiguration.java:42-45)。因此这个键的值由加载顺序决定,玩家不应手动改。
交互
- 载入:
preInit与init各调一次configure()(BaseMod.java:119、SGCraft.java:133)。 - 保存:
BaseMod.postInit末尾调saveConfig()(BaseMod.java:150)。 extended标记:BaseConfiguration.get在遇到配置文件中不存在的键时把extended = true(BaseConfiguration.java:59-61),用于判断是否需要重写配置文件。
已知不一致
DHDTE.maxEnergyBuffer 不是配置项。 它在 DHDTE.configure 中被直接赋成 SGBaseTE.energyPerFuelItem(guis/DHDTE.java:62),而 DHDTE.configure 在 SGCraft.configure() 中排在 SGBaseTE.configure 之前(SGCraft.java:149 vs :152)。因此:
- preInit 第一遍:读到
SGBaseTE.energyPerFuelItem的静态默认值 96000; - init 第二遍:读到用户配置后的值。
若某个第三方 mod 只调用一次配置流程,DHDTE.maxEnergyBuffer 会固定为 96000。源码中没有注释解释这个顺序,此处按现状记录,不作判断。
相关条目
- SGBaseTE -
stargate/iris/options的大部分消费方 - DHDTE -
dhd.*的消费方 - Naquadah 矿石世界生成 -
naquadah.*的消费方 - OpenComputers 集成 -
opencomputers.*的消费方 - 星门地址 - 地址方案不受配置影响