# dosyakitarov/nomadsdelight architecture

> Architecture diagram of the GitHub repository dosyakitarov/nomadsdelight, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dosyakitarov/nomadsdelight
- Repository: https://github.com/dosyakitarov/nomadsdelight

## Overview

#### Purpose and Runtime

Nomad’s Delight is a Java/Gradle NeoForge Minecraft mod and Farmer’s Delight addon. It adds Central-Asian-inspired food, recipes, advancements, and two functional dairy/storage blocks. It runs inside the Minecraft/NeoForge mod lifecycle; Farmer’s Delight is a required gameplay dependency, while JEI is integrated for custom recipe display.

Key entry/build paths: `build.gradle`, `src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java`, `src/main/templates/META-INF/neoforge.mods.toml`.

#### Mod Bootstrap and Registration

`Nomads_delight.java` is the lifecycle entry point. It connects mod initialization, deferred content registration, and likely data-generation event handling to NeoForge. Registry classes form the boundary between stable Minecraft IDs and implementation/content definitions:

- `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightInteractions.java`

Gameplay code should consume these registries rather than construct items or blocks directly.

#### Core Interactive Mechanics

The Curd Bag and Churn are the principal custom mechanics. Their block states, models, interaction logic, and JEI representations coordinate player interactions and visible processing state. Utility base classes support specialized block placement/shape behavior.

- `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/util/CeilingHangingBlock.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/util/TallBlock.java`

Generated state/model outputs include `src/generated/resources/assets/nomads_delight/blockstates/butter_churn.json` and `src/generated/resources/assets/nomads_delight/blockstates/curd_bag.json`.

#### Content and Gameplay Data Flow

Registrations expose foods, ingredients, tools, buckets, and blocks. Minecraft loads generated JSON data to define crafting, cutting, cooking-pot recipes, furnace/smoker transformations, loot injection, and advancement triggers. The main content pipeline is:

items/blocks → recipes and loot rules → player crafting/combat/processing → advancements and localization.

Representative boundaries:

- Recipes: `src/generated/resources/data/nomads_delight/recipe/`
- Farmer’s Delight cooking recipes: `src/generated/resources/data/nomads_delight/recipe/cooking/`
- Horse loot injection: `src/generated/resources/data/nomads_delight/loot_modifiers/`
- Advancement progression: `src/generated/resources/data/nomads_delight/advancement/`

NeoForge global loot modifiers register the injected horse drops through `src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json`.

#### Data Generation

The repository commits generated resource outputs and has Java providers as the source-of-truth generation layer. Providers produce recipes, loot tables/modifiers, advancements, item/block models, and EN/RU language resources; generated output is consumed at runtime as Minecraft datapack/resource-pack content.

- `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightRecipeProvider.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightLootTableProvider.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightAdvancementProvider.java`

Generated assets are rooted at `src/generated/resources/assets/nomads_delight/` and generated datapack data at `src/generated/resources/data/nomads_delight/`.

#### JEI Integration Boundary

JEI integration models Churning and Straining as displayable recipes/categories, decoupled from vanilla JSON recipe schemas. The plugin is the external-mod boundary and should remain isolated so core gameplay remains functional without relying on recipe-browser UI behavior.

- `src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/NomadsDelightJEIPlugin.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java`
- `src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/StrainingRecipeCategory.java`

#### Resource and Localization Layers

Hand-authored resources supply base models, textures, and four language targets; generated resources extend them with item/block model and generated language content. Maintain namespace consistency as `nomads_delight` across code registrations and data paths.

- `src/main/resources/assets/nomads_delight/`
- `src/main/resources/data/nomads_delight/food_properties/food_properties.json`
- `src/main/resources/assets/nomads_delight/lang/kk_kz.json`

Main entry points: [`src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java`](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java) (Mod bootstrap), [`src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java`](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java) (Block registry), [`src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java`](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java) (Churning and straining UI), [`src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java`](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java) (Item registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bootstrap["Mod Runtime"]
  node_build["Gradle build<br/>[build.gradle]"]
  node_mod_metadata["NeoForge metadata<br/>mod descriptor<br/>[neoforge.mods.toml]"]
  node_bootstrap_entry{{"Mod bootstrap<br/>NeoForge entry point"}}
end

subgraph group_content["Gameplay Content"]
  node_item_registry["Item registry<br/>deferred registry"]
  node_block_registry["Block registry<br/>deferred registry"]
  node_interaction_registry["Interaction registry<br/>gameplay registration"]
  node_block_utilities["Block placement utilities<br/>block base classes"]
  node_generated_block_states["Churn and bag states<br/>generated blockstates<br/>[butter_churn.json]"]
end

subgraph group_generation["Data Pipeline"]
  node_recipe_provider["Recipe provider<br/>data provider"]
  node_loot_provider["Loot provider<br/>data provider"]
  node_advancement_provider["Advancement provider<br/>data provider"]
  node_generated_recipes["Gameplay recipes<br/>generated datapack data"]
  node_loot_modifiers["Horse loot injection<br/>generated loot modifiers"]
  node_global_loot_registration["Global loot modifier index<br/>NeoForge datapack registry"]
  node_advancements["Progression advancements<br/>generated datapack data"]
  node_runtime_resources["Assets and localization<br/>resource-pack content"]
end

subgraph group_integration["External Integration"]
  node_jei_plugin{{"JEI plugin<br/>recipe-browser boundary"}}
  node_jei_categories["Churning and straining UI<br/>JEI recipe categories"]
end

node_build -->|"builds"| node_bootstrap_entry
node_mod_metadata -->|"declares"| node_bootstrap_entry
node_bootstrap_entry -->|"initializes"| node_item_registry
node_bootstrap_entry -->|"initializes"| node_block_registry
node_bootstrap_entry -->|"initializes"| node_interaction_registry
node_bootstrap_entry -.->|"runs data generation"| node_recipe_provider
node_bootstrap_entry -.->|"runs data generation"| node_loot_provider
node_bootstrap_entry -.->|"runs data generation"| node_advancement_provider
node_block_registry -->|"uses"| node_block_utilities
node_block_registry -->|"drives visual states"| node_generated_block_states
node_item_registry -->|"recipe inputs and outputs"| node_generated_recipes
node_block_registry -->|"recipe inputs and outputs"| node_generated_recipes
node_recipe_provider -->|"generates"| node_generated_recipes
node_loot_provider -->|"generates"| node_loot_modifiers
node_loot_modifiers -->|"registered by"| node_global_loot_registration
node_advancement_provider -->|"generates"| node_advancements
node_generated_recipes -->|"processing unlocks"| node_advancements
node_generated_recipes -.->|"uses item and block assets"| node_runtime_resources
node_jei_plugin -->|"registers"| node_jei_categories
node_jei_categories -.->|"displays mechanics for"| node_block_registry
node_jei_categories -.->|"displays ingredients and outputs"| node_item_registry

click node_build "https://github.com/dosyakitarov/nomadsdelight/blob/master/build.gradle"
click node_mod_metadata "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/templates/META-INF/neoforge.mods.toml"
click node_bootstrap_entry "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java"
click node_item_registry "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java"
click node_block_registry "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java"
click node_interaction_registry "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightInteractions.java"
click node_block_utilities "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/util/CeilingHangingBlock.java"
click node_generated_block_states "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/generated/resources/assets/nomads_delight/blockstates/butter_churn.json"
click node_recipe_provider "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightRecipeProvider.java"
click node_loot_provider "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightLootTableProvider.java"
click node_advancement_provider "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightAdvancementProvider.java"
click node_global_loot_registration "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json"
click node_jei_plugin "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/NomadsDelightJEIPlugin.java"
click node_jei_categories "https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_build,node_mod_metadata,node_bootstrap_entry toneBlue
class node_item_registry,node_block_registry,node_interaction_registry,node_block_utilities,node_generated_block_states toneAmber
class node_recipe_provider,node_loot_provider,node_advancement_provider,node_generated_recipes,node_loot_modifiers,node_global_loot_registration,node_advancements,node_runtime_resources toneMint
class node_jei_plugin,node_jei_categories toneRose
```

## Components

### Mod Runtime

- [Gradle build](https://github.com/dosyakitarov/nomadsdelight/blob/master/build.gradle): build · `build.gradle`
- [NeoForge metadata](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/templates/META-INF/neoforge.mods.toml): mod descriptor · `src/main/templates/META-INF/neoforge.mods.toml`
- [Mod bootstrap](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java): NeoForge entry point · Wires lifecycle, registries, and data generation. · `src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java`

### Gameplay Content

- [Item registry](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java): deferred registry · Foods, ingredients, tools, and buckets. · `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java`
- [Block registry](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java): deferred registry · Registers Curd Bag and Churn blocks. · `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java`
- [Interaction registry](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightInteractions.java): gameplay registration · `src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightInteractions.java`
- [Block placement utilities](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/util/CeilingHangingBlock.java): block base classes · Shared hanging and tall-block placement/shape behavior. · `src/main/java/kz/dosyakitarov/nomads_delight/util/CeilingHangingBlock.java`
- [Churn and bag states](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/generated/resources/assets/nomads_delight/blockstates/butter_churn.json): generated blockstates · Visible processing-state models. · `src/generated/resources/assets/nomads_delight/blockstates/butter_churn.json`

### Data Pipeline

- [Recipe provider](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightRecipeProvider.java): data provider · `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightRecipeProvider.java`
- [Loot provider](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightLootTableProvider.java): data provider · `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightLootTableProvider.java`
- [Advancement provider](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightAdvancementProvider.java): data provider · `src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightAdvancementProvider.java`
- **Gameplay recipes**: generated datapack data · Crafting, cutting, cooking-pot, and furnace/smoker recipes.
- **Horse loot injection**: generated loot modifiers
- [Global loot modifier index](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json): NeoForge datapack registry · `src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json`
- **Progression advancements**: generated datapack data
- **Assets and localization**: resource-pack content · Hand-authored base models, textures, and language resources.

### External Integration

- [JEI plugin](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/NomadsDelightJEIPlugin.java): recipe-browser boundary · Keeps custom mechanic displays separate from core gameplay. · `src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/NomadsDelightJEIPlugin.java`
- [Churning and straining UI](https://github.com/dosyakitarov/nomadsdelight/blob/master/src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java): JEI recipe categories · `src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java`

## Connections

- Gradle build → Mod bootstrap: builds
- NeoForge metadata → Mod bootstrap: declares
- Mod bootstrap → Item registry: initializes
- Mod bootstrap → Block registry: initializes
- Mod bootstrap → Interaction registry: initializes
- Mod bootstrap → Recipe provider: runs data generation
- Mod bootstrap → Loot provider: runs data generation
- Mod bootstrap → Advancement provider: runs data generation
- Block registry → Block placement utilities: uses
- Block registry → Churn and bag states: drives visual states
- Item registry → Gameplay recipes: recipe inputs and outputs
- Block registry → Gameplay recipes: recipe inputs and outputs
- Recipe provider → Gameplay recipes: generates
- Loot provider → Horse loot injection: generates
- Horse loot injection → Global loot modifier index: registered by
- Advancement provider → Progression advancements: generates
- Gameplay recipes → Progression advancements: processing unlocks
- Gameplay recipes → Assets and localization: uses item and block assets
- JEI plugin → Churning and straining UI: registers
- Churning and straining UI → Block registry: displays mechanics for
- Churning and straining UI → Item registry: displays ingredients and outputs
