COWMODSКаталог модов
Distant Decorations

ВЕРСИИ (4)

release

Distant Decorations 2.0.0

2.0.0
27 сент. 2026 г.765Minecraft: 26.3fabric
Скачать
Что нового
# Distant Decorations 2.0.0 This release targets Minecraft 26.3 on Fabric. It requires Java 25, Fabric Loader 0.19.5 or newer, and Fabric API 0.161.0 or newer for 26.3. Minecraft 26.2 users should stay on Distant Decorations 1.0.0. - Updated the Minecraft, Fabric Loader, Fabric API, and Loom versions and the mod metadata for the final 26.3 release. - Restored the full unit test suite on 26.3 by adapting the command authorization test to the current Minecraft API. - Kept Voxy optional. **Full changelog:** https://github.com/justbecauseph/distant-decorations/compare/v1.0.0...v2.0.0
release

Distant Decorations 1.0.0

1.0.0
12 сент. 2026 г.247Minecraft: 26.2fabric
Скачать
Что нового
# Changelog: `v0.2.0...v1.0.0` ## [1.0.0] - 2026-09-13 ### Security & Access Control * **Restricted Server Toggle Permission**: `/dd toggle` now strictly requires operator level 2 ([`Commands.LEVEL_GAMEMASTERS`]( src/main/java/me/justbecause/distantdecorations/DistantDecorations.java#L62)), preventing non-operators and moderators from toggling the mod. Public telemetry access (`/dd stats`) remains open to all players. * **Decoupled Client Rendering Switch**: Added `clientRenderingEnabled` to [`DistantDecorationsConfig`]( src/main/java/me/justbecause/distantdecorations/config/DistantDecorationsConfig.java). Executing `/ddc toggle` via [`DistantDecorationsClient`]( src/client/java/me/justbecause/distantdecorations/client/DistantDecorationsClient.java#L70) now toggles local client-side rendering only, eliminating accidental mutation of the server `masterEnabled` flag during singleplayer / integrated-server play. --- ### Storage Safety & Persistence * **Diagnosed Corruption Quarantine**: * Region files with corrupt magic bytes (`0x4445434F`), invalid format versions, payload length mismatches, or truncated streams are moved to unique, collision-safe quarantine files (`r.X.Z.dat.corrupt.<timestamp>.<uuid>`) to preserve raw data for forensic recovery. * Invalid stored identifiers in [`DecorationId.readFromStream()`]( src/main/java/me/justbecause/distantdecorations/api/DecorationId.java) translate `IdentifierException` into `IOException`, allowing [`ServerDecorationWorldIndex`]( src/main/java/me/justbecause/distantdecorations/server/storage/ServerDecorationWorldIndex.java) to quarantine malformed files rather than propagating unhandled runtime errors into chunk reconciliation. * **Quarantine Failure Overwrite Protection**: * If moving a corrupted region file to quarantine fails (e.g., due to file locks or filesystem permission denials), the region key is added to `blockedRegions` and throws a storage exception. * [`getOrCreateRegion()`]( src/main/java/me/justbecause/distantdecorations/server/storage/ServerDecorationWorldIndex.java) and [`saveRegionToFile()`]( src/main/java/me/justbecause/distantdecorations/server/storage/ServerDecorationWorldIndex.java) strictly refuse to create or overwrite blocked regions, guaranteeing that locked or unmovable files are never overwritten with blank regions. * **Read-Error vs. Missing File Classification**: * Replaced indeterminate `Files.exists()` checks with direct stream opening. * Non-corruption I/O errors (e.g., `AccessDeniedException`) are classified as `READ_ERROR` without quarantining, and the region is blocked from overwrite. Only confirmed file absence (`NoSuchFileException` / `Files.notExists()`) triggers new region creation. * **Atomic Move Fallback**: Added fallback to `StandardCopyOption.REPLACE_EXISTING` when `AtomicMoveNotSupportedException` is encountered across different storage filesystems. --- ### Lifecycle & Single-Writer Protection * **Storage-Keyed Recovery Queue**: * [`ServerDecorationManager`]( src/main/java/me/justbecause/distantdecorations/server/ServerDecorationManager.java) tracks failed unloads by normalized `Path storageDir` in `pendingRecoveryByStorage` rather than dimension ID alone. * Prevents cross-session contamination: cleanly unloading an index in one world session does not evict pending recovery state for the same dimension in another directory. * **Single-Writer Safety Guard**: * [`ServerDecorationManager.openIndex()`]( src/main/java/me/justbecause/distantdecorations/server/ServerDecorationManager.java) verifies whether pending recovery exists for the target directory. If flushing the pending index fails, opening a new writable index is refused (`returns null`), preventing split-brain data corruption. * **Server Stopping Flush**: * [`ServerDecorationManager.handleServerStopping()`]( src/main/java/me/justbecause/distantdecorations/server/ServerDecorationManager.java) attempts to flush all active and pending recovery indices, returning `true` only when all paths persist cleanly. --- ### Network Streaming & Synchronization * **Network Tick Exception Containment**: * Wrapped snapshot resolution in [`ServerNetworkManager.tick()`]( src/main/java/me/justbecause/distantdecorations/server/ServerNetworkManager.java) with dedicated exception handling. Storage failures cannot crash the network tick, do not stream empty snapshots, and do not falsely mark regions as synced. * **Work Budget Accounting & Retry Backoff**: * Failed snapshot loading attempts increment `materializedRegions++`, ensuring faulty storage calls consume the per-tick region budget (limit: 2/tick) and prevent starvation of other network tasks. * Failed region jobs are deferred with a 3-second retry backoff delay (`FAILED_JOB_RETRY_BACKOFF_MS = 3000L`) for up to 3 retries (`MAX_REGION_JOB_RETRIES = 3`) before abandonment. * **Subscription Eviction Cleanup**: * When out-of-range regions are removed from `desiredRegions`, retry counters and timestamps are purged so that re-subscribed regions begin with a clean retry budget. --- ### Build & Publication Hygiene * **Benchmark Dependency Isolation**: * Gated optional benchmark mods (`voxy`, `sodium`, `spark`) into a dedicated `benchmarkRuntime` configuration (`canBeResolved = true, canBeConsumed = false`) in [`build.gradle`]( build.gradle), used exclusively by `runIntegrationClient`. * **Publication Metadata Assertions**: * Added validation in [`build.gradle`]( build.gradle) asserting published Maven POM (`pom-default.xml`) and Gradle module metadata (`module.json`) strictly expose only `fabric-loader` and `fabric-api`, with zero benchmark dependency leakage regardless of whether `-PenableBenchmarkMods` is enabled. --- ### Testing & Verification * **Test Suite Expansion (53 total automated tests)**: * [`CommandAuthorizationRegressionTest`]( src/test/java/me/justbecause/distantdecorations/command/CommandAuthorizationRegressionTest.java) (6 tests): Validates permission level enforcement on `/dd toggle` and verifies client `/ddc toggle` independence from server state. * [`StorageSafetyRegressionTest`]( src/test/java/me/justbecause/distantdecorations/server/StorageSafetyRegressionTest.java) (13 tests): Validates dirty region retention, quarantine mechanics, quarantine-failure overwrite blocking, permission/access-denied handling, storage-path isolation, single-writer guards, shutdown flushes, and malformed identifier containment. * [`ServerStorageAndNetworkTest`]( src/test/java/me/justbecause/distantdecorations/server/ServerStorageAndNetworkTest.java) (8 tests): Validates per-tick work budget consumption and retry backoff delay across multi-region streaming queues. * [`DistantDecorationsIntegrationGameTest`]( src/gametest/java/me/justbecause/distantdecorations/gametest/DistantDecorationsIntegrationGameTest.java) (4 GameTests): Strengthened `testProviderCaptureAndPublish` to verify real container block entity capture (`Blocks.BARREL`), payload decoding, bounding box accuracy, and revision invariance. **Full Changelog**: https://github.com/justbecauseph/distant-decorations/compare/v0.2.0...v1.0.0
beta

Distant Decorations 0.2.0

0.2.0
1 сент. 2026 г.13Minecraft: 26.2fabric
Скачать
Что нового
- Fixed decorations disappearing after traveling between dimensions. - Fixed region subscriptions being incorrectly reused across dimensions, preventing baseline decoration data from reaching the client. - Fixed persistent decoration records being deleted when their chunks unloaded. - Improved client and server synchronization when changing dimensions. - Added regression coverage for decoration persistence across block-entity unloads. Full Changelog: [v0.1.0...v0.2.0](https://github.com/justbecauseph/distant-decorations/compare/v0.1.0...v0.2.0)
beta

Distant Decorations 0.1.0

0.1.0
21 авг. 2026 г.19Minecraft: 26.2fabric
Скачать
Что нового
**Full Changelog**: https://github.com/justbecauseph/distant-decorations/commits/v0.1.0