Skip to content

Version Diff Documentation

This document records API differences, module availability, and code-level changes between Minecraft versions of AnvilLib, helping developers quickly identify compatibility differences and migration costs between versions.

All versions belong to AnvilLib 2.0.0, developed in parallel simultaneously, differing only in the target Minecraft compilation version. Some modules were not synchronized to all Minecraft versions due to development capacity constraints. The version numbering below is for retrieval convenience only and does not imply release order.


Module Availability Matrix

The following table shows the presence status of each module across 12 Minecraft versions.

Module1.21.11.21.2–1.21.1126.1Notes
codecx 3x 3x 3
configx 11x 11x 11
integrationx 7x 7x 7
mainx 2x 2x 2
networkx 14x 12x 141.21.2–1.21.11 lack NetworkUtil
recipex 88x 99x 89
registrumx 55x 68–71x 601.21.2+ embeds nullness package (11 files)
wheelx 20x 22–30x 26
moveable-entity-blockx 7x 7x 8
multiblockx 26--x 26Not synced to 1.21.2–1.21.11 due to capacity constraints
utilx 43--x 43Not synced to 1.21.2–1.21.11 due to capacity constraints; nullness package embedded into registrum as a stopgap
rendering----x 19Only exists in 26.1
testx 17x 6x 12
Total273240–248312

-- indicates the module does not exist in that version range. Numbers represent Java source file counts.

nullness package embedding for util module: In versions where module.util was removed (1.21.2–1.21.11), functional interfaces such as NonNullSupplier and NonNullFunction were temporarily embedded into module.registrum under the registrum.util.nullness package to ensure the Registrum module could compile independently. In 26.1, once module.util was restored as an independent module, these classes migrated back to util.nullness.


Code-Level Change Comparison

The following lists source code diffs between each version and its predecessor for each Minecraft version. Only entries with actual changes between versions are listed; version transitions with no changes are omitted here.

1.21.1 -> 1.21.2

Compilation target change: [1.21.1,1.21.2) -> [1.21.2,1.21.3), Parchment 2024.11.17.

Module availability changes:

  • module.multiblock — Not synced to this version
  • module.util — Not synced to this version; nullness package embedded into registrum
  • module.networkNetworkUtil.java and util/ package not synced (14->12 files)
  • module.test — Multiblock tests, Datagen tests, wheel/lang not synced (17->6 files)

recipe module code changes:

FileChange
InWorldRecipe.javaAdded placementInfo(), recipeBookCategory(); removed canCraftInDimensions()
InWorldRecipeBuilder.javasave() second param: ResourceLocation -> ResourceKey<Recipe<?>>; added save(RecipeOutput, ResourceLocation) overload
(new) IRecipeMapExtension.javaInjected interface, provides anvillib$addRecipes()
(new) RecipeMapMixin.javaMixin injecting RecipeMap
(new) ISerializer.javaGeneric serialization interface
(new) NumberProviderUtil.javaNumberProvider utility methods
(new) component/ packageBlockStatePredicate, ChanceBlockState, ChanceItemStack, IItemStackPredicate, ItemIngredientPredicate, ItemPredicate, NbtPredicate (7 files)
init/ package pathinit/recipe/ -> init/reicpe/ (typo persisted until 1.21.11)

registrum module code changes:

FileChange
AbstractRegistrum.javaComplete rewrite: License header update, Registration inner class reorganization, import order changes
(new) GeneratorType.javaGeneratorType marker interface
(new) nullness/ package (11 files)Embedded from module.util: NonNullSupplier, NonNullConsumer, etc.
Builder/DataGen method signaturessetDataGenerator()/addDataGenerator() use GeneratorType<?> instead of ProviderType<?>

wheel module code changes:

FileChange
(new) util/MathUtil.javaWheel math utilities

Bug fixes:

  • Recipe: LibRegistries.*_REGISTRY.get() -> .getValue() — Unified registry query API

1.21.3

Compilation target change: [1.21.3,1.21.4), Parchment 2024.12.07.

No source code differences — File manifest identical to 1.21.2. Only compilation target adaptation.


1.21.4

Compilation target change: [1.21.4,1.21.5), Parchment 2025.03.23.

registrum module generator refactoring:

FileChange
RegistrumBlockstateProvider.javaRemoved — replaced by generators/RegistrumBlockModelGenerator.java
RegistrumItemModelProvider.javaRemoved — replaced by generators/RegistrumItemModelGenerator.java
(new) providers/generators/ subpackageRegistrumBlockModelGenerator, RegistrumItemModelGenerator, RegistrumLegacyBlockModelBuilder, RegistrumModelProvider (4 files)
RegistrumRecipeProviderMigrated from providers/ to providers/generators/
RegistrumRecipeRunnerSame as above
AbstractRegistrum.javaLicense header reformatted, RegistrumProvider import removed, @Accessors added

1.21.5

Compilation target change: [1.21.5,1.21.6), Parchment 2025.06.15.

FileModuleChange
LibItemSubPredicates.javarecipeReplaced by LibDataComponentPredicates.javaItemSubPredicate.Type -> DataComponentPredicate.Type
LibShaders.javawheelReplaced by LibRenders.java — Class renamed

1.21.6

Compilation target change: [1.21.6,1.21.7), Parchment 2025.06.29.

wheel module rendering system upgrade:

FileChange
(new) render/state/ package (5 files)RingRenderState, SelectionRenderState, LibGuiElementRenderState, LibQuadGuiElementRenderState
(new) LibDynamicUniforms.javaGPU Uniform dynamic storage (Std140)
(new) mixin/GuiRendererMixin.javaGUI rendering Mixin
(removed) shaders/core/ring.jsonReplaced by Java RingRenderState
(removed) shaders/core/selection.jsonReplaced by Java SelectionRenderState

1.21.7

Compilation target change: [1.21.7,1.21.8), Parchment 2025.07.18.

FileModuleChange
NetworkRegistrar.javanetwork*Bidirectional(type, codec, handler) -> *Bidirectional(type, codec, handler, handler) — Added second handler parameter

1.21.8

Compilation target change: [1.21.8,1.21.9), Parchment 2025.09.14. No source code differences.


1.21.9

Compilation target change: [1.21.9,1.21.10), Parchment 2025.10.05.

FileModuleChange
IntegrationManager.javaintegrationLoadingModList.get() -> FMLLoader.getCurrent().getLoadingModList()
NetworkRegistrar.javanetworkSame as above
AbstractRegistrum.javaregistrum!FMLLoader.isProduction() -> !FMLLoader.getCurrent().isProduction()

1.21.10

Compilation target change: [1.21.10,1.21.11), Parchment 2025.10.12.

FileModuleChange
IItemHandlerCache.javarecipeRemoved — replaced by ItemResourceHandlerCache.java (I prefix removed, Handler->ResourceHandler)
ItemHandlerCacheElement.javarecipeReplaced by ItemResourceHandlerCacheElement.java
Cache API methodsrecipegetStackInSlot->extract, getSlotLimit->getCapacityAsInt, isItemValid->isValid, insertItem->insert

1.21.11

Compilation target change: [1.21.11,26.1), Parchment 2025.12.20.

FileChange
GlobalResourceLocation -> Identifier project-wide migration (adapting to NeoForge 1.21.5+ mapping change)
Affected filesCodecUtil, StreamCodecUtil, InWorldRecipe, InWorldRecipeBuilder, AbstractRegistrum, etc.

26.1

Compilation target change: [26.1,26.2), no Parchment (NeoForge 26.1 no longer uses MCP mappings).

Module availability changes:

ModuleStatusNotes
renderingNewBloom post-processing, UBO framework, GUI Mixin, renderdoc-loader (19 files)
multiblockSyncedNot synced in 1.21.2–1.21.11; restored in 26.1 (26 files)
utilSyncedNot synced in 1.21.2–1.21.11; restored in 26.1 (43 files)
networkRestoredNetworkUtil.java returns (12->14 files)
registrumReorganizednullness package migrated out (-11 files), back to independent util module

API Redesign (Breaking Changes):

ChangeModuleDetails
IMoveableEntityBlockmoveable-entity-blockclearData/setData (CompoundTag) -> storeData/loadData (ValueInput/ValueOutput)
PistonBaseBlockMixinmoveable-entity-blockanvillib$nbt type: CompoundTag -> TagValueOutput
IntegrationTypeintegrationDATA -> CLIENT_DATA + SERVER_DATA
IntegrationInstance/IntegrationManagerintegrationinvokeData/loadData -> invokeClientData+invokeServerData / loadClientData+loadServerData
InWorldReciperecipeicon field: ItemStack -> ItemStackTemplate; Serializer no longer implements RecipeSerializer; assemble() removes HolderLookup.Provider parameter
InWorldRecipeBuilderrecipeicon/spawnItem() use ItemStackTemplate; added defaultId()
AbstractRegistrumregistrumnullness import paths migrated back to dev.anvilcraft.lib.v2.util.nullness.*

New Features:

AdditionModule
AnvilLibMoveableEntityBlockmoveable-entity-block
WheelSelectionEffect enumwheel
AnnularSectorRenderStatewheel
LibEntityTypeTagsrecipe
IRecipeMapExtension + RecipeMapMixinrecipe
Entire rendering modulerendering

util.nullness Import Path Changes

Due to the differing presence status of module.util across versions, import paths for classes like NonNullSupplier vary:

Version RangeImport Path
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; (restored)

Affected classes (9 total): NonNullSupplier, NonNullConsumer, NonNullBiConsumer, NonNullFunction, NonNullBiFunction, NonNullUnaryOperator, NonnullType, NullableType, NullableSupplier.

1.21.2+ additionally includes the FieldsAreNonnullByDefault annotation.


API Stability Ratings

Based on the frequency and impact of changes across versions:

APIRatingNotes
CodecUtil / StreamCodecUtilstableOnly underwent ResourceLocation->Identifier migration in 1.21.11
ConfigManager / @Config annotationsstableNo API changes
IPacket interface hierarchystableNo API changes
Registrum Builder (Block/Item/Entity, etc.)stableNo API changes
MultiblockDefinition / DynamicMultiblockManagerstableAPI consistent, differs only in available versions (1.21.1, 26.1)
NetworkRegistrarvolatile1.21.7 (bidirectional), 1.21.9 (FMLLoader)
InWorldRecipevolatileChanges in 1.21.2, 1.21.11, and 26.1
InWorldRecipeBuildervolatileSame as above
AbstractRegistrumvolatileInternal changes in nearly every version transition
WheelMenuBuildervolatileChanges in 1.21.5, 1.21.6, and 26.1
IMoveableEntityBlock26.1 redesignedComplete redesign in 26.1
IntegrationType26.1 splitDATA -> CLIENT_DATA + SERVER_DATA
util utility classes (Lazy/MathUtil/ShapeUtil, etc.)limited availabilityIndependent module.util only in 1.21.1 and 26.1
nullness functional interfacesimport path changes3 distinct import paths
rendering module all APIs26.1+Only exists in 26.1

Dependency Coordinates

All versions share the Groovy DSL pattern:

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

Example: dev.anvilcraft.lib:anvillib-registrum-neoforge-1.21.1:2.0.0 (the <mc_version> suffix matches the version number for each version)

Artifact Module1.21.11.21.2–1.21.1126.1
anvillib-neoforge-<ver>xxx
anvillib-codec-neoforge-<ver>xxx
anvillib-config-neoforge-<ver>xxx
anvillib-integration-neoforge-<ver>xxx
anvillib-moveable-entity-block-neoforge-<ver>xxx
anvillib-network-neoforge-<ver>xxx
anvillib-recipe-neoforge-<ver>xxx
anvillib-registrum-neoforge-<ver>xxx
anvillib-wheel-neoforge-<ver>xxx
anvillib-test-neoforge-<ver>xxx
anvillib-multiblock-neoforge-<ver>x--x
anvillib-util-neoforge-<ver>x--x
anvillib-rendering-neoforge-<ver>----x

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