# yufiriamazenta/craftorithm architecture

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

- Interactive diagram: https://gitdiagram.com/yufiriamazenta/craftorithm
- Repository: https://github.com/yufiriamazenta/craftorithm

## Overview

Craftorithm is a Minecraft recipe-management plugin. Players and administrators create, edit, discover, disable, and browse recipes through commands and GUI menus; recipe configurations are parsed and registered into the server’s crafting systems, where listeners handle crafting and result customization. Other documented capabilities include custom items and fuels, triggers/scripts, custom menus, and integrations with item plugins. The map follows the tree and supplied excerpts; several feature connections are documented but their implementation wiring was not sampled.

Main entry points: [`core/src/main/java/pers/yufiria/craftorithm/recipe/listener/CraftingListener.java`](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/listener/CraftingListener.java) (Crafting listeners), [`core/src/main/java/pers/yufiria/craftorithm/recipe/RecipeManager.java`](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/RecipeManager.java) (Recipe manager), [`core/src/main/java/pers/yufiria/craftorithm/Craftorithm.java`](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/Craftorithm.java) (Plugin lifecycle), [`core/src/main/java/pers/yufiria/craftorithm/command/MainCommand.java`](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/command/MainCommand.java) (Commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_recipe["Recipe runtime"]
  node_manager["Recipe manager<br/>[RecipeManager.java]"]
  node_parser["Recipe parsers<br/>[RecipeParser.java]"]
  node_registry["Recipe registry"]
  node_register["Recipe registration"]
  node_listeners["Crafting listeners"]
end

subgraph group_interface["Commands and menus"]
  node_commands["Commands<br/>[MainCommand.java]"]
  node_editor["Recipe editor"]
  node_creator["Recipe creator<br/>[RecipeCreator.java]"]
  node_display["Recipe display"]
  node_book["Recipe book"]
  node_custommenu["Custom menus"]
end

subgraph group_customization["Items and results"]
  node_processors["Result processors"]
  node_items["Item manager<br/>[ItemManager.java]"]
  node_itemhooks["Item integrations"]
end

subgraph group_automation["Triggers and scripts"]
  node_triggers["Trigger manager"]
  node_scripts["Script context"]
end

subgraph group_state["Configuration and state"]
  node_plugin["Plugin lifecycle<br/>[Craftorithm.java]"]
  node_database[("Discovery database")]
  node_discovery["Discovery DAO"]
end

node_operator(("Player / admin"))
node_server(("Minecraft server"))
node_provider["External item provider"]

node_operator -->|"runs commands"| node_commands
node_commands -->|"opens editor"| node_editor
node_editor -->|"creates recipes"| node_creator
node_operator -->|"browses recipes"| node_book
node_operator -->|"views recipe"| node_display
node_operator -->|"opens menu"| node_custommenu
node_creator -->|"submits recipe"| node_manager
node_manager -->|"parses config"| node_parser
node_manager -->|"registers recipe"| node_register
node_register -->|"updates registry"| node_registry
node_server -->|"crafting events"| node_listeners
node_listeners -->|"checks recipes"| node_registry
node_listeners -->|"processes results"| node_processors
node_listeners -->|"matches items"| node_items
node_plugin -->|"loads recipes"| node_manager
node_plugin -.->|"initializes hooks"| node_itemhooks
node_itemhooks -.->|"registers providers"| node_items
node_items -.->|"resolves item IDs"| node_provider
node_server -->|"trigger events"| node_triggers
node_triggers -->|"evaluates scripts"| node_scripts
node_commands -->|"updates discovery"| node_discovery
node_discovery -->|"reads and writes"| node_database
node_plugin -->|"opens connection"| node_database

click node_plugin "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/Craftorithm.java"
click node_commands "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/command/MainCommand.java"
click node_editor "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/editor/RecipeEditorManager.java"
click node_creator "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/creator/RecipeCreator.java"
click node_display "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/display/RecipeDisplayManager.java"
click node_book "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/recipebook/RecipeListMenu.java"
click node_custommenu "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/custom/CustomMenuManager.java"
click node_manager "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/RecipeManager.java"
click node_parser "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/parser/RecipeParser.java"
click node_registry "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/CraftorithmRecipeRegistry.java"
click node_register "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/register/RecipeRegister.java"
click node_listeners "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/listener/CraftingListener.java"
click node_processors "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/resultprocessor/ResultProcessorManager.java"
click node_items "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/item/ItemManager.java"
click node_itemhooks "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/hook/item/ItemPluginHookManager.java"
click node_provider "https://github.com/yufiriamazenta/craftorithm/blob/master/hook/src/main/java/pers/yufiria/craftorithm/hook/item/CraftEngineItemProvider.java"
click node_triggers "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/trigger/TriggerManager.java"
click node_scripts "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/script/RootScriptContext.java"
click node_database "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/database/DataSourceManager.java"
click node_discovery "https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/database/dao/DiscoveredRecipeDao.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_manager,node_parser,node_registry,node_register,node_listeners toneBlue
class node_commands,node_editor,node_creator,node_display,node_book,node_custommenu toneAmber
class node_processors,node_items,node_itemhooks,node_server toneMint
class node_triggers,node_scripts toneRose
class node_plugin,node_database,node_discovery,node_operator,node_provider toneIndigo
```

## Components

### Recipe runtime

- [Recipe manager](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/RecipeManager.java): `core/src/main/java/pers/yufiria/craftorithm/recipe/RecipeManager.java`
- [Recipe parsers](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/parser/RecipeParser.java): `core/src/main/java/pers/yufiria/craftorithm/recipe/parser/RecipeParser.java`
- [Recipe registry](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/CraftorithmRecipeRegistry.java): `core/src/main/java/pers/yufiria/craftorithm/recipe/CraftorithmRecipeRegistry.java`
- [Recipe registration](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/register/RecipeRegister.java): `core/src/main/java/pers/yufiria/craftorithm/recipe/register/RecipeRegister.java`
- [Crafting listeners](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/recipe/listener/CraftingListener.java): `core/src/main/java/pers/yufiria/craftorithm/recipe/listener/CraftingListener.java`

### Commands and menus

- [Commands](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/command/MainCommand.java): `core/src/main/java/pers/yufiria/craftorithm/command/MainCommand.java`
- [Recipe editor](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/editor/RecipeEditorManager.java): `core/src/main/java/pers/yufiria/craftorithm/ui/editor/RecipeEditorManager.java`
- [Recipe creator](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/creator/RecipeCreator.java): `core/src/main/java/pers/yufiria/craftorithm/ui/creator/RecipeCreator.java`
- [Recipe display](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/display/RecipeDisplayManager.java): `core/src/main/java/pers/yufiria/craftorithm/ui/display/RecipeDisplayManager.java`
- [Recipe book](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/recipebook/RecipeListMenu.java): `core/src/main/java/pers/yufiria/craftorithm/ui/recipebook/RecipeListMenu.java`
- [Custom menus](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/ui/custom/CustomMenuManager.java): `core/src/main/java/pers/yufiria/craftorithm/ui/custom/CustomMenuManager.java`

### Items and results

- [Result processors](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/resultprocessor/ResultProcessorManager.java): `core/src/main/java/pers/yufiria/craftorithm/resultprocessor/ResultProcessorManager.java`
- [Item manager](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/item/ItemManager.java): `core/src/main/java/pers/yufiria/craftorithm/item/ItemManager.java`
- [Item integrations](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/hook/item/ItemPluginHookManager.java): `core/src/main/java/pers/yufiria/craftorithm/hook/item/ItemPluginHookManager.java`

### Triggers and scripts

- [Trigger manager](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/trigger/TriggerManager.java): `core/src/main/java/pers/yufiria/craftorithm/trigger/TriggerManager.java`
- [Script context](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/script/RootScriptContext.java): `core/src/main/java/pers/yufiria/craftorithm/script/RootScriptContext.java`

### Configuration and state

- [Plugin lifecycle](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/Craftorithm.java): `core/src/main/java/pers/yufiria/craftorithm/Craftorithm.java`
- [Discovery database](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/database/DataSourceManager.java): `core/src/main/java/pers/yufiria/craftorithm/database/DataSourceManager.java`
- [Discovery DAO](https://github.com/yufiriamazenta/craftorithm/blob/master/core/src/main/java/pers/yufiria/craftorithm/database/dao/DiscoveredRecipeDao.java): `core/src/main/java/pers/yufiria/craftorithm/database/dao/DiscoveredRecipeDao.java`

### Other components

- **Player / admin**
- **Minecraft server**
- [External item provider](https://github.com/yufiriamazenta/craftorithm/blob/master/hook/src/main/java/pers/yufiria/craftorithm/hook/item/CraftEngineItemProvider.java): `hook/src/main/java/pers/yufiria/craftorithm/hook/item/CraftEngineItemProvider.java`

## Connections

- Player / admin → Commands: runs commands
- Commands → Recipe editor: opens editor
- Recipe editor → Recipe creator: creates recipes
- Player / admin → Recipe book: browses recipes
- Player / admin → Recipe display: views recipe
- Player / admin → Custom menus: opens menu
- Recipe creator → Recipe manager: submits recipe
- Recipe manager → Recipe parsers: parses config
- Recipe manager → Recipe registration: registers recipe
- Recipe registration → Recipe registry: updates registry
- Minecraft server → Crafting listeners: crafting events
- Crafting listeners → Recipe registry: checks recipes
- Crafting listeners → Result processors: processes results
- Crafting listeners → Item manager: matches items
- Plugin lifecycle → Recipe manager: loads recipes
- Plugin lifecycle → Item integrations: initializes hooks
- Item integrations → Item manager: registers providers
- Item manager → External item provider: resolves item IDs
- Minecraft server → Trigger manager: trigger events
- Trigger manager → Script context: evaluates scripts
- Commands → Discovery DAO: updates discovery
- Discovery DAO → Discovery database: reads and writes
- Plugin lifecycle → Discovery database: opens connection
