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 模组问题。 只要它能正常工作就行

编辑推荐精选

讯飞智文

讯飞智文

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

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

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

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多