# qiuhaitanghong/wizardry architecture

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

- Interactive diagram: https://gitdiagram.com/qiuhaitanghong/wizardry
- Repository: https://github.com/qiuhaitanghong/wizardry

## Overview

Electroblob’s Wizardry is a NeoForge Minecraft magic mod. Its main interaction path is player spell selection through client controls, a server-bound payload, and server-side handling; the broader spell API supplies casting behavior. Other major product branches include registered magic items, the Arcane Workbench, client resource data, the handbook, and custom particles. The README reports item registration, block rendering, handbook migration, and partial particle effects. Some subsystems are represented from the tree and README rather than sampled implementation, so their internal links are omitted where evidence is unavailable.

Main entry points: [`src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java`](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java) (Client data manager), [`src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java`](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java) (Server payload handler), [`src/main/java/top/begonia/wizardry/client/event/ClientEvents.java`](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/event/ClientEvents.java) (Client registration), [`src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java`](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java) (Particle manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gameplay["Magic gameplay"]
  node_server_payload["Server payload handler"]
  node_spell_item_api["Casting item API"]
  node_spell_engine["Spell behavior<br/>[AbstractSpell.java]"]
  node_player_spell_data["Player spell data"]
end

subgraph group_content["Game content"]
  node_items["Magic items<br/>[WizardryItems.java]"]
  node_workbench_menu["Workbench menu"]
end

subgraph group_client["Client experience"]
  node_controls["Spell controls"]
  node_workbench_screen["Workbench screen"]
  node_client_events["Client registration<br/>[ClientEvents.java]"]
  node_handbook["Wizard handbook<br/>[HandbookData.java]"]
end

subgraph group_data["Resource data"]
  node_data_manager["Data loading"]
  node_client_data["Client data manager"]
  node_parser_event["Parser registration"]
end

subgraph group_effects["Particles and rendering"]
  node_particle_manager["Particle manager"]
  node_composite_particle["Composite particles"]
end

node_player(("Player"))
node_game(("Minecraft runtime"))

node_player -->|"selects spell"| node_controls
node_controls -->|"sends selection"| node_server_payload
node_server_payload -->|"handles casting"| node_spell_item_api
node_spell_item_api -.->|"casts spells"| node_spell_engine
node_player -.->|"uses workbench"| node_workbench_screen
node_client_events -->|"registers screen"| node_workbench_screen
node_server_payload -->|"handles menu requests"| node_workbench_menu
node_client_events -->|"uses client data"| node_client_data
node_client_data -->|"extends loader"| node_data_manager
node_client_data -->|"posts registration"| node_parser_event
node_particle_manager -->|"creates particles"| node_composite_particle
node_particle_manager -->|"reads sprite data"| node_client_data
node_composite_particle -->|"adds to engine"| node_game
node_player_spell_data -.->|"spell state"| node_spell_engine
node_items -.->|"registers content"| node_game
node_handbook -.->|"loaded as client data"| node_client_data

click node_controls "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/handle/WizardryControlHandler.java"
click node_server_payload "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java"
click node_spell_item_api "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/item/ISpellCastingItem.java"
click node_spell_engine "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/spell/AbstractSpell.java"
click node_player_spell_data "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/data/player/WizardPlayerData.java"
click node_items "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/registry/WizardryItems.java"
click node_workbench_menu "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/inventory/menu/ArcaneWorkbenchMenu.java"
click node_workbench_screen "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/gui/ArcaneWorkbenchScreen.java"
click node_client_events "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/event/ClientEvents.java"
click node_handbook "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/data/definition/handbook/HandbookData.java"
click node_data_manager "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/data/AbstractWizardryDataManager.java"
click node_client_data "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java"
click node_parser_event "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/event/data/RegisterDataParserEvent.java"
click node_particle_manager "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java"
click node_composite_particle "https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/particle/CompositeParticle.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_server_payload,node_spell_item_api,node_spell_engine,node_player_spell_data toneBlue
class node_items,node_workbench_menu toneAmber
class node_controls,node_workbench_screen,node_client_events,node_handbook toneMint
class node_data_manager,node_client_data,node_parser_event toneRose
class node_particle_manager,node_composite_particle,node_player,node_game toneIndigo
```

## Components

### Magic gameplay

- [Server payload handler](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java): `src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java`
- [Casting item API](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/item/ISpellCastingItem.java): `src/main/java/top/begonia/wizardry/api/item/ISpellCastingItem.java`
- [Spell behavior](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/spell/AbstractSpell.java): `src/main/java/top/begonia/wizardry/core/spell/AbstractSpell.java`
- [Player spell data](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/data/player/WizardPlayerData.java): `src/main/java/top/begonia/wizardry/core/data/player/WizardPlayerData.java`

### Game content

- [Magic items](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/registry/WizardryItems.java): `src/main/java/top/begonia/wizardry/core/registry/WizardryItems.java`
- [Workbench menu](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/core/inventory/menu/ArcaneWorkbenchMenu.java): `src/main/java/top/begonia/wizardry/core/inventory/menu/ArcaneWorkbenchMenu.java`

### Client experience

- [Spell controls](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/handle/WizardryControlHandler.java): `src/main/java/top/begonia/wizardry/client/handle/WizardryControlHandler.java`
- [Workbench screen](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/gui/ArcaneWorkbenchScreen.java): `src/main/java/top/begonia/wizardry/client/gui/ArcaneWorkbenchScreen.java`
- [Client registration](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/event/ClientEvents.java): `src/main/java/top/begonia/wizardry/client/event/ClientEvents.java`
- [Wizard handbook](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/data/definition/handbook/HandbookData.java): `src/main/java/top/begonia/wizardry/client/data/definition/handbook/HandbookData.java`

### Resource data

- [Data loading](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/data/AbstractWizardryDataManager.java): `src/main/java/top/begonia/wizardry/api/data/AbstractWizardryDataManager.java`
- [Client data manager](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java): `src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java`
- [Parser registration](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/event/data/RegisterDataParserEvent.java): `src/main/java/top/begonia/wizardry/api/event/data/RegisterDataParserEvent.java`

### Particles and rendering

- [Particle manager](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java): `src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java`
- [Composite particles](https://github.com/qiuhaitanghong/wizardry/blob/master/src/main/java/top/begonia/wizardry/api/particle/CompositeParticle.java): `src/main/java/top/begonia/wizardry/api/particle/CompositeParticle.java`

### Other components

- **Player**
- **Minecraft runtime**

## Connections

- Player → Spell controls: selects spell (evidence: `src/main/java/top/begonia/wizardry/client/handle/WizardryControlHandler.java`)
- Spell controls → Server payload handler: sends selection (evidence: `src/main/java/top/begonia/wizardry/client/handle/WizardryControlHandler.java`)
- Server payload handler → Casting item API: handles casting (evidence: `src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java`)
- Casting item API → Spell behavior: casts spells (evidence: `src/main/java/top/begonia/wizardry/api/item/ISpellCastingItem.java`)
- Player → Workbench screen: uses workbench
- Client registration → Workbench screen: registers screen (evidence: `src/main/java/top/begonia/wizardry/client/event/ClientEvents.java`)
- Server payload handler → Workbench menu: handles menu requests (evidence: `src/main/java/top/begonia/wizardry/core/network/ServerPayloadHandler.java`)
- Client registration → Client data manager: uses client data (evidence: `src/main/java/top/begonia/wizardry/client/event/ClientEvents.java`)
- Client data manager → Data loading: extends loader (evidence: `src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java`)
- Client data manager → Parser registration: posts registration (evidence: `src/main/java/top/begonia/wizardry/client/data/manager/WizardryClientDataManager.java`)
- Particle manager → Composite particles: creates particles (evidence: `src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java`)
- Particle manager → Client data manager: reads sprite data (evidence: `src/main/java/top/begonia/wizardry/api/particle/manager/WizardryParticleManager.java`)
- Composite particles → Minecraft runtime: adds to engine (evidence: `src/main/java/top/begonia/wizardry/api/particle/CompositeParticle.java`)
- Player spell data → Spell behavior: spell state
- Magic items → Minecraft runtime: registers content
- Wizard handbook → Client data manager: loaded as client data
