# Changelog – Version 0.7.0
## Features
- **Composition-Based Architecture:** Transitioned to a data-oriented composition design, replacing the old lifecycle listener system with a flexible behavior-based architecture.
- **Advanced Buoyancy System:** Overhauled buoyancy physics featuring fast `PalettedContainer` access, smooth fluid interpolation, sloped surface normals, and area-scaled forces.
- **Complex Body Persistence:** Implemented full persistence support for ragdolls, chains, and vehicles, ensuring complex physics structures survive world reloads.
- **Dynamic Physics Layers:** Introduced runtime-configurable physics layers with support for ghost box testing and custom collision filtering.
- **Global Collision Registry:** Added a centralized registry to prevent ID conflicts between various physics entities and behaviors.
- **Namespace-Aware Identifiers:** Implemented decentralized behavior IDs with namespace support to ensure compatibility with third-party mods.
- **Persistent Client Tools:** Added client-side persistence for tool configurations, including a UI reset button for default settings.
- **Explicit Motion Types:** Introduced explicit motion type management and ensured correct allocation for motion-related properties.
- **NetSync Filtering:** Implemented advanced network synchronization filtering within the unified `VxTickBehavior` to optimize bandwidth.
- **Physics Events:** Added the `prePhysicsTick` event to allow external systems to hook into the simulation loop before physics calculations occur.
## Fixes
- **Linux Physics Stability:** Resolved long-standing instability and crashes on Linux by re-implementing batch body locking, enabled by the upgrade to Jolt-JNI 3.10.0.
- **Constraint Duplication:** Prevented the instantiation of duplicate physics constraints when loading chunks.
- **Client-Side Extrapolation:** Eliminated "jitter" and extrapolation errors by forcing state synchronization for all active physics bodies.
- **NeoForge Compatibility:** Fixed a registration crash on NeoForge by splitting the network channel into directional payloads.
- **World Geometry Fix:** Resolved issues with bodies falling through the world floor by using the level's base Y instead of a hardcoded value (closes #36).
- **Concurrency & Shutdown:** Hardened `VxChunkBasedStorage` and the `IOProcessor` against race conditions during concurrent server shutdowns.
- **Body Persistence Hardening:** Resolved `IndexOutOfBoundsException` during `/vxkill` commands and improved overall stability of the body data store.
- **Buoyancy Stabilization:** Stabilized buoyancy for small physics bodies by implementing normal capping for fluid forces.
## Performance
- **Batch Body Locking:** Significantly reduced GC pressure and improved native performance by switching back to batch locking for physics updates.
- **Zero-Allocation Networking:** Implemented zero-allocation packet serialization and multiplexing using direct Netty buffers to eliminate heap churn.
- **Memory Optimization:** Eliminated terrain coordinate allocations by utilizing bit-packed `long` primitives for spatial indexing.
- **JNI Overhead Reduction:** Minimized JNI call overhead in `VxPhysicsIntersector` by using reusable static filters and optimized intersection logic.
- **Efficient State Extraction:** Optimized the extraction of physics states from the native simulation via the new `BatchBodyInterface`.
- **Network Dispatcher Pooling:** Implemented pooling for the network dispatcher to eliminate allocation stutter during high-frequency updates.
- **Debug Charts:** Optimized the performance debug chart with vertex batching for more efficient rendering.
## Refactors
- **Centralized Tick System:** Unified all Java-side tick callbacks into a single `VxTickBehavior` for consistent execution order.
- **Raycasting Overhaul:** Completely rewritten `VxRaycaster` utility with cached Jolt filters and full decoupling from Minecraft classes.
- **Project Reorganization:** Major cleanup of the core package hierarchy, moving Behaviors, Managers, and Renderers into specialized sub-system packages.
- **Hardcoded Defaults:** Removed the dynamic `VxPhysicsConfig` system in favor of hardcoded constants to ensure simulation determinism across all environments.
- **Fluid Drag Balancing:** Rebalanced fluid drag coefficients for more realistic momentum preservation and interaction.
- **Atomic Operations:** Implemented atomic container swapping for thread-safe resizing of internal physics stores.
- **Cleanups:** Removed obsolete `VxBodyLifecycleListener` and `isGameStateDirty` arrays; standardized `Quaternionfc` usage in conversions.
## Build & Dependencies
- **Jolt-JNI Upgrade:** Updated Jolt-JNI to version **3.10.0** (including intermediate update to 3.9.0 and 3.7.0).
- **Nightly Builds:** Added a new automated CI workflow for nightly development builds.
- **Build Pipeline:** Optimized build paths for NeoForge and relocated development shadow jars to intermediate directories.
## Documentation
- **Behavior API:** Added exhaustive Javadoc to all behavior fields and methods to support add-on development.
- **Standardization:** Completed and standardized Javadoc for `VxServerBodyManager` and `VxClientBodyManager`.
- **README Rewrite:** Fully rewrote the project README to reflect the new architecture and capabilities.
- **Correction:** Fixed various inconsistent and duplicate Javadoc entries across the physics engine core.
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" }