抽象元素

一个用于帮助抽象模组与依赖项之间交互的API。

基础库

概述

Abstractium 是一个中等简单程度的模组,它提供了工具来在模组与给定依赖项之间抽象交互式代码。

这是做什么的?

Abstractium 的分支大致如下:

  • Abstractium = "Api" + "Minecraft Abstraction";
  • Api = "Events" + "Abstraction Tools";

Events 的功能与市面上几乎所有其他事件系统类似,但有一点小区别:它还具有并发能力和基于字符串的标识系统。它用于承载 mixin 的主要“功能”,而该 mixin 在另一个更新中可能无法工作。

Abstraction Tools 提供了一种简单的方法,本质上用于实现一个由预制调用组成的接口,也就是“Abstraction Mappings”。不同版本的 abstraction mappings 通过入口点注册。AbstractionHandler.java 类会自动处理所有版本管理。abstraction mappings 还允许“子抽象”,即其中可以包含一组特定调用的子集。以下是一个示例层级结构:

  • AbstractClientCalls{
    • AbstractRenderCalls{
      • AbstractWorldRenderCalls{
        • AbstractBlockRenderCalls{},
        • AbstractEntityRenderCalls{}
      • },
      • AbstractGuiRenderCalls{}
    • },
    • AbstractSoundCalls{
      • AbstractEntitySoundCalls{},
      • AbstractBlockSoundCalls{}
    • }
  • }

Minecraft Abstraction 将这一切整合在一起,为其他模组提供一个内置的抽象层。请注意,这还远未完成。目前只有最低限度的内容,足以让我把自己的模组移植到它上面,仅此而已。如果你想贡献,请记住,我只会接受适用于此 api 支持的所有内置版本的抽象。

我该如何使用它?

好吧,如果你确实想使用我内置的 minecraft abstraction,其实非常简单!只需把我的模组添加到你的依赖列表中(相关文档很快就会提供),然后访问 AbstractiumClient#CLIENT_ABSTRACTION_HANDLER 或 AbstractiumCommon#COMMON_ABSTRACTION_HANDLER。 如果你想制作自己的 abstraction handling,那就复杂得多,但你需要遵循 net.feltmc.abstractium.library 中的做法。 未来某个时候会有 wiki。

开发路线图

目前它的目标相当有限。支持 fabric 1.18.2 到 最新版本。未来对于以下内容存在可能性而非计划:

  • Code Wrapper:这将允许不同版本的模组无需修改即可在更新版本上运行。
  • Legacy Support:支持 1.18.2 以下的版本。
  • Forge Abstraction:抽象并包装 forge 代码(取决于另一个 PatchworkMC)

为什么制作这个?

我制作这个 api 是因为 mojang 太喜欢重构他们自己的代码了。我知道模组开发者们都会同意我的看法:mojang 的重构让做模组变得如此繁琐且令人失去动力。它迫使我们开发者减少对改进模组的关注,而更多地去重写代码,以便让模组在最新版本上运行。然后,如果某人想维护多个版本,就必须在多个分支上用补丁/改进进行更新,这在后勤上简直是一场噩梦。对用户来说,这导致许多许多模组分散在不同版本中。这使人们无法在最新版本上,把他们最喜欢的所有模组放进同一个整合包中游玩。这种挫败感被有效地转化为一个雄心勃勃的 api,以最终把这些恼人的麻烦彻底消灭。