跳到正文

HookLib

作者:hohserg1

Framework for coremods

收藏

介绍

中文介绍正在准备中,下面暂时显示原文。

Introduction

This is framework for coremods at MinecraftForge.

Basicaly, useful for mod developers.

Goal of this project is to provide an easy way to modify existing logic without directly changing code of it, but by writing your additional code.

Doesn’t require knowledge of jvm bytecode.

Welp, kinda I’m late with publishing it project, bc Mixins took over the world, but I found out HookLib more handy, and I still have unimplemented good ideas, which will make it even better. So maybe it makes sense

Getting started

Understanding of hooks

When exists some code which you wanna to change, but its part of Minecraft or other mod, you can write something like:

@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 will find method with name `resize` with two `int`’s arguments in class `Minecraft` and will insert call of MyHooks#resize to begin of found
target method.

Then you will see in console message when window resized.

Adding to project

  • Add dependency to build.gradle:
repositories {
    maven {
        url "https://cursemaven.com"
    }
}
dependencies {
    implementation "curse.maven:hooklib:12345"
}
  • Add VM option `-Dfml.coreMods.load=gloomyfolken.hooklib.minecraft.MainHookLoader`

It’s possible by gradle too:

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
        }
    }
}
  • Perform Gradle Refresh in your ide

Next learning

Check our wiki for api details and advanced techniques

Roadmap

  • <s>make HookLib to modloader for coremods</s>
  • <s>injection point at method call</s>
  • <s>way to print possible @LocalVariable arguments</s>
  • <s>injection point at expression</s>
  • <s>way to access to private variables</s>
  • port to new versions of Minecraft
  • annotation processor for compile-time validation
  • configs for coremods
  • caching of target classes with applied hooks

Gratitudes

  • Thanks @GloomyFolken for original HookLib development!
  • Thanks @Foreck for cool logo!

常见问题

HookLib 支持哪些 Minecraft 版本?

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

HookLib 怎么安装?

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

评论

登录后评论和评分

hohserg1 的其他作品

查看全部 →