附属模组 API
基本信息
| 属性 | 值 |
|---|---|
| 源码位置 | climateControl/api/(16 个文件) |
| 核心抽象 | BiomePackage(生物群系包)、BiomeSettings(群系设置) |
| 扩展点 | BiomePackageRegistry.register()、DimensionalSettingsRegistry.add() |
| 面向 | 第三方模组作者,不含方块/物品 |
功能
climateControl.api 包是 Climate Control 对外暴露的扩展接口,让其他 mod 把自带的生物群系、或对某一维度的设置改动接入 CC 的生成流程。
接入生物群系
实现 BiomePackage(api/BiomePackage.java:10-30)并调用 BiomePackageRegistry.instance.register(...):
| 必须实现 | 签名 | 出处 |
|---|---|---|
| 构造函数 | BiomePackage(String configFileName) |
api/BiomePackage.java:13-15 |
| 设置工厂 | public abstract BiomeSettings freshBiomeSetting() |
api/BiomePackage.java:25 |
namedBiomeSetting() 用 Named.from(configFileName, freshBiomeSetting()) 生成注册项(:27-29),因此配置文件名即注册键。
register() 的行为(api/BiomePackageRegistry.java:31-43):
- 若
configFileName已存在则直接 return(:32-35)——重复注册是静默忽略的,原本的throw new BiomePackageAlreadyRegistered(...)已被注释(:33) - 放入
namedPackages与orderedPackages两张表(:36-37) - 立即调用
taggedConfigManager.initializeConfig(namedSettings, configDirectory)生成配置文件(:40) - 加入
settings列表(:42)
注册时机在 ClimateControl.preInit 的 setupRegistry()(climateControl/ClimateControl.java:97、:262-322),即 mod 加载早期。
逐维度接管
实现抽象类 DimensionalSettingsModifier(api/DimensionalSettingsModifier.java:14-31)并调用 DimensionalSettingsRegistry.instance.add(String tag, modifier):
| 必须实现 | 出处 |
|---|---|
boolean signalCCActive(int dimension) |
:16 |
void modify(int dimension, ClimateControlSettings settings) |
:18 |
void onWorldLoad(WorldEvent.Load event) |
:20 |
void unloadWorld(WorldEvent.Unload event) |
:22 |
void serverStarted(FMLServerStartedEvent event) |
:24 |
void serverStopped(FMLServerStoppedEvent event) |
:26 |
判定逻辑是任一 modifier 举手即放行(api/DimensionalSettingsRegistry.java:31-35):
public boolean useCCIn(int dimension) {
for (DimensionalSettingsModifier modifier : modifiers.values()) {
if (modifier.signalCCActive(dimension)) return true;
}
return false;
}
该结果与 维度筛选 的 ccOnIn() 在出生点处理中并列判定,任一为真即继续(DimensionManager.java:313-317)。
其他扩展接口
| 接口/类 | 签名 | 用途 | 出处 |
|---|---|---|---|
IslandClimateMaker |
int climate(int x, int z, IntRandomizer randomizer) |
为岛屿指定气候带 | api/IslandClimateMaker.java:13-15 |
IncidenceModifier |
int modifiedIncidence(Numbered<BiomeGenBase> biomeIncidence) |
改写群系出现率 | api/IncidenceModifier.java:15-17 |
DistributionPartitioner |
抽象类 | 划分群系分布 | api/DistributionPartitioner.java:14 |
BiomeRandomizer |
类 | 按气候带或列表随机取群系,含内部类 PickByClimate、BiomeList |
api/BiomeRandomizer.java:18、:84、:180 |
ClimateControlRules |
类 | 汇总各包声明的村庄/石滩规则 | api/ClimateControlRules.java:8 |
BiomeSettings.ID / BiomeSettings.Element |
内部类 | 单个群系的 ID、incidence、气候带、hasVillages |
api/BiomeSettings.java:48、:171 |
数值
| 项目 | 值 | 出处 |
|---|---|---|
api 包文件数 |
16 | ls src/main/java/climateControl/api/*.java | wc -l |
BiomeSettings 中 hasVillages 数组长度 |
256 | api/ClimateControlRules.java:13 |
Climate 合法值 |
0–4 + deepOcean.biomeID + mushroomIsland.biomeID |
api/Climate.java:12-21 |
BiomePackageRegistry.instance |
public static 单例 |
api/BiomePackageRegistry.java:18 |
DimensionalSettingsRegistry.instance |
public static 单例 |
api/DimensionalSettingsRegistry.java:21 |
Climate.legitimate(int)(api/Climate.java:12-21)接受的编码是:气候带 0(SNOWY)、1(COOL)、2(WARM)、3(HOT)、4(OCEAN),外加 BiomeGenBase.deepOcean.biomeID 与 BiomeGenBase.mushroomIsland.biomeID 两个特殊值。
DimensionalSettingsRegistry 中 clearSeeds() / setSeed(int, long) / seedFor(int) 三个方法已被注释(api/DimensionalSettingsRegistry.java:45-52),因此外部 mod 无法通过 API 覆写世界种子。