Really Fast PaintingsСкачатьСкачатьСкачать
ВЕРСИИ (3)
release
Really Fast Paintings 2.0.0
2.0.027 сент. 2026 г.295Minecraft: 26.3fabric
Что нового
# Really Fast Paintings v2.0.0
Minecraft 26.3 release for Fabric.
- Updated painting placement, persistence, rendering, and metadata for Minecraft 26.3.
- Requires Fabric Loader 0.19.5 or newer, Fabric API 0.161.0 or newer for 26.3, and Java 25.
- Keeps Distant Decorations 2.0.0 optional. Its published Modrinth artifact supplies the compile API.
- Added client GameTests that enter a world, render a 2×2 painting, and exercise Distant Decorations record delivery and distant render submission.
[Changes since v1.1.0](https://github.com/justbecauseph/really-fast-paintings/compare/v1.1.0...v2.0.0)
release
Really Fast Paintings 1.1.0
1.1.012 сент. 2026 г.313Minecraft: 26.2fabric
Что нового
# Changelog: v1.0.0...v1.1.0
### Summary
Really Fast Paintings **v1.1.0** focuses on baseline correctness, failure-safe migration and restoration boundaries, prevention of duplicate entities or orphaned helper parts, chunk-granular auditing, and regression test coverage.
---
### 🐛 Bug Fixes
- **Anchor Coordinate Resolution Outside Origin:**
- Fixed an issue in [`PaintingPartBlock.findAnchorLookup(...)`]( src/main/java/me/justbecause/fastpaintings/block/PaintingPartBlock.java#L110-L162) where search candidates were allocated without setting offset coordinates (defaulting to `(0, 0, 0)`). Multipart paintings placed away from origin now properly resolve their anchor across all 4 horizontal facings.
- Implemented [`AnchorLookupResult`]( src/main/java/me/justbecause/fastpaintings/block/PaintingPartBlock.java#L164-L186) (`Found`, `Unloaded`, `Orphan`) to avoid treating part blocks adjacent to unloaded chunks as orphans, eliminating premature self-destruction or forced chunk loading.
- **Placement Order & Neighbor Updates:**
- Fixed placement sequencing in [`PaintingPlacementService.tryPlacePainting(...)`]( src/main/java/me/justbecause/fastpaintings/painting/PaintingPlacementService.java#L23-L65): the anchor block is placed and its [`PaintingBlockEntity`]( src/main/java/me/justbecause/fastpaintings/block/entity/PaintingBlockEntity.java) variant initialized before placing part blocks, preventing neighbor-update cascades from destroying part blocks during placement.
- **Multi-Tick Restoration Suppression Loop:**
- Restored vanilla `Painting` entities are tagged with `fastpaintings:restored` and tracked in an in-memory suppressed UUID set in [`PaintingConversionService`]( src/main/java/me/justbecause/fastpaintings/painting/PaintingConversionService.java#L24-L50), preventing automatic conversion listeners from immediately reconverting newly restored entities on the next server tick.
- **Removal-Guard State Reset:**
- Guaranteed that [`PaintingBlockEntity.setRemoving(false)`]( src/main/java/me/justbecause/fastpaintings/block/entity/PaintingBlockEntity.java#L48-L54) is properly reset during restoration rollback, preventing surviving anchor blocks from remaining permanently locked against future removal.
---
### 🛡️ Safety & Recovery Improvements
- **Staged Restoration Recovery & Rollback Boundary:**
- Expanded the recovery boundary in [`PaintingConversionService.tryRestore(...)`]( src/main/java/me/justbecause/fastpaintings/painting/PaintingConversionService.java#L180-L336) to begin prior to footprint removal.
- Added pre-spawn footprint validation ensuring all cells are cleared of block representations before attempting entity insertion.
- Structured recovery into two distinct, independently guarded stages:
1. **Stage 1 (Entity Reconciliation & Cleanup):** Cleans up attempted entities and clears suppression markers via [`EntityCleaner`]( src/main/java/me/justbecause/fastpaintings/painting/PaintingConversionService.java#L143-L146).
2. **Duplicate Representation Prevention:** If entity cleanup fails and the attempted vanilla entity remains active in the level, footprint rollback is skipped to prevent duplicate representations (both active entity and block painting). Throws a location-bearing [`RestorationException`]( src/main/java/me/justbecause/fastpaintings/painting/RestorationException.java) containing the anchor position, preserving all failure causes.
3. **Stage 2 (Footprint Rollback):** Safely restores all footprint cells to their original block states and resets the anchor removal guard only when the entity is confirmed dead/absent from the level.
- **Suppression Preservation on Failed Operator Reconversion:**
- Preserved restoration tags and UUID suppression when an operator explicitly runs `/fastpaintings convert` and conversion fails due to an obstacle (such as custom entity data). Suppression markers are retained until conversion commits successfully.
---
### 📊 Migration & Diagnostic Commands
- **Section-Granular Chunk State Auditing:**
- Implemented [`PaintingMigrationCommand.scanChunk(LevelChunk)`]( src/main/java/me/justbecause/fastpaintings/command/PaintingMigrationCommand.java#L209-L239) using palette prechecks (`section.maybeHas(...)`) and intra-section block iteration `(0..15)`:
- Counts actual `PAINTING_BLOCK` states directly (`scan.anchorBlocks()`).
- Counts `PAINTING_PART_BLOCK` helper states (`scan.helperParts()`).
- Separately counts instantiated [`PaintingBlockEntity`]( src/main/java/me/justbecause/fastpaintings/block/entity/PaintingBlockEntity.java)s (`scan.anchorBlockEntities()`).
- Missing-BE orphan anchor states never report false clean (0 anchors).
- `/fastpaintings stats` output displays: `Block painting anchors: %d (BlockEntities: %d)` alongside helper parts.
- Guaranteed zero boundary-crossing reads into unloaded chunks during chunk scans.
- **Command Scope & Safe Uninstallation Documentation:**
- Updated [`README.md`]( README.md#L87-L119) and in-game feedback to clarify execution scopes:
- `/fastpaintings convert` evaluates loaded entities across all dimensions.
- `/fastpaintings stats` and `/fastpaintings restore` operate strictly on loaded chunks around active players or world spawn.
- Added a step-by-step **Safe Uninstallation Procedure** to guide operators in backing up worlds, disabling conversion configs, restoring paintings in loaded chunks, and certifying 0 remaining anchors/helpers before removing the mod jar.
---
### 🧪 Testing & Verification
- **New Unit Tests:**
- Added [`PaintingPartBlockUnitTest.java`]( src/test/java/me/justbecause/fastpaintings/block/PaintingPartBlockUnitTest.java) (5 tests), covering:
- Anchor lookup candidate calculation within bounded planes.
- Strict avoidance of reads into unloaded chunks (`testAnchorLookupCandidateMakesNoReadsIntoUnloadedChunks`).
- Proven orphan detection when all candidates are loaded.
- Total unit test suite: **67 tests passing (0 failures)**.
- **Expanded GameTest Suite:**
- Expanded [`FastPaintingsGameTests.java`]( src/gametest/java/me/justbecause/fastpaintings/test/FastPaintingsGameTests.java) from 5 to **22 mod tests (23 total GameTests passing)**:
- All 4 horizontal facings (`NORTH`, `SOUTH`, `EAST`, `WEST`) tested for placement and break.
- Multipart anchor resolution and break verification outside origin with drop integrity assertions.
- Backing wall destruction via natural game physics block updates.
- Multi-tick restoration suppression survival.
- Atomic rollback on entity insertion failures, spawner crashes, and incomplete removals.
- `testRestorationCleanupFailurePreventsDuplicateRepresentations`: Verifies rollback is skipped and `RestorationException` raised if an entity remains active.
- `testStatsCountsAnchorBlockWithoutBlockEntity`: Verifies orphan anchor blocks without block entities are counted accurately.
- Zero item drops in creative mode.
---
### 📦 Commits (v1.0.0...v1.1.0)
- [`7baecfe`](https://github.com/justbecauseph/fast-paintings/commit/7baecfe) `fix: separate cleanup and rollback recovery stages and enumerate anchor block states`
- [`9219c07`](https://github.com/justbecauseph/fast-paintings/commit/9219c07) `fix: harden restoration recovery boundary, chunk-granular stats, and regression test suite`
- [`84c3faf`](https://github.com/justbecauseph/fast-paintings/commit/84c3faf) `fix: harden restoration safety, uninstallation scope, and honest test harness`
- [`105191d`](https://github.com/justbecauseph/fast-paintings/commit/105191d) `fix: address reproduced restoration safety failures`
- [`afa0d9e`](https://github.com/justbecauseph/fast-paintings/commit/afa0d9e) `test: cover callback removal and multi-tick restoration`
- [`6ccddc9`](https://github.com/justbecauseph/fast-paintings/commit/6ccddc9) `fix: resolve multipart painting anchors outside world origin`
**Full Changelog**: https://github.com/justbecauseph/really-fast-paintings/compare/v1.0.0...v1.1.0
release
Really Fast Paintings 1.0.0
1.0.021 авг. 2026 г.16Minecraft: 26.2fabric
Что нового
**Full Changelog**: https://github.com/justbecauseph/really-fast-paintings/commits/v1.0.0