Hyxin

Hyxin

将Java的Mixin特性/混入框架引入Hytale!

游戏玩法

Hyxin 为游戏 Hytale 提供了一个 Mixin 环境。它使开发者能够无需直接修改游戏文件,即可修改、扩展并向 Hytale 的代码库注入行为。

功能特性

Mixin 是一个用于 Java 的性状(Trait)/混入(Mixin)框架,允许插件开发者在不直接修补或修改游戏文件的情况下更改游戏代码。这对开发者来说是一个非常强大的工具,使他们能够添加钩子、修改游戏逻辑,并能够完成原本无法做到的事情。

Hyxin 同时提供了 FabricMC 的 Mixin 分支LlamaLad7 的 MixinExtras。开发者应该能够使用这两个项目所添加的大部分功能,但并非所有功能都已准备好投入生产环境。

抢先体验警告

游戏 Hytale 目前处于抢先体验阶段。情况不稳定,且容易频繁变更。某些功能可能无法正常工作,或者可能以意外或非最佳的方式运行。请耐心等待我们解决这些问题。

已知问题与注意事项

  • Mixin 配置只能从 earlyplugins(早期插件)中加载。
  • 我们目前只扫描工作目录中的 earlyplugins 文件夹以查找 Hyxin 配置。可以通过运行参数添加额外路径,但我们尚无法扫描这些路径。
  • 在开发 Hyxin 本身时,文件是从 AppClassLoader 加载的,而非预期的 earlyplugins URLClassLoader。
  • 存取器(Accessors)、调用器(Invokers)、接口注入以及类似功能尚未准备好投入生产环境。
  • 不支持 DisabledByDefault 选项以及禁用插件功能。

安装 Hyxin

Hyxin 的 jar 文件以及所有使用 Hyxin 的插件都必须放在你的 earlyplugins 文件夹中。你需要手动创建这个文件夹,它们目前还不会为你自动创建。在服务器上,你需要在 pluginslogs 文件夹旁边创建这个文件夹。在单人游戏中,你的插件必须放在你的世界里,具体是世界的 earlyplugins 文件夹中。

使用 Hyxin 进行开发

Hyxin 项目尚未在 Maven Central 上提供。你可以手动将其添加到你的 Gradle 依赖项中,或者使用 Cursemaven

将 Hyxin 配置添加到标准的插件 manifest.json 文件中。Configs 数组定义了一份 Mixin 配置文件列表,Hyxin 将尝试从你的插件 jar 中加载这些文件。

{
  "Group": "...",
  "Name": "...",
  "Version": "...",
  "Description": "...",
  "Hyxin": {
    "Configs": [
      "your_plugin.mixins.json"
    ]
  }
}

your_plugin.mixins.json 文件中,你应该设置 Mixin 类加载的根包名,然后在 mixins 数组中填写你要加载的每个类的名称。

{
  "required": true,
  "minVersion": "0.8",
  "package": "com.example.mixins",
  "mixins": [
    "ExampleMixin"
  ]
}

然后在预期位置定义你的 Mixin 类,本例中为 src/main/com/example/mixins/ExampleMixin.java。在此示例中,我们正是在 HytaleServer 构造函数中调用 EarlyPluginLoader#hasTransformers 之前立即注入我们的 onMain 方法。

@Mixin(HytaleServer.class)
public class ExampleMixin {

    @Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lcom/hypixel/hytale/plugin/early/EarlyPluginLoader;hasTransformers()Z"))
    private static void onMain(CallbackInfo ci) {
        HytaleLogger.get("Hyxin-Example").at(Level.INFO).log("Hello from Hyxin! The server has been patched!");
    }
}

鸣谢与致谢

Hyxin 项目由 DarkhaxJaredlll08 开发和维护。Hyxin 项目基于 Mixin 构建。特别感谢 Mumfrey,他为维护该项目投入了无数的时间。

我们非常感谢所有使这个项目成为可能的先前工作。所有商标、版权和所有权仍归其原作者所有。包含这些库并不表示其创建者或附属组织对本项目的认可。

Nodecraft

Hytale Store