扩展点

基本信息

属性 值
Mixin 启用 usesMixins = true、mixinsPackage = mixins(gradle.properties:101、117)
核心类 coreModClass = DatabackCore(gradle.properties:122),实现 IFMLLoadingPlugin + IEarlyMixinLoader
Mixin 分组数 11(databack.mixins.Mixins 枚举)
Mixin 类总数 16(全部 Side.COMMON 除 2 组客户端)
注入阶段 全部 Phase.EARLY(Mixins.java:30 的 builder.setPhase(Phase.EARLY))
Access Transformer 无(accessTransformersFile 为空,gradle.properties:98)
IMixinConfigPlugin 无(mixinPlugin 为空,gradle.properties:112)
modid 声明的 API 包 无(apiPackage 为空,gradle.properties:93)
公开事件数 6 个数据包事件 + 4 个标签注册事件

功能

Databack 是典型的「Mixin 驱动的注册层」模组:它不新增内容,而是把现代数据包的资源模型(标签、群系、密度函数、结构……)注入 1.7.10 的原版注册表与存档系统。本页记录它对外暴露的注入点与事件。

Mixin 分组

databack.mixins.Mixins 枚举(Mixins.java:11-25),构造器统一为 new MixinBuilder().addSidedMixins(side, mixins).setPhase(Phase.EARLY):

枚举项 侧 Mixin 类 作用
DATAPACK COMMON MixinWorldInfo_Datapacks 给 WorldInfo 注入 db$datapackOrder / db$disabledDatapacks 两个字段,实现 DatapackWorldInfo
NBT_ACCESSOR COMMON AccessorNBTTagList、AccessorNBTTagCompound NBT 访问器,供 db$loadDatapackInfo 强转遍历
HEIGHTMAPS COMMON MixinWorld_HeightmapExt World 高度图扩展
EXT COMMON MixinWorld_Ext 注入 WorldContext db$context(懒初始化为 WorldContextImpl)
TAGS COMMON Mixin_InjectTaggable 向 Block / Item / BiomeGenBase 三者注入 BitSet db$presentTags,实现 Taggable
PROXY_REGISTRY COMMON MixinBiomeGenBase_Registry、MixinEntityList_Registry、MixinEntityRegistry_Registry、MixinBiomeGenMutated_Registry 把原版注册表内容镜像进 ProxyEntityRegistry / ProxyBiomeRegistry 等
REGISTRY_ACCESSOR COMMON AccessorRegistrySimple 访问 RegistrySimple 内部
BLOCK_VARIANT COMMON MixinBlock_Identity 方块身份/变体(BlockExt_Identity)
ITEM_VARIANT COMMON MixinItem_Identity 物品身份/变体(ItemExt_Identity)
DEBUG_OVERLAY_TOGGLE CLIENT MixinASMEventHandler_DebugToggle、MixinStaticASMEventHandler_DebugToggle 在 ASMEventHandler 构造器 TAIL 捕获 Method 与其 @DebugOverlayEntry 注解(MixinASMEventHandler_DebugToggle.java:27-31),供叠层界面反查显示名
DEBUG_OVERLAY_ORDER CLIENT MixinEventBus_OverlayOrder 混入 EventBus.post(@At("HEAD")、cancellable = true),按 DebugOverlayRegistry 的保存顺序重排叠层读数

已逐个核对:上述 16 个类在 src/main/java/databack/mixins/early/ 下均存在,无引用了但缺失的类。

加载路径

DatabackCore.getMixinConfig() 返回 "mixins.databack.early.json"(DatabackCore.java:37-40),getMixins(Set<String> loadedCoreMods) 返回 IMixins.getEarlyMixins(Mixins.class, loadedCoreMods)(DatabackCore.java:42-45)。getASMTransformerClass() 返回空数组、getSetupClass() 与 getAccessTransformerClass() 均返回 null(DatabackCore.java:14-36),即不做 ASM 转换、只用 Mixin。

资源中另有 mixins.databack.json 与 mixins.databack.late.json,二者均只含 required / minVersion / refmap / target / compatibilityLevel,没有 package 也没有任何 mixins 数组;而 11 个枚举组全部为 Phase.EARLY。因此实际生效的只有 early 配置。

对外事件

数据包生命周期事件(databack.common.loader.DatapackEvent)

全部在 MinecraftForge.EVENT_BUS 上发出:

事件 发出位置 载荷
DatapackRegisterHandlersEvent CommonProxy.java:153 无 —— 在 19 个内建处理器注册完毕、serverAboutToStart 末尾发出,是追加自定义资源类型的官方挂钩点
DatapackGatherEvent DatapackLoader.java:95 final List<File> candidates —— 可向候选列表追加数据包
DatapackStartLoadingEvent DatapackLoader.java:128 无
DatapackLoadEvent DatapackLoader.java:110 final List<Datapack> packs
DatapackFinishedLoadingEvent DatapackLoader.java:164 无
DatapackSyncEvent DatapackLoader.java:193 final EntityPlayerMP player

(DatapackEvent.java:12-52 定义了各事件类与字段。)

标签注册事件(databack.common.tags.TagEvent)

事件 载荷类型 发出位置
RegisterBlockTagsEvent ITagRegistry<BlockIdentity> BuiltinTagRegistries.java:84
RegisterItemTagsEvent ITagRegistry<ItemIdentity> BuiltinTagRegistries.java:111
RegisterBiomeTagsEvent ITagRegistry<BiomeGenBase> BuiltinTagRegistries.java:138
RegisterEntityTagsEvent ITagRegistry<Class<? extends Entity>> EntityTagRegistry.java:74

四者均继承 TagEvent<T>,其 registry 实现 ITagRegistry<Target>(ITagRegistry.java:22),提供 getOrCreateTag(ResourceLocation)、addToTag(tag, target) 等操作。Databack 自带的示范用法见 TestTags(见 配置项)。

编程接口

接口 / 方法 位置 用途
DatapackHandlerRegistry.registerTypeHandler(String, Supplier<IDatapackTypeHandler>) DatapackHandlerRegistry.java:14 注册自定义资源类型;PathTrie 按路径分量最深匹配(getTypeHandler / findDeepestHandler,:24-30)
DatapackHandlerRegistry.forEach(TrieVisitor<...>) DatapackHandlerRegistry.java:32 DFS 遍历已注册处理器
DatapackHandlerRegistry.clearAll() / clearForTesting() DatapackHandlerRegistry.java:37、43 清空注册表
DatapackWorldInfo MixinWorldInfo_Datapacks 实现 顺序表与禁用集合的读写接口(db$getDatapackOrder / db$getDisabledPacks / db$enable / db$disable / db$syncPackDeltas / db$order)
Taggable Mixin_InjectTaggable 实现 db$getTagBitSet() 取标签位集
BlockExt_Identity / ItemExt_Identity / WorldExt databack.common.mixinext 三条 Mixin 扩展接口
BlockIdentityRegistry / ItemIdentityRegistry databack.common.interop.registry getBlockIdentity(Block, meta) / getItemIdentity(Item, damage)
IProxyRegistry<T> 实现 ProxyBlockRegistry / ProxyItemRegistry / ProxyBiomeRegistry / ProxyEntityRegistry getIdForObject / getObject / iterator,把原版对象映射到 ResourceLocation
IEventListenerExt MixinASMEventHandler_DebugToggle 实现 db$getWrappedMethod() / db$getOverlayAnnotation()
DebugOverlayEntry databack.common.debug 方法级注解,title / description / defaultMode 三属性;被叠层界面反射读取

相关条目