Skip to content

版本差分文档

本文档记录 AnvilLib 各 Minecraft 版本之间的 API 差异、模块可用性和代码级变更,帮助开发者快速识别版本间的兼容性差异和迁移成本。

所有版本均属于 AnvilLib 2.0.0同步并行开发,仅编译目标 Minecraft 版本不同。部分模块因开发产能限制,未同步到全部 Minecraft 版本。以下按版本号排列仅为检索便利,不代表发布先后顺序。


模块可用性矩阵

下表展示各模块在 12 个 Minecraft 版本中的存在状态

模块1.21.11.21.2–1.21.1126.1说明
codec✅ 3✅ 3✅ 3
config✅ 11✅ 11✅ 11
integration✅ 7✅ 7✅ 7
collision
main✅ 2✅ 2✅ 2
network✅ 14✅ 12✅ 141.21.2–1.21.11 缺少 NetworkUtil
recipe✅ 88✅ 99✅ 89
registrum✅ 55✅ 68–71✅ 601.21.2+ 内嵌了 nullness 包(11 文件)
wheel✅ 20✅ 22–30✅ 26
moveable-entity-block✅ 7✅ 7✅ 8
multiblock✅ 26✅ 26因产能限制,未同步到 1.21.2–1.21.11
util✅ 43✅ 43因产能限制,未同步到 1.21.2–1.21.11;nullness 包内嵌到 registrum 中过渡
rendering✅ 19仅 26.1 版本存在
test✅ 17✅ 6✅ 12
总计273240–248312

表示该模块在此版本范围内不存在。数字为 Java 源文件数。

util 模块的 nullness 包内嵌module.util 被移除的版本(1.21.2–1.21.11)中,NonNullSupplierNonNullFunction 等函数式接口被临时内嵌到 module.registrumregistrum.util.nullness 包下,确保 Registrum 模块可独立编译。26.1 中 module.util 恢复为独立模块后,这些类迁回 util.nullness


代码级变更对比

以下按 Minecraft 版本列出各版本与前一版本之间的源码差异。仅列出版本间实际存在变更的条目;无变更的版本跃迁此处省略。

1.21.1 → 1.21.2

编译目标变更: [1.21.1,1.21.2)[1.21.2,1.21.3),Parchment 2024.11.17

模块可用性变更:

  • module.multiblock — 未同步到此版本
  • module.util — 未同步到此版本;nullness 包内嵌到 registrum
  • module.networkNetworkUtil.javautil/ 包未同步(14→12 文件)
  • module.test — Multiblock 测试、Datagen 测试、wheel/lang 未同步(17→6 文件)

recipe 模块代码变更:

文件变更
InWorldRecipe.java新增 placementInfo()recipeBookCategory();移除 canCraftInDimensions()
InWorldRecipeBuilder.javasave() 第二参数: ResourceLocationResourceKey<Recipe<?>>;新增 save(RecipeOutput, ResourceLocation) 重载
(新增) IRecipeMapExtension.java注入接口,提供 anvillib$addRecipes()
(新增) RecipeMapMixin.javaMixin 注入 RecipeMap
(新增) ISerializer.java通用序列化接口
(新增) NumberProviderUtil.javaNumberProvider 工具方法
(新增) component/BlockStatePredicateChanceBlockStateChanceItemStackIItemStackPredicateItemIngredientPredicateItemPredicateNbtPredicate (7 文件)
init/ 包路径init/recipe/init/reicpe/(拼写错误持续至 1.21.11)

registrum 模块代码变更:

文件变更
AbstractRegistrum.java完全重写:License 头更新、Registration 内部类重组、导入顺序变更
(新增) GeneratorType.javaGeneratorType 标记接口
(新增) nullness/ 包 (11 文件)module.util 内嵌:NonNullSupplierNonNullConsumer
Builder/DataGen 方法签名setDataGenerator()/addDataGenerator() 使用 GeneratorType<?> 替代 ProviderType<?>

wheel 模块代码变更:

文件变更
(新增) util/MathUtil.java轮盘数学工具

Bug 修复:

  • Recipe: LibRegistries.*_REGISTRY.get().getValue() — 统一注册表查询 API

1.21.3

编译目标变更: [1.21.3,1.21.4),Parchment 2024.12.07

无源码差异 — 文件清单与 1.21.2 完全一致。仅编译目标适配。


1.21.4

编译目标变更: [1.21.4,1.21.5),Parchment 2025.03.23

registrum 模块生成器重构:

文件变更
RegistrumBlockstateProvider.java移除 — 替换为 generators/RegistrumBlockModelGenerator.java
RegistrumItemModelProvider.java移除 — 替换为 generators/RegistrumItemModelGenerator.java
(新增) providers/generators/ 子包RegistrumBlockModelGeneratorRegistrumItemModelGeneratorRegistrumLegacyBlockModelBuilderRegistrumModelProvider (4 文件)
RegistrumRecipeProviderproviders/ 迁移到 providers/generators/
RegistrumRecipeRunner同上
AbstractRegistrum.javaLicense 头重格式化、移除 RegistrumProvider 导入、添加 @Accessors

1.21.5

编译目标变更: [1.21.5,1.21.6),Parchment 2025.06.15

文件模块变更
LibItemSubPredicates.javarecipe替换为 LibDataComponentPredicates.javaItemSubPredicate.TypeDataComponentPredicate.Type
LibShaders.javawheel替换为 LibRenders.java — 类重命名

1.21.6

编译目标变更: [1.21.6,1.21.7),Parchment 2025.06.29

wheel 模块渲染系统升级:

文件变更
(新增) render/state/ 包 (5 文件)RingRenderStateSelectionRenderStateLibGuiElementRenderStateLibQuadGuiElementRenderState
(新增) LibDynamicUniforms.javaGPU Uniform 动态存储 (Std140)
(新增) mixin/GuiRendererMixin.javaGUI 渲染 Mixin
(移除) shaders/core/ring.json替换为 Java RingRenderState
(移除) shaders/core/selection.json替换为 Java SelectionRenderState

1.21.7

编译目标变更: [1.21.7,1.21.8),Parchment 2025.07.18

文件模块变更
NetworkRegistrar.javanetwork*Bidirectional(type, codec, handler)*Bidirectional(type, codec, handler, handler) — 增加第二个 handler 参数

1.21.8

编译目标变更: [1.21.8,1.21.9),Parchment 2025.09.14无源码差异。


1.21.9

编译目标变更: [1.21.9,1.21.10),Parchment 2025.10.05

文件模块变更
IntegrationManager.javaintegrationLoadingModList.get()FMLLoader.getCurrent().getLoadingModList()
NetworkRegistrar.javanetwork同上
AbstractRegistrum.javaregistrum!FMLLoader.isProduction()!FMLLoader.getCurrent().isProduction()

1.21.10

编译目标变更: [1.21.10,1.21.11),Parchment 2025.10.12

文件模块变更
IItemHandlerCache.javarecipe移除 — 替换为 ItemResourceHandlerCache.javaI 前缀移除、HandlerResourceHandler
ItemHandlerCacheElement.javarecipe替换为 ItemResourceHandlerCacheElement.java
缓存 API 方法recipegetStackInSlotextractgetSlotLimitgetCapacityAsIntisItemValidisValidinsertIteminsert

1.21.11

编译目标变更: [1.21.11,26.1),Parchment 2025.12.20

文件变更
全局ResourceLocationIdentifier 全项目迁移(适配 NeoForge 1.21.5+ 映射变更)
影响文件CodecUtilStreamCodecUtilInWorldRecipeInWorldRecipeBuilderAbstractRegistrum

26.1

编译目标变更: [26.1,26.2),无 Parchment(NeoForge 26.1 不再使用 MCP 映射)。

模块可用性变更:

模块状态说明
rendering新增泛光后处理、UBO 框架、GUI Mixin、renderdoc-loader (19 文件)
multiblock同步1.21.2–1.21.11 中未同步,26.1 中恢复同步 (26 文件)
util同步1.21.2–1.21.11 中未同步,26.1 中恢复同步 (43 文件)
network恢复NetworkUtil.java 回归 (12→14 文件)
registrum重组nullness 包迁出 (−11 文件),回到独立 util 模块

API 重设计 (Breaking Changes):

变更模块详情
IMoveableEntityBlockmoveable-entity-blockclearData/setData (CompoundTag) → storeData/loadData (ValueInput/ValueOutput)
PistonBaseBlockMixinmoveable-entity-blockanvillib$nbt 类型: CompoundTagTagValueOutput
IntegrationTypeintegrationDATACLIENT_DATA + SERVER_DATA
IntegrationInstance/IntegrationManagerintegrationinvokeData/loadDatainvokeClientData+invokeServerData / loadClientData+loadServerData
InWorldReciperecipeicon 字段: ItemStackItemStackTemplate;Serializer 不再实现 RecipeSerializerassemble() 移除 HolderLookup.Provider 参数
InWorldRecipeBuilderrecipeicon/spawnItem() 使用 ItemStackTemplate;新增 defaultId()
AbstractRegistrumregistrumnullness 导入路径迁回 dev.anvilcraft.lib.v2.util.nullness.*

新增特性:

新增项模块
AnvilLibMoveableEntityBlockmoveable-entity-block
WheelSelectionEffect 枚举wheel
AnnularSectorRenderStatewheel
LibEntityTypeTagsrecipe
IRecipeMapExtension + RecipeMapMixinrecipe
整个 rendering 模块rendering

util.nullness 导入路径变迁

由于 module.util 在各版本中的存在状态不同,NonNullSupplier 等类的导入路径存在变化:

版本范围导入路径
1.21.1import dev.anvilcraft.lib.v2.util.nullness.NonNullSupplier;
1.21.2–1.21.11import dev.anvilcraft.lib.v2.registrum.util.nullness.NonNullSupplier;
26.1import dev.anvilcraft.lib.v2.util.nullness.NonNullSupplier;(恢复)

受影响的类(共 9 个):NonNullSupplierNonNullConsumerNonNullBiConsumerNonNullFunctionNonNullBiFunctionNonNullUnaryOperatorNonnullTypeNullableTypeNullableSupplier

1.21.2 起额外包含 FieldsAreNonnullByDefault 注解。


API 稳定性评级

基于各版本的变更频率和影响范围:

API评级说明
CodecUtil / StreamCodecUtilstable仅 1.21.11 发生过 ResourceLocation→Identifier 迁移
ConfigManager / @Config 注解stable无 API 变更
IPacket 接口体系stable无 API 变更
Registrum Builder(Block/Item/Entity 等)stable无 API 变更
MultiblockDefinition / DynamicMultiblockManagerstableAPI 一致,仅可用版本不同(1.21.1、26.1)
NetworkRegistrarvolatile1.21.7 (双向)、1.21.9 (FMLLoader)
InWorldRecipevolatile1.21.2、1.21.11、26.1 各有变更
InWorldRecipeBuildervolatile同上
AbstractRegistrumvolatile几乎所有版本跃迁都有内部变更
WheelMenuBuildervolatile1.21.5、1.21.6、26.1 各有变更
IMoveableEntityBlock26.1 重设计26.1 完全重设计
IntegrationType26.1 拆分DATA → CLIENT_DATA + SERVER_DATA
util 工具类(Lazy/MathUtil/ShapeUtil 等)可用版本有限仅 1.21.1 和 26.1 中有独立 module.util
nullness 函数式接口导入路径变化3 种导入路径
rendering 模块全部 API26.1+仅 26.1 存在

依赖坐标

所有版本共享 Groovy DSL 模式:

groovy
dependencies {
    implementation "dev.anvilcraft.lib:anvillib-<module>-neoforge-<mc_version>:2.0.0"
}

示例:dev.anvilcraft.lib:anvillib-registrum-neoforge-1.21.1:2.0.0(每个版本的 <mc_version> 后缀与版本号一致)

模块 Artifact1.21.11.21.2–1.21.1126.1
anvillib-neoforge-<ver>
anvillib-codec-neoforge-<ver>
anvillib-config-neoforge-<ver>
anvillib-integration-neoforge-<ver>
anvillib-moveable-entity-block-neoforge-<ver>
anvillib-network-neoforge-<ver>
anvillib-recipe-neoforge-<ver>
anvillib-registrum-neoforge-<ver>
anvillib-wheel-neoforge-<ver>
anvillib-test-neoforge-<ver>
anvillib-multiblock-neoforge-<ver>
anvillib-util-neoforge-<ver>
anvillib-rendering-neoforge-<ver>

Released under the CC-BY-NC-SA 4.0 License.