Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Villagers remember their village layout and rebuild damaged structures while survivors remain.
VillageMemory 0.1.1
Bug Fixes
- Fixed fresh village snapshots remembering low-value terrain such as grass, dirt, and raw stone as repair targets.
- Existing remembered villages now automatically prune those terrain repair targets on startup while preserving real village blocks such as beds, doors, workstations, cobblestone, planks, paths, farmland, lights, glass, and fences.
- Villager repairs now prioritize workstations, doors, beds, lights, and visible structure blocks before low-priority support/farm blocks.
- Unloaded chunks are no longer counted as damaged remembered blocks, preventing false repair blockers when a village is not loaded.
- Repair feedback no longer plays block-place particles or wood placement sounds for no-op repairs.
Admin Notes
/villagememory inspectnow shows the top damaged remembered materials so admins can see what is blocking repair/growth.- Added a VillageMemory API damage summary for integrations such as VillageGrowth diagnostics.
Worker Recovery Update
- Added
/villagememory recover <village|nearest> [soft|hard]and/villagememory unstuck <village|nearest> [soft|hard]for admin recovery of stalled repair workers. - Soft recovery clears expired or stale repair danger, route, handoff, blocker, worker-lock, and loaded-villager repair state without deleting remembered layouts, resources, databases, or world blocks.
- Hard recovery additionally releases active runtime repair assignments so damaged remembered blocks can be reconsidered cleanly.
/villagememory inspectnow shows repair-worker exclusion summaries and current hostile evidence for stalled repair targets.- Villager origin tags can now be repaired when the old origin points to a village id that no longer exists, while still preventing known villages from stealing each other's villagers.
- Hostile blockers now keep evidence such as mob type, short UUID, location, distance, line of sight, and last-seen age.
- Stale hostile pauses expire as soon as the hostile evidence is invalid, instead of waiting for an old cooldown to run out.
- VillageMemory can now auto-run soft recovery when damaged remembered blocks remain but no worker, shortage, route blocker, or valid hostile evidence explains the stall.
Block Data Matching Fix
- Remembered block-data comparisons now allow the live block to include default runtime properties that were absent from the remembered/generated target, while still enforcing meaningful properties that were explicitly stored.
- This keeps chest facing and similar harmless runtime state from being treated as village damage or unfinished build work.
Repair Worker Stall Fix
- Repair workers now detect when Paper pathfinding reports movement but the villager remains on the same block past the repair path refresh window.
- Stalled repair assignments now enter the normal handoff or safe direct fallback path instead of holding VillageGrowth in a repair pause indefinitely.
- Exposed repair last-progress age through the VillageMemory API so dependent plugins can diagnose stale repair blockers.
Repair Worker Stall Verification
- Added unit coverage for no-position-progress repair worker detection.
Vanilla Village Bootstrap Fix
- VillageMemory now requests a quick bounded village rescan when players join, cross chunk boundaries, load villager chunks, or when villagers spawn, instead of waiting only for the periodic sweep.
- Freshly detected villages and newly detected village parts now automatically queue an incremental snapshot so vanilla structures become repairable without manual
/villagememory snapshot. - Eligible village structure blocks near uncaptured villages are protected from player damage, fire/fade/form/spread changes, and explosions until their initial snapshot has caught up.
- The default automatic scan interval is now 30 seconds, with event-triggered rescans throttled to avoid repeated full scans.
- Bootstrap snapshots only scan village parts that have not been captured yet, use a smaller detected-part radius, and default to a lower per-tick snapshot budget so first capture does not tank TPS.
- Low-value support terrain remains remembered as context but is ignored as repair damage by default, preventing dirt/stone support entries from creating unrecoverable no-worker repair states.
VillageMemoryApi.rememberedBlocks(...)no longer allocates a full copy of large remembered block maps on every call, fixing VillageGrowth TPS drops after large vanilla village snapshots.
Interaction Message De-Dupe
- Temporary VillageMemory repair trade interactions now ignore off-hand entity interaction events, preventing one click from opening or messaging the same repair trader twice.
Infinite Resource Reset Default
- Bed colour changes now count as the same remembered bed when facing and bed half still match, and the volatile occupied flag is ignored for damage detection. This prevents harmless
yellow_bed/white_beddifferences from pausing VillageGrowth as fake repair damage.
Information
| Published on | May 23, 2026 |
|---|---|
| Downloads | 3 |
Platforms
Paper (26.1.2)
Dependencies
Paper