Notes for follow-up work after the initial showcase release (12 milestones across mining/combat/sprint/swim, demonstrating Java/datapack/KubeJS registration + removal). Nothing here blocks the current release — this is a deliberately deferred backlog, scoped out to keep v1 focused on proving the generic architecture works.
1. Multi-effect rewards
TrackerMilestoneDefinitioncurrently supports exactly one reward effect (rewardEffectId/rewardAmplifier/rewardDuration). Came up designing "Rampage" (wanted Strength + Speed together) — had to cut down to a single effect for this release.
Would need: either a
List<RewardEffect>on the definition (breaking change to the builder), or a separaterewardEffectIds/rewardAmplifiers/rewardDurationsparallel-array approach (uglier, non-breaking). Worth a real design pass, not a quick bolt-on — affects the datapack schema and the KubeJS binding shape too.
2. Cross-tracker / compound milestones
Ideas from planning, not buildable on the current single-threshold model:
- The Adventurer — travel 10,000 blocks AND defeat 100 enemies (two trackers, both must cross their own threshold)
- Well-Rounded — reach 1,000 on any three different activity trackers (N-of-M condition across an arbitrary tracker set)
- Workaholic — mine 10,000 blocks, kill 500 mobs, and travel 25,000 blocks (three-tracker AND condition)
Current
TrackerMilestoneTracker.onTrackerIncrementedchecks one tracker against one goal. Compound milestones need either:
- A
TrackerMilestoneDefinitionthat references multiple(trackerId, goal)pairs with an ALL/ANY-of-N combinator, or - A separate
CompoundMilestoneDefinitionthat listens for individual tracker-milestone completions and checks a combinator over those (simpler to build on top of what exists, since it reuses the existing one-tracker-one-goal system as its building block instead of replacing it)
The second option is probably the righter fit — it doesn't touch the existing single-threshold system at all, just adds a layer on top.
3. Fun/character milestone pack
Names workshopped during planning that didn't make the curated 12 (kept the first release to serious-achievement tone plus a couple of playful ones — these are pure content, no new engine work needed, just more JSON files whenever there's a content pass):
- Mining: "Diggy Diggy Hole" (5,000 blocks), "There Is No Such Thing As Too Deep" (25,000 blocks)
- Combat: "Violence Was The Answer" (500 kills), "Problem Solver" (1,000 kills)
- Sprint: "Where Are You Going?" (10,000 blocks), "Running From Your Problems" (25,000 blocks)
- Swim: "Fish Out of Water" (first swim milestone), "Certified Fish" (10,000 blocks)
4. Cross-mod showcase
The generic architecture (any mod, any
MarieTrackingtracker id) isn't demonstrated by a second consumer yet — everything shipped so far is Nourished's own trackers. Worth reaching out to other MariesLib consumers (Thermal Systems, Thin Air Relived, DrUltraLux's Townstead Factions) once this ships, to get a real second-mod usage example into the docs — proves the "any mod can plug in" claim with actual evidence, not just design intent.
5. Starvation tracker — deliberately excluded
nourished:activity/starvation_crossingswas left out of the milestone set on purpose — it tracks a negative event (crossing into critical nutrient status), and rewarding repeated occurrences of that doesn't make sense as positive reinforcement. If there's ever a "went N days without crossing critical" concept worth building, that would need new tracking (an inverse counter), not just a milestone on the existing tracker.