1.3.5-big-bug-fix
Compatibility
Required content
Changes
Fresh Blocks Animation 1.3.5
Fresh Blocks Animation 1.3.5 is a major internal overhaul of the 1.3.x branch.
While the core purpose of FBA remains the same, a large part of the placement, animation, rendering, lighting and background runtime has been reorganized into separate systems. The update significantly reduces repeated work during block placement and prepares the mod for future rendering and animation-engine upgrades.
Architecture
-
Reworked the old monolithic animation runtime into a more structured pipeline.
-
Added a dedicated Placement Controller for placement processing.
-
Added Placement Ownership and Block State Handoff systems for managing the transition between the real block and its animated representation.
-
Added a dedicated Animation Context that captures the information required by an animation once and passes the prepared state through the runtime.
-
Animation contexts can now contain:
- block position;
- block state;
- placement direction;
- base position;
- lighting data;
- random seed;
- render shape;
- composite-block information;
- captured environment data.
-
Added a dedicated Animation Engine.
-
Animation evaluation now produces an
AnimationPoseinstead of requiring rendering code to directly understand animation logic. -
Added animation instance, lifecycle and registry infrastructure.
-
Reduced direct dependencies between placement logic, animation evaluation and rendering.
Render Backend
- Introduced a dedicated Render Backend API.
- Rendering is now separated from animation evaluation.
- Added
RenderHandleabstraction for renderer-owned animation objects. - The existing BlockDisplay renderer has been moved behind
LegacyBlockDisplayBackend. - Animation code can now create, update, pose and destroy rendered objects through the backend instead of depending directly on BlockDisplay implementation details.
- Added a Render Backend bridge and backend registry infrastructure.
- This architecture allows future renderers to replace the legacy BlockDisplay backend without rewriting the animation engine.
Placement & Event Processing
- Placement processing was reorganized around block events instead of repeatedly rediscovering the same state during animation ticks.
- Added placement event policy handling.
- Added placement lifecycle protection to prevent invalid or duplicated placement transitions.
- Added dedicated state handoff scheduling.
- Reduced repeated world-state queries in the placement hot path.
- Placement and rendering responsibilities are now more clearly separated.
Caching & Runtime Optimization
-
Added a dedicated Placement Hot Cache.
-
Frequently reused placement information can now be captured and reused instead of being repeatedly requested from Minecraft.
-
Added caching for:
- logical block states;
- block lighting coordinates;
- world block tints;
- block model state;
- animation display-frame lookup.
-
Added cached block-model access infrastructure.
-
Added O(1) cached animation render-frame lookup.
-
Added cache updates tied to world/block changes.
-
Added runtime optimization infrastructure for frequently executed animation paths.
-
Reduced unnecessary work performed every animation tick.
Background Systems
- Background work is no longer required to live directly inside the main placement runtime.
- Added a dedicated Background Runtime.
- Added Deferred Work Runtime for work that does not need to execute directly inside the placement hot path.
- Furnace processing has been moved into a dedicated background system.
- Added a dedicated handoff scheduler.
- Background effects and maintenance logic are now separated from latency-sensitive placement processing.
Lighting & World-Aware Rendering
- Added position-aware block-model seeding.
- Added world-aware neighbourhood lighting for animated blocks.
- Improved the legacy BlockDisplay lighting approximation using surrounding world lighting.
- Added dedicated visual lighting resolution.
- Added special lighting handling for non-occluding blocks.
- Added improved lighting behaviour for interaction animations.
- Added world-light tuning for cutout block models.
- Reduced cases where animated blocks use lighting that does not match their surrounding environment.
- Added reusable world and position visual contexts for render preparation.
Composite Blocks
-
Added dedicated composite-block detection and resolution.
-
Added infrastructure for handling blocks whose visual state depends on multiple block positions or properties.
-
Composite recognition includes cases such as:
- doors;
- beds;
- chests;
- double plants;
- banners.
-
Composite information can now be captured as part of the animation context instead of being rediscovered throughout the animation.
JSON Animation System
- Added support for a configurable animation pivot / transform origin.
pivotcan be defined using coordinates:
"pivot": [0.5, 0.0, 0.5]
- Object syntax is also supported:
"pivot": {
"x": 0.5,
"y": 0.0,
"z": 0.5
}
-
Added pivot presets:
center;bottom;top;north;south;west;east.
-
Pivot values are not restricted to the
0..1range, allowing more stylized transform origins. -
Grow Upnow uses a bottom-centered pivot. -
Added Random animation support for selecting from available animations.
-
Existing JSON animation hot-reload behaviour remains supported.
Jukebox & Interaction Improvements
- Jukebox animation handling can now react to Minecraft level events.
- Added handling for jukebox START events.
- Added handling for jukebox STOP events.
- Reduced the need for continuous jukebox state scanning in the primary animation path.
- Interaction rendering now has dedicated lighting handling.
Settings & UI
- Added direct access to Fresh Blocks Animation from the standard Minecraft Options screen.
- Mod Menu integration remains available.
- Added persistent Hard Mode configuration support.
- Changed the default placement animation to Scale.
- Changed the default animation duration to 0.30 seconds / 300 ms.
- Optional extra effects are now disabled by default for new configurations.
- The Fun section is disabled by default.
- Throw Placement is disabled by default.
- Break Shake is disabled by default.
- Slime Bounce is disabled by default.
- Jukebox Pulse is disabled by default.
- Furnace Smoke is disabled by default.
- Anvil Press is disabled by default.
- Placement Particles are disabled by default.
- Removed the old Two Hands renderer hook from the active rendering path.
- The animation content button now links to the official Fresh Blocks Animation website instead of the old Discord animation shortcut.
Rendering Fixes
- Improved rendering behaviour for transparent, cutout and non-occluding blocks.
- Added dedicated cutout render tuning.
- Improved world-light propagation into animated block model state.
- Improved synchronization between the animated BlockDisplay and the real world block.
- Improved handling of visual handoff timing to reduce both flickering and texture overlap.
- Full-block BlockDisplay → real-block handoff was adjusted from 200 ms to 100 ms in the final Big Bug Fix build.
- Non-occluding and cutout blocks continue to use immediate handoff where appropriate.
Compatibility & Cleanup
- Updated the 1.3.5 build for Minecraft 26.3.x.
- Removed the old
ItemInHandRendererMixin/ Two Hands rendering hook. - Removed several legacy runtime paths that were no longer required by the new architecture.
- Removed old animation expression/registry implementations replaced by the newer modular animation runtime.
- GeckoLib is no longer declared as a suggested dependency in the 1.3.5 mod metadata.
- Existing legacy rendering remains available through the new backend abstraction rather than being directly coupled to the animation runtime.
Diagnostics
- Added the
/FBA_TESTclient command. - The self-test runs a sequence of FBA subsystem checks.
- Individual checks report PASS/FAIL state.
- Detailed results are written to
latest.log. - Added dedicated self-test entrypoint and reporting infrastructure to make regression testing easier during future architecture changes.
Internal Result
The 1.3.0 runtime handled a large amount of placement, rendering, lighting, scanning, animation and cleanup logic directly.
In 1.3.5 these responsibilities are increasingly separated into:
World / Placement Events
↓
Placement Layer
↓
Prepared Animation Context
↓
Animation Runtime
↓
Animation Engine
↓
Render Backend
↓
Minecraft Renderer
Background scanners, deferred work, caches and maintenance systems are handled separately from the primary placement path.
The result is a cleaner and more predictable runtime with substantially less repeated work during block placement, while also providing the foundation required for future FBA rendering-engine updates.
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:Arva0REJ:KY09dIhc"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Arva0REJ:KY09dIhc"
}

