Releases: youngledo/godot-java
Releases · youngledo/godot-java
v0.6.1
Highlights
- Fixed several math type bugs in Plane, AABB, Quaternion, Transform2D, Basis, and Transform3D — boundary conventions, rotation directions, and
inverse()origin computation were corrected - Test coverage jumped to 97.5% with ~50 new unit tests and 4 new integration test scenarios
- JaCoCo coverage reporting now configured for
godot-java-core
Bug Fixes
Transform2D.inverse()had incorrect origin computationBasis.fromEuler()/toEuler()had wrong formulas and rotation directionPlane,AABBedge-touching boundary conventions were inconsistentQuaternion,Transform3Drotation direction conventions were mismatched
Testing
- Enabled 6 previously-skipped unit tests (Plane, AABB, Quaternion, Transform2D, Basis, Transform3D)
- Added unit tests for: Color, Vector2i/3i/4i, Rect2i, Projection, Rid, annotation enums, dispatch records, Callable, ConnectHandle, Signal
- Added integration tests for: GodotArray, GodotDictionary, Callable, ConnectHandle
- Total: 560 unit tests + 24 integration tests, all passing
Migration from 0.6.0
No API changes. If you were affected by incorrect math computations in the types listed above, results may now differ — the new behavior matches Godot's conventions.
v0.6.0
Highlights
- MainLoop callbacks — Register startup/frame/shutdown listeners via
Bootstrap.setMainLoopFrameListener() - PackedArray rich API — Full-featured wrappers for all 10 PackedArray types with
sort(),reverse(),subarray(), etc. - InitLevel per-level registration —
@GodotClass(initLevel=...)for controlling class registration lifecycle - Editor plugin support — New
@EditorPluginand@EditorPropertyannotations - Typed signal await —
awaitSignal()returns typed args;TypedSignalsupports timeout - Double-precision builds — Maven profile
double-precisionforreal_t = double - Lazy API loading — Optional
lazy-api-loadprofile for on-demand function resolution
Features
@OnReadyannotation for lifecycle field initialization@Export(defaultValue=...)for property revert in editor@ExportToolButtonannotation for editor tool buttons@RequiredInEditorannotation for editor property validation- SignalBuilder with ConnectFlags for fluent signal connections
- Callable round-trip support + generated VirtualStubs interface
- Resources utility class with type-aware property metadata
- CollectionTypeMeta for typed collection property metadata
- GodotApiVersion constants generated from extension_api.json
api-customMaven profile for alternative Godot API JSON- Virtual method stubs added to Godot base class
- Relaxed Variant conversion for GDScript-like type coercion
- Optional lazy API function loading
- JMH benchmark module for performance regression detection
- Maven profiles consolidated for feature flags
- Tests reorganized by functional area
Bug Fixes
- Fix APT duplicate class registration for multi-annotated classes
- Fix PackedVector4Array support in type mapper and engine calls
- Wire
_getConfigurationWarningsinterception in VirtualDispatch - Fix GodotDictionary/GodotArray no-arg constructor memory safety
Migration from 0.5.x
- Java 25 required (enforced)
@GodotClass(initLevel=)replaces global init level for per-class controlGodotArray/GodotDictionaryno-arg constructors create null wrappers; useof()orfromMap()/fromList()for new instances
v0.5.0
What's New in 0.5.0
jlink Embedded Runtime
- C++ shim discovers adjacent
runtime/directory for jlink-bundled JRE - jlink Maven profile in godot-java-examples for self-contained distribution
New APIs
GodotScope— Virtual Thread coroutine system with delay and signal awaitGodot.as()— safe downcasting (gdext match_class equivalent)Godot.launch()— convenience method with coroutine flush@GetProperty/@SetProperty/@GetPropertyList— dynamic property support@ValidateProperty— property validation hook@Export(getter/setter/readOnly)— custom getter/setter for exported properties
Fixes
- Use
privateLookupInfor VarHandle/MethodHandle access to private fields - Log full DispatchIndex load exception instead of just message
- Fix codegen-compat CI: use godot-headers repo for extension_api.json
Infrastructure
- CI paths filter to skip non-code changes
- push-and-release skill for automated release pipeline
v0.4.0
What's New in v0.4.0
New Annotations
@GodotClass(singleton=true)— Auto-register engine singletons viaClassDB_register_singleton@GodotClass(internal=true)— Hide classes from the Godot editor (is_exposed=0)@Constant— Exposestatic final int/longfields as GDScript integer constants@GodotMethod(virtual=true)— Register script-overridable methods viaCLASSDB_REGISTER_EXTENSION_CLASS_VIRTUAL_METHOD@Tool— Mark classes as editor-processable (runs in editor, not just game runtime)
Editor Documentation Registration
APT processor extracts /// Markdown Javadoc from @GodotClass sources, converts Markdown→BBCode→Godot XML class reference format, and registers docs in the Godot editor via EDITOR_HELP_LOAD_XML_FROM_UTF8_CHARS_AND_LEN.
Cross-Thread Utility
Godot.runOnMainThread(Runnable)— Safely schedule tasks from background threads onto the Godot main thread
New Examples
11-scene-loading— Dynamic scene loading12-rpc-chat— Multiplayer RPC chat13-tool-node— Editor tool node14-singleton— Auto-registered singleton15-virtual-method— Script-overridable methods16-constants— Integer constants in GDScript
Internal Changes
StructOffsetsgenerator supportsGDExtensionClassVirtualMethodInfo(88-byte struct)Bridge.callVoidoverload for 4 pointer args + long + intDeferredExecutor.flush()integrated into virtual dispatch callback- CONTRIBUTING.md converted to English with Markdown Javadoc requirement
- CLAUDE.md symlink for Claude Code integration
Requirements
- Java 25
- Maven >= 4.0.0-rc-5
- Godot 4.x
Installation
<dependency>
<groupId>io.github.youngledo</groupId>
<artifactId>godot-java-core</artifactId>
<version>0.4.0</version>
</dependency>Download native libraries for your platform from the assets below.
v0.3.0
What's New in v0.3.0
Hot Reload Support
Development-time hot reload via ClassLoader hot-swap. The JVM stays running while user classes are reloaded from an updated JAR.
Godot.reloadUserCode(jarPath)— public API to trigger reload programmaticallyHotReloadWatcher— automatic JAR file change detection (enabled viaGODOT_JAVA_HOT_RELOAD=true)Registry.unregisterUserClasses()/reloadUserClasses()— full unregister → rescan → re-register lifecyclerecreate_instance_funccallback — allows Godot to re-create Java wrappers for existing engine objects after reloadDispatch.reload(ClassLoader)— swaps the APT-generated dispatch index at runtime
RPC Support
New @Rpc annotation for multiplayer RPC methods:
@Rpcannotation withmode,transferMode, andcallLocalattributesRpcModeenum:DISABLED,ANY_PEER,AUTHORITYTransferModeenum:UNRELIABLE,UNRELIABLE_ORDERED,RELIABLE
Signal & Connect Improvements
TypedSignal<T>— type-safe signal wrapper forSignalandSignalWithArguments<T>ConnectBuilder— fluent API for signal connections with options (deferred,oneshot,objectId)ConnectHandle— lightweight handle for disconnecting signals
Other Changes
- Remove
docs/comparison.md - Internal:
Bridge.ARENAfor all upcall stubs, lazy dispatch initialization
v0.2.0
New Features
- Typed Signal API (TypedSignal0-TypedSignal5)
- Enum/bitfield types for method signatures (e.g. DisplayServer.WindowMode)
- Export DSL with @ExportGroup, @ExportSubgroup, PropertyUsage
- Typed ptrcall ABI for primitives, GodotArray, PackedArray
- Godot.instantiate() API
- Multi-platform CI (macOS, Ubuntu, Windows)
Breaking Changes
- Method params/returns changed from int/long to enum types
- GodotArray no longer Iterable — use indexed loop instead
- getOverlappingBodies() etc. now return GodotArray
Infrastructure
- Native library published to Maven with auto-sync
- Unified gdextension path to res://godot-java/
- Demo projects use symlinks to share native lib