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办公

扣子-AI办公

职场AI,就用扣子

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

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成热门AI工具AI图像AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具使用教程AI营销产品酷表ChatExcelAI智能客服
TRAE编程

TRAE编程

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

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

热门AI工具生产力协作转型TraeAI IDE
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

数据安全AI助手热门AI工具AI辅助写作AI论文工具论文写作智能生成大纲
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

热门AI工具AI办公办公工具智能排版AI生成PPT博思AIPPT海量精品模板AI创作
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多