{"id":51135508,"url":"https://github.com/kgbcupcake/marielib","last_synced_at":"2026-07-01T20:00:50.900Z","repository":{"id":363733649,"uuid":"1264530702","full_name":"kgbcupcake/MarieLib","owner":"kgbcupcake","description":"MariesLib Is library that all my other mods are going to call from.","archived":false,"fork":false,"pushed_at":"2026-06-22T12:42:52.000Z","size":46801,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T17:34:59.004Z","etag":null,"topics":["framework","library","minecraft"],"latest_commit_sha":null,"homepage":"https://modrinth.com/mod/marieslib","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kgbcupcake.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-10T01:00:39.000Z","updated_at":"2026-06-22T12:35:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kgbcupcake/MarieLib","commit_stats":null,"previous_names":["kgbcupcake/marielib"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kgbcupcake/MarieLib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgbcupcake%2FMarieLib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgbcupcake%2FMarieLib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgbcupcake%2FMarieLib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgbcupcake%2FMarieLib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kgbcupcake","download_url":"https://codeload.github.com/kgbcupcake/MarieLib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgbcupcake%2FMarieLib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35020872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","library","minecraft"],"created_at":"2026-06-25T17:30:44.195Z","updated_at":"2026-07-01T20:00:50.894Z","avatar_url":"https://github.com/kgbcupcake.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/github/license/kgbcupcake/MarieLib)](LICENSE) [![Release](https://img.shields.io/github/v/release/kgbcupcake/MarieLib?include_prereleases)](https://github.com/kgbcupcake/MarieLib/releases) [![Stars](https://img.shields.io/github/stars/kgbcupcake/MarieLib?style=social)](https://github.com/kgbcupcake/MarieLib/stargazers) [![Issues](https://img.shields.io/github/issues/kgbcupcake/MarieLib)](https://github.com/kgbcupcake/MarieLib/issues) [![Minecraft](https://img.shields.io/badge/Minecraft-1.21.1-brightgreen)](https://www.minecraft.net) [![NeoForge](https://img.shields.io/badge/NeoForge-21.1.229-orange)](https://neoforged.net) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/kgbcupcake/MarieLib)\n\n![MariesLib Banner](Assets/MariesLib_banner.png)\n\nI kept rebuilding the same plumbing in every Marie mod, like registries, compat discovery, source\nclassification, caching, JSON helpers. It worked, but it was duplicated everywhere and painful\nto maintain.\n\nSo I pulled it out into one library. **MariesLib** is the shared backbone behind Marie mods.\nIt handles the hard problems, auto-classifying thousands of items from modded content, three-tier\ncompat with modpack overrides, player tracking with memory and decay, datapack tooling with\nvalidation, and more, so consuming mods can focus on gameplay.\n\n---\n\n## Community\n\n[Discord-Channel](https://discord.gg/EZnFJsfQup)\n\nQuestions, suggestions, and development discussion are welcome.\n\n---\n\n## Do you need to install this?\n\n**Yes — if you use a Marie mod that depends on it.**\n\nEvery Marie mod requires MariesLib as a **separate install**.\n\nInstall both:\n\n- The Marie mod you want\n- MariesLib 0.1.0-beta.1 or newer\n\nMost launchers resolve that dependency automatically. If a Marie mod fails to load, check that\nMariesLib is installed and up to date.\n\nMariesLib is infrastructure, not a gameplay mod on its own. It powers the mods that depend on it.\n\n---\n\n## The Scanner\n\nThis is the auto-magic everyone asks about.\n\nRun the scanner and MariesLib analyzes **every source item** in your modpack — hundreds of mods,\nthousands of items — then writes ready-to-use datapack files.\n\nThe scanner handles massive item registries out of the box through:\n\n- **Token stemming**: variations of the same root word collapse to a single key\n- **Recipe inheritance**: if ingredient A = category X, then the crafted result inherits category X\n- **Multi-signal analysis**: item name + item properties + existing tags\n- **Confidence validation**: spread-based filtering, not hard thresholds\n\nThe scanner outputs:\n\n- **Tag recommendations**: ready-to-paste JSON for `data/\u003cmodid\u003e/tags/item/`\n- **Multi-value reports**: items with secondary value groups\n- **Overlap matrices**: co-occurrence counts for multi-value pairs\n- **Ambiguous item lists**: low-confidence hits flagged for manual review\n\n---\n\n## Classification Traces\n\nEvery classification decision is inspectable. See exactly which pipeline stage matched, what\nscores were considered, and why the final value group was chosen.\n\n**Example trace** (a composite source item):\n\n- **Tag lookup** → value_a: 1.0000\n- **Runtime resolver** → value_b: 0.33, value_c: 0.26, value_d: 0.41\n- **Blend precedence** → **TAG wins** (tag data takes priority over runtime)\n- **Final group**: VALUE_A, 100% confidence\n\nThe trace shows every stage:\n\n1. TAG_LOOKUP ✓ — matched 1 value tag\n2. ITEM_DISCOVERY ✓ — item passes source filter\n3. RESOLVER_CACHE ✓ — cache hit\n4. SIGNAL_AGGREGATION ✓ — signals aggregated via COMPOSITE\n5. WINNER_SELECTION ✓ — value_d selected (score=0.41)\n6. CONFIDENCE ✓ — confidence above threshold (spread=5.80)\n7. TAG_RUNTIME_BLEND ✓ — tag and runtime results blended\n\n**Precedence decisions:**\n\n- value_a → TAG (tag data wins)\n- value_b → RUNTIME_SUPPLEMENT (runtime fills gaps)\n- value_d → RUNTIME_SUPPLEMENT\n- value_c → RUNTIME_SUPPLEMENT\n\nDeveloper gold. You can debug exactly why any item resolved the way it did.\n\n---\n\n## Broad Mod Compatibility\n\nMariesLib uses a **three-tier compat system** so mod authors, addon authors, and modpack creators\ncan declare and override compatibility without recompiling:\n\n| Tier | Source                                                          | Notes                     |\n| ---- | --------------------------------------------------------------- | ------------------------- |\n| 1    | `data/\u003cmodid\u003e/compat/compat_registry.json` in the consuming mod | Base registry             |\n| 2    | `data/\u003cother_modid\u003e/marie_compat.json` from loaded mods         | Mod-provided declarations |\n| 3    | `config/\u003cmodid\u003e/compat_overrides.json`                          | Modpack overrides         |\n\nLater tiers merge into earlier entries rather than replacing them wholesale.\n\n**Example compat entry:**\n\n```json\n{\n  \"modId\": \"farmersdelight\",\n  \"category\": \"CONTENT_MOD\",\n  \"providesSourceTags\": true,\n  \"namespaces\": [\"farmersdelight\"]\n}\n```\n\n| Integration     | Status                         |\n| --------------- | ------------------------------ |\n| KubeJS          | ✅ Scripting support           |\n| Cloth Config    | ✅ Preset and import/export UI |\n| JEI / REI / EMI | ✅ Tooltips in recipe viewers  |\n| Any Marie mod   | ✅ Required separate install   |\n\n---\n\n## The Tracking System\n\nMariesLib provides a complete player value tracking system with memory, decay, effects, and progression.\n\n**What consuming mods get:**\n\n- **Memory windows**: track recent source applications with configurable time/count windows\n- **Diminishing returns**: same-source penalty to encourage variety\n- **Debt tracking**: go negative, pay it back over time with decay\n- **Streaks**: bonus for sustained variety across time windows\n- **Source pair synergies**: combos like \"source A + source B = bonus\"\n- **Milestones**: cumulative goals with rewards\n- **Thresholds**: critical/low/excess with customizable effects\n- **Profiles**: different decay/threshold profiles per player or scenario\n\nThis is a **whole player progression system** in one library. Consuming mods wire it up through\n`MarieLibContext` and get tracking, decay, effects, and UI hooks out of the box.\n\n---\n\n## Modularity\n\nMarie mods built on MariesLib can toggle major features independently, like source application,\ndecay, effects, HUD, toasts, and more. Modpack authors can lock modules server-side through\ndatapack module locks.\n\n**Feature flag cache**: hot-path feature flags cached for performance\n**Lock registry**: server-side locks prevent client config overrides\n\n---\n\n## Configurable to your server\n\nEverything ships with sensible defaults. Consuming mods expose the rest:\n\n- Toggle individual modules on or off\n- Adjust decay rates and thresholds per value\n- Override sources via `config/\u003cmodid\u003e/source_overrides.json`\n- Override compat via `config/\u003cmodid\u003e/compat_overrides.json`\n- Drive definitions through datapacks where loaders are available\n- Save and share full config snapshots with a single share code\n\n**Import/export** — compressed config share codes. Export your entire setup as a string, paste\nit to a friend, they import instantly. Config presets ship as JSON under `config/\u003cmodid\u003e/presets/`.\n\n---\n\n## Mods built on MariesLib\n\nAll Marie mods require MariesLib as a separate install.\n\n| Mod                                             | Description                                                     |\n| ----------------------------------------------- | --------------------------------------------------------------- |\n| [Nourished](https://modrinth.com/mod/nourished) | Nutrition framework for NeoForge 1.21.1                         |\n| MariePerfTools                                  | Block entity culling and performance tooling _(in development)_ |\n\n---\n\n## For mod developers\n\nMariesLib exposes a stable public API if you want to integrate with it:\n\n```java\nfloat level = MarieAPI.getValueLevel(player, \"value_a\");\nMarieAPI.registerValue(definition);\nMarieAPI.registerCompatEntry(definition);\nMarieAPI.registerCustomEffect(thresholdEffect);\n```\n\nAPI elements are marked `@Stable`, `@Experimental`, or `@Internal` so you know exactly what\nyou can rely on.\n\n**What you don't have to build:**\n\n- Item classification without writing heuristics\n- Compat without hardcoding mod IDs\n- Player tracking without writing save/sync/decay logic\n- Datapack loaders without writing JSON parsers\n- Config presets without writing serialization\n- Module toggles without writing feature flags\n- Classification traces without writing debug tooling\n\nEvery Marie mod requires MariesLib as a **separate mod** on the classpath. There is no JarJar\nbundling. Declare `marieslib` as a required dependency and wire your runtime through\n`MarieLibContext` at bootstrap.\n\nAddons can register custom values, source classifications, effects, compat entries, and events\nthrough Java or KubeJS. Consuming mods can also ship datapack-only integrations without writing\nJava code.\n\n### Multi-mod registry\n\nMariesLib 2.0.0 introduces `MarieModRegistry` for multi-mod support. Multiple mods can register\nwith MariesLib simultaneously, each with their own context, feature flags, and config screens.\n\n### API stability\n\n`CompatDefinition` previously lived at `dev.maire.nourished.api.CompatDefinition` and has moved\nto `dev.marie.MariesLib.compat.CompatDefinition`. This break occurred during the beta period.\nFuture breaking changes will be accompanied by a deprecation shim and changelog notice.\n\n---\n\n## Datapack Support\n\nConsuming mods can drive MariesLib through datapacks with zero Java code where loaders are available:\n\n**Working now:**\n\n- **Source classification**: assign items to value keys under `data/\u003cnamespace\u003e/\u003cmodid\u003e/source_classifications/`\n- **Compat entries**: declare mod compatibility under `data/\u003cnamespace\u003e/\u003cmodid\u003e/compat/`\n- **Source families**: group related sources under `data/\u003cnamespace\u003e/\u003cmodid\u003e/source_families/`\n- **Module locks**: lock features server-side under `data/\u003cnamespace\u003e/\u003cmodid\u003e/module_locks/`\n\n**Schema defined, loaders still in progress:**\n\n- `values/`, `effects/`, `synergies/`, `source_synergies/`, `milestones/`, `tracking_profiles/`\n\nThe scanner writes tag recommendations directly — multi-value items with scores and dominant\nvalues, ready to paste into your mod's tag JSON files.\n\n---\n\n## KubeJS Support\n\nKubeJS scripting support for value registration, source classifications, synergies, milestones,\nand event hooks — no Java required.\n\n```js\nMarieAPI.registerValue({\n    id: 'custom_value',\n    displayName: 'Custom Value',\n    decayRate: 0.02\n})\n\nMarieEvents.onValueChanged(event =\u003e {\n    if (event.valueKey === 'custom_value' \u0026\u0026 event.level \u003c 0.25) {\n        event.player.tell('Your custom value is low!')\n    }\n})\n```\n\n---\n\n## Current Focus\n\n- Completing remaining datapack loaders\n- Expanding network sync infrastructure\n- More diagnostic and validation tooling\n- Broader third-party integration support\n\n---\n\n## Requirements\n\n|               |            |\n| ------------- | ---------- |\n| **Minecraft** | **1.21.1** |\n| **NeoForge**  | **21.1.x** |\n| **Java**      | **21**     |\n\n---\n\n## License\n\nLGPL-3.0-only\n\n---\n\n## Links\n\n- [Modrinth](https://modrinth.com/mod/marieslib)\n- [GitHub](https://github.com/kgbcupcake)\n- [API.md](API.md)\n- [ARCHITECTURE.md](ARCHITECTURE.md)\n- [PHILOSOPHY.md](PHILOSOPHY.md)\n- [RoadMap.md](RoadMap.md)\n- [Changelog](CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgbcupcake%2Fmarielib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkgbcupcake%2Fmarielib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgbcupcake%2Fmarielib/lists"}