Skip to content

核心 API

@Integration

标记在类上的注解,声明集成信息。

java
@Target(ElementType.TYPE)
public @interface Integration {
    String value();                    // 目标模组 ID(必填)
    String version() default "*";      // 版本范围
    IntegrationType[] type() default {IntegrationType.CLIENT, IntegrationType.DEDICATED_SERVER};
}
属性类型说明
valueString集成的目标模组 ID
versionString兼容的模组版本范围(Maven 版本语法),默认 "*"
typeIntegrationType[]集成的目标环境,默认 {CLIENT, DEDICATED_SERVER}

IntegrationType changed in 26.1

枚举,表示集成适用的环境:

1.21.1: CLIENTDEDICATED_SERVERDATA

26.1: CLIENTDEDICATED_SERVERCLIENT_DATASERVER_DATA breaking

说明
CLIENT物理客户端
DEDICATED_SERVER专用服务端
CLIENT_DATA客户端数据生成
SERVER_DATA服务端数据生成

IntegrationInstance

代表一个具体的集成实例,封装反射信息。

构造与初始化

java
IntegrationInstance instance = new IntegrationInstance(
    "targetmod",                    // 目标 modId
    ModVersionRange.of("[1.0,2.0)"), // 版本范围
    "com.example.MyIntegration",     // 类全限定名
    List.of(IntegrationType.CLIENT)  // 环境类型列表
);

方法

方法说明
newInstance()加载类,使用 MethodHandles.Lookup 查找空参构造和四个可选加载方法
invoke()调用 apply() 方法(通过 MethodHandle 反射)
invokeClient()调用 applyClient() 方法
invokeClientData()调用 applyClientData() 方法
invokeServerData()调用 applyServerData() 方法
containsType(IntegrationType)检查该实例是否包含指定环境类型
is(ModInfo)匹配目标模组 ID 和版本范围

方法约定

集成类需提供无参构造以及以下可选方法(均需为 void ()):

方法名调用时机
apply()双端通用加载
applyClient()物理客户端加载
applyClientData()客户端数据生成
applyServerData()服务端数据生成

至少定义其中一个方法,否则输出警告。方法通过 MethodHandle 反射调用,不依赖接口实现。

完整示例

java
@Integration(
    value = "targetmod",
    version = "[1.0,2.0)",
    type = { IntegrationType.CLIENT, IntegrationType.DEDICATED_SERVER }
)
public class MyIntegration {
    // 公共无参构造(隐式)

    public void apply() {
        // 双端通用注册代码
    }

    public void applyClient() {
        // 仅客户端:注册渲染、按键绑定等
    }

    public void applyClientData() {
        // 客户端数据生成
        GatherDataEvent event = IntegrationHook.getEvent();
    }

    public void applyServerData() {
        // 服务端数据生成
    }
}

Released under the CC-BY-NC-SA 4.0 License.