需要做的事情

在Arclight代码库中直接编译CraftBukkit(简称compile obc)

想要通过让编译快速失败(Fail-fast),发现一些在Arclight中缺失的Patch。

Arclight自1.20.4以来,有一段时间未全量同步Bukkit的Patch了。因此,在`net.minecraft`里有可能存在没有被发现的缺失的字段和方法。

参见:https://github.com/IzzelAliz/Arclight/issues/1660

为了实现这一点,我们希望通过Bukkit对NMS的Patch,筛选出由Bukkit Patch而来的方法和字段,并把带有这些方法和字段定义的nms jar插入到编译CraftBukkit时的compileClasspath中。


实现Paper API(简称paper suppert)

目前Arclight只支持Spigot API,在Paper正式Hard fork之后,支持Paper API的需求逐渐迫切起来。

参见:https://github.com/IzzelAliz/Arclight/issues/47


现在的`:relocateCraftBukkit`构建步骤使用的是SpecialSources,需要切换到TinyRemapper

为了解决https://github.com/IzzelAliz/Arclight/issues/2010导致的Arch loom remap错误。

同时为未来Minecraft不再混淆时彻底抛弃mixin refmap做准备。


让Arclight可以重新以模组形式运行

包括两个方面:

  • 让项目可以直接在开发环境中`:runServer`

    • 这样做的优点有:可以直接在IDEA里打断点启动,而不再需要远程调试;对于Fabric,在IDEA里启动可以让服务端用Mojmap名运行(目前只能以intermediary名运行)。

  • 把Arclight jar放入mods文件夹就可以使用

参见:https://github.com/IzzelAliz/Arclight/issues/2009

Arclight曾经是可以以模组形式运行的。


从bukkit仓库里的nms patch自动化生成接口注入表和字段注入表

qyl在尝试

接口注入表是用来注入方法的,使用arch-loom的格式(即除了需要生成`architectury.common.json`以外,还需要生成对应的接口源代码文件)。

字段注入表需要自定义格式,由于字段比较简单,希望只通过一个json文件,标记字段所在的类、字段名、字段类型。所有对MC类型的引用,均应使用Mojmap。

Bukkit还会patch一些构造器,所以我们还需要一个构造器注入表。


从spigot-server的pom文件,自动挑拣出对应的依赖“?:{

现在的bootstrap项目是手动复制来自spigot-server的依赖版本,这很容易在版本升级时遗漏。


更多的调试输出

需要一些system property开关,用来增加在debug.log里调试输出的信息。

  • 所有向Bukkit抛出的事件

    • 包括参数

    • 按类型过滤?

  • Arclight Remapper所有remap的名称

    • 原名称→新名称

    • 需要一些过滤器?


bukkit.yml的allow-end选项的功能还未实现

arclight目前还没实现禁用末地的选项,参考https://github.com/IzzelAliz/Arclight/issues/2064


大饼

这部分仅作记录,有没有还不一定呢(


是否需要继续支持Forge平台?

参见:https://github.com/IzzelAliz/Arclight/issues/2011

需要继续收集社区的反馈。


用于模组/插件实现Arclight服务端兼容的Arclight API

例如目前假设只有ServerLevel会触发Bukkit事件,应该允许模组作者通过某种方式要求在模组中的世界触发Bukkit事件——或许是Jar-in-jar带上一个Arclight API,在模组里的类实现一个`ILevelBridge`之类的。参见:Arclight使用的假设


是否把上游切换到Paper

这意味着使用Paper的CraftBukkit,Bukkit API的行为变为以Paper为基准。

参见:https://github.com/IzzelAliz/Arclight/issues/1661