01Files, owners and refresh
Unless noted, paths are relative to config/healthy_diet/. A datapack entry instead lives under data/<namespace>/healthy_diet/. Filter file, scope or field without sending a request.
| File / directory | Scope | Responsibility | Typical refresh |
|---|---|---|---|
server.json | Server authoritative | Game rules, privacy, shelf stack merge, testing logs | OP gameplay screen or /hdreload |
display.json | Local client | Tooltip layout, temperature unit and default display modes | Save client screen; restart client after manual edit |
colors/color_schemes.json | Both sides / appearance | Named gradients referenced by groups, quality, tooltips and schemes | /hdreload on server; reload local client files locally |
colors/solid_colors.json | Both sides / appearance | Palette for the editor color picker | /hdreload on server; client-local refresh separately |
fatigue/fatigue_gradient.json | Appearance | Color and animation of fatigue and recovery lines | /hdreload |
fatigue/fatigue_exempt.json | Server gameplay | Item IDs exempt from other-food recovery counting | /hdreload |
shelf_life/seasons.json | Server gameplay | Seasonal spoilage multipliers; fallback without Ecliptic Seasons | /hdreload |
shelf_life/schemes/*.json | Synced display | Shelf-life templates, colors and seasonal names | /hdreload and send scheme to clients |
temperature/block_heat.json | Server gameplay | Block heat rules when not using the LSO world-temperature branch | /hdreload or temperature screen save |
temperature/weather_offsets.json | Server gameplay | Rain/snow and storm offsets across 24 solar terms | /hdreload or temperature screen save |
temperature/day_night_offsets.json | Server gameplay | Noon and midnight offsets across 24 solar terms | /hdreload or temperature screen save |
temperature/season_temperature.json | Server gameplay | Extra ambient-temperature offsets per term (on top of EC climate) | /hdreload or temperature screen save |
bottle_fills.json | Server gameplay | Right-click fluid source consumption and output | /hdreload |
fog_effects.json | Local client | Underwater / lava fog distance for configured effects | Reload local client file, not server reload |
item_rarities.json | Server / synced | Item-level fallback rarity IDs | /hdreload; /hdset rarity also updates it |
tooltip_templates.json | Editor local | Local tooltip-row templates | Editor reads/writes local instance; not global client sync |
quality_registry/*.json | Startup registration | New item IDs, source, model, quality, edible behavior and stack limits | Restart both sides for new/removed IDs |
datapack/data/<ns>/healthy_diet/ | World datapack + HD override | items / tooltips / blocks / nutrition_* / quality_levels / rarities / effect_lines | Vanilla /reload for world pack; /hdreload for HD override |
02server.json: server-authoritative sections
One file has three sections: gameplay, privacy, shelfMerge. Older separate files migrate into this one and move to migration_backup/.
| Field | New-file default | Behavior |
|---|---|---|
shelfTemperatureEnabled | false | Master switch for shelf life and temperature. Off pauses decay, temperature/freshness, expiration products and commands, temperature rejection, zone effects and associated tooltip lines; existing item data remains and downtime is not retroactively charged. |
lsoIntegrationEnabled | true | Permit hd:shelf to read the complete LSO world environment. Does not disable other LSO compatibility. |
ecIntegrationEnabled | true | Permit direct EC climate and HD seasonal spoilage multipliers, without changing EC data already supplied by LSO. |
proxyHeatstrokeEffect | true | Server checks every five seconds: mirror LSO heatstroke to EC heatstroke for the blur effect, removing it when the source is absent or immune. |
bonusUpdateTicks | 100 | Attribute-bonus refresh interval (1–1,728,000 ticks; about five seconds by default). |
effectUpdateTicks | 200 | Potion-bonus refresh interval (1–1,728,000 ticks; about ten seconds by default). |
ejectIllegalProtectedItems | false | If an untrusted holder has a protected item: true drops it at their feet; false freezes it in place and warns. Default avoids losing items due to misclassification. |
removeOwnerOnDeathDrop | false | true clears protection on all death drops; false sets the deceased UUID only for previously unowned drops and preserves existing owners. |
debugLogs | false | Server diagnostic logs for block right-clicks and placed/portion food. Reload with /hdreload; disable after troubleshooting. |
privacy.sendCommandTextToAllPlayers | false | By default only OP4 receives stage command text. true sends full stage configuration to non-OP players without changing execution permissions. |
shelfMerge.mergeRemainingMinutes | 5 | Maximum difference between remaining durations to allow stacking (1–1,440 minutes). |
shelfMerge.mergeTempThreshold | 10.0 | Maximum item-temperature difference for stacking (0–100°C); NaN differences are ignored. |
shelfMerge.mergeColdFreshThreshold | 20.0 | Maximum cold-fresh-progress difference (0–100) for stacking. |
03display.json: local client preferences
Local appearance and editing defaults do not take part in server gameplay synchronization. Server rules belong in server.json → gameplay.
| Field | New-file default | Behavior |
|---|---|---|
nutritionPerLine | 6 | Maximum regular-tooltip nutrition/conditional entries, then truncate with an ellipsis; 1 means only the first entry, not one per line (1–100). |
titleproWrapWidth | 1000 | TitlePro title wrap width in pixels (1–100,000). |
defaultConditionalGainEnabled | true | Default “actual gain” choice for a newly drafted conditional rule, not a runtime switch for saved rules. |
infoGapWidth | 20 | Fixed gap between left text and right-aligned content in D mode (0–100,000). |
maxInfoWidth | 320 | Max D information panel width; S detail view is not constrained by this limit (0–100,000). |
showUnifiedPotionStyle | false | Master potion-style switch; false bypasses item and default force-unify choices. |
enableEnchantmentInfo | true | Automatically show enchantment-book descriptions in D mode when translation keys exist. |
enablePotionInfo | true | Controls the D-mode vanilla/HD/external effect, unified-attribute and LSO-thirst information block. Normal compact effects, zone effects, JEI/custom D text and enchantment descriptions remain. |
hideSystemPrefixes | false | Only hide HD-generated line-prefix symbols and spacing, not custom names, inline separators or segmented text. |
temperatureUnit | celsius | celsius or fahrenheit for this client’s tooltip/HUD; stored config and editors remain Celsius; invalid choices fall back to Celsius. |
temperatureUnitChosen | false | Whether this client explicitly chose a temperature unit; local first-run prompt state. |
groupLocalizePrompted | false | Local OP prompt state for translating bundled group names; not a shared setting. |
defaultEffectsShiftOnly | false | Default new potion line visibility: always vs Shift-only; existing lines retain their own choice. |
defaultForceUnify | false | Initial force-unify choice for new effect lines; only applies where an item already has tooltip config / datapack entry. |
defaultFoodBarDisplayMode | always | always / shift / info / off. off falls back to vanilla food-value rows; affects unconfigured items and new rows. |
Obsolete panel offset/width and text-shadow fields no longer belong in this file. _note_* fields are read-only help. Save the client screen to apply immediately; restart that client after manual file edits.
04Nutrition datapack: groups, stages and bonuses
Paths under data/<namespace>/healthy_diet/ are nutrition_groups/<groupId>.json (one group definition), nutrition_stages/<groupId>.json (stages + hideAutoBonus), and nutrition_bonuses/<groupId>.json (remark + bonuses). The HD override goes under config/healthy_diet/datapack/; filenames are group IDs. At most 64 groups.
Group fields
| Field | Default | Explanation |
|---|---|---|
displayName | Group | Group label shown in UI/tooltips; bundled defaults may have localized names. |
nutritionSymbol | Ψ | Nutrition-line prefix; blank falls back to the default plus a space. |
order | 0 | Ascending display order, tie-broken by group ID. |
color / colorStyle | #FFFFFF / null | Hex solid color or scheme key. Style controls dynamic/nameStyle/speed/steps/waveStep/pulseDelay/reversals/bold/italic/underlined for schemes; ignored for solid colors. |
decayRate | 6.0 | Every consumed hunger point reduces nutrients by 1/decayRate; nonpositive disables natural decay. |
icon | empty | Optional item icon resource; blank uses UI fallback. |
initialValue | 0 | Starting group value for a new player or newly added group, 0–100. |
gainMultiplier | 1 | Multiplies positive and negative food changes; 0 allowed; negative/nonfinite values fall back to 1. Final group value clamped to 0–100. |
enabled | true | Disabling hides/freezes the group for all players and stops decay, conditions and bonuses. |
requiredPlayerTag | empty | Exact player scoreboard tag required; blank means no restriction. Not an item/block tag. |
requiredModId | empty | Loaded server mod ID required; blank means no restriction. |
nutritionTipColors | generated | Four slots: regular/conditional × gain/loss; customization controls whether gain follows the group-name color. |
Stage and bonus fields
| Field | Default | Explanation |
|---|---|---|
stages[].min/max | 0/100 | Inclusive integer bounds; checks round the current value first. Adjacent stages cannot overlap or leave gaps. |
stages[].label/tooltip/commands | empty / [] / [] | Optional title, extra hover lines and configured stage commands; command text is only sent to OP4 unless privacy permits more. |
hideAutoBonus | false | If true, suppress automatic range title and bonus preview in all stage tooltips for this group. |
remark | empty | Editor list label; blank uses filename, does not affect settlement. |
bonuses[].conditions | {} | Group IDs map to {min,max}; multiple conditions are AND. |
bonuses[].attributeBonuses[] | [] | attribute (default max_health), operation add/multiply_base/multiply_total (default add), value. |
bonuses[].effectBonuses[] | [] | effect ID, level (0=I), duration ticks (default 200), showParticles (default false). |
05Items, tooltips, blocks and quality
Datapack directories: items/<itemPath>.json, tooltips/<itemPath>.json, blocks/<blockPath>.json, quality_levels/<id>.json, rarities/<id>.json, effect_lines/<effectId>.json. Item/tooltip entries support .json.disabled; blocks do not. Effect-line style overrides an item only when its potion row opts into force-unify.
Item field groups
| Field | Meaning |
|---|---|
nutrition | Group ID → food change, multiplied by group gain multiplier, lifetime factor and consumed portion count. |
effects | Configured after-eating potions: level, tick duration, probability, particles, optional freshness curve. |
foodCooldown | Short-term maxUses, cooldownCount, cooldownMinutes and restoreHunger. |
foodFatigue | Lifetime lossStart and aversionCount; linear decay only when both are set. |
shelf | Base time, temperature curves, dimension multipliers, cold-fresh/retention, environmental temperature and eating effects. |
onEatCommands / suppressEffects | Eating commands and removal of intrinsic item effects, each with its own delay. |
conditionalRules | Nutrition conditions → target changes, commands and hints, saved as whole rules. |
stackSize | Item-level maximum stack, 0 = vanilla; restart required, no separate NBT-variant limit. |
quality / rarity | Bind quality/rarity IDs; rarity resolves variant → generic → item_rarities.json → vanilla. |
nbtLock / variantName | NBT matching and annotation; empty nbtLock denotes generic item entry. |
Block interaction fields
| Field | Default | Meaning |
|---|---|---|
state | {} | Subset of block-state properties; empty matches any. More specific states take precedence. |
hand / items | any / [] | any, empty main hand or item matched against item IDs or #tags when hand=item. |
consumeItem | 0 | Main-hand count consumed; Creative consumes none; insufficient quantity does not match. |
sneak | any | any, require or forbid sneaking. |
cooldownTicks | 20 | Per-variant cooldown, 0–72,000 ticks; 0 writes no cooldown. |
cancelVanilla | false | Cancel vanilla interaction on match; affects deduplication of long-press interactions. |
nutrition | {} | Group ID → change, using group gain multiplier but not lifetime decay or food portions. |
effects / effectDelay | [] / 0 | Potion entries and delay; food freshness curves have no shelf-life item here. |
commands / commandsAtBlock | [] / false | Commands may interpolate {x}, {y}, {z}; true changes execution position to block center. |
titles / commandDelay | [] / 0 | TitlePro titles and commands share a tick delay. |
06Shelf life and temperature fields
Per-item shelf values differ from seasonal and environmental files in shelf_life/ and temperature/. Defaults apply to a newly created configuration; bundled foods may override them.
| Field | Default | Explanation |
|---|---|---|
durationMinutes / durationUnit | 60 / minutes | Base minutes 1–99,999; editor units minutes, hours, real days (1,440 min) or game_days (20 min). Invalid unit falls back to minutes. |
resultItem / inheritTemperatureOnExpire | minecraft:air / true | Air disappears; other result inherits only temperature, not previous shelf-life progress. |
expireCommand | empty | Runs in holder context on held expiration, not container or dropped expiration. |
baseDecayMultiplier | 1.0 | Nonnegative base spoilage multiplier. |
temperatureCurves | [] | Up to 16 temperature-to-decay curves with linear endpoints and optional outer buffers. |
dimensionDecayMultipliers | {} | Dimension ID → multiplier; unlisted dimensions ×1. |
scheme | hd:shelf_en | Display scheme ID; obsolete hd:shelf is normalized to the current scheme. |
coldRetention / coldRecoveryRate / coldDegradationRate | false / 1 / 15 | Enable recovery when fully frozen; minutes recovered per minute 0–100; permanent recovery-cap loss per 1–100% base-time consumption step. |
temperatureEffectCurves | [] | Up to 20 temperature-zone effects applied on eating, independent of decay curves. |
common.minTemperatureC / maxTemperatureC / initialTemperatureC | -30 / 100 / 10 | Item absolute bounds and initial temperature; bundled foods may override. |
common.eatableMinTemperatureC / eatableMaxTemperatureC | -5 / 35 | Cannot eat outside this Celsius range. |
common.coldFreshStartC / freezingStartC / fullyFrozenC | 3 / -5 / -20 | Cold-fresh progress and freeze thresholds. |
common.highTemperatureC / preservationRate | 30 / 0.8 | Hot-zone start and spoilage protection at 50% cold-fresh progress. |
naturalEnvironment.temperatureChangeC / temperatureChangeMinutes | 1 / 2 | Ambient baseline: 1°C each two minutes by default. |
naturalEnvironment.lowSpeed* / highSpeed* | separate | Cooling and warming speed-step increase, temperature difference and multiplier cap. |
naturalEnvironment.*SpeedMultiplierBonus | 0 | Extra frozen/low/normal/high zone temperature-change speed. |
fridgeTemperature.*ChangeC / *Minutes | fridge 5/2; freezer 10/2 | Baseline fridge/freezer temperature-change speeds. |
fridgeTemperature.*SpeedMultiplierBonus | 0 | Extra four-zone change speed in fridges. |
temperatureZoneEffects | null | Legacy four-slot migration input; normalized to temperatureEffectCurves. Do not use for new entries. |
Curve and effect endpoints
| Array | Fields / constraints |
|---|---|
temperatureCurves[] | startTemperatureC < endTemperatureC; endpoint multipliers 0–100; optional startBufferTemperatureC / endBufferTemperatureC. Outside interval/buffers the curve contributes ×1. Legacy startBufferC/endBufferC migrate read-only. |
temperatureEffectCurves[] | effectId; absolute Celsius start/end; includeStart/includeEnd (default true); start/end levels 0–127 (0 = I); start/end durations 1–72,000 ticks (20 ticks = 1 s); particles default true. Legacy four-zone migration may create a valid single-point range. |
Seasonal and environment files
| Path | Purpose |
|---|---|
shelf_life/seasons.json | fallbackMultipliers.shelfLifeMultiplier defaults ×1 without EC; seasons[] includes ID, term range 0–23, multiplier 0–100 and display name; legacy six-season files remain supported. |
temperature/season_temperature.json | terms[]: term 0–23 and ambient offset −100–100°C, added to EC climate. |
temperature/weather_offsets.json | terms[]: rain −1 and thunder −2 defaults; no offset without precipitation. |
temperature/day_night_offsets.json | terms[]: noon/night defaults 0, smoothly interpolated within days and between terms. |
temperature/block_heat.json | entries[] block + rules[] temperature −1000–1000 and state properties; non-LSO branch, first fully matching rule wins. |
07Appearance schemes and utilities
| File | Structure and limits |
|---|---|
colors/color_schemes.json | Scheme ID → {colors:[#RRGGBB,...]}; two or more colors make a visible gradient; editing a shared scheme affects every reference. |
colors/solid_colors.json | Array of #RRGGBB picker swatches; invalid values ignored. |
fatigue/fatigue_gradient.json | enableGradient, fatigueLevelGradient and fatigueRecoveryGradient with scheme, stars, dynamic style, speed/steps/wave/pulse/reversals. Changes display only, not cooldown thresholds. |
fatigue/fatigue_exempt.json | Item ID array; default includes rotten flesh, potions, spider eyes and milk buckets. Exemption applies to recovery counting, not “never fatigued”. |
tooltip_templates.json | Local editor text/scheme/stars/shiftOnly/dynamic/animation fields; not shared player config. |
item_rarities.json | Item ID → rarity ID fallback below NBT and generic entries. |
bottle_fills.json | Array of {item, fluid, result, resultNbt}; source blocks only; invalid resultNbt drops NBT but still gives the result item. |
fog_effects.json | effects (Night Vision by default), waterFogStart 80, waterFogEnd 160, lavaFogEnd 6; local distance, not color. |
effect_lines/<effectId>.json | Effect name and unified scheme/style/animation; only overrides an effect row when force-unify is enabled. |
Palettes provide colors; tooltip layout and visibility control whether text is drawn.
08In-game configuration UI diagrams
Configuration menu (/hdconfig)
/hdconfig is a client-local command that itself checks OP4. Non-OP players can reach local appearance settings from other game screens, but cannot invoke this command directly. The page mockups are read-only; no real values are retrieved.
Client appearance · twelve editable rows
Server gameplay · nine entries and reset action
Temperature integrations · five tables + separate LSO entry
Five server table tabs share one draft and one validated Save; changing tabs retains unsaved changes. The sixth opens an independent form. The tabs below explain file groups only; they cannot modify any data.
Spoilage multipliers
Per-season ID rate 0–100; default ×1; requires an active EC term and enabled EC integration. Legacy six-season files remain six entries.
Block heat
Search block name or ID; + values heat and − cool, −1000–1000. States can have separate rules; heat, distance and occlusion determine actual contribution.
Day/night
Noon and midnight offsets per term, each −100–100°C (default 0), interpolated during the day; biome-specific endpoints take precedence.
Seasonal temperature
Additional −100–100°C per term (default 0) on top of EC climate; without EC uses the first term.
Rain/snow
Rain/snow default −1°C, thunderstorm default −2°C per term, both −100–100°C; thunder does not add the ordinary rain value.
LSO world temperature
Separate dimension form, not part of the five-table combined save; world-temperature values use LSO units, not Celsius.
Term order: Beginning of Spring, Rain Water, Awakening of Insects, Spring Equinox, Clear and Bright, Grain Rain, Beginning of Summer, Grain Full, Grain in Ear, Summer Solstice, Minor Heat, Major Heat, Beginning of Autumn, End of Heat, White Dew, Autumn Equinox, Cold Dew, Frost Descent, Beginning of Winter, Minor Snow, Major Snow, Winter Solstice, Minor Cold, Major Cold. The preview does not load the 24 actual server entries.
LSO world temperature and biome temperature
09Save and reload by owner
| Change | Action / reason |
|---|---|
server.json | Save gameplay in OP screen; manually edit privacy and shelfMerge then /hdreload. Only gameplay is exchanged through the screen. |
display.json, local fog / templates | Save on each client; restart the client after manual edits. Server /hdreload cannot edit local files. |
| HD override of groups, stages, bonuses, items, tooltips, blocks, quality, rarity and effect lines | Save and /hdreload to reconstruct from disk and resynchronize online players. For world datapacks, use vanilla /reload. |
quality_registry/ entry or stackSize | Distribute matching definitions and resources; restart for startup registration / item-level attribute. |
| Client textures and fonts | Install on each client; a server-side reference cannot transmit resources. |
/hdreload is not vanilla /reload: world packs, other mods and local client files each have their own reload mechanism.