Skip to content

Hook 开发指南

ItemPluginHook 接口

要将自定义物品插件接入 Craftorithm,需实现 ItemPluginHook 接口:

java
public class MyPluginHook implements ItemPluginHook {

    @Override
    public String namespace() {
        return "myplugin"; // 命名空间,用于物品 ID 前缀
    }

    @Override
    public ItemStack matchItem(String id) {
        // 将 "myplugin:sword" 转换为 ItemStack
        return MyPluginAPI.getItem(id);
    }

    @Override
    public String matchItemId(ItemStack itemStack) {
        // 从 ItemStack 反查物品 ID
        String id = MyPluginAPI.getItemId(itemStack);
        return id != null ? "myplugin:" + id : null;
    }
}

注册 Hook

在插件启动时注册:

java
CraftorithmAPI.INSTANCE.registerItemPluginHook(new MyPluginHook());

模块结构

如果作为独立 Gradle 子模块开发,参考 hook/ 目录下的现有实现:

hook/
├── myplugin/
│   ├── build.gradle.kts
│   └── src/main/java/.../MyPluginHook.java

settings.gradle.kts 中添加子项目:

kotlin
include(":hook:myplugin")

现有 Hook 参考

模块说明
hook/itemsadderItemsAdder 集成(含重载监听)
hook/oraxenOraxen 集成(含重载监听)
hook/mythicmobsMythicMobs 物品
hook/mmoitemsMMOItems 物品
hook/ecoitemsEcoItems 物品
hook/neigeitemsNeigeItems 物品
hook/nexoNexo 物品
hook/azureflowAzureFlow 物品
hook/craftengineCraftEngine 物品
hook/executableitemsExecutableItems 物品
hook/sx-itemSX-Item 物品
hook/protocollibProtocolLib 假结果预览
hook/packeteventsPacketEvents 假结果预览

注意事项

  • Hook 类在 Craftorithm 启动后、配方加载前初始化
  • matchItem() 应返回 null 表示未找到物品
  • matchItemId() 应返回 null 表示不是该插件的物品
  • 避免在 Hook 中执行耗时操作

基于 GPL-3.0 许可证发布