Tags
Creators
Details
Licensed LGPL-3.0-only
Published last year
Updated 3 months ago
All versions
0.7.0
Beta
Velthoric 0.7.0 for NeoForge 1.21.17 months ago 114
Compatibility
Minecraft: Java Edition
1.21.1
Platform
NeoForge
Supported environments
Client and server
Required content
Any compatible version
Changes
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
PalettedContaineraccess, 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
VxTickBehaviorto optimize bandwidth. - Physics Events: Added the
prePhysicsTickevent 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
VxChunkBasedStorageand theIOProcessoragainst race conditions during concurrent server shutdowns. - Body Persistence Hardening: Resolved
IndexOutOfBoundsExceptionduring/vxkillcommands 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
longprimitives for spatial indexing. - JNI Overhead Reduction: Minimized JNI call overhead in
VxPhysicsIntersectorby 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
VxTickBehaviorfor consistent execution order. - Raycasting Overhaul: Completely rewritten
VxRaycasterutility 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
VxPhysicsConfigsystem 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
VxBodyLifecycleListenerandisGameStateDirtyarrays; standardizedQuaternionfcusage 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
VxServerBodyManagerandVxClientBodyManager. - 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.
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:i2yo1LYg:IAn95RlO"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:i2yo1LYg:IAn95RlO"
}

