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。源码中没有注释解释这个顺序,此处按现状记录,不作判断。

相关条目