Skip to content

Releases: kgbcupcake/nourished

v0.2.7-beta.2

v0.2.7-beta.2 Pre-release
Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 02 Oct 17:49
4af37dd

Nourished 0.2.7-beta.2

This is a big UI overhaul. Nearly every box on the HUD and Diet Screen can now be moved, resized, restyled and recolored in-game. The guide book has also moved from Patchouli to Modonomicon.

Requires: Modonomicon, and MariesLib / Marie's Framework 0.1.2-beta or newer. Patchouli is no longer needed.

✨ Highlights

  • New guide book (Modonomicon): chapters for Getting Started, How It Works, Food Safety, Food Groups and Compat Mods. Compat pages only show up for mods you have installed.
  • The Diet Screen is fully customizable. You can drag, resize and restyle every box: Calories, Balance, Recent Meals, Eat More, Active Effects and each Intake Breakdown row. Text, icons, bars and header can each be moved separately.
  • New editor hub: the Diet Screen's box settings now live in one resizable window with a sidebar, instead of a stack of tabs.
  • Glow and Pulse: every box can glow, and its border can "breathe" in its own colors. Pick Smooth, Heartbeat or Flash; all boxes pulse in sync.
  • In-game color editing: a Colors tab lets you change every HUD and Diet Screen color, and the color picker can save favorite colors.

➕ Added

  • Style options on every box: background and border opacity and shade, text and border shadow, and border and bar glow
  • Resizing a box snaps it to the same size as its neighbours when you're close
  • Nutrient HUD:
    • Move Nutrient: drag a nutrient's whole row to rearrange the rows
    • Its own bar glow for each nutrient
    • Hide Bars, Hide Text, Hide Icons and Hide Window
  • Header (title) size and Hide Header on every Diet box, including the Diet Screen itself
  • Separate Text size, Icon size, Bar size and brightness sliders on every box
  • Intake Breakdown rows: bar fill color, icon border color, icon size, and a Move Icon toggle
  • Active Effects: icons and +/- markers can be moved, hidden and resized separately from the effect names
  • The Nutrient HUD scrolls when it's shorter than its rows
  • A single "Reset This Module" button on every box
  • "Free Bites Before Diminishing" setting: how many times a food can be eaten at full value
  • Activity Log and Calorie History start as tabs on the left in edit mode, the same click-to-open style as the settings windows
  • For addon devs:
  • New NourishedRegisterEvent for registering nutrients, foods and effects in one place
    • A full docs/ADDON_GUIDE.md with an example addon
    • A "Nourished Test" Command Center tab with Registration Report and Check Held Food
    • KubeJS registerNutrient now accepts icon and tags

🔧 Changed

  • HUD panels have rounded corners
  • Calorie History reads "1 day", "2 days" and so on, and the HUD shows "Veggies"
  • Nutrients always draw in their own color (no more threshold tinting)
  • Each nutrient's color is now set on its own Intake Breakdown row, instead of in one long list
  • The Diet Screen editor panel grows when you drag a box past its bottom, instead of pushing boxes into each other
  • Removed options that did nothing: padding sliders, some Move/Hide toggles, and duplicate text colors

🐛 Fixed

  • Every item in the game showed a Nourished tooltip. Fixed.
  • "Today" calories never reset. They now reset each in-game day, including after sleeping or using /time.
  • Previewing an effect in the effect editor no longer leaves it stuck on you forever
  • The screen flickered or flashed black while eating, and the HUD stuttered
  • The game crashed when opening "Edit All" HUD mode
  • The guide book couldn't be crafted
  • Addon nutrients:
  • They didn't get a Diet Screen row
  • Their decay and threshold overrides weren't saved
  • The Nutrient HUD's edit mode now shows every bar, including hidden ones, and its move outlines match what's on screen
  • Activity Log and Calorie History no longer overlap on a fresh install, after a reset, or after dragging
  • Bar glow, Hide Icons, Hide Bars and Icon size didn't work on several boxes
  • Big icons in Recent Meals and Active Effects no longer overlap, and resizing icons no longer moves the text
  • Moving boxes no longer feels sticky, and glow keeps the rounded corners
  • Resizing boxes from the left edge dragged their contents along
  • The Nutrient HUD's height snapped back or didn't fit its visible bars
  • Rows overlapped and bars vanished at very small or very large text sizes
  • The config sidebar ran off the screen at high GUI Scale
  • /nourished validate no longer gives false warnings on servers, and startup log warnings are cleaned up

🗑️ Removed

  • The Patchouli dependency and the old Patchouli book
  • Text glow and header glow (they looked bad at Minecraft's font size)
  • The Intake Breakdown legend box (bar colors already show this)
  • The Diet Screen's "Today" header and sunflower icon

⚠️ Beta: Some of your old layout and color settings may reset. Please report anything odd on the issue tracker or Discord!

Nourished V.0.2.7-Beta.1

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 31 Aug 23:49
b44b45a

Large release: activity-driven nutrient system (mining/combat/sprint/swim/starvation), a full MarieUI restyle across every HUD panel, food-eaten notifications, and a recipe inheritance fix that should finally resolve the calzone/create food multi-value gap.

New: Activity-Driven Nutrients

  • Added five new independently toggleable activity modules:

    • SprintDecayModule
    • SwimDecayModule
    • MiningModule
    • CombatModule
    • StarvationModule
  • Activity modules are dispatched through ActivityModuleDispatcher / ActivityModuleRegistry.

  • Each module has:

    • Its own config category
    • Independent enable/disable control
    • Per-module HUD log colors
  • Added a new draggable/resizable Activity Log HUD panel.

    • Default keybind: K
    • Displays recent activity effects
    • Backed by a client-side ring buffer
  • Activity-driven nutrient configuration was migrated from TOML to a JSON registry via ActivityDrivenNutrientRegistry.

  • Configuration is synchronized using MarieLib's generic MarieResourcesAPI "

  • Added five new daily trackers:

    • nourished:activity/mining_blocks
    • nourished:activity/combat_kills
    • nourished:activity/starvation_crossings
    • nourished:activity/sprint_distance
    • nourished:activity/swim_distance
  • Sprint and swim tracking now measure actual blocks moved using a new per-tick position-delta tracker with teleport/discontinuity guarding instead of simply counting active ticks.

  • All five activity trackers are wired into MarieLib's new tracker-milestone system.

  • Added KubeJS support through NourishedAPI.registerTrackerMilestone.

New: Notifications & Command Center

  • Eating food that changes calories or nutrients now displays a merged, rate-limited notification above the XP bar.

    • Displays the food name
    • Displays the calorie delta
  • Per-nutrient notification lines were tested and removed for simplicity.

  • Reworked the Command Center into a command launcher only.

  • Added Nourished Tools commands:

    • Export All
    • Audit Tags
    • Debug Activity Log
    • Reload
    • Invalidate Cache
    • Unassigned Sources
    • NBT Paths
    • List Profile
    • Get Profile
  • Added framework commands:

    • Status
    • Mods
    • API
    • Registries
  • Commands dispatch real network commands through the new dispatchCommand helper.

  • Removed the earlier Diet Screen shortcut category once edit-mode access covered that use case.

New: Unified HUD Editing

  • Added a new global Edit All HUDs keybind (EDIT_ALL_HUDS) through MarieLib's EditModeCoordinator.

  • One shared edit overlay now controls:

    • Calorie HUD
    • Activity Log HUD
    • Nutrient HUD
  • Every HUD panel now uses MarieLib's ContentScaleController / ScaleConfigPanel pattern:

    • Calorie HUD
    • Activity Log HUD
    • Nutrient HUD
    • Diet Screen's five sub-boxes
  • Double-click continues to adjust text scale.

  • Right-double-click now adjusts an independent padding value.

  • Each panel automatically displays its own `ScaleConfigPanel "card" while in edit mode.

  • Removed the old double-click/scroll interaction and DietZoomController in favor of card-only editing.

  • All three HUD panels now register with MarieLib's SnapRegistry.

  • Dragging one panel can snap it to the edges of the others.

Visual Restyle

  • Restyled CalorieHudScreen and ActivityLogHudPanel to match ScaleConfigPanel's rounded-card design.

  • Added:

    • Colored title headers
    • Opacity sliders
    • Shade sliders
    • MarieColors.withOpacity
    • MarieColors.shade
  • Calorie and activity rows now display:

    • Icon
    • Label
    • Colored progress bar
    • Value
  • Calorie bars are measured against the daily calorie goal:

    • Green under the goal
    • Red past 100%
  • Activity bars are measured against each tracker's own historical maximum.

  • Fixed an earlier issue where all five trackers shared one scale, causing low-count trackers such as mining and combat to appear permanently empty next to sprint/swim distance.

  • Added zh_cn.json.

    • First-pass machine translation
    • Flagged for native review

Data

  • Tagged approximately 60 CreateFood intermediate items into `nutrients/* "tags" so recipe inheritance can see through them and classify finished dishes correctly.

  • Covered intermediate ingredients, including:

    • Dough variants
    • Cut vegetables
    • Ground meats
    • Dairy intermediates
    • And other CreateFood processing items
  • Fixed chocolate_donut_base being incorrectly classified as fruits instead of grains.

Fixed

  • Calzone/CreateFood multi-value gap: recipe inheritance now walks the full ingredient graph through MarieLib's new collectContributions, rather than only checking direct ingredients.

  • Strong tag matches two or more hops down, such as "cheese + dough" beneath a weak `"onion" "keyword match," are now visible to classification.

  • registerCompatEntry was never wired up.

  • All 34 datapack compatibility entries were previously silently discarded.

  • Compat entries are now correctly applied.

  • CommunityTagStage was a broken hand-rolled duplicate of MarieLib's implementation.

  • It never terminated the tag cascade.

  • It skipped instance tags.

  • It now delegates to MarieLib's real implementation.

  • Fixed config screen crashes caused by:

    • IllegalStateException: cannot register while frozen
  • TrackerRegistry unfreeze/refreeze was missing from the calorie-tracker registration path.

  • Fixed isHeavyBlocked incorrectly blocking nutrients from normal eating regardless of hunger state.

  • It now only blocks when the player genuinely cannot eat.

  • External classifications, such as porkchop → proteins, were being diluted by low-confidence recipe-resolver blending.

  • External classifications now short-circuit to the authoritative value.

  • Fixed multiple edit-mode and group-toggle issues:

  • Scale panels not appearing when entering edit mode through the keybind/group toggle.

  • Diet screen scale sliders becoming unreachable after the edit overlay took over the screen.

  • Eager HUD singleton construction occurring during registration.

  • Activity distance tracking ignoring its own module's enable/disable state.

  • Added live color previews for hex-edit rows.

  • Changes now preview immediately instead of requiring Save + reopen.

  • Reset All no longer force-closes the config screen.

  • Fixed multiple hideGui / F1 issues where HUD panels continued drawing over a hidden GUI.

  • Tracker milestone datapack entries were being parsed but never registered.

  • Milestone entries are now correctly wired into the tracker system.

Nourished v0.2.7-beta

Nourished v0.2.7-beta Pre-release
Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 25 Jul 02:55
d250ff1

A lot has changed in this update and some of the changes are breaking. Please read the changelog carefully and check your configs and datapacks for any necessary updates. This also includes MariesLib updates: several packages/classes were renamed or moved (tooltip helpers, override file layout). Please check the MariesLib changelog for details.

Highlights

  • New dynamic, modular UI system for the HUD and Diet Screen: draggable, resizable, persistent layouts. The classic UI is kept fully intact and toggleable via hudClassicMode / dietScreenClassicMode, so you're not forced onto the new system.
  • excluded_items.json: fully exclude specific items from nutrient tracking
  • Per-item food overrides now merge with normal classification instead of fully replacing it
  • Per-box zoom for Diet Screen left-column boxes

Breaking

  • Config overrides (food_overrides.json, source_classifications.json, excluded_items.json) moved to config/nourished/overrides/: update datapacks/scripts referencing the old path
  • Requires MariesLib 0.1.1-beta.4+ (hard dependency)

Fixed

  • Several Diet Screen resize/reflow/zoom bugs (see CHANGELOG.md for full detail)
  • food_overrides.json overrides now actually apply at runtime (previously not wired into RuntimeFoodResolver)
  • Duplicate/reopened Diet Screen on repeated keybind press

Full changelog: see CHANGELOG.md

Nourished v0.2.6-beta.5

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 01 Jul 18:58
8c85609

[ Nourished 0.2.6-beta.5 ] 2026-6-29

Added

  • enableDiminishingReturns master toggle for the diminishing-returns system, exposed in the
    Advanced config tab alongside the existing diminishingFloor, diminishingSteepness, and
    diminishingMidpoint sliders. When disabled, diminishingFloor and noveltyBonus are both
    forced to 1.0 (repeated foods keep full value) on server, client, and client-fallback memory
    configs alike (NourishedMemoryConfig).
  • Config screen Save & Save All Files now reloads and re-broadcasts config to connected
    players when an integrated singleplayer server is running, instead of requiring a manual
    /nourished reload or world rejoin to see changes take effect.

Changed

  • Items with only nutrient-tag data (no vanilla FoodProperties) are now recognized as
    nutritious food
    : NourishedItems.isNutritiousFood and FoodNutritionRegistry.getFoodProperties
    both fall back to FoodNutritionRegistry.getNutrientTagScores, so tag-only items no longer get
    silently skipped by the eating/tooltip pipeline.
  • RecipeInheritanceStage simplified: the multi-nutrient qualifying-threshold filter
    (MultiNutrientInheritance.filterQualifyingNutrients, NUTRIENTS_BELOW_THRESHOLD failure
    reason) was removed — inherited nutrients that pass the earlier filtering stage are used
    directly, and unmatched keys are now reported as REJECT_NO_MATCHING_KEYWORDS rather than being
    split between low-confidence and no-match reasons.
  • Mod description in gradle.properties no longer references a version-specific MarieLib
    changelog note ((from v0.2.5-beta.5)); still requires MarieLib 0.1.0-beta.2+.

In Progress

  • Example source synergy datapack entries added under
    data/nourished/nourished/source_synergies/ (hearty_meal, balanced_plate, breakfast) —
    paired-food bonus definitions (source_a/source_b, time window, bonus value/modifier). Not
    yet loaded or consumed by any code; not active in this build.

Nourished v0.2.6-beta.4

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 27 Jun 23:40
0b6edcc

[ Nourished 0.2.6-beta.4 ] 2026-6-27

Added

  • Per-item nutrient weight system: NutrientWeightRegistry loads datapack files from
    data/<namespace>/nourished/config/weights/*.json, mapping item IDs to per-nutrient float
    weights. Weights are consumed by the classification pipeline to bias multi-nutrient scoring
    without requiring explicit tag overrides.
  • Bundled nutrient weight files for three major food mods:
    • FD_nutrient_weights.json: Farmer's Delight per-item weights
    • croptopia_nutrient_weights.json: Croptopia per-item weights
    • pamhc2_nutrient_weights.json: Pam's HarvestCraft 2 per-item weights
  • data/nourished/config/SOURCE_CLASSIFICATIONS_README.md: written into the jar bundle;
    documents the source_classifications.json schema and how to add per-source nutrient
    classification overrides.
  • NourishedExportCommands: export command logic extracted from NourishedCommand into a
    dedicated class (exportAll); NourishedCommand now delegates to it cleanly.

Removed

  • Compat integration hooks moved out of Nourished into Marie's Compat

    • The following classes are no longer included in this jar:
      • dev.maire.nourished.compat.lso.LSOCompat
      • dev.maire.nourished.compat.peakstamina.PeakStaminaCompat
      • dev.maire.nourished.compat.spiceoflifeonion.SpiceOfLifeOnionCompat

    Compatibility logic has been extracted into the separate Marie’s Compat mod.
    Marie’s Compat uses MarieLib's compatibility framework to detect supported mods
    and enable cross-mod interactions.

  • Compat module config toggles removed

    • enablePSStaminaUsage
    • enablePSPenaltyDecay
    • enablePSExhaustionDuration
    • enableSOLDiversityHealth
    • enableSOLDiversityPenalty
    • enableLSOThermalResistance
    • enableLSOBrokenHeartResilience
    • enableLSOThirstSaturation

    These options are no longer defined in nourished-common.toml,
    NourishedConfig, NourishedModuleCache, or the Modules config category.

    Peak Stamina, Spice of Life: Onion, and LSO compatibility is now handled
    by Marie's Compat.

  • Modules config screen subcategories for peakstamina, spiceoflife,
    and lso removed.
    The Modules tab now only contains:

    • core
    • rawfood
    • ui
    • other
  • mod_compat.json (data/nourished/config/mod_compat.json) removed;
    replaced by source_classifications.json (see Changed).

  • SourceValuesValidator (nourished_source_values) removed.
    The source_values.json registry it validated has been superseded by the
    MarieLib source classification infrastructure.

  • /nourished validate removed from NourishedCommand.
    Validation output is now handled by MarieLib:
    /marieslib validate nourished

Changed

  • source_classifications.json replaces mod_compat.json and source_overrides.json as the
    canonical per-source nutrient classification file under data/nourished/config/; starts empty
    ([]) and is documented by the new SOURCE_CLASSIFICATIONS_README.md.
  • SourceOverridesValidator → SourceClassificationsValidator: renamed to match the new
    file (source_classifications.json); validator ID changed from nourished_source_overrides to
    nourished_source_classifications.
  • Recipe inheritance delegated to MarieLib: RecipeInheritanceStage no longer owns a
    BoundedLRU cache or the inline discoverRecipeIngredients loop. It now delegates entirely to
    MarieLib's RecipeInheritanceResolver, whose index is pre-built at recipe-manager availability
    via RuntimeFoodResolver.buildRecipeIndex(RecipeManager). Per-item recipe timeouts and RECIPE_TIMEOUT failure reasons are removed; INGREDIENT_CAP_EXCEEDED failure reason removed (cap logic lives in MarieLib's resolver).
  • NourishedPresetRegistry.applyPresetValues: now reads preset values as a JsonObject with
    null-safe field presence checks (if (v.has(...))) rather than directly consuming all fields
    from a PresetValues record: partial presets that omit fields no longer reset those config
    values to unintended defaults.
  • FoodOverrideRegistry override README updated to clarify the two export paths: the
    categorized nourished_nutrients_export/ folder (via Export All Foods button or
    /nourished export_all) is recommended for building food_overrides.json; the single-file
    /marieslib dump nourished_nutrients export is documented as a secondary quick-inspection
    option.
  • Nutrient tag maintenance across all five groups: broad reorganization of bundled tags
    (fruits.json, vegetables.json, proteins.json, grains.json, dairy.json) to align with
    expanded weight-file coverage and tag audit findings; net reduction in duplicate / misclassified
    entries.

Compatibility Changes

  • Compat integrations moved to Marie's Compat

    • LSO integration
    • Peak Stamina integration
    • Spice of Life: Onion integration

    These integrations are no longer bundled directly inside Nourished.
    They are now handled by the separate Marie's Compat mod, which uses MarieLib's
    compatibility framework to detect supported mods and enable cross-mod features.

    Nourished no longer contains direct compatibility hooks for external mods.

    To restore previous compatibility features:

    • Install Marie's Compat alongside Nourished and MarieLib.

MarieLib & Build

  • Bumped MarieLib dependency to 0.1.1-beta.2 (marie_lib_version_range=[0.1.1-beta.2,)).
    Requires MarieLib 0.1.1-beta.2+ for:
    • RecipeInheritanceResolver pre-built index (recipe inheritance delegation)
    • Compat hooks for Peak Stamina, Spice of Life: Onion, and LSO (moved from Nourished)
    • /marieslib validate nourished command (replaces /nourished validate)
  • Removed spice_of_life_onion_version from gradle.properties (no longer a compile dependency).

Important Upgrade Notes

If updating from 0.2.6-beta.3:

  1. Requires MarieLib 0.1.1-beta.2+. Update MarieLib on Modrinth before launching.
  2. Remove compat module toggles from your server config: enablePSStaminaUsage,
    enablePSPenaltyDecay, enablePSExhaustionDuration, enableSOLDiversityHealth,
    enableSOLDiversityPenalty, enableLSOThermalResistance, enableLSOBrokenHeartResilience, and
    enableLSOThirstSaturation are no longer read from nourished-common.toml. Delete or ignore
    these keys; compat is now controlled by MarieLib.
  3. /nourished validate is gone: use /marieslib validate nourished for config validation
    output going forward.
  4. mod_compat.json is no longer used and can be deleted from your config folder. Per-source
    classification overrides now live in source_classifications.json.
  5. The nourished_source_values config validator no longer runs; nourished_source_classifications
    replaces it for source_classifications.json validation.

Nourished v0.2.6-beta.3

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 22 Jun 01:28
0b6edcc

[ Nourished 0.2.6-beta.3 ] 2026-6-21

Added

  • Full nutrient export for modpack authors: NutrientExportResolver registers MarieLib export
    resolver nourished_nutrients (per-item nutrients + calories from the live classification
    cascade). NutrientFullExporter writes categorized reference files to
    config/nourished/nourished_nutrients_export/ (fruits.json, proteins.json, etc. — one file
    per nutrient key, dominant-category grouping).
  • Export All Foods button on the Scanner config tab (singleplayer with an active world);
    same output as the exporter above, with in-GUI toast feedback.
  • /nourished export_all (op level 2) — server/console alias for the full categorized export.
  • config/nourished/OVERRIDES_README.md — written on first load when absent; documents
    food_overrides.json schema, export-to-override workflow, and links to the export button /
    MarieLib dump command.
  • Per-nutrient response curves (opt-in, disabled by default): NutrientCurveRegistry with
    presets FLAT, DIMINISHING, CONFIDENCE_GATED, and SYNERGY, plus custom grid support.
    Override stack: bundled defaults → config/nourished/nutrient_curves.json → datapack override →
    KubeJS (NourishedAPI.registerNutrientCurve). General tab toggles enableNutrientCurves and
    global defaultCurvePreset; Nutrients tab exposes a per-nutrient preset picker. When curves are
    off, legacy flat scale/clamp math is unchanged.
  • Config validation framework — ten MarieLib ConfigValidator registrations covering
    nutrients.json, colors.json, food_overrides.json, scanner_spec.json, source overrides/
    values, effects, food values, locks, and raw food config. Runs automatically after initial registry
    load; FAIL/WARN counts log to the server console. /nourished validate (op level 2) prints
    per-validator status and findings. Client shows a toast on FAIL directing you to run the command.
  • Tag audit tooling for modpack authors: NourishedTagAuditContext plus two audit rules —
    TagInferenceMismatchRule (bundled tag vs live runtime inference) and NamespaceBiasRule
    (bundled tag vs scanner namespace weights). /nourished audit_tags, /nourished audit, and
    /nourished tag (aliases, op level 2) scan all bundled nutrient tags and write
    config/nourished/tag_audit_report.json. Chat shows only the report path; full issue/suggestion
    detail stays in the JSON file. Also available via /marieslib audit_tags nourished (same quiet
    chat behavior).
  • /nourished set_all <value> <player> (op level 2) — sets every registered nutrient bar to the
    same fill level (0.0–1.0) in one command, without clearing diminishing-returns memory. Complements
    the existing per-key /nourished set and config-default /nourished reset.

Fixed

  • Existing config/nourished/nutrients.json files that still had legacy white (0xFFFFFFFF / -1)
    colors for built-in nutrients (fruits, vegetables, proteins, grains, dairy) are auto-repaired on
    load to the corrected bundled defaults (dairy cream, grains amber, etc.); repaired values are
    written back to disk so the fix runs once.
  • KubeJS startup scripts failing requireValueKey for built-in or persisted nutrients — nutrients
    now sync into ValueRegistry immediately after NutrientRegistry.loadDefinitions() in the mod
    constructor via syncToValueRegistryUnfrozen() (without freezing); syncAndFreeze() at common
    setup still resets and re-populates from the same source before freezing, so the early sync is
    idempotent.
  • Custom nutrients registered via API/KubeJS (registerExternal) not immediately classifiable —
    each external registration now publishes into ValueRegistry right away through
    syncValueRegistryEntry(), including mid-script (before common setup) and mid-game (after
    ValueRegistry is already frozen).
  • Food Scanner config tab showing a stale dark list panel after leaving a world — scan results are
    cleared when no client level is loaded (canScan() false), so the list viewport background cannot
    draw without an active world.
  • Mis-tagged Fruits Delight items in bundled nutrient tags — durian_flesh, hawberry_roll, and
    pear_with_rock_sugar moved from proteins to fruits (the inference-mismatch cases that
    motivated the tag audit rules).
  • /nourished tag crashing with NoClassDefFoundError: TagAuditReportWriter when run against a
    published MarieLib jar — report JSON writing now lives in Nourished as
    NourishedTagAuditReportWriter, so the command no longer depends on MarieLib classes that may not
    yet be in the Modrinth artifact.

Changed

  • Cloth Config screen refactored into per-tab category classes (GeneralCategory,
    NutrientsCategory, ScannerCategory, etc.) with shared widgets extracted to
    NourishedConfigSharedWidgets; behavior unchanged, maintenance surface reduced.
  • Tag audit commands no longer spam individual findings into chat — only the written report path is
    shown in-game; use the JSON report for full issue/suggestion lists.
  • Full food reference export is /nourished export_all (categorized files under
    nourished_nutrients_export/). There is no /nourished dump; use
    /marieslib dump nourished_nutrients for MarieLib's single-file export variant.

MarieLib & Build

  • Bumped MarieLib dependency to 0.1.1-beta.1 (marie_lib_version_range=[0.1.1-beta.1,)).
    Requires MarieLib 0.1.1-beta.1+ for:
    • ValueRegistry.isFrozen() (external nutrient registration after freeze)
    • MarieAPI.registerExportResolver / RegistryExporter (nutrient export pipeline)
    • MarieAPI.registerConfigValidator / ValidationRunner (config validation)
    • MarieAPI.registerTagRule / registerTagAuditContext / TagScanner (tag audit pipeline)
    • Consumer command /nourished set_all (implemented in MarieLib's player command tree)
    • Local/dev MarieLib builds also ship TagAuditReportWriter for /marieslib audit_tags; Nourished's
      own audit commands write reports via NourishedTagAuditReportWriter so they work with the
      published jar alone.

Important Upgrade Notes

If updating from 0.2.6-beta.2:

  1. Requires MarieLib 0.1.1-beta.1+. Update MarieLib on Modrinth before launching.
  2. Existing worlds with legacy white built-in nutrient colors in nutrients.json are repaired
    automatically on first load after upgrade; no manual edit needed.
  3. First launch creates OVERRIDES_README.md beside food_overrides.json if you do not already
    have one; existing pack edits to that file are never overwritten.
  4. Nutrient response curves are off by default, enable enableNutrientCurves in General config
    (or set it in your server config) only when you want curve-based scaling; until then behavior
    matches prior releases.
  5. Run /nourished tag (or /nourished audit / /nourished audit_tags) after upgrading in a
    modpack world to generate config/nourished/tag_audit_report.json and review bundled-tag
    disagreements with live inference or namespace bias.
  6. Use /nourished set_all 0.8 @s (example) to fill every nutrient bar to the same level for
    testing; /nourished reset @s still restores the configured starting fill instead.

Nourished v0.2.6-beta.2

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 19 Jun 02:15
096ff59

[ Nourished 0.2.6-beta.2 ] 2026-6-16

Milestones

  • Full per-nutrient tier chain: 18 milestones (beginner / journeyman / master for fruits, vegetables,
    proteins, grains, dairy) plus perfectly_balanced cross-group milestone, each with chained
    advancement entries and lang descriptions under data/nourished/advancement/milestones/.
  • Milestones now actually load from datapacks: NeoForge.EVENT_BUS.addListener(MarieDataManager::registerReloadListener)
    registers MarieLib's reload listener at mod init.
  • All bundled milestone JSON files include marie_schema_version.
  • Cross-nutrient all milestone support via MilestoneRegistry.getForAll().
  • Cumulative goals corrected to 0.5 beginner / 2.0 journeyman / 5.0 master (was 5.0
    across all tiers).
  • Removed test_fruits example milestone and all Sugars milestone/advancement files (no
    sugars nutrient registered).

Diet Screen Edit Mode

  • In-game layout editor: press the Edit Diet Screen keybind (J by default) while the Diet
    screen is open to drag the panel, resize the main panel, and resize the Recent Meals and Eat
    more of… boxes independently.
  • DietLayout centralizes panel dimensions, scale, and offset math; DietScreenEditController
    handles drag/resize preview and writes back to client config on release.
  • DietScreenEditScreen overlay keeps the world visible (isPauseScreen=false) while editing.
  • New client config options: dietScale, dietOffsetX, dietOffsetY, dietBackgroundOpacity,
    recentMealsBoxScale, eatMoreBoxScale.
  • New Diet Screen Cloth Config category with sliders, reset-position button, and hotkey
    binding entry; defaults in client_defaults.json and lang entries updated.
  • DietScreen refactored for scaled layout, configurable background opacity, and edit-mode
    resize handles / preview overlays.

HUD & Nutrient Colors

  • Per-nutrient #RRGGBB color editor in the HUD & Display config tab: live preview swatch,
    validation, per-row reset, and Reset All Colors.
  • ValueDefinition.colorOverride wired through NutrientRegistry.toValueDefinition() so nutrient
    colors from nutrients.json render in the HUD.
  • Bundled nutrient colors updated: dairy cream (0xFFE8D5B7), grains amber (0xFFD9A521), and
    proper ARGB values for all five groups (previously -1 / white).
  • "Counts toward: X beginner" tooltip line on food items for milestone progress.

Template Export Commands

  • /nourished export_effects_template — writes a starter effects datapack to the world folder.
  • /nourished export_values_template — writes a starter values/nutrients datapack.
  • /nourished export_colors_template — writes resolved HUD colors as config/colors.json.
  • _comment_* documentation fields in all template export outputs for modpack authors.

Added

  • EffectRegistry.upsertFromDatapack — datapack effects replace bundled effects matching
    (nutrient, trigger, effect) instead of duplicating; threshold is the overridable field.
  • NourishedDatapackCallbacks.registerCustomEffect wired to EffectRegistry.upsertFromDatapack.
  • NutrientRegistry.save() persists in-memory nutrient definitions back to
    config/nourished/nutrients.json; config screen save now calls it alongside other registries.
  • Compat config screen groups food-source mods under CompatCategory.SOURCE_MOD; bundled compat
    JSON files updated to match.

Changed

  • Default N keybind now opens the Diet screen (OPEN_DIET_SCREEN) instead of the mod config
    screen (OPEN_CONFIG removed).
  • HudDrawHelpers border/handle drawing utilities promoted to public static for reuse by the
    diet edit overlay.
  • NutrientRegistry load path hardened: validates config in place, falls back to bundled
    defaults with automatic repair instead of deleting the file on schema mismatch.
  • External/API effect registration replaces an existing entry when (nutrient, trigger, effect)
    match instead of always appending.
  • Removed unused JEI / REI / EMI compileOnly dependencies from build.gradle (recipe viewers
    handled by MarieLib).
  • GitHub Actions actions/checkout upgraded from v4 to v5 in auto-tag.yml and codeql.yml.

MarieLib & Build

  • Bumped MarieLib dependency to 0.1.0-beta.5 (marie_lib_version_range=[0.1.0-beta.5,)).

Fixed

  • HUD bars showing white — colorOverride now set from nutrients.json color field.
  • Datapack effect overrides no longer duplicate — upsert dedup key is (nutrient, trigger, effect)
    only.
  • HUD color config row reset and save now compare against MarieValueColors.resolvedDefaultArgb
    (nutrients.json defaults) instead of palette-only colors — fixes wrong hex after reset and
    spurious colors.json writes when the chosen color matches bundled defaults.
  • Custom HUD colors silently reverting to white on load — ColorRegistry.parseArgbString used Integer.decode on full-alpha 0x-prefixed ARGB strings, which always overflows Integer.parseInt's positive-value range and threw, falling back to white every time; switched to Long.parseLong to match the method's other hex branches.
  • Per-nutrient decay rate overrides in config had no effect — NourishedContextBuilder now wires
    decayRateFor from resolvedDecayRateFor() so nutrition decay honors per-nutrient sliders.
  • Nutrients registered via API/KubeJS lost on nutrients.json reload — registry tracks externally
    registered defs and reapplies them after reload; loadDefinitions() / syncAndFreeze() defers
    ValueRegistry publish until common setup so external registration runs first.
  • External mod food classifications ignored — NutrientClassificationLookup now checks
    SourceRegistry.getExternalClassification() before tag/recipe resolution.
  • Tracking screen nutrient bar labels showing raw translation keys — added missing
    nourished.screen.tracking.bar.* lang entries.

Important Upgrade Notes

If updating from 0.2.6-beta.1:

  1. Requires MarieLib 0.1.0-beta.5+. Update MarieLib on Modrinth before launching.
  2. The N key now opens the Diet screen, not the Nourished config. Use Mods → Nourished →
    Config or /nourished commands for settings.
  3. Diet screen position, scale, and section sizes persist in config/nourished-client.toml. Use
    the Edit Diet Screen keybind or the Diet Screen config tab to adjust layout.
  4. Milestone cumulative goals changed — existing worlds may need /reload to pick up corrected
    tier thresholds.

v0.2.0-beta.1-HotFix

v0.2.0-beta.1-HotFix Pre-release
Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 16 Jun 21:14
7ba0d97

Fixed

  • Milestone advancement tab not appearing, bundled milestone JSON files were missing the required marie_schema_version field, causing all 16 milestone definitions to fail datapack validation silently

  • No other changes from 0.2.6-beta.1. If you installed beta.1 and didn't see the "Nourished Milestones" tab in your Advancements screen, this fixes it.

Nourished v0.2.6-beta.1

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 16 Jun 02:47
7b98c5e

Death Nutrition Behavior

  • Added deathNutritionBehavior config option under [general] in nourished-common.toml
    and common_defaults.json. Controls what happens to nutrient bars and food memory when a
    player respawns after death:
  • preserve (default): keep current nutrient levels and eating memory
  • reset_to_starting: reset all bars to startingNutrientValue and clear food memory
  • vanilla_half: legacy 50% reset with cleared food memory
  • Wired through NourishedContextBuilder into MarieLib's tracking pipeline so death handling
    respects server config in singleplayer and multiplayer.
  • Config screen, import/export JSON, and lang entries added for the new setting.
  • startingNutrientValue description updated: it now also applies to /nourished reset and
    death when deathNutritionBehavior is reset_to_starting.

Milestones

  • Datapack milestone definitions under data/<namespace>/nourished/milestones/ now load
    through NourishedDatapackCallbacks.registerMilestone() and register into MarieLib's
    milestone registry at datapack apply time.
  • enableMilestones module toggle (already present) gates milestone checks at runtime.
  • Bundled example milestone test_fruits: awards Regeneration I when cumulative fruit
    nutrition reaches 0.5, with matching advancement tab entries under
    data/nourished/advancement/milestones/.

Added

  • 18 per-nutrient milestones (beginner/journeyman/master) + perfectly_balanced cross-group milestone with chained advancements
  • NeoForge.EVENT_BUS.addListener(MarieDataManager::registerReloadListener): milestones now actually load from datapacks
  • NourishedDatapackCallbacks.registerCustomEffect wired to EffectRegistry.upsertFromDatapack
  • EffectRegistry.upsertFromDatapack — datapack effects replace bundled effects matching (nutrient, trigger, effect) instead of duplicating
  • NourishedEffectsTemplateCommand — /nourished export_effects_template
  • NourishedValuesTemplateCommand — /nourished export_values_template
  • comment* documentation fields in all template export commands
  • ValueDefinition.colorOverride wired through NutrientRegistry.toValueDefinition() so nutrient colors from nutrients.json render in HUD
  • dairy.json bundled color changed to cream (0xFFE8D5B7), grains.json to amber (0xFFD9A521)
  • Cross-nutrient all milestone support (MilestoneRegistry.getForAll())
  • "Counts toward: X beginner" tooltip line on food items

MarieLib & Build

  • Bumped MarieLib dependency to 0.1.0-beta.3 (marie_lib_version_range=[0.1.0-beta.2,)):
    Requires MarieLib 0.1.0-beta.2+ on the classpath.
  • Gradle now always resolves MarieLib from Maven for compilation; local ../MarieLib composite
    builds are still supported for development via includeBuild with a simpler compile ordering
    fix (no more intermittent clean-build races with NeoForge moddev artifacts).
  • Removed redundant JEI / REI / EMI compatibility bootstrap from ClientEventRegistrar:
    recipe viewer plugins are initialized by MarieLib directly.

Raw Food

  • Added per-item cookedness overrides in config/nourished/raw_food.json (overrides
    section). Modpack authors can pin cookedness values (0.0–1.0) for items that the resolver
    misclassifies; overrides are registered in CookednessResolver and cleared on config reload.

Removed

  • Stamina module removed entirely (~2,200 lines). Stamina tracking, HUD, combat/movement
    drain, and stamina.json config are gone. Peak Stamina compat integration remains under
    module toggles for servers using that mod.
  • test_fruits milestone and advancement (replaced by full tier chain)
  • Sugars milestone files (no sugars nutrient registered)

Changed

  • All bundled datapack JSON files now use marie_schema_version instead of the legacy
    nourished_schema_version key (MarieLib still accepts the old key when reading overrides).
  • Nutrient registry loading hardened: redundant init guards, tag-key cache in
    FoodNutritionRegistry, and cache invalidation on nutrient reload.
  • NourishedAPI registration methods annotated @ApiStatus.Stable for clearer external-mod
    contract signaling.
  • Import/export and preset file writes now validate paths stay within the config directory.
  • EffectRegistry and NourishedLockRegistry truncate oversized entry lists with logging
    instead of growing unbounded.

Fixed

  • Local MarieLib composite builds no longer hit race conditions where compileJava started
    before NeoForge artifacts existed on disk.

  • Datapack effect overrides no longer duplicate — upsertFromDatapack dedup key is (nutrient, trigger, effect) only, threshold is the overridable field

-Milestone cumulative goals corrected: 0.5 beginner / 2.0 journeyman / 5.0 master (was 5.0 across all tiers)

  • HUD bars showing white — colorOverride now set from nutrients.json color field

Important Upgrade Notes

If updating from 0.2.5-beta.5 or earlier:

  1. Requires MarieLib 0.1.0-beta.2+ (bundled build uses 0.1.0-beta.3). Update MarieLib on
    Modrinth before launching.
  2. If you used the removed Stamina module, delete config/nourished/stamina.json — it is no
    longer read. Stamina HUD and drain mechanics are not available in this version.
  3. Review deathNutritionBehavior in config/nourished-common.toml — default is preserve
    (bars kept on death). Set to reset_to_starting or vanilla_half for stricter death
    penalties.
  4. To customize raw-food cookedness for specific items, add an overrides block to
    config/nourished/raw_food.json.
  5. After upgrading, run /nourished reload on servers or rejoin worlds to refresh cached
    classification and config-driven module state.

Nourished v0.2.5-beta.5

Pre-release

Choose a tag to compare

@kgbcupcake kgbcupcake released this 14 Jun 00:43
3e27704

Nourished v0.2.5-beta.5 and up now Requires MarieLib_v0.1.0-beta.1+** on the classpath. Install MarieLib before or alongside this release.


Download

Attach nourished-0.2.5-beta.5.jar from build/libs/ after running:

./gradlew build

What's New

MarieLib integration

  • Nourished now requires MarieLib 1.0.0+ on the classpath.
  • Shared infrastructure: scanner pipeline, tracking/memory, datapack loaders, compat framework, registries, client widgets, and most public API types: lives in MarieLib.
  • Nourished owns nutrition-specific gameplay, config, and datapacks.
  • Removed duplicate Nourished copies of API/registry/scanner/tooling classes that now come from MarieLib.
  • NourishedAPI and related entry points delegate to MarieLib types.
  • KubeJS bridge now registers through MarieLib's plugin surface.

Config & module toggles

Renamed module toggles in nourished-common.toml / defaults to match MarieLib ModuleCache field names:

Old key New key
enableNutritionEating enableSourceApplication
blockHeavyMeals enableBlockHeavySources
blockLightFood enableBlockLightSource
heavyMealNutritionThreshold heavySourcePropertyThreshold
  • Added NourishedConfig.syncModuleCache() so module toggles are copied into MarieLib's hot-path cache on config load, reload, save, and config-screen apply.
  • Bundled common_defaults.json and lang entries updated for the new key names. Defaults loader still accepts legacy JSON keys for datapack overrides.

Scanner & datapacks

  • Bundled scanner_spec.json now uses MarieLib schema keys (source_property_heuristics, source_properties, saturating_source, light_application, min_property_points, max_property_points).
  • MarieLib still accepts legacy food_* / *_meal / *_snack keys when reading older copies from config/nourished/scanner_spec.json.
  • mod_compat.json uses heavySourcePropertyThreshold (legacy key still accepted).

Compat ownership

  • compat_registry.json now ships under data/nourished/compat/ (Nourished-owned mod compat catalog).
  • Mod-specific integration hooks moved from MarieLib into Nourished:
    • dev.maire.nourished.compat.lso.LSOCompat
    • dev.maire.nourished.compat.peakstamina.PeakStaminaCompat
    • dev.maire.nourished.compat.spiceoflifeonion.SpiceOfLifeOnionCompat

Bootstrap & presets

  • Nourished registers NourishedConfig / NourishedClientConfig and their mod-bus listeners before MarieLibContext.register().
  • Added NourishedPresetRegistry for Nourished-specific preset behavior: seeding built-in Casual / Survival / Hardcore JSON from the jar, applying preset values to config, and force-enabling all effects for the Hardcore preset.

KubeJS

  • Added dedicated NourishedKubePlugin with kubejs.plugins.txt and service-loader registration for KubeJS 2101 discovery.
  • Added NourishedEvents server event group: nutrientChanged, nutrientCritical, nutrientExcess, sourceConsumed, gutHealthChanged, rawFoodPenalty, nutrientModifier, and foodEaten.
  • Added NourishedKubeBindings (NourishedAPI in scripts) with registerNutrient, getNutrientLevel, isNutrientCritical, getGutHealth, and getNutrientKeys.
  • Added NourishedKubeIntegration reflection bridge so Nourished loads without KubeJS on the classpath.
  • Added NourishedKubeEventBridge to forward MarieLib value events and Nourished gameplay into KubeJS.
  • rawFoodPenalty scripts can cancel penalties via event.cancel().
  • nutrientModifier scripts can adjust event.amount or cancel gains before they apply.
  • Updated bundled nourished_example_events.js with current event field names and usage.

Fixed

  • Fixed mod-load crash (UnsupportedOperationException: Implement via consuming mod) when PresetRegistry.ensureBuiltInFilesOnDisk() ran during registry lifecycle init.
  • Updated client code for MarieLib API renames: VALUE_COLORS / SOURCE_VALUES import-export sections, getRecentSourceIds(), and onFullTrackingSynced().
  • KubeJS event payloads now expose event.player on nutrientChanged, nutrientCritical, nutrientExcess, gutHealthChanged, and rawFoodPenalty.

Upgrade notes

If updating from 0.2.5-beta.4 or earlier:

  1. Install MarieLib_v0.1.0-beta.1+: required on the classpath from this version onward.
  2. Delete config/nourished/scanner_spec.json before first launch so it regenerates with the new schema keys.
  3. Review config/nourished-common.toml, rename the four module keys above if you had custom values; unset keys fall back to defaults.
  4. Run /nourished reload on servers or rejoin worlds to refresh cached classification and config-driven module state.

Full changelog

See CHANGELOG.md for complete version history.