MariesWiki
MariesLib · Enhancement

Tracker Milestones

Tracker Milestones: Future Enhancements

Design notes Updated 26 Aug 2026 2 min read

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

TrackerMilestoneDefinition currently 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 separate rewardEffectIds/rewardAmplifiers/ rewardDurations parallel-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.onTrackerIncremented checks one tracker against one goal. Compound milestones need either:

  • A TrackerMilestoneDefinition that references multiple (trackerId, goal) pairs with an ALL/ANY-of-N combinator, or
  • A separate CompoundMilestoneDefinition that 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 MarieTracking tracker 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_crossings was 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.

More MariesLib enhancements