Skip to content
Merged
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ bin/
### VS Code ###
.vscode/

### Editor Backups ###
*~

### Mac OS ###
.DS_Store

Expand Down
48 changes: 43 additions & 5 deletions CHANGELOG.md

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ The following block and item tags are supported extension points:
| `retold:grazer_forage_plants` | Other plant blocks grazers may consume, including the default grasses and ferns. |
| `retold:small_passive_forage_plants` | Other plant blocks small passive animals may consume. |
| `retold:turtle_forage_blocks` | Blocks hungry Turtles may consume. |
| `retold:aquatic_school_forage_blocks` | Plants hungry school fish may consume. Defaults are seagrass, tall seagrass, kelp, and kelp plants. |
| `retold:hoglin_forage_blocks` | Blocks hungry Hoglins may consume. |
| `retold:piglin_forage_blocks` | Blocks hungry Piglins may consume. |
| `retold:strider_forage_blocks` | Blocks hungry Striders may consume. |
Expand All @@ -56,6 +57,7 @@ The following block and item tags are supported extension points:
| `retold:leaf_preserving_tools` | Tools that suppress Retold's supplemental Stick drops from leaves and woody bushes. Ordinary block loot remains unchanged. |
| `retold:meat_foods` | Meat accepted by Retold predators, hungry Nether mobs, hungry undead, and Animal Feeders. It includes `minecraft:meat`. |
| `retold:fish_foods` | Fish accepted by Retold predators, Nautiluses, Guardians, and Animal Feeders. It includes `minecraft:fishes`. |
| `retold:squid_foods` | Dropped items accepted by hungry Squid and Glow Squid. Defaults contain raw fish only. |
| `retold:berry_foods` | Berries accepted by Foxes and Animal Feeders. It includes `c:foods/berry`. |
| `retold:grazer_foods` | Dropped or feeder food accepted by Retold grazers. |
| `retold:small_passive_foods` | Dropped or feeder food accepted by Retold small passive animals. |
Expand Down Expand Up @@ -162,8 +164,10 @@ and full membership takes precedence. Classification caches and installed factio
updated after server tag reloads, including for already-loaded mobs.

Players and a tamed Wolf that is actively defending are dynamic identities and are not represented
by entity-type tags. Tamed entities covered by the standard Undead tag, such as Skeleton Horses,
do not inherit generic hostile Undead behavior while tamed; their untamed forms do. Tags classify
by entity-type tags. Undead mounts covered by the standard Undead tag stop inheriting generic
hostile Undead behavior only after they have a persisted owner reference. Retold deliberately does
not trust the vanilla tame flag here because Camel always reports itself as tamed and Skeleton-trap
horses can be marked tamed before a player owns them. Tags classify
identity only: entity classes that cannot target, retaliate, assist, or use territory behavior do
not gain those capabilities merely from membership.

Expand Down
45 changes: 27 additions & 18 deletions docs/internal/design_implementation_status.md

Large diffs are not rendered by default.

148 changes: 115 additions & 33 deletions docs/internal/mob_ai_handoff_prompt.md

Large diffs are not rendered by default.

203 changes: 200 additions & 3 deletions docs/internal/mob_tps_benchmark.md

Large diffs are not rendered by default.

30 changes: 20 additions & 10 deletions docs/internal/retold_design_risks.md

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions docs/internal/retold_issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@ When adding an issue, include:

| Area | Issue | Reproduction / Evidence | Status |
| --- | --- | --- | --- |
| Mob action facing | Villagers could turn away while magically relighting a torch because the action refreshed look control only on the ordinary slow Villager cadence and did not align body/head yaw. Several other stationary Retold interactions similarly used only a weak or one-tick look request. | Developer in-game torch-relighting report on 2026-08-15. The strengthened all-stage regression deliberately turns an active caster 120 degrees away, then requires the next action tick to restore body, head, and look-control alignment. Focused golem, feeding, and weak-barrier regressions cover the shared facing contract. | Fix implemented through `RetoldActionFacing` for stationary subject-facing actions: magical/physical torch casts, golem work, communal storage and livestock tending, feeding, weak-barrier breaking, Polar Bear warnings, and Spider web placement. Movement, combat, pursuit, migration, and free-flight paths retain normal look control so facing does not fight navigation. Focused tests pass; needs developer in-game visual confirmation before moving to Resolved Issues. |
| Ordinary predator self-defense | Healthy wild and tamed Wolves did not retaliate against attackers. Retold blocked their vanilla predator target writes, while the shared replacement retaliation path recognized only Spiders. The same gap affected Foxes, Cats, Ocelots, and Dolphins. | Developer in-game Wolf report on 2026-08-15. A focused regression applies real Zombie damage to every ordinary predator species and verifies wild and tamed Wolf behavior, retained source ownership, and the tame-owner exclusion. The test failed first on the wild Wolf before the production fix. | Fix implemented by giving every healthy ordinary predator five-second attacker memory under explicit `RETALIATION` ownership, with continued defense after the one-time damage memory clears. Existing target policy, Creeper safety, owner safety, and below-25% wounded flight remain authoritative. The exact all-species test and focused passive-flight, wounded-flight, owner-defense, Spider, Dolphin, Bee, Enderman, faction, and undead-mount defense regressions pass; needs developer in-game confirmation before moving to Resolved Issues. |
| Tamed Wolf owner defense | Standing tamed Wolves did not reliably defend an owner or attack a mob the owner hit. Retold blocked the vanilla Wolf target goals but its replacement only inspected the owner's attacker, not the owner's attacked target, and checked existing `ATTACK` ownership before higher-priority owner defense. | Developer in-game report on 2026-08-12. The focused regression applies real Zombie damage to a survival owner, then gives the owner a separate attacked target while the Wolf already has ordinary combat ownership. | Fix implemented with recent owner attacker/attacked memory, explicit `OWNER_DEFENSE` target ownership, vanilla `wantsToAttack`/sitting exclusions, and owner-defense priority over ordinary combat. The exact GameTest passes 1/1; needs developer in-game confirmation before moving to Resolved Issues. |
| Aender portal | When an automatically created counterpart has no nearby island terrain, replaceable void support allowed it to be placed near the dimension floor instead of at a useful altitude. | Developer in-game report on 2026-07-22. | Fix implemented to skip void columns and use a supported Y=100 fallback; needs real-Aender verification before moving to Resolved Issues. |
| Aender portal | Ambient particles spawned partly below the horizontal portal plane and were occluded instead of being visible to a player standing beside it. | Developer screenshot and in-game report on 2026-07-22. | Spawn height moved above the rendered plane with upward/outward drift; needs client visual verification before moving to Resolved Issues. |
| Aenderite generation | Aenderite initially appeared not to generate because only about 3.6% of a 9,409-chunk real-sampler probe contained a planned vein. After an initial increase to 8.6%, the developer still could not find it during normal in-game inspection and approved matching diamond-like abundance. | Developer reports on 2026-07-22; the original probe found 341 ore-bearing chunks and 1,134 valid replacements. A full-pipeline `ProtoChunk` GameTest confirms planned Aenderite survives terrain and decoration generation. A read-only scan of the newest local test save (`New World (44)`) found Aenderite in 361 of 1,396 saved chunks whose palettes contain Aender Stone. | Diamond-style tuning now uses mostly 3–4 and 4–8 block veins with rare 8–12 block veins. The 9,409-chunk probe finds 2,917 ore-bearing chunks (31%) and 28,209 placeable blocks, approximately three per sampled chunk. Deterministic tests enforce the frequency, density, size, underside bias, and chunk-border behavior; fresh or legitimately regenerated Aender terrain still needs in-game verification. |
| Slime item pursuit | Slimes recognized and consumed nearby dropped items but did not visibly seek items outside consumption range because ordinary navigation requests do not drive the specialized Cube Mob movement controller. | Developer in-game report on 2026-08-02; the original tests covered appetite and direct consumption but not locomotion. | Fix implemented through a Cube Mob facing-and-hop adapter with owned-heading protection. All 54 GameTests pass, including actual horizontal movement toward a distant item; needs focused in-game verification before moving to Resolved Issues. |
| Intermittent mob GameTest regressions | Complete-suite or grouped-fixture contention previously missed otherwise focused-green movement requirements. | Historical failures included exact feeder, Bat, Cube, fish-school, Villager-container, and staged Villager-golem paths. The Villager consumer regression was test cross-contamination: neighboring GameTests placed valid food containers inside its real 16-block search radius. Its route fixture uses a real bell POI, retries production behavior across budget windows, clears temporary stores, and is vertically separated while still requiring physical arrival and exact consumption. The broad `retold:*communal_food*` grouping can still contend with that route fixture, so the maintained strategy uses three isolated owning selectors instead: consumer transactions pass 4/4, the exact consumer route passes 1/1, and Farmer supply passes 2/2. The staged golem fixture assigned an untraded Cleric without a job site, allowing vanilla to reset it to `none`, and inherited whatever scheduled activity was active even though production correctly pauses outside IDLE/MEET/WORK. It now trade-locks test professions and explicitly selects IDLE while exercising staged mechanics. The focused golem selector passes 5/5 again. The last pre-supply complete run passed 160/160 in 3.504 minutes. The post-personal-stock 50-Villager TPS test passes with a peak of 8.459 ms/tick. | Keep movement assertions under observation without weakening exact arrival, separation, supported destinations, or reachable paths; do not treat an artificial grouped-fixture timeout as permission to weaken behavior. |
| Villager golem advancement | A player standing near a Villager-built Iron Golem received vanilla's player-summoning “Hired Help” advancement even though the Villager performed the construction. | Developer in-game report on 2026-08-04. Vanilla's carved-pumpkin animation awards the summoned-entity criterion to every player within five blocks without tracking who placed the structure. | Fix implemented with a try/finally-scoped Villager-animation marker and a narrow `SummonedEntityTriggerMixin` that suppresses only Iron Golem criteria during that call. Ordinary player construction remains outside the scope. The expanded focused golem selector passes 5/5; developer in-game confirmation is still needed before moving this advancement issue to Resolved Issues. |
| Nitwit torch-relighting tool visual | A Nitwit's temporary Flint and Steel appeared for only one tick instead of remaining visible through the close relighting interaction. | Developer in-game report on 2026-08-04. Villager systems were dispatched every 20 ticks, while vanilla could clear the visual hand stack on the next entity tick. | Active Nitwit tool use now receives lightweight continuous dispatcher updates and reasserts the fake hand stack until the one-second interaction completes; idle discovery and routing remain on the normal cadence. The strengthened fake-tool regression passes within the 3/3 relighting selector and the Villager TPS test peaks at 7.102 ms/tick. Needs developer in-game visual confirmation before moving to Resolved Issues. |
| Hunger-profile survival integration | Registry-wide survival testing found hungry profiles whose tests supplied food they would not reliably acquire in their actual spawn habitats. The expanded habitat matrix also exposed deterministic shared block-search starvation: under 41 concurrent cases, late environmental browsers could miss every search window even though total work stayed within budget, then generic food search carried them away from the source before their turn. A cactus-based Camel fixture additionally proved unsafe because collision damage correctly triggered higher-priority fleeing. | The audit compared all 40 positive-hunger profiles with patched 26.2 spawn-biome definitions and production acquisition owners. Reproduction used `retold:hunger_survival_*`; focused cases passed alone while the grouped matrix repeatedly deferred environmental foragers. | Every profile now has a representative habitat route: safe renewable dead-bush scrub replaces deliberate cactus feeding, and the added badlands, alpine, Mushroom-Field, cave, Nether, caravan, and Cube-prey paths complement existing forage, hunt, aquatic, lava, and village-storage behavior. A weak fair-claim queue reserves capacity within the unchanged eight-start block-search cap so a live deferred claimant eventually runs; denied forage claimants hold position rather than beginning a random search until admitted. Two final different-order focused matrix runs pass 41/41, and the five affected/representative TPS tests pass all 25 phases below 50 ms/tick with a 10.061 ms/tick peak. Needs representative natural-world and long-term survival verification before moving to Resolved Issues. |
| Nitwit torch-relighting tool visual | A Nitwit's temporary Flint and Steel appeared for only one tick instead of remaining visible through the close relighting interaction. | Developer in-game report on 2026-08-04. Villager systems were dispatched every 20 ticks, while vanilla could clear the visual hand stack on the next entity tick. | Active Nitwit tool use now receives lightweight continuous dispatcher updates and reasserts the fake hand stack until the one-second interaction completes; idle discovery and routing remain on the normal cadence. The strengthened fake-tool regression passes within the 4/4 relighting selector and the latest Villager TPS test peaks at 7.259 ms/tick. Needs developer in-game visual confirmation before moving to Resolved Issues. |
| Hunger-profile survival integration | Registry-wide survival testing found hungry profiles whose tests supplied food they would not reliably acquire in their actual spawn habitats. The expanded habitat matrix also exposed deterministic shared block-search starvation: under 41 concurrent cases, late environmental browsers could miss every search window even though total work stayed within budget, then generic food search carried them away from the source before their turn. A cactus-based Camel fixture additionally proved unsafe because collision damage correctly triggered higher-priority fleeing. | The original audit compared all 40 positive-hunger profiles with patched 26.2 spawn-biome definitions and production acquisition owners. Reproduction used `retold:hunger_survival_*`; focused cases passed alone while the grouped matrix repeatedly deferred environmental foragers. Parrot first expanded coverage to 41 species; loaded diets for four school fish and both Squid types now expand it to 47 species plus the registry guard. | Every profile now has a representative habitat route: safe renewable dead-bush scrub replaces deliberate cactus feeding, and the added badlands, alpine, Mushroom-Field, cave, Nether, caravan, Cube-prey, Parrot crop, aquatic-plant, and dropped-raw-fish paths complement existing forage, hunt, lava, and village-storage behavior. A weak fair-claim queue reserves capacity within the unchanged eight-start block-search cap so a live deferred claimant eventually runs; denied forage claimants hold position rather than beginning a random search until admitted. Two final different-order runs of the former matrix passed 41/41. The six new exact aquatic survival cases and expanded registry guard pass; the full expanded 48-test group was not rerun. The earlier five affected/representative TPS tests passed all 25 phases below 50 ms/tick with a 10.061 ms/tick peak, Parrot's five phases peak at 4.005 ms/tick, and the six aquatic profiles' 30 affected phases peak at 5.524 ms/tick. Needs representative natural-world and long-term survival verification before moving to Resolved Issues. |
| Bat hierarchy dispatch | Loaded Bats stopped receiving their colony hunger/starvation tick because the 26.2 `Bat` class entered the `PathfinderMob` branch while the dispatcher called the Bat adapter only from its non-pathfinding branch. | The grouped starvation regression left a player-loaded Bat at 99 hunger while Cow and Villager owners advanced. The exact `retold:starvation_damages_every_hunger_tick_owner` selector reproduced the missing owner. | Bat colony dispatch now occurs before the vanilla hierarchy split, retaining its distinct adapter whether the upstream class hierarchy changes again. The exact loaded starvation-owner regression passes 1/1; natural Bat hunger/colony behavior still needs developer confirmation before this moves to Resolved Issues. |
| Feeding during urgent flight | Sheep could visibly continue vanilla grass eating while Retold was already making them run from Wolves, because the long-running vanilla `EatBlockGoal` did not participate in Retold ownership. Species-specific meal callbacks also relied on their earlier dispatcher checks instead of rechecking priority at the final transaction. | Developer in-game report on 2026-08-05. The exact regression starts vanilla Sheep grazing, gives the Sheep `FLEE` ownership, and probes ordinary forage and dropped Wheat during the same flight. | Fix implemented with a narrow vanilla goal guard plus a shared transaction-time meal check across ordinary and specialized feeding paths. The exact unthrottled GameTest passes 1/1: grazing stops, grass/Wheat/hunger remain unchanged during flight, and one-item feeding resumes after flight ends. Needs developer in-game confirmation with Sheep naturally fleeing Wolves before moving to Resolved Issues. |
| Villager teaching screen | Opening the merchant screen crashed the client because `MerchantScreenMixin` attempted an `@Inject` into `containerTick`, which is inherited from `AbstractContainerScreen` rather than declared by `MerchantScreen`. | Developer client stack trace on 2026-08-09 reported `InvalidInjectionException: ... could not find any targets matching 'containerTick' in MerchantScreen`. | The feedback countdown now overrides `containerTick` and calls `super.containerTick()` instead of targeting the inherited method with an injector. The development client reaches the title screen and the full build passes; opening a merchant screen still needs developer retesting before moving this issue to Resolved Issues. |

Expand Down
Loading