Forgix

Forgix

Minecraft多平台模组整合工具

Forgix是一款Minecraft模组开发工具,可将多个模组加载器整合到单个jar文件中。它巧妙利用JVM特性实现加载器兼容,简化了跨平台模组开发流程。Forgix支持Forge、NeoForge、Fabric、Quilt等主流加载器,提供灵活配置,已稳定应用于生产环境。该工具为模组开发者提供了高效的多平台支持方案,大幅提升了开发效率。

ForgixMinecraft模组开发多平台支持Gradle插件Github开源项目

Forgix

Forgix是一个全新的工具,允许Minecraft模组开发者将多个插件/模组加载器合并到一个jar文件中!

作为普通用户,这对我有什么好处?

你不需要了解太多关于Forgix的信息,因为这是一个面向开发者的工具,但你使用的模组可能只需要下载一个文件,这样你就不用担心要安装哪个模组加载器了。

它是否足够稳定,可以用于生产环境?

是的,在当前状态下,它已经可以用于生产环境,并且在我测试的所有模组上都能正常工作。即使你的模组代码库非常混乱,它也应该能正常工作。如果出现任何问题,只需在GitHub上提出问题即可。 你也可以等待2.0.0更新,这是项目的完全重写版本,但它的发布时间在现在到2096年1月1日(UTC)之间。

它是如何开始的

Forgix最初是一个实验,目的是看看我能否将多个模组加载器合并到一起。我知道这是可能的(尽管很多人说不可能),经过多次尝试和错误,我终于制作出了一个可以进行半自动jar合并的原型,但它实际上相当糟糕,而且只能用于我正在开发的特定模组。 在意识到这是可行的之后,我重写了整个项目,使其可以被公众使用,于是Forgix诞生了。

它是如何工作的

Forgix利用了JVM只加载被调用的类这一特性。通过稍微改变包的结构,我们可以让每个模组加载器只调用自己的包,而不会干扰其他模组加载器。

例如,Quilt进入quilt.mod.json并从那里调用入口点,但我们更新了包的结构,使其只调用Quilt的入口点,而不调用其他模组加载器的入口点。JVM永远不会加载其他类,因为Quilt永远不会调用它们。

使用方法和文档

首先在你的根目录的build.gradle中应用插件

<details closed> <summary>应用插件</summary>

Groovy

使用plugins DSL

<details closed> <summary>点击查看</summary>
plugins { id "io.github.pacifistmc.forgix" version "<version>" }
</details>

使用传统插件应用方式

<details closed> <summary>点击查看</summary>
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "io.github.pacifistmc.forgix:Forgix:<version>" } } apply plugin: "io.github.pacifistmc.forgix"
</details>

Kotlin

使用plugins DSL

<details closed> <summary>点击查看</summary>
plugins { id("io.github.pacifistmc.forgix") version "<version>" }
</details>

使用传统插件应用方式

<details closed> <summary>点击查看</summary>
buildscript { repositories { maven { url = uri("https://plugins.gradle.org/m2/") } } dependencies { classpath("io.github.pacifistmc.forgix:Forgix:<version>") } } apply(plugin = "io.github.pacifistmc.forgix")
</details>

记得将<version>替换为最新版本!你可以从Forgix Version获取最新版本。


</details>

然后配置它以适应你的模组!这个过程在未来会自动化,但我现在还没有时间去实现。

<details closed> <summary>配置插件使其正常工作</summary>

这是默认情况下应该适用于几乎所有模组的常规配置。

forgix { group = "org.example.mod" mergedJarName = "example-mod" }

group是你的模组的公共包名,mergedJarName将是它创建的合并jar的名称。如果mergedJarName没有扩展名,它会给它添加.jar扩展名,但请注意,有时版本号可能会被检测为扩展名,这种情况下它不会添加.jar扩展名,你需要手动添加。

运行mergeJars任务(在运行build之后)将在Merged文件夹中创建合并的jar。(将来这可能会在build/libs/merged文件夹中)

如果你不想手动运行mergeJars,你可以添加以下内容。(将来这可能会成为默认行为)

subprojects { // ... build.finalizedBy(mergeJars) assemble.finalizedBy(mergeJars) }

</details>

每个Forgix配置的文档!

<details closed> <summary>点击查看</summary>

根容器("forgix")

  • group(字符串)
    • 这是你的模组的公共包名;通常是maven group。
    • 目前是必填值。
  • mergedJarName(字符串)
    • 这是输出jar的名称。如果名称不包含扩展名,会添加.jar扩展名;但有时它会将版本号识别为扩展名而不添加,这种情况下你需要手动将.jar扩展名添加到名称中。
    • 目前是必填值。
  • removeDuplicate(字符串)
    • 这会从合并的jar中移除重复的包。例如,如果你有一个在所有模组加载器中重复但不需要重复的核心包,你可以使用这个来移除重复。
    • 可以多次使用以移除多个重复,但如果有很多重复,最好使用'removeDuplicates',它接受一个列表。
Forge子容器("forge")
  • projectName(字符串)
    • 这是Forge项目的名称。默认设置为"forge"。
  • jarLocation(字符串)
    • 这是projectName指定的项目中构建的Forge jar的位置。默认情况下,它会检索名称最短的jar,这种方法不太完善,但我不知道如何在不依赖loom或类似工具的情况下检索构建的jar,希望将来能有所改进!
  • additionalRelocate(字符串,字符串)
    • 简单来说,这允许你定义更多的group,这对重定位库很有用。
    • 可以多次使用以指定多个重定位。
  • mixin(字符串)
    • 这是因为Forge有时会很麻烦,有时Forge会做一些奇怪的事情,我们无法用正常方式识别mixin。但是,如果我们不自动检测mixin,那么只应该使用这个来明确指定mixin。
    • 可以多次使用以指定多个mixin。
NeoForge子容器("neoforge")
  • projectName(字符串)
    • 这是NeoForge项目的名称。默认设置为"neoforge"。
  • jarLocation(字符串)
    • 这是projectName指定的项目中构建的NeoForge jar的位置。默认情况下,它会检索名称最短的jar,这种方法不太完善,但我不知道如何在不依赖loom或类似工具的情况下检索构建的jar,希望将来能有所改进!
  • additionalRelocate(字符串,字符串)
    • 简单来说,这允许你定义更多的group,这对重定位库很有用。
    • 可以多次使用以指定多个重定位。
  • mixin(字符串)
    • 这是因为NeoForge有时会很麻烦,有时NeoForge会做一些奇怪的事情,我们无法用正常方式识别mixin。但是,如果我们不自动检测mixin,那么只应该使用这个来明确指定mixin。
    • 可以多次使用以指定多个mixin。
Quilt 子容器 ("quilt")
  • projectName (字符串)
    • 这是 Quilt 项目的名称。默认设置为 "quilt"。
  • jarLocation (字符串)
    • 这是projectName 指定的项目构建的 Quilt jar 的位置。默认情况下,它会获取名称最短的 jar,这种方法不太完善,但我不知道如何在不依赖 loom 或类似工具的情况下获取构建的 jar,希望将来能有更好的方法!
  • additionalRelocate (字符串, 字符串)
    • 简单来说,这允许你定义更多的 group,这对重定位库很有用。
    • 可以多次使用以指定多个重定位。
Fabric 子容器 ("fabric")
  • projectName (字符串)
    • 这是 Fabric 项目的名称。默认设置为 "fabric"。
  • jarLocation (字符串)
    • 这是projectName 指定的项目构建的 Fabric jar 的位置。默认情况下,它会获取名称最短的 jar,这种方法不太完善,但我不知道如何在不依赖 loom 或类似工具的情况下获取构建的 jar,希望将来能有更好的方法!
  • additionalRelocate (字符串, 字符串)
    • 简单来说,这允许你定义更多的 group,这对重定位库很有用。
    • 可以多次使用以指定多个重定位。
自定义子容器 ("custom")

因为我不会为每个模组加载器开发新的容器,所以这个容器用来处理其他所有情况。但它无法处理 Forge 类的模组加载器,因为 Forge 比较特殊和复杂。这个配置可以多次使用以指定多个加载器。

  • projectName (字符串)
    • 这是项目的名称。
    • 这是一个必填值。
  • jarLocation (字符串)
    • 这是projectName 指定的项目构建的 jar 的位置。默认情况下,它会获取名称最短的 jar,这种方法不太完善,但我不知道如何在不依赖 loom 或类似工具的情况下获取构建的 jar,希望将来能有更好的方法!
  • additionalRelocate (字符串, 字符串)
    • 简单来说,这允许你定义更多的 group,这对重定位库很有用。
    • 可以多次使用以指定多个重定位。

完整的 Forgix 配置示例:

forgix { group = "org.example.mod" // (必填值) mergedJarName = "example-mod" // (必填值) outputDir = "build/libs/merged" forge { projectName = "forge" jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "forge.org.my.lib" additionalRelocate "org.my.lib.another" "forge.org.my.lib.another" mixin "forge.mixins.json" mixin "forge.mixins.another.json" } neoforge { projectName = "neoforge" jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "neoforge.org.my.lib" additionalRelocate "org.my.lib.another" "neoforge.org.my.lib.another" mixin "neoforge.mixins.json" mixin "neoforge.mixins.another.json" } fabric { projectName = "fabric" jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "fabric.org.my.lib" additionalRelocate "org.my.lib.another" "fabric.org.my.lib.another" } quilt { projectName = "quilt" jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "quilt.org.my.lib" additionalRelocate "org.my.lib.another" "quilt.org.my.lib.another" } custom { projectName = "sponge" // (必填值) jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "sponge.org.my.lib" additionalRelocate "org.my.lib.another" "sponge.org.my.lib.another" } custom { projectName = "spigot" // (必填值) jarLocation = "build/libs/example-mod.jar" additionalRelocate "org.my.lib" "spigot.org.my.lib" additionalRelocate "org.my.lib.another" "spigot.org.my.lib.another" } removeDuplicate "org.example.mod.core" }

这个项目看起来已经停止维护了

取决于你所处的未来时间点,它很可能确实已经停止维护。我不会每天更新这个项目;所有未来的更新都将是修复我尚未发现的错误、改善使用体验,或解决那些由于代码库过于复杂而无法正常工作的 Minecraft 模组问题。 只要它能正常工作就行

编辑推荐精选

商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
下拉加载更多