- Replace single render type with render type function and make mesh nullable in extended block model submits
- Refine contract of FabricBlockModelRenderState#setupMesh to avoid footguns
- Specify in Renderer javadoc that the renderer needs to add support for extended item submits
- Fix MutableQuadViewImpl#translate not invalidating geometry
- Fix WrapperBlockStateModel not overriding new extension methods
* begin porting
particleIcon -> particleMaterial (Material.Baked)
* refactor!: `RenderType` in `QuadView` & update `EncodingFormat`
* refactor!: `FabricMaterialBaker` :3
* fix: everything
- add `AtlasIds` values to `QuadAtlas#getId`
- `QuadAtlas#getTextureId` -> `#getTextureLocation`
- miscellaneous compile errors and bugs
* fix: some style and mixinextras being mad at me
* fix!: minor issues
* fix: the `BakedQuadOutput` crisis of 2026
* refactor!: remove `ItemRenderTypeGetter`
* docs: fix `ModelModifier` `ModelBaker#sprites` -> `#materials`
* docs: `MutableQuadView` missing reference
* fix: forgot to set `itemRenderType` to null by default
* fix: set `chunkLayer` and `itemRenderType` in `#fromBakedQuad`
* fix: nullability issues in `EncodingFormat` w/ `itemRenderType`
* fix: nullability issues in `EncodingFormat` w/ `itemRenderType` pt 2
* fix: recalculate transparency instead of storing in QVs
* fix: get or find chunk layer (not item render types)
* Fix testmod and use getOrResolveItemRenderType in ItemRenderContext
* Fixes and improvements
* Some doc fixes
* style: chain `QuadEmitter` calls
* docs: prefer using this method 😇 -> use this method 😡
* docs(javadoc): omg pls build successfully thx
* Large port for 26.1-pre-1
* Uncomment mixin for BlockFeatureRenderer
* fix mixins JSON
* Fixed many compile errors in model-loading-api and renderer apis
Fixed all the compile errors in fabric-model-loading-api-v1, fixed some
in fabric-renderer-api-v1 and fabric-renderer-indigo, and fixed most of
the code style problems. There is still work to do on the rendering
stuff, mainly because of the block rendering changes.
* fix: use BlockState random in SimpleBlockRenderContext#bufferModel
* general changes and add FabricBlockFeatureRenderer
* refactor: fix some mixins, some new stuff
* fix: use seed 42 in simple block contexts
* feat: mesh thingy in `BlockModelRenderState`
* Work
* Work II
* Remove QuadConsumers.ValidateAtlasUsage and promote one TODO to FIXME
* fix: crash when mannequin is present
* docs: some docs, I guess
* fix: apply mixin suggestions
* feat: `QuadView#animated`
Co-authored-by: Kilip1000 <206253641+Kilip1000@users.noreply.github.com>
* chore: docs
Added documentation to the ExtraLightCoordsUtil class.
Concerns include:
Someone not understanding what "packed " block- and skylight is.
* chore: fix checkstyle
* Docs
* chore: improve javadoc readability
* Remove all helpers that used BakedQuad.MaterialInfo
- MaterialInfo should not be used by FRAPI users as it is inefficient and unnecessary to work with in FRAPI's framework
- Remove MutableQuadView#materialInfo and add #postMaterialBake
- Revert lightmap contract on MutableQuadView#fromBakedQuad
- Fix QuadView#toBakedQuad recomputing some values instead of using existing ones
- Fix MeshQuadCollection flag computation not checking for guaranteed foil
- Update documentation and TODO comments
* Add extended variants of BlockStateModel material flag methods
---------
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
Co-authored-by: BluSpring <bluspringindohq@gmail.com>
Co-authored-by: Rigner <loic.frassemathon@gmail.com>
Co-authored-by: Kilip1000 <206253641+Kilip1000@users.noreply.github.com>
* Use local variable names for all mixin locals
* Add checkstyle rule + more fixes
* More fixes
* Renames
* Cleanup
* Prevent using name for args only locals
---------
Co-authored-by: joe <burtonjae@hotmail.co.uk>
* Fix all ambiguous mixin references
* Fix all invalid shadow accesses
* Fix all incorrect usages of shift
* Add all missing field opcodes
* Remove unused cancellable = true
* Remove another unnecessary shift
---------
Co-authored-by: joe <burtonjae@hotmail.co.uk>
* Change include in settings.gradle from 'fabric-screen-handler-api-v1' to 'fabric-menu-api-v1'
* Rename fabric-screen-handler-api-v1 directory to fabric-menu-api-v1
* Rename fabric-screen-handler-api-v1-version to fabric-menu-api-v1-version in gradle.properties
(not sure about this one)
* Rename java packages from screenhandler to menu
* Rename some resource files and references
* Rename id, name and description in fabric.mod.json
* Rename missing directories in the test mod
* Rename id, name in the test mod fabric.mod.json, and fix the entrypoints and "depends" section
* Rename and change the rest
* networking-api-v1 renames (#5058)
* api renames, by apple502j (#5057)
* reg sync
* resource loader
* api lookup api
* biome api
* Creative Mode Tab API renames (#5059)
* creative mode tab api
Checkstyle
rename buttons
* remove provides
* small change
* rename: fabric-sound-api-v1
* item api
* Update CustomDamageTest.java
* Update settings in testmod
* api renames in serialization api v1
* block api
* fix renames
* remove TODOs
* tag api
* rename package and add todo
* lifecycle-events-v1 renames
* rename syncId to containerId
* Key Mapping API renames
* Fix mixin config
* Fix build
* Fix build again...
* renames in command-api v2
* chore: fix some issues
* Update EquipmentSlotProvider.java
* chore: fixup javadoc
* chore: update some tests’ params
* more renames
* game test
* screen api
* fabric-crash-report-info-v1
- Does not seem to need anything else renamed.
* fabric-message-api-v1 - commit.1
- ClientReceiveMessageEvents -> ClientLogChatMessageEvents
* fabric-message-api-v1 - commit.2
- Patch files previously dependent on ClientReceiveMessageEvents.
* rename rendering-fluids and transfer-api
* run spotlessApply
* where this line comes from?
* fabric-message-api-v1 - commit.3
ClientSendMessageEvents -> ClientHandleChatInputEvents
* Fix build
* fabric-message-api-v1 - commit.4
- Patched ChatListenerMixin.
- Done with client renaming.
* fabric-message-api-v1 - commit.5 - done.
- ServerMessageEvents -> ServerChatEvents
- ServerMessageDecoratorEvents -> ServerChatDecoratorEvents
- Patched Mixins.
- Patched testmod.
- Finalized renaming of fabric-message-api-v1.
* Rename game rule api
* fix import order issue
* client-gametest-api-v1 renames
* Entity Events API renames
* Events Interaction API renames
* Rename module to Creative Tab API
* content-registries-v0 renames
* renames to loot
* Mapped a bit
(Should've committed more frequently, oops)
* A bit more
* refactor!(rendering-v1): update API names
* fix: checkstyle issues
* refactor(rendering-v1)!: `AtlasSourceRegistry` -> `SpriteSourceRegistry`
* refactor(object-builder-api-v1)!: api renames
* fix: checkstyle
* refactor(rendering-v1)!: `ColorProviderRegistry` -> `BlockColorRegistry`
* refactor(particles-v1)!: api renames
* refactor(particles-v1)!: `ExtendedBlockStateParticleEffectSyncClient` -> `ExtendedBlockParticleOptionSyncClient`
* fix: checkstyle lol
* Mapped some packet-related things
* Even more packets!
* client -> minecraft
* All worlds?
(I hope Intellij didn't mess up at hierarchy renaming)
* Map the last few things
Also ran the necessary gradle tasks
* refactor(data-attachment-api-v1): api renames
* refactor(data-attachment-api-v1): s2c -> clientbound, c2s -> serverbound (the superior names)
* refactor(data-attachment-api-v1): packetCodec -> streamCodec
* fix: damn checkstyle
* Update fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/ChunkSectionLayerMap.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* refactor(rendering-v1): `BlockColorProviderRegistry` -> `ColorProviderRegistry`
* refactor(rendering-v1): `AtlasSource` -> `SpriteSource`
* refactor(rendering-v1): update names in `LevelRenderEventsTests`
* Temporary change
* S2C -> ClientBound
* Done with ModelProviderMixin (except for writer, which is a bit more complicated)
* Done with FabricAdvancementProvider, (except for writer, which is a bit more complicated)
* Rename to cachedOutput
Saw cache getting used though, so I'll change this back to cache, oopsy
* Some more cache things
* TestModClient things
* Fixed checkstyle errors?
* Improve javadoc readability
* SoundTypeBuilder done?
* Javadoc misc and registry -> holder
* Misc
* FabricCodecDataProvider renames
* FabricDynamicRegistryProvider - 1 (not done)
Maybe did something wrong. This is a quite convoluted commit.
* FabricDynamicRegistryProvider - 2 (not done)
* entries -> ressources
Is this good?
* Rename ClientBound -> Clientbound
* RegistryLookup
* registryLookup
* More of the same
* refactor(renderer-api-v1)!: api renames
* refactor(renderer-api-v1): `TextureAtlasMixinAtlas` -> `TextureAtlasMixin`
* refactor(renderer-api-v1): `blockAndTintGetter` -> `level`
* Update fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/ModelStateHelper.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Update fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/FabricBlockRenderDispatcher.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Update fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/RenderLayerHelper.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Update fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/RenderLayerHelper.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Update fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/block/render/BlockFeatureRendererMixin.java
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* refactor(renderer-api-v1)!: `FabricBlockStateModel#particleSprite` -> `#particleIcon`
* refactor(renderer-api-v1)!: `ExtendedBlockStateModelSubmit` -> `ExtendedBlockModelSubmit`
* fix(renderer-api-v1): `#particleSprite` -> `#particleIcon`
* refactor(renderer-api-v1)!: `FabricBlockModelShaper#getModelParticleSprite` -> `#getModelParticleIcon`
* refactor(renderer-api-v1)!: `FabricBlockModelShaper#getModelParticleIcon` -> `#getParticleIcon`
* refactor(renderer-api-v1)!: missed api renames
* refactor(renderer-indigo): api renames
* refactor(renderer-indigo): missed renames
* Mapped a bit
(Should've committed more frequently, oops)
* Done with ModelProviderMixin (except for writer, which is a bit more complicated)
* Done with FabricAdvancementProvider, (except for writer, which is a bit more complicated)
* Rename to cachedOutput
Saw cache getting used though, so I'll change this back to cache, oopsy
* Some more cache things
* TestModClient things
* Fixed checkstyle errors?
* Improve javadoc readability
* SoundTypeBuilder done?
* Javadoc misc and registry -> holder
* Misc
* FabricCodecDataProvider renames
* FabricDynamicRegistryProvider - 1 (not done)
Maybe did something wrong. This is a quite convoluted commit.
* FabricDynamicRegistryProvider - 2 (not done)
* entries -> ressources
Is this good?
* RegistryLookup
* registryLookup
* More of the same
* Missed one
* Params
* Another mixin rename
Missed a comment
Revert
This time?
Rename?
Why doesn't rename the interface that's getting injected work?
Revert "Rename?"
This reverts commit 1a1b9814a92e9d3780fe1f274ad78effa9bcfa12.
* Revert "Another mixin rename"
This reverts commit 8986754371.
* I keep forgetting this one
* Data -> Pack
* Data -> Pack 2?
* Generators with an s, also block, not blockState
* Missed one
* I think I was a bit too bold with that one
* registry entry -> holder in javadoc
This one is debatable?
* Data -> Pack 3
* Interface injection please work?
* BlockLootTableGenerator -> BlockLootSubProvider
* Revert "Interface injection please work?"
This reverts commit 34febbcd0c.
* Data -> Pack 4
* Undo an oopsy
* These parameter names should go unchanged
Went through the git diff and undid some silliness manually
* Undid even more unnecessary changes
* I think I went to overboard with my undos, same bug as before
* Some more undos
* More undos
* Undos, also, accidentally based this branch on the wrong branch
* Undos
* I could at least change the javadoc..
* yep, undid this one too
* refactor(model-loading-api-v1)!: api renames
* Now only one thing is left
* oops, forgot mcdev
* Fix
* World -> Level
* tickCounter -> deltaTracker
* drawContext -> graphics
* Go through vibecoded script output
* Interface injections and spotless
* Text -> component
* Fix mixin config
* Rename screenshot template
* Address review
* Revert rename of PlayerInventoryStorage
* Checkstyle fixes
* Name adjustments
* CHUNK_STATUS_CHANGE -> FULL_CHUNK_STATUS_CHANGE
* ClientCommandsRegistrationCallback -> ClientCommandRegistrationCallback
getCreativeModeTabsOnPage -> getTabsOnPage
getSelectedCreativeModeTab -> getSelectedTab
setSelectedCreativeModeTab -> setSelectedTab
* Remove some old package regex hacks
* Update fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/ClientCommands.java
Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com>
* rename access to buildContext in sound api-v1 testmod
* Renames for FULL_CHUNK_STATUS_CHANGE
* Update fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/package-info.java
Co-authored-by: D. Firmansyah <deirn@bai.lol>
* Update fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/item/ContainerStorageImpl.java
Co-authored-by: D. Firmansyah <deirn@bai.lol>
* Update fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/item/ContainerStorageImpl.java
Co-authored-by: D. Firmansyah <deirn@bai.lol>
* Further rename Creative Tab API
* Name tweaks
* Use DataComponentHolder and TypedInstance for TransferVariant's
* HOLDER_LOOKUP_KEY -> REGISTRY_LOOKUP_KEY
* accept -> insert
---------
Co-authored-by: tenneb22 <126985099+Tenneb22@users.noreply.github.com>
Co-authored-by: Joseph Burton <burtonjae@hotmail.co.uk>
Co-authored-by: apple502j <33279053+apple502j@users.noreply.github.com>
Co-authored-by: Cassian Godsted <cassian@godsted.com>
Co-authored-by: Toffikk <slodkitofik@gmail.com>
Co-authored-by: coredex-source <samdhi2323@gmail.com>
Co-authored-by: Dimas Firmansyah <deirn@bai.lol>
Co-authored-by: CrypticVerse <crypticversemc@gmail.com>
Co-authored-by: Kilip1000 <206253641+Kilip1000@users.noreply.github.com>
Co-authored-by: sylv256 <contact@sylv.gay>
Co-authored-by: Coredex <73810221+coredex-source@users.noreply.github.com>
Co-authored-by: Kilip1000 <kilian.lennard.pro@gmail.com>
Co-authored-by: Sylv <github.9ehj1@sylv.gay>
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com>
Co-authored-by: Dennis Ochulor <dennisnwanevu@gmail.com>
* Setup Resource Loader v1 and rework resource reloaders.
* Remove useless annotations.
* Cleanup, remove useless features, use `fromSystemProperty` name.
* Adapt to new ResourceReloader shared state system, add feature flags.
* Improve documentation of SimpleResourceReloader.
* Add more comments on the logic of resource reloader ordering using the VanillaStatus flag.
* Fix resource reloader v1 test mod.
* Apply suggestions from code review
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Fix `@Nullable` annotation placement in `ResourceLoaderImpl`.
* Remove all leftovers `@NotNull`, address the easy parts of the review.
* Killed IdentifiableResourceReloader, add unit test for sorting.
* Adapt TagAliasLoader correctly, long live FabricResourceReloader.
---------
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Initial work towards 25w31a
* port: fabric-resource-loader-v0 to 25w31a (#4776)
* Add convention tags to new Copper blocks/items (#4774)
* Add 25w31a convention tags
* Add axes
* port: fabric-gametest-api-v1 to 25w31a (compiles, test status unknown) (#4778)
* port: fabric-registry-sync-v0 to 25w31a (compiles, runs, test status unknown) (#4779)
* Misc build fixes + datagen runs
* More compile fixes, disable the rendering modules.
* Remove Debug HUD APIs (to be replaced) + many mixin fixes
* Port ArmorRenderer
* Fix fake player tests, and checkstyle
* Fix client test mixin
* Fix client tests
* Fix CapeFeatureRendererMixin
* Update yarn + add TAW for DebugHudEntries.register and show namespace for mod provided debug hud entries.
* Try running client tests without tracy
* Fix CapeFeatureRendererMixin again
* Port FRAPI, Indigo, and Model Loading API
Model Loading and Indigo are fully done. Some minor parts of FRAPI (and an associated class in the Model Loading testmod) are unfinished, but it's more than usable and the current API is stable.
* Disable client tests on CI for now, they pass locally.
* Bump version
---------
Co-authored-by: Xander <xander@isxander.dev>
Co-authored-by: Cassian Godsted <cassian@godsted.com>
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
* Allow using sprite finder during model baking
- Allow retrieving sprite finders from ErrorCollectingSpriteGetter, SpriteLoader.StitchResult, and SpriteAtlasManager.AtlasPreparation via new interface injections
- Deprecate SpriteFinder.get in favor of interface injected method for consistency with other methods
- Ensure lazily initialization of sprite finders is completely thread safe
- Provide a default implementation for MutableQuadView/QuadEmitter.spriteBake
- Improve some documentation
* Add ModelBakeSettingsHelper
- Respect passed ModelBakeSettings in testmod custom Geometry implementations
- Add axis block state property to testmod octagonal column block and rotate model to test ModelBakeSettings application
* Make AoCalculator.vanillaFullFace work regardless of vertex order
- Use vertex map for cubic faces during enhanced light as well now that it works regardless of vertex order and is faster than using weights
- Fix typos in AoFaceData
* Finalization
- Remove Experimental annotations
- Deprecate Renderer.emitBlockModelPartQuads for removal
- Fix GeometryBakedModel.emitQuads not applying instance AO boolean
- Add RenderLayerHelper.movingDelegate/entityDelegate and use them where appropriate
- Clarify some javadoc
(cherry picked from commit 5281b90756)
* Add custom unbaked block state model types (#4562)
* Add custom unbaked block state model types
* Add documentation
* Fix composite and multipart models' createGeometryKey implementation
Arrays do not implement equals and hashCode, so use an ArrayList instead, which has the most efficient equals and hashCode implementations of any available list implementation.
* Expose composite model in API
* Fix FRAPI testmod (#4573)
* Fix FRAPI testmod
* Fix checkstyle
* Fix Mixin name
---------
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
(cherry picked from commit c982b9513f)
* Extra models API
The implementation of this is largely based on the 1.21.4 version,
though with much of the API inspired by NeoForge's.
The general idea is:
- Mods create a unique ModelKey<T> for each model to register.
- They then call addModel(...) with their model key and either a model
path + baking function or an UnbakedExtraModel.
- Models are then queried from the manager with getModel(ModelKey<T>):T
* Update to feedback
- Rename ModelKey to ExtraModelKey.
- Move SimpleExtraModel to the public API.
* Use more compatible FabricBlockModelRenderer method
* Add debug name for ExtraModelKeys
* Doc string tweaks
* Use constructor with debug name in docs
* Rename SimpleUnbakedExtraModel
---------
Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
(cherry picked from commit 45c7c848ed)
* Update Model Loading API to 25w07a
* Update Model Loading API to 25w08a
* Fix merge
* Move model wrappers to separate package
* Remove UnwrappableBlockStateModel
* Disallow ModelModifier.OnLoad from receiving or returning null models
- Move the point at which OnLoad is invoked earlier to be inline with how OnLoadBlock is invoked
* Temporarily remove extra models API
---------
Co-authored-by: modmuss <modmuss50@gmail.com>
* Port FRAPI to 1.21.4 and refactor
- Port to 1.21.4
- Change `glint` material property type from `TriState` to new `GlintMode` enum, due to addition of vanilla `ItemRenderState.Glint` enum
- Remove `ItemStack` and `ModelTransformationMode` parameters from `emitItemQuads` to preserve contract of `ItemRenderState`
- Apply refactors and breaking changes
- Move `hasTransform`, `pushTransform`, and `popTransform` from `RenderContext` to `QuadEmitter` to make the system more flexible and allowing mesh builder emitters to also have transforms
- Remove `RenderContext` and inline remaining parameters to `emit*` methods; allows outputting model to arbitrary emitter and invoking model from arbitrary location
- Remove `RendererAccess` and add static `Renderer#get` and `#register` instead
- Disallow `Renderer` retrieval from returning a null value
- Change `QuadView#faceNormal` to return a `Vector3fc` instead of a `Vector3f`
- Remove deprecated methods
- Change `MeshImpl` to use a static cursor pool to save on memory and to allow nesting access to cursor on a thread
- Remove "compatibility mode" from Indigo
* Change contract of and better document `cullTest`
This allows a model to control which quads a submodel can cull early irrespective of transforms. Forwarding the test to the submodel will make it so pushed transforms may not receive quads that will be culled. The previous behavior of pushing a transform disabling early culling can now be achieved by passing `face -> false` to the submodel.
* Further refactors
- Remove disableColorIndex material property
- Rename colorIndex methods to tintIndex in QuadView and MutableQuadView to match recent Yarn rename
- Remove ForwardingBakedModel and WrapperBakedModel
- Vanilla's new WrapperBakedModel is similar enough to ForwardingBakedModel
- WrapperBakedModel will be moved to Model Loading API v1 in a different PR
- Set default vertex color to 0xFFFFFFFF instead of 0
- Disallow MutableQuadView#material from accepting a null material
- Precompute default quad data buffer instead of using zeroed buffer and setting defaults every time
* Fix build
The error was caused by a classloading loop.
* Convert MeshBuilder into MutableMesh
- Effectively split MeshBuilder#build into MutableMesh#immutableCopy and #clear
- Effectively add MutableMesh#forEachMutable
- Add Mesh#size
- Remove QuadEmitter#hasTransform
- Optimize MutableQuadViewImpl#copyFrom by not precomputing geometry
- Give UnwrappableBakedModel#unwrap a default implementation to prevent issues with interface injection
- Finish porting FRAPI and Model Loading API testmods
* Finish documentation
* Update Model Loading API to 1.21.4
- Split model modifier events and callbacks - one set for static models and one set for block models
- This is necessary because static models use UnbakedModel and are baked with settings while block models use GroupableModel and are not baked with settings
- This cleans up the Identifier/ModelIdentifier getters
- OnLoad for block models was not added because the unbaked block model map is not a cache and block models cannot inherit from other models
- Make DelegatingUnbakedModel a record to allow accessing the delegate ID
- Remove BuiltinItemRenderer, BuiltinItemRendererRegistry, and BuiltinItemRendererRegistryImpl as they were replaced by a TAW to SpecialModelTypes.ID_MAPPER
* Add fabric_ prefix to methods in BakedModelsHooks and fix checkstyle
* Remove ModelResolver and BlockStateResolver
- The functionality of ModelResolver could be perfectly replicated with ModelModifier.OnLoad with OVERRIDE_PHASE
- The functionality of BlockStateResolver could be perfectly replicated with ModelModifier.BeforeBakeBlock with OVERRIDE_PHASE
- Fix log warning caused by half_red_sand.json not defining particle sprite
* Re-add BlockStateResolver and ModelModifier.OnLoadBlock
- BeforeBakeBlock runs too late to allow modifying how models are grouped, so OnLoadBlock is necessary to allow that
- OnLoadBlock only runs for models which were actually loaded from blockstate files, so BlockStateResolver is necessary to allow adding models for blocks without a corresponding blockstate file
- Add UnwrappableBakedModel
- Moved and renamed from FRAPI's WrapperBakedModel (original will be deleted in separate PR)
- Implement it and interface inject it on vanilla's WrapperBakedModel
- Add new static UnwrappableBakedModel#unwrap method which accepts a Predicate saying when to stop unwrapping
- Add WrapperUnbakedModel which simply delegates all method calls to a different UnbakedModel
* Remove ModelModifier.*Bake*
- Remove BeforeBake, AfterBake, BeforeBakeBlock, AfterBakeBlock
- Remove DelegatingUnbakedModel
- Add WrapperGroupableModel
- Add documentation and extra constructor to WrapperUnbakedModel
* Clarify OnLoad doc about meaning of null model