LumenFall Fixes 1.1.61
Minecraft 1.20.1 / Forge 47.x

BASE
====
Built directly from the exact known-working LumenFall Fixes 1.0.1.

ORIGINAL 1.0.1 FIXES PRESERVED
==============================
- Artifacts 9.5.19 null-player login packet guard.
- Wings Reborn Refitted 2.1.4 MC 1.20.1 eye-height/camera compatibility.

BOYMOD FIXES NOW LIVE HERE
==========================
You should use the ORIGINAL boymod-1.0.jar. No modified Boyfriend JAR is needed.

Missing Boyfriend textures:
- boymod itself randomly selects 0..40 but ships only 0..30.
- This LumenFall JAR supplies boyfriend31.png through boyfriend40.png under the
  boymod asset namespace.
- boyfriend31..39 are the nine supplied skins.
- boyfriend40 uses a valid existing Boyfriend skin as a fallback.

Canonical character identities (1.1.43):
- Male canonical pool = all 63 skins in male.zip + all 41 earlier approved boyfriend visuals, deduplicated by exact pixels -> 98 unique identities.
- Female canonical pool = all 65 skins in female.zip, with no legacy girlfriend/villager skins appended.
- Boyfriend/Girlfriend entities and Villager Patrols male/female villagers use these canonical pools as full replacements.
- Human Companions keeps all native skins and adds the canonical pools as extra appearances only.
- Each skin has one stable paired name. Meaningful filenames are preserved; generic/hash filenames receive curated names.
- Titles are intentionally uncommon: 19/98 male and 13/65 female identities (~20%).
- Every canonical texture is bundled under lumencompatfixes in both slim-arm and classic-arm form.
- LumenSkinId NBT keeps the selected identity stable across chunk unloads, reloads, and restarts.
- Player/manual renames are preserved; Lumen only updates names it owns or legacy auto-generated names during migration.

VILLAGER VANILLA AMBIENT SOUND FILTER
=====================================
Only Minecraft's stock entity.villager.ambient "huh/hrmm" event is suppressed.
Different/custom SoundEvents supplied by Fantasy Factions or other mods are preserved.
This does NOT mute villager hurt, death, trade yes/no, celebrate, or profession work sounds.


HUMAN COMPANIONS + BETTER COMBAT / JEG
=======================================
Targeted versions:
- Human Companions 1.7.6
- Better Combat 1.9.0+1.20.1
- Just Enough Guns 0.14.4

Guns:
- Put a JEG GunItem in a tamed Human Companion's normal 27-slot inventory.
- LumenFall mirrors that gun into the companion's main hand.
- A real JEG GunAttackGoal is installed at priority 1, above Human Companions'
  built-in priority-2 sword/axe/bow/crossbow goals.
- Firing, projectiles, damage, sounds, burst behavior and reload timing remain
  JEG's own implementation.
- Remove the gun from the companion inventory to let its normal class weapon
  take over again.
- Guns use a two-handed aiming pose instead of the generic item pose.

Better Combat animations:
- Better Combat's own player animation stack cannot attach natively to a
  TamableAnimal. LumenFall therefore bridges Better Combat's WeaponRegistry and
  the exact 1.9.0 attack-animation keyframes supplied by the installed build
  onto Human Companions' PlayerModel/HumanoidModel.
- The companion cycles through the Better Combat attack array for its equipped
  melee weapon when its normal AI swings.
- Better Combat held-weapon pose clips are also applied where the weapon
  declares one.
- This is visual animation compatibility only; Human Companions keeps its own
  targeting, cooldowns and damage logic.

No Human Companions, Better Combat, or JEG original jar is modified.


1.1.5 METADATA FIX
==================
Human Companions 1.7.6 reports its Forge version as 1.20.1-1.7.6.
The 1.1.4 metadata incorrectly required [1.7.6,1.7.7), causing Forge to reject
the exact supported jar before startup. 1.1.5 uses the exact reported version.
No Human Companions gun/Better Combat implementation code changed.


LOVECRAFT JEG GUN SUPPORT
=========================
- Tamed Boyfriend and Girlfriend entities now treat JEG GunItem stacks as valid hand weapons.
- Right-click them with a JEG gun to equip it using their existing weapon interaction.
- Sneak + empty hand uses their existing weapon-removal path.
- While a gun is held, JEG's real GunAttackGoal is installed at priority 1.
- Their existing sword/axe behavior is unchanged when no gun is equipped.
- JEG remains optional; the compatibility helper uses reflection and becomes a no-op if JEG is absent.


1.1.24 ISOLATED FEATURE RESTORE
================================
- Stable base: 1.1.23.
- Restores only the old 1.1.7 BF/GF FollowOwnerGoal speed multiplier: 1.0x -> 1.5x.
- No other post-1.1.6 gameplay features are restored.


1.1.25 ISOLATED RESTORE: LOVECRAFT COMPANION INVENTORY
=====================================================
- Stable 1.1.24 baseline retained.
- Restores only the historical 1.1.8 BF/GF companion inventory feature.
- Shift + right-click a tamed Boyfriend/Girlfriend with an empty hand to open the 6-row inventory.
- Equipment and Curios entries remain live mirrors; remaining slots are persistent storage.
- No other post-1.1.8 gameplay features are restored in this build.


1.1.26 LOVECRAFT BETTER COMBAT ANIMATIONS
==========================================
- Boyfriend/Girlfriend companions now reuse the existing Human Companions Better Combat weapon-pose and attack-sequence animation bridge.
- Existing targeting, damage, follow, inventory, JEG behavior, and both confirmed lag fixes are unchanged.


1.1.33 - RESTORED BLESSINGS + CELESTIAL HEARTSEED VISUAL
=========================================================
- Restores the four permanent stackable Wiccan companion blessings from the original 1.1.11 implementation.
- Blessings stack Regeneration / Resistance / Swiftness / Strength from I through X on owned tamed allies and persist through reloads.
- Restores the Celestial Heartseed seed-like item model override while preserving its existing glint.
- The skipped global enchantment VIII/anvil rework is NOT included.


1.1.35 additions:
- Faunify Silk Moth light-source scan throttle (~2 idle scans/sec per goal).
- Wayward Lantern duplicate forced-chunk load dedupe; unloads remain untouched.
- Wiccan blessing items are added to the vanilla Ingredients/Search creative contents for JEI/creative discoverability.

1.1.36
- Added cached validation/fallback for Villager Patrols male/female imported LoveCraft/Boymod skin textures.
- Missing/invalid imported villager textures now fall back to a native Villager Patrols skin and log the bad path once.


1.1.39 additions:
- Respawning Animals may never force-despawn name-tagged/custom-named, persistenceRequired, Lunar-tamed, vanilla-tamed, or owned mobs.
- LunarMobs custom tames are marked persistent at tame time.
- Starborn/Celestialborn LunarLifetime expiry is skipped for tamed, named, or persistent entities; temporary untamed summons still expire normally.
- Wiccan blessing visibility now injects directly into Forge's BuildCreativeModeTabContentsEvent instead of relying on reflective listener registration.

1.1.39: Wayward Lanterns are inert unless physically placed by a player; player-placed lanterns work automatically, and stale DI forced-chunk tickets are removed on world load.


1.1.40 - REMOVE BF/GF VILLAGER TEXTURE SUBSTITUTION
====================================================
- Removed the Villager Patrols boyfriend/girlfriend skin-pool extension.
- Removed the BoyfriendRenderer generic villager texture bridge.
- Vanilla/Villager Patrols villagers no longer receive any BF/GF texture from LumenFall Fixes.
- Villager Patrols male/female villagers use Villager Patrols' own native skin resolver (skin_1..skin_50 with its native fallback).
- Existing saved extended skin indices safely fall through Villager Patrols' own missing-skin fallback instead of referencing BF/GF textures.
- Actual Boyfriend/Girlfriend companion entities keep their own normal textures and all non-texture compatibility features.


1.1.41 - CHUNK DIAGNOSTIC COMMAND
=================================
- Adds /lumen chunkdiag.
- Read-only; available in singleplayer without requiring cheats.
- Reports loaded chunks, loaded entities, Forge persistent forced chunks, and
  DistanceManager ticketed chunks for every server dimension.
- Reports the largest ticket types in chat and writes per-ticket coordinate
  samples to latest.log for diagnosing unexplained remote chunk retention.
- No chunk-loading behavior is changed by this diagnostic command.


1.1.42 - SELF-CONTAINED BF/GF-STYLE VILLAGER SKINS

- Restored boyfriend/girlfriend-style appearances for vanilla/Villager Patrols villagers.
- Bundles 41 boyfriend-style, 47 numbered girlfriend-style, and 2 special girlfriend-style 64x64 PNGs under lumencompatfixes.
- Villager texture resolvers never reference boymod: or cringymod: for these imported skins.
- Native Villager Patrols skins 1..50 remain unchanged.
- Vanilla villagers use the matching slim humanoid renderer, so no vanilla-villager UV fallback can stretch across a player-style texture.
- Actual BF/GF companion rendering remains unchanged.


1.1.43 - FULL CANONICAL SKIN / IDENTITY OVERRIDE
==================================================
- Replaces Boyfriend, Girlfriend, and Villager Patrols male/female skin selection with Lumen-owned canonical identity pools.
- Male pool: 63 supplied male ZIP skins + earlier approved male/BF visuals, exact-pixel deduplicated to 98 unique skins.
- Female pool: exactly the 65 supplied female ZIP skins; no old GF or Villager Patrols female textures are used as fallback.
- Validated all supplied images; three legacy 64x32 male skins are converted to modern 64x64 layout.
- Generates both slim-arm and classic-arm variants for every identity so BF/GF/VP and Human Companions get renderer-compatible UVs.
- Skin filenames become canonical names where meaningful; generic/hash filenames received curated names.
- Titles remain rare by design: 19.4% of male identities and 20.0% of female identities.
- Skin + name are linked and persisted by stable LumenSkinId NBT. Existing BF/GF/VP entities migrate without depending on removed cross-mod texture paths.
- Human Companions remains additive: all original HC skins/names stay available, and Lumen identities are appended to the spawn pool.
- Villager Patrols healer/wizard/vampire subclasses re-link the canonical name after their role-specific skin-index pass, preventing name/texture mismatch.
- The old Lumen-supplied boymod boyfriend31-40 resource shim is removed because the BF renderer no longer consults legacy boymod texture paths.
- No titled-character special trades/abilities are guessed into this build; the identity metadata records which skins are titled so those can be added later against the exact live item registry.


1.1.44 - ITEM REGISTRY DUMP + HUMAN COMPANION VOICES
======================================================
- Adds /lumen itemdump. It writes the exact live Forge item registry IDs to
  lumen-item-registry.txt in the active Minecraft instance folder.
- Human Companions now reuse Villager Patrols' male/female villager voice bank
  for ambient, hurt and death sounds, including Villager Patrols' sparse ambient
  interval. Human Companion AI, combat, taming and interaction behavior are unchanged.
- /lumen chunkdiag remains read-only and unchanged.


1.1.45 - ASHEN TITLE + VILLAGER RARITY
=======================================
- Ashen is now simply named "Ashen"; the knight title was removed and the identity metadata no longer marks Ashen as titled.
- Roaming/event Villager Patrols traveler weights are now 75% of their original values (25% reduction total; previously 20%).
- Village generation behavior is unchanged.
- No unrelated compatibility behavior was changed.

1.1.46 - PROFILER-TARGETED PERFORMANCE PASS
===========================================
- Quark remains untouched.
- Throttles inactive/start scans for selected Mowzie's Mobs and Untamed Wilds goals.
- Caches Mutant More mutation-cloud proximity work and reduces repeated piglin-nemesis setup checks.
- Extends /lumen chunkdiag with ChunkMap holder/unload/ticket diagnostics.

1.1.47 - TITLED VILLAGER TRADES + PASSIVE EFFECTS
==================================================
- All 32 canonical identities still marked titled receive two identity-specific trades: one signature themed item sold for emeralds and one themed ingredient purchase.
- Trade items are selected only from the exact live LumenFall item registry dump generated by 1.1.44.
- Title trades are appended lazily to normal MerchantOffers and persist with the villager's saved offer list; normal villager trades remain intact.
- Titled Villager Patrols identities receive a lightweight passive self-effect refreshed about every 5 seconds. Untitled villagers do no extra title work.
- Ashen remains untitled and receives no titled trades or passive effect.
- Quark remains untouched.


1.1.49 - VILLAGER BAZAAR EXPANSION
==================================
- Adds 30 supplied villager identities (6 male, 24 female) to Villager Patrols only.
- Villager Patrols canonical skin caps are now 104 male / 89 female; BF/GF and Human Companions remain on their existing pools.
- Adds 13 new titled villagers, including the supplied named title characters plus six vibe-based titles.
- Existing 32 titled villagers now receive large niche, decoration-heavy trade catalogs in addition to their prior signature trades.
- New titled villagers receive large themed trade catalogs and lightweight passive self-effects.
- Select normal villagers receive 2-5 one-off vibe trades (for example Abi The Astronaut sells globe/observatory items).
- Trades may cost thematic materials and may use a second payment item; emeralds are not required for every trade.
- Catalog contains 785 validated offers using exact live LumenFall registry IDs.
- Quark behavior remains untouched.

1.1.49: male2/female2 identity additions are now also available to LoveCraft BF/GF and Human Companions; existing native/canonical pools remain intact.


1.1.51: Human Companions gain the Lumen Curios panel; Villager Patrols identities now use one canonical 104/89 mapping with stable ID persistence; titled villagers are naturally rare (~3% overall).


1.1.55 - IDENTITY TRADE RETENTION
- Untitled villagers keep their Lumen identity trades while taking and using normal professions.
- Profession changes, workstation reassignment, vanilla restocks, and offer-table rebuilds no longer remove or reroll the identity trade layer.
- Lumen retains the actual custom MerchantOffer objects per villager at runtime, preserving their uses/demand state while profession offers refresh independently.
- Saved custom offers are recognized again from their exact configured input/output signatures after world load.

1.1.53 - ROAMING MERCHANT ECONOMY + TRADE SCREEN FIX
======================================================
- Every one of the 193 canonical Villager Patrols identities now has a custom merchant catalog.
- Untitled identities receive 9 custom offers each: decoration-heavy wandering-style stock, useful material/currency exchanges, and a signature curiosity.
- Titled identities keep their deeper themed catalogs and are guaranteed at least 16 custom offers; the most specialized titles still have 20-32 offers.
- Obvious untitled personalities receive bespoke one-off stock (examples: Shark Kid, Business Squidman, CHEESEBURGER, Miku, Catgirl, Mushira, Abi The Astronaut).
- Trade rows are validated against the exact live LumenFall item registry.
- Fixes vanilla bug MC-164353 for Lumen roaming natural/event merchants without disabling AI: roaming villagers whose internal profession is minecraft:none are stabilized as non-job-seeking nitwit merchants.
- Village-origin unemployed villagers use a temporary non-job-seeking merchant profession only while a Lumen trade session is active, then restore minecraft:none when the session closes. Existing real professions are preserved, so ordinary workstation/profession acquisition remains available.
- Existing first-completed-trade persistence behavior remains unchanged.


1.1.57 - TRADE DEDUPE + DISTINCT UNTITLED MERCHANTS

- Fixes repeated/infinite-looking duplicate custom trade rows, including repair of already-saved duplicates.
- Corrects MerchantOffer result reflection fallback and retains only one custom offer per exact signature.
- Rebuilds all 148 untitled catalogs so their 1,332 result slots are globally distinct; 9 trades per identity remain.
- Migrates obsolete 1.1.56 untitled identity stock on existing villagers while preserving current identity trade state.
- Untitled Lumen trade max-use caps are 4-8 per stock cycle.
======================================================
- Adds conservative far-away idle AI sleeping at the Mob GoalSelector layer only.
  * <=48 blocks from a player: full-rate AI.
  * 48-80 blocks: inactive GoalSelectors run 1/4 ticks.
  * >80 blocks: inactive GoalSelectors run 1/8 ticks.
  * Active targets/aggression, recent combat, tamed mobs, leashed mobs, persistent mobs, and >=80 max-HP boss-like mobs are exempt.
  * Entity ticking, effects, physics, despawn, navigation lifecycle and custom mob ticks are not globally skipped.
- Phase-staggers expensive vanilla canUse/start scans so herds do not all search on the same tick:
  NearestAttackableTargetGoal, AvoidEntityGoal, MoveToBlockGoal, BreedGoal, TemptGoal and RandomStrollGoal.
  Running goals keep their normal tick cadence.
- /lumen chunkdiag gains a second reflection-only deep pass reporting unique holder coordinates,
  duplicate holder-map entries, ticket/holder/unload overlap, unfinished ChunkHolder futures,
  unload persistence between repeated diagnostic runs, coordinate samples, and deeper unknown-ticket field dumps.
- Quark remains untouched.


1.1.58 - SINGLE ROAMING VILLAGERS + BULK BUILDING STOCK + CURIOS SYNC
==========================================================================
- Villager Patrols traveler/camping/family/mounted roaming events are normalized to one villager per event instead of spawning groups of roughly 2-5 villagers at once. Village population, skirmish/combat events, and unrelated mob groups are not changed.
- Every untitled identity now has at least one bulk building-material trade yielding 8, 12, or 16 blocks per completed trade.
- Mushira specifically sells red mushroom blocks, brown mushroom blocks, and mushroom stems in stacks of 16 per trade.
- Existing Lumen merchant lists are aggressively repaired: stale legacy rows and repeated saved copies are collapsed to one canonical custom offer, preventing effectively endless scrolling through duplicate trades.
- Human Companions and BF/GF Curios proxy inventories now force-sync actual Curios capability slots before normal inventory tick/close handling. Valid Curio items placed in ordinary companion storage are automatically routed into an available real Curios slot when compatible, rather than merely sitting in storage.
- Existing 1.1.57 performance, profession, identity, despawn and trade persistence behavior remains intact.



1.1.60 — PALETTE/VIBE TRADE REBUILD + 1.1.59 PROFILE REVIEW
- Rebuilt all 148 untitled identity catalogs from their actual skin palette plus character/name theme instead of the old generic decor template.
- Each untitled identity now has 12 diverse offers across bulk building materials, furniture, lighting, plants/flowers, resources, food, magic/enchanting stock, utility/storage, art/decor, and oddities.
- Explicitly colored outputs are constrained to the skin's primary/secondary compatible palette; validation found zero explicit-color mismatches across all 1,776 untitled trade rows.
- Every untitled identity has bulk building-material output (normally 12-16 per trade, 8 uses per stock cycle).
- DanTDM is explicitly blue/cyan/diamond/tech/enchanting themed; Mushira has red/brown mushroom blocks, stems, mushroom furniture/food/decor; Miku is cyan/music themed; Kawaii Girl is pink/pastel/plush themed; Abi remains observatory/space themed.
- Titled specialty catalogs remain unchanged.
- Trade table validates against the exact live Lumen item registry.
- New Spark review: 1.1.59 profile averaged ~20 TPS after the first window with median MSPT ~38-39ms, but chunk count remained pinned at 5,914 and NaturalSpawner/ServerChunkCache remain major costs.

1.1.59 — VILLAGER IDENTITY / CROWD / TRADE RELINK + PROFILE FOLLOW-UP
==================================================================
- Skin index is now the authoritative Villager Patrols identity. Every setSkinIndex call immediately relinks Lumen's managed name.
- finalizeSpawn forcibly replaces Villager Patrols' unrelated random display name with the exact Lumen name for that skin before the NPC becomes interactive.
- Loaded villagers self-check identity every 20 ticks, repairing old skin/name mismatches while preserving non-Lumen custom nametag names.
- Trade offers are sanitized against the current skin identity before the catalog is attached. Saved Lumen offers from a different old identity are removed, so a prior name/skin mismatch cannot leave the wrong trades behind.
- Campfire/camping villager gatherings keep their native group size. Other Lumen-patched roaming multi-villager encounters remain one villager per event.
- Existing 25% roaming-event rarity reduction remains. Village generation is unchanged.
- VillagerTradePersistence gendered-villager detection and common reflection lookups are cached to reduce a hotspot visible in the 1.1.55 Spark profile.
- Quark remains untouched.

1.1.61 — VILLAGER RENDER IDENTITY HARD FIX
- Fixed the actual remaining name/skin mismatch: vanilla villagers are rendered through BoyfriendRenderer's generic entity bridge, which previously sent Villager Patrols entities through the generic companion/UUID skin resolver.
- Male/Female Villager Patrols entities (including subclasses) now dispatch directly to VillagerIdentityExtensionCompat for rendering.
- Rendered texture now uses the exact same canonical Villager Patrols skin index/identity table that controls managed name, title state, saved identity and trade catalog.
- BF/GF and non-Villager-Patrols renderer behavior remains unchanged.
- Existing villagers repair visually immediately after client reload; no respawn is required.
