扩展点
基本信息
| 属性 | 值 |
|---|---|
| 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 三属性;被叠层界面反射读取 |