TDLibrary Changelog
Mit BuildUp ausgelieferte Version: 0.28.1
0.28.1 · 0.28.0 · 0.27.0 · 0.26.0 · 0.25.0 · 0.24.0 · 0.23.0 · 0.22.0 · 0.21.0 · 0.20.0 · 0.19.0 · 0.18.0 · 0.17.0 · 0.16.0 · 0.15.0 · 0.14.0 · 0.13.0 · 0.12.0 · 0.11.0 · 0.10.0 · 0.9.0 · 0.8.0 · 0.7.0 · 0.6.0 · 0.5.0 · 0.4.0 · 0.3.0 · 0.2.0 · 0.1.0
0.28.1
- Fix a server crash during regular autosaves when a SavedData class references classes of an absent optional mod. Such classes, and any whose save methods cannot be inspected, are logged once and saved immediately like vanilla; the inspection now walks declared methods along the SavedData hierarchy.
0.28.0
- Spread regular SavedData autosaves across server ticks while explicit storage saves and backups flush queued snapshots first. Keep dirty data pending until captured and discard replaced entries instead of writing stale data.
- Reduce SavedData snapshot allocation with detached array-backed compounds and linear NBT writing. Preserve nested arrays, custom copy implementations and the existing compressed save format.
- Prevent Lili's Pottery clay-coloring scans from waiting for unloaded chunks, including subsequent vertical block reads.
- Use TDClaim's native plain insertion loop when available, preserving per-slot permission checks, live slot counts, simulations and callback changes.
0.27.0
- Use Sophisticated Core's live native slot tracker to narrow AE2 external inventory extraction and existing item/occupied-slot searches. Refresh candidates after reads, rejected transfers and simulations; actual reads and extraction still pass through the original protected capability. Custom inventory layouts, virtual partitions and unsupported APIs retain ordinary scans, and AE2's slot-index setting remains authoritative.
0.26.0
- Avoid repeated full inventory serialization in compatible LDLib2/NeoECOAE passive change detection for native AE2 inventories. Compare detached contents, including nested encoded patterns and mutable custom NBT; unknown components retain a per-slot serialized comparison, and inventory subclasses retain LDLib's original path. Keep synchronization/persistence dirty callbacks, packet and save formats, polling frequency and Spark profiling unchanged.
0.25.0
- Route indexed item insertion directly through TDLibrary's live slot traversal instead of calling back through AE2. Reuse the outer size read only within the same query, bypass reflective layout discovery for native views, and let unsupported handlers fall back before reading their slots. Actual reads and inserts still use the original protected capability; callbacks refresh candidates and layout checks.
- Expose a direct occupied-slot bridge for optional conduit callers, retaining AE2's older index fallback without adding a mandatory mod dependency.
- Retain the original loaded-state query when a server or chunk provider is unavailable instead of dereferencing an incomplete compatibility context.
0.24.0
-
Skip repeated vanilla comparator input scans while that comparator already has a scheduled update. Keep the original deadline and priority; the pending tick evaluates the latest inventory and redstone inputs. Inventory callbacks, dirty marking and neighbor notifications remain immediate.
-
Reuse native EnderPipes collision and selection geometry across neighbor updates when conduit order, every directional connection/status and the offset layout are unchanged. Connection edits rebuild immediately; foreign bundle implementations keep their original update behavior. Transfer callbacks, capability invalidation and redstone notifications are not delayed or suppressed.
0.23.0
- Reuse compatible C2ME backing-holder associations during conduit validation and loaded-state queries. Check holder identity/open state under the original monitor, read the live managed ticket level on every query, and resolve closed or replaced holders again without waiting for vanilla map publication. Missing holders are never cached. Keep C2ME optional and skip incompatible lifecycle contracts.
- Apply conduit lookup reuse to the existing loaded-state path used by ticking and dirty marking as well as guarded inventory/capability validation. Preserve all original attachment, network, world-thread and protection checks.
- Copy native NBT maps by entries instead of key iteration followed by another lookup. Use pre-sized native maps and Fastutil's allocation-light entry traversal throughout SavedData snapshots. Apply the same traversal inside ordinary compound copies, including Lithium's copy implementation, while preserving surrounding copy hooks, unknown map behavior, custom tag copy overrides and detached mutable values.
0.22.0
- Copy compounds inside nested NBT lists directly when constructing detached SavedData snapshots. Preserve list order and types, mutable-array isolation, empty typed lists and custom tag copy implementations while avoiding vanilla transformed-map intermediates throughout the nested structure.
- Resolve optional AE2 inventory hints through direct index and wrapper views. Read each visited child's slot count once per query and locate fixed combined-inventory offsets with a binary search. Keep live child replacement, callback invalidation, access checks and unsupported-inventory fallbacks.
- Reuse the visible chunk association during compatible TDEnderPipes node validation until the chunk map is published again. Read the current ticket level on every validation and release cached associations on attachment or network changes. Original world, thread, attachment and permission checks remain active; no chunks are loaded by this optimization.
0.21.0
- Limit optional AE2 Reforged next-slot layout checks to the inventories actually visited. Keep fixed wrapper offsets, live child replacement, permission checks and fallback scanning for unknown inventories; this also serves conduit callers using the AE2 index API.
- Preserve tracked AE2 counter revisions during entry reads, while wrapping mutable entries and iterators to invalidate on writes. Mutable map/fuzzy views retain their native conservative fallback. Other AE2 versions without the revision API skip this adapter.
- Build detached SavedData compound snapshots directly with pre-sized maps, avoiding transformed-map copy intermediates. Deep copies, mod-owned copy overrides and NeoForge's asynchronous write boundary are retained.
0.20.0
- Use optional AE2 Reforged next-slot queries during inventory insertion to avoid repeatedly building full candidate bitmaps. Keep live callback and permission checks, slot order, simulation, and compatibility with older index APIs or unindexed inventories.
0.19.0
-
Share bounded CPU resources with detached conduit routing, keeping ready mailbox results charged until consumption. Add strict envelope loading, atomic-required file writes and validated settings bindings for consumers.
-
Use only the standard common, server and database config file variants. Move computation settings to
tdlibrary-common.toml, preserving an existing legacy file when the common file is absent, and place pack-version enforcement in the actual SERVER configtdlibrary-server.toml. -
Add an opt-in dedicated-server pack-version gate using
config/fancymenu/pack_version.txt. Admit clients only after an exact version match before joining the world; show both versions and the automatic-update restart hint on mismatch. Reject missing support, unreadable client versions and timed-out checks; refuse startup with an invalid server version while enabled. Singleplayer remains unaffected.
0.18.0
- Skip mounted Sophisticated stores with no matching fuel during Create furnace-cart refuelling, using their live native item tracker. Preserve storage order, simulated probes, extraction callbacks and fuel consumption; other mounted inventories retain the original slot scan.
0.17.0
- Use optional AE2 Reforged inventory indexes in NeoForge's shared item insertion helpers, reducing searches in supported sparse inventories for callers such as conduits and Create chutes. Keep original routing for unsupported inventories and re-query candidates during transfers while preserving access checks, simulation and stack-first slot order.
0.16.0
- Prepare block-state property text once per block when PuzzlesLib enumerates model locations, avoiding repeated property entry allocation and formatting while retaining the complete model set and per-baking-event reload scope. This also reduces enumeration work with ModernFix dynamic resources enabled without forcing model loads.
0.15.0
- Apply provider command checks to live notifications and vanilla chat fallbacks as well as archived pages.
- Correlate inbox pages with their requests so delayed replies cannot overwrite a reopened inbox or a newer filter selection. Notification protocol 3 requires matching client and server versions.
- Persist mark-all read receipts in batches with one file flush per batch, and acknowledge successful delivery so normal read updates are not written to the archive twice. Existing single-operation outbox files remain readable.
- Reject incompatible archive unique keys before data operations and omit the redundant revision index when creating new tables. Existing database schemas are never migrated automatically.
- Return conservative culling results for nested cache initialization to prevent crossed model queries from waiting on each other's cache locks.
- Record local Maven publication checksums once through the shared publication helper.
0.14.0
- Register ShetiPhianCore's resource-pack texture override listener on the client setup work queue instead of a parallel loading worker. Preserve its initial texture mappings and later resource reloads, with the optional repair limited to compatible direct setup calls.
0.13.0
-
Own the optional Artifacts nonblocking supporting-block repair, Elytra Slot/Deeper and Darker cooldown compatibility and Underground Worlds vanilla registry-bootstrap repair previously supplied by TDUtilities. Preserve their validation and leave legacy TDUtilities installations in charge of their own hooks.
-
Complete the PuzzlesLib compatibility update by replacing the remaining exact-version gate with callback bytecode validation, enabling the patch for compatible updates and skipping incompatible structures with a warning.
0.12.0
- Keep PuzzlesLib model location reuse enabled across compatible updates by checking callback structure instead of an exact version and numbered lambda names. Skip the optional patch with a warning when the required structure changes.
0.11.0
- Publish the tested NeoForge 1.21.1 mod and sources to Maven local so consumers can select an exact build without accessing TDLibrary's source or build folders. Publication runs the existing verification checks first.
- Produce reproducible archives with stable ordering and timestamps so unchanged clean builds retain their Maven dependency checksums.
- Atomically record the last successful local publication's version and artifact checksums in a platform-specific
current.json. Consumers can build independently against that publication without manually maintaining compile versions or checksums.
0.10.0
- Keep source actions valid after read-status refreshes while rechecking permissions and the original receipt expiry. Report expired views explicitly instead of leaving bulk-read controls waiting.
- Allow bounded notification request bursts for normal page, read and settings navigation. Only explicit open messages can open the inbox; delayed page replies no longer replace another screen. Notification protocol 2 requires matching client and server versions.
- Preserve malformed notification outbox files in a separate quarantine directory and continue replaying valid operations. Keep database outages and local I/O failures retryable without quarantining valid writes.
- Store new notification payload columns as utf8mb4 and reject incompatible existing columns before archive operations. Preserve existing tables for an explicitly managed migration.
- Refresh the same source/category, unread and active filters and page cursor after individual and bulk read acknowledgements; bulk reads still cover all authorized entries at their snapshot.
- Translate nested component arguments and siblings below literal or unknown translation roots while preserving styles, fallback text and the original input.
- Reuse PuzzlesLib 21.1.63's complete top-level model location set across callbacks within one baking event, avoiding repeated block-state enumeration while keeping every model location and refreshing on the next reload.
- Index ZIP resource entries by namespace once per opened client file pack instead of enumerating the entire archive for every query. Preserve entry order, vanilla path validation and resource contents; clear the index when the pack closes.
0.9.0
- Prevent Architectury 13.0.11's client post-tick listener list from changing during dispatch, which could crash startup while client setup registers callbacks. Use thread-safe snapshots exclusively for CLIENT_POST, preserving listener order and duplicates; registration, removal and clearing take effect on the next dispatch. Architectury remains optional and the patch only loads on the client.
0.8.0
- Calculate MoreCulling's block-state shape and translucency caches on first use instead of loading every block model during resource reloads when ModernFix dynamic resources are enabled. Keep culling enabled, invalidate caches on reload and serialize initialization for concurrent chunk queries. This optional client patch targets MoreCulling 1.0.10; newer versions retain their original behavior pending compatibility validation.
0.7.0
- Add shared Boolean, integer, finite double and string-list setting definitions with consumer-owned NeoForge persistence, reload and change callbacks. Generate administrative commands and paginated vanilla chest menus from the same validated values, recheck permissions, reject stale menu edits and prevent display-item transfers for every container click type. Support normal/Shift numeric adjustment and list editing through the menu and vanilla chat commands without a client UI dependency.
0.6.0
- Skip live notifications for fake players and recipients without an active gameplay connection. Guard custom payload checks, packet sends and vanilla chat/actionbar fallbacks, including delayed archive responses after disconnect. Offline publication and retained events keep their existing behavior.
0.5.0
- Adopt only results offered by consumers in the current tick, with round-robin turns at the end of the server tick. Idle ready consumers no longer hold up active consumers; shared count and callback-time limits remain unchanged.
- Add explicit cooperative cancellation for supersession, target cancellation and shutdown while retaining running capacity until actual completion and rejecting obsolete publication even when cancellation is ignored.
- Report lifetime sample counts and average capture, computation, wait and application times in milliseconds, maximum start wait, current oldest-ready age, and separate computation failures, application failures, aborts and obsolete work. Keep bounded saturating aggregates without a job history.
0.4.0
- Share bounded CPU computation capacity between TDAE2 terminal comparisons, NeoECOAE exact terminal preparation, TDAE2Additions server analyses and TDEconemy public presentation work. Reserve capacity before capture, distribute jobs between consumers, retain only the newest successor per key, and reject overload without running calculations on the caller.
- Bound result adoption across consumers by count and elapsed callback time. Preserve owner-thread validation and invalidate cancelled work and old server generations without waiting for detached calculations.
- Configure CPU capacity independently in
tdlibrary-compute.tomland expose per-consumer counts, phase timings and ready-result age through/tdlibrary compute. Notification and database workers remain separate.
0.3.0
- Add an optional FTB Library inventory sidebar entry for notification history and settings, using the same resource integration as TDClaim.
- Replace notification management subcommands with UI controls while keeping
/tdnotifyas an opener. - Automatically load presentation settings, add category selection from the current history page and an all-mod default, and show loading, saving and failure feedback in the UI. Preserve existing category/source overrides and required feedback.
- Add history row tooltips with full titles, timestamps and condition states, and disable stale page actions during archive requests.
0.2.0
- Fix client startup failing with
IllegalClassLoadErrorby moving the toast sound mixin into its own package. Normal notification subscribers, screens and toasts can now load without entering a Mixin-owned package. - Preserve silent notification toasts by retaining both vanilla sound redirects. Add automated client class-loading, toast injection-target and packaged Mixin isolation checks to prevent another startup regression.
0.1.0
-
Generate a separate NeoForge
tdlibrary-database.tomlconfiguration, following the other TD mods, with host, port, database, credentials and TLS mode instead of a custom Properties file or JDBC URL. -
Add one TD notification inbox with unread markers, individual read acknowledgements, snapshot-bound Mark all as read, source/category filters and persistent per-player presentation settings.
-
Route structured messages through chat, actionbar and native toasts, with an assignable keybinding,
/tdnotify, menu entry points and bounded local client history. Toasts do not mark events read or resolve source conditions; sound defaults to off. -
Archive notification revisions and recipient read state indefinitely in MariaDB using the bundled JDBC driver. Automatically create the configured database and notification tables when needed, validate required columns and retry initialization after failures without manual SQL setup. Keep a restart-safe local outbox, retry idempotently after outages and show archive failures without pretending the history is empty.
-
Add shared LDLib2 button, text-field and pixel-layout adapters so common UI fixes can be applied consistently across TD mods.
-
Bound labels and wrapped text to their available width, including narrow ellipses and Unicode characters.
-
Provide separate cooldown, minimum-interval, fixed-window and sliding-window helpers that preserve each consumer's timing policy.
-
Share safe temporary-file replacement, bounded network-list decoding and online/cache player-name lookup.
-
Provide independent session flags and synchronous SavedData envelopes without moving authorization or persistence ownership out of consumers.
-
Share translated component-template rendering and credential-free MariaDB target validation without opening database connections.
-
Add common Gradle JAR discovery and embedded compile-dependency extraction with clear failures for missing or ambiguous candidates.
-
Keep LDLib2 optional and all UI classes separate from the server-safe core. Do not bundle installed mods.