跳到正文

HookLib

作者:hohserg1

核心模组框架

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

简介

这是一个用于 MinecraftForge 核心模组的框架。

基本上对模组开发者很有用。

本项目旨在提供一种简单的方式:通过编写额外代码来修改现有逻辑,而无需直接更改其代码。

不需要了解 JVM 字节码。

哎,发布这个项目确实有点晚了,因为 Mixins 已经风靡全球。不过我发现 HookLib 更顺手,而且我还有一些尚未实现的好点子,能让它变得更好。所以,也许这个项目还是有意义的。

入门

了解钩子

如果你想修改某段代码,但它属于 Minecraft 或其他模组,可以编写如下代码:

@HookContainer
public class MyHooks {
    @Hook
    @OnBegin
    public static void resize(Minecraft mc, int x, int y) {
        System.out.println("Resize, x=" + x + ", y=" + y);
    }
}

HookLib 会在 `Minecraft` 类中查找名为 `resize`、带有两个 `int` 参数的方法,并在找到的
目标方法开头插入对 MyHooks#resize 的调用。

之后,每当窗口大小改变时,你就会在控制台看到一条消息。

添加到项目

  • 在 build.gradle 中添加依赖:
repositories {
    maven {
        url "https://cursemaven.com"
    }
}
dependencies {
    implementation "curse.maven:hooklib:12345"
}
  • 添加 VM 选项 `-Dfml.coreMods.load=gloomyfolken.hooklib.minecraft.MainHookLoader`

也可以通过 Gradle 配置:

minecraft {
    mappings channel: 'snapshot', version: '20171003-1.12'

    runs {
        client {
            workingDirectory project.file('run')
            property "fml.coreMods.load", "gloomyfolken.hooklib.minecraft.MainHookLoader" //here
        }

        server {
            workingDirectory project.file('run')
            property "fml.coreMods.load", "gloomyfolken.hooklib.minecraft.MainHookLoader" //here
        }
    }
}
  • 在你的 IDE 中执行 Gradle 刷新

后续学习

查看我们的 Wiki,了解 API 详情和进阶技巧

路线图

  • <s>让 HookLib 成为核心模组的模组加载器</s>
  • <s>在方法调用处设置注入点</s>
  • <s>提供打印可能的 @LocalVariable 参数的方法</s>
  • <s>在表达式处设置注入点</s>
  • <s>提供访问私有变量的方法</s>
  • 移植到新版 Minecraft
  • 添加编译时验证用的注解处理器
  • 为核心模组添加配置
  • 缓存已应用钩子的目标类

致谢

  • 感谢 @GloomyFolken 开发了原版 HookLib!
  • 感谢 @Foreck 设计了很棒的 Logo!

常见问题

HookLib 支持哪些 Minecraft 版本?

HookLib 支持 Minecraft Java 版 1.12.2,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

HookLib 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

hohserg1 的其他作品

查看全部 →