# Changelog – Version 0.3.0
## Features
- Implemented a precise, VoxelShape-based greedy meshing system for terrain.
- Added a performant two-phase buoyancy system for objects in water.
- Implemented a dedicated renderer system for physics bodies.
- Enabled Continuous Collision Detection (CCD) for cars and bikes to improve high-speed collision accuracy.
- Implemented robust data corruption resistance for saving and loading.
- Improved physics body synchronization through a revamped chunk tracking system.
- Differentiated driver and passenger seat debug hitboxes by color for better visibility.
- Added the ability for the `PhysicsCreatorItem` to spawn bodies in an active state directly.
- Added explicit player tracking to better manage interactions.
- Added overloads for creating bodies with a definable initial activation state.
- Added a hook that is triggered on sync data updates.
- Added `getJoltBody` overloads to support direct access via `bodyId`.
## Fixes
- Separated client-only code to prevent `ClassNotFoundException` on dedicated servers.
- Refined buoyancy calculation by averaging fluid surface height for smoother object movement.
- Improved buoyancy broadphase accuracy by iterating over all AABB blocks instead of sampling.
- Fixed a rare `ClassCastException` when growing EMotionType arrays in JNI-bound code.
- Corrected force application to ensure buoyancy acts relative to the center of mass.
- Applied linear drag at the center of buoyancy, improving torque behavior and rotation stability.
- Corrected the view vector calculation while riding physics vehicles.
- Resolved clipping issues by ensuring atomic body updates.
- Fixed various deadlocks related to persistence, terrain interactions, and body activation.
- Resolved race conditions and large coordinate packing errors.
- Prevented a server crash caused by mishandling client-only fields.
- Ensured that inactive bodies correctly synchronize their initial state.
- Bodies and constraints are now correctly persisted during a world save.
- Sleeping bodies are now correctly activated for buoyancy forces.
- Prevented the immediate activation of newly created bodies for more consistent behavior.
- Fixed an issue that caused arm swinging when using the `PhysicsCreatorItem`.
- Removed the malfunctioning `PhysicsRemover`.
- Downgraded verbose info logs to the debug level to reduce console clutter.
- Prevented a crash on body removal by safely calculating cluster bounds.
- Made minor corrections to field names, encoding issues, and JavaDoc formatting.
- Updated acknowledgments with the correct JoltJNI link and naming conventions.
## Refactors & Architecture
- Overhauled the mounting system, consolidated Mixins, and improved the overall code structure.
- Unified client and server physics bodies into a single `VxBody` hierarchy.
- Centralized physics pause logic into a global utility.
- Simplified object management by removing the `VxUpdateContext`.
- Centralized seat registration via the `VxMountable` interface.
- Switched the persistence logic from an event-based system to Minecraft hooks for improved reliability.
- Converted `VxClientMountingManager` to an enum singleton to improve code structure.
- Overhauled the buoyancy pipeline for more stable and realistic flotation behavior.
- Ensured clean separation between client and server logic to maintain compatibility and prevent runtime issues.
## Performance
- Refactored to a data-oriented design for improved performance and lower garbage collector load.
- Implemented a grid-based clustering system for massively scalable large-scale terrain tracking.
- I/O tasks for bodies and constraints are now bundled to reduce disk activity.
- Implemented caching for `BoxShapeSettings`, terrain shapes, and AABBs in the data store to accelerate terrain tracking.
- Refactored the buoyancy system using Structure of Arrays (SoA) and double buffering for better data locality and parallelism.
- Cached body motion types in the data store to eliminate redundant JNI calls per tick.
## Tuning
- Increased position and velocity iteration counts for a more stable physics simulation.
- Increased `OBJECTS_PER_TICK` in the `VxTerrainTracker` to 512 for higher throughput.
## Miscellaneous
- Polished internal naming and consistency across buoyancy and physics systems.
- Updated documentation and numerous JavaDocs for clarity and completeness.
- Added English names for the "Box Thrower" and "Magnetizer."
- Cleaned up unnecessary code and renamed mixins to match the new project structure.
- Added author and license headers to relevant files.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }