附属模组 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):

  1. 若 configFileName 已存在则直接 return(:32-35)——重复注册是静默忽略的,原本的 throw new BiomePackageAlreadyRegistered(...) 已被注释(:33)
  2. 放入 namedPackages 与 orderedPackages 两张表(:36-37)
  3. 立即调用 taggedConfigManager.initializeConfig(namedSettings, configDirectory) 生成配置文件(:40)
  4. 加入 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 覆写世界种子。

相关条目