UltiTools-API 6.3.2 Release Notes
UltiTools-API 6.3.2 is a correctness patch for module loading and updates, configuration handling, storage and diagnostics, with sender-aware command completion and startup warnings for undeclared configuration keys. The full list for module authors is in COMPATIBILITY.md; the release itself is v6.3.2 on GitHub.
Fixed
- Distinct modules whose main classes share a simple name are no longer dropped from dependency resolution, while existing dependency aliases remain supported (#770).
- Component discovery in JARs respects package boundaries instead of also scanning sibling packages with the same textual prefix (#808).
- Component discovery from directories and module metadata reads correctly resolve paths containing spaces or other URL-escaped characters (#785).
- Deferred module removals remain recorded when JAR metadata cannot be read, and update staging reports metadata or hash read failures instead of misreporting a missing module identity (#785).
- Failed external-plugin registration unwinds attempted task, player-cache, event, command and listener registrations before releasing the refused plugin's context (#796).
- SQLite lock waits measure actual elapsed time so native profiling signals no longer prematurely exhaust the existing wait budget (#771).
- JDBC connections are discarded when restoring auto-commit fails after a completed transaction, without changing its completed commit or rollback outcome (#793).
- In-memory query filtering and sorting preserve standard finite numeric precision, while JSON reads and deletes reject invalid non-equality null filters with a typed data-access exception (#789).
- Missing configuration keys with declaration comments can be inserted after YAML keys with no written value without falsely refusing the write (#772).
- Configuration initialization reuses class discovery and document style detection avoids repeated text scans, reducing work without changing validation or file formatting (#792, #794).
- Configuration conversion warnings stay on one line, and framework YAML load and migration diagnostics report the problem location without exposing parser excerpts (#790, #795).
- Refused configuration edits name declared keys and request corrected values instead of a server restart (#791).
- Partial module reload summaries appear once in the console, accurately describe timing updates applied before a later failure, and translate framework timing and cooldown reasons into Chinese (#773, #791).
- Module load diagnostics link to the public compatibility guide and identify an older server API as another possible cause of skipped classes (#767, #804).
/upm check,/upm update <module>and/upm update allreport a pending startup check instead of consuming partial update results (#787).- Diagnostic fallback failures no longer recurse through broken logging handlers, and GUI frame exceptions use one plugin warning without allowing a logging failure to interrupt subsequent frame processing (#803).
Changed
- Configuration initialization warns about keys or subtrees without an
@ConfigEntrydeclaration, without logging their values, removing them or repeating the warning on ordinary reloads (#799). - Module tab completion supports console, RCON and other command senders through sender-aware providers, while filtering unavailable targets, permissions and OP requirements before invoking providers (#801).
Deprecated
No new deprecations; the existing 6.3.1 deprecations remain unchanged.
Breaking changes
No public API removals or incompatible public/protected signature changes were identified in this patch; existing player completion APIs remain available.
Custom registered tab completers now also receive non-player requests, so module authors must use TabCompletionContext#getSender() and handle a null getPlayer() before accessing player state (#801).
Ling Bao