Changelog – Version 0.9.0
This update introduces our new Stonecutter multi-version development setup. This allows us to work on Minecraft 1.20.1 and 1.21.1 at the same time, supporting both Forge and Fabric. We also added new tools, improved performance with JNI caching, and completely rebuilt how we save and sync physics data.
Gameplay & Features
- New Weld Tool: Added a tool that lets you weld different physics bodies together so they stick.
- Physics Gun Fixes: Fixed the physics gun so it doesn't grab kinematic and static (non-moving) bodies.
- Removed Vehicles: We removed the old vehicle system and built-in drivable bodies for now.
Collision & Physics Changes
- New Collision Shape System: Implemented
VxCollisionShapeto handle shape definitions and sync them properly. - Debug Rendering: Added modular debug lines to render collision shapes, making it much easier to see physics boundaries in-game.
- Direct NIO Memory: Changed physics body data containers to use direct NIO buffers. This makes reading and writing physics data faster.
- ID-Driven Behaviors: Rebuilt the physics behavior system to use simple IDs. We also changed sync behaviors to use clean, declarative callbacks.
- Activation State: Bodies now properly save and sync whether they are active or resting. Fixed an issue where some bodies were forced to be dynamic.
Performance & Sync
- Faster JNI Bridge: Optimized how we get AABBs on the client using Jolt shapes. We did this by batching JNI calls.
- Shape Caching: Added shape caching inside the JNI bridge. This fixes stuttering and lag when rendering or creating compound shapes.
- Smarter Persistence (TLV System): Built a high-performance persistence system using a custom schema (TLV format). It cleanly saves chunk data, behavior bits, and ignores collisions between specific pairs of bodies.
- Better Velocity Sync: Moved angular velocity (
angVel) tracking to the main container and sync it directly to the client with a state packet. - Rendering Optimization: Cached
BoxColorvalues to speed up rendering loops.
Stonecutter Multi-Version Development
- Multi-Version Workspace: We now use Stonecutter to develop for both 1.20.1 and 1.21.1 simultaneously.
- Loader & Version Support: Fully set up Stonecutter branches to compile and export for both Forge and Fabric.
- Development Setup: Separated development run directories for each version and cleaned up IDE run configurations.
Bug Fixes & Code Cleanup
- Crash Fix: Fixed a dangerous race condition when removing bodies that caused a double-destruction crash.
- Null Shape Sync: Resolved a bug where null shapes would sometimes try to sync, causing errors.
- Event Library Update: Rewrote and restructured the internal
vx-eventslibrary to make it cleaner and easier to maintain. - Constraint Search: Added a method in
VxConstraintManagerto quickly find constraints using their UUID.
Build & CI (Development)
- Gradle Update: Upgraded Gradle to 9.4.1 and added the Foojay toolchain resolver.
- Smarter Workflows: Made GitHub Actions fully dynamic. Workflows now automatically build, test, and package artifacts for all target versions.
- Nightly Builds: Set up automatic Maven snapshot publishing for nightly workflows.
- Dependency Cleanups: Used
modLocalRuntimeto keep testing mods out of published files.