How dosyakitarov/nomadsdelight works
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: Nomads_delight.java Mod bootstrap · NomadsDelightBlocks.java Block registry · ChurningRecipeCategory.java Churning and straining UI · NomadsDelightItems.java Item registry
Components 18
Mod Runtime
- Gradle build
build.gradle - NeoForge metadata
src/main/templates/META-INF/neoforge.mods.toml - Mod bootstrap · Wires lifecycle, registries, and data generation.
src/main/java/kz/dosyakitarov/nomads_delight/Nomads_delight.java
Gameplay Content
- Item registry · Foods, ingredients, tools, and buckets.
src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightItems.java - Block registry · Registers Curd Bag and Churn blocks.
src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightBlocks.java - Interaction registry
src/main/java/kz/dosyakitarov/nomads_delight/registry/NomadsDelightInteractions.java - Block placement utilities · Shared hanging and tall-block placement/shape behavior.
src/main/java/kz/dosyakitarov/nomads_delight/util/CeilingHangingBlock.java - Churn and bag states · Visible processing-state models.
src/generated/resources/assets/nomads_delight/blockstates/butter_churn.json
Data Pipeline
- Recipe provider
src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightRecipeProvider.java - Loot provider
src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightLootTableProvider.java - Advancement provider
src/main/java/kz/dosyakitarov/nomads_delight/data/NomadsDelightAdvancementProvider.java - Gameplay recipes · Crafting, cutting, cooking-pot, and furnace/smoker recipes.
- Horse loot injection
- Global loot modifier index
src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json - Progression advancements
- Assets and localization · Hand-authored base models, textures, and language resources.
External Integration
- JEI plugin · Keeps custom mechanic displays separate from core gameplay.
src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/NomadsDelightJEIPlugin.java - Churning and straining UI
src/main/java/kz/dosyakitarov/nomads_delight/integration/jei/ChurningRecipeCategory.java
Connections 21
- 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