v2.0.35: sub-origins, compat test harness, 31 bug fixes, compat improvements
Sub-Origins (Conditioned Layers):
- New feature for datapack authors: conditioned origin layers (race/subrace trees)
- OriginCondition system: origins:origin, origins:and, origins:or + inverted
- Conditioned-batch format auto-expansion
- Cascade invalidation on parent choice change
- Condition-aware picker with auto-skip
- docs/SUB_ORIGINS.md
Headless Compat Test:
- ./gradlew compatTest — validates packs without launching MC
- Origins++ 1323 powers: 0 FAIL
31 Bug Fixes (7 HIGH, 16 MEDIUM, 8 LOW):
- InvulnerabilityPower crash on malformed IDs
- HordeRegenPower div/zero
- Thread safety: CompatTickScheduler, PlayerLifecycleEvents, MinionTracker
- NeoOriginsConfig restriction version collision
- conditioned_restrict_armor predicates
- 5 memory leaks on logout
- Dynamic powers synced to client
- ExtraInventoryPower drop_on_death functional
- ActiveTeleportPower wall suffocation fix
- QualityEquipmentPower duplicate modifiers
- CompatAttachments resource bars reset on death
- PlayerOriginData cross-dimension gcSet
- More (see PATCH_NOTES_2_0.md)
Compat Improvements:
- origins:ingredient nested unwrap (9 packs)
- origins:type damage_condition (Kitsune invincibility fix)
- Wildcard :_toggle power_active (155 uses)
- origins:phasing with block_condition (19 powers)
- origins:biome sub-conditions (22 powers)
- Conditioned modify_damage_dealt Route B (15 powers)