# qwaecd/paramagic architecture

> Architecture diagram of the GitHub repository qwaecd/paramagic, 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/qwaecd/paramagic
- Repository: https://github.com/qwaecd/paramagic

## Overview

Paramagic is a Minecraft magic mod and rendering framework. Its documented player-facing flow is spell or wand interaction, server-side spell execution and session management, synchronization to client presentations, then rendering of magic circles and GPU particle effects. The repository also includes data-driven Para assets and keyframe animation, a custom UI framework, and post-processing such as bloom. The README documents these capabilities; several runtime links below reflect that documentation and directory structure rather than inspected implementation details.

Main entry points: [`common/src/main/java/com/qwaecd/paramagic/spell`](https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/spell) (Spell Execution), [`common/src/main/java/com/qwaecd/paramagic/core/render/ModRenderSystem.java`](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/ModRenderSystem.java) (Render System), [`common/src/main/java/com/qwaecd/paramagic/feature/circle/MagicCircleManager.java`](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/feature/circle/MagicCircleManager.java) (Magic Circles), [`common/src/main/java/com/qwaecd/paramagic/core/particle/ParticleSystem.java`](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/particle/ParticleSystem.java) (GPU Particles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Player Interaction"]
  node_wand_ui["Wand UI"]
  node_ui_manager["UI Manager<br/>[UIManager.java]"]
end

subgraph group_spells["Spell Runtime"]
  node_spell_network["Spell Networking<br/>[Networking.java]"]
  node_spell_handlers["Session Handlers"]
  node_server_sessions["Server Sessions"]
  node_spell_execution["Spell Execution"]
  node_mana["Mana Storage<br/>[ManaStorage.java]"]
  node_client_sessions["Client Sessions"]
end

subgraph group_effects["Effect Systems"]
  node_magic_circles["Magic Circles"]
  node_particle_api["Effect Requests"]
  node_server_effects["Server Effects"]
  node_client_effects["Client Effects"]
  node_particle_system["GPU Particles"]
  node_particle_memory["Particle GPU Memory"]
end

subgraph group_rendering["Rendering"]
  node_render_system["Render System"]
  node_shader_manager["Shader Manager<br/>[ShaderManager.java]"]
  node_post_processing["Post Processing"]
  node_screen_effects["Screen Effects"]
end

subgraph group_assets["Data and Animation"]
  node_para_data["Para Data"]
  node_para_assembly["Para Assembly<br/>[ParaComposer.java]"]
  node_animation_data["Animation Data"]
  node_animation_runtime["Animation Runtime<br/>[Animator.java]"]
end

node_player(("Player"))

node_player -->|"interacts"| node_wand_ui
node_wand_ui -->|"dispatches input"| node_ui_manager
node_spell_network -->|"dispatches packets"| node_spell_handlers
node_spell_handlers -->|"attaches session"| node_server_sessions
node_server_sessions -->|"ticks runtime"| node_spell_execution
node_spell_execution -->|"uses mana"| node_mana
node_spell_execution -->|"creates effects"| node_server_effects
node_spell_execution -->|"drives circles"| node_magic_circles
node_server_effects -->|"syncs effects"| node_client_effects
node_client_sessions -->|"presents circles"| node_magic_circles
node_client_effects -->|"updates particles"| node_particle_system
node_particle_system -->|"manages buffers"| node_particle_memory
node_magic_circles -->|"submits renderables"| node_render_system
node_particle_system -->|"renders effects"| node_render_system
node_render_system -->|"loads shaders"| node_shader_manager
node_render_system -->|"runs post effects"| node_post_processing
node_post_processing -->|"processes screen"| node_screen_effects
node_para_data -->|"converts data"| node_para_assembly
node_animation_data -->|"drives animation"| node_animation_runtime
node_animation_runtime -->|"animates circles"| node_magic_circles

click node_wand_ui "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/ui_project/wand/content/inventory/InventoryInteractionController.java"
click node_ui_manager "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/ui/core/UIManager.java"
click node_spell_network "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/network/Networking.java"
click node_spell_handlers "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/network/handler/ServerSessionHandlers.java"
click node_server_sessions "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/server/ServerSessionManager.java"
click node_spell_execution "https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/spell"
click node_mana "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/mana/ManaStorage.java"
click node_client_sessions "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/client/ClientSessionManager.java"
click node_magic_circles "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/feature/circle/MagicCircleManager.java"
click node_particle_api "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/EffectSpawnBuilder.java"
click node_server_effects "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/server/ServerEffectManager.java"
click node_client_effects "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/client/ClientEffectRepository.java"
click node_particle_system "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/particle/ParticleSystem.java"
click node_particle_memory "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/particle/memory/ParticleMemoryManager.java"
click node_render_system "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/ModRenderSystem.java"
click node_shader_manager "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/shader/ShaderManager.java"
click node_post_processing "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/post/PostProcessingManager.java"
click node_screen_effects "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/post/ScreenSpaceEffectManager.java"
click node_para_data "https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/data/para"
click node_para_assembly "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/assembler/ParaComposer.java"
click node_animation_data "https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/data/animation"
click node_animation_runtime "https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/client/animation/Animator.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_wand_ui,node_ui_manager toneBlue
class node_spell_network,node_spell_handlers,node_server_sessions,node_spell_execution,node_mana,node_client_sessions toneAmber
class node_magic_circles,node_particle_api,node_server_effects,node_client_effects,node_particle_system,node_particle_memory toneMint
class node_render_system,node_shader_manager,node_post_processing,node_screen_effects toneRose
class node_para_data,node_para_assembly,node_animation_data,node_animation_runtime,node_player toneIndigo
```

## Components

### Player Interaction

- [Wand UI](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/ui_project/wand/content/inventory/InventoryInteractionController.java): `common/src/main/java/com/qwaecd/paramagic/ui_project/wand/content/inventory/InventoryInteractionController.java`
- [UI Manager](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/ui/core/UIManager.java): `common/src/main/java/com/qwaecd/paramagic/ui/core/UIManager.java`

### Spell Runtime

- [Spell Networking](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/network/Networking.java): `common/src/main/java/com/qwaecd/paramagic/network/Networking.java`
- [Session Handlers](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/network/handler/ServerSessionHandlers.java): `common/src/main/java/com/qwaecd/paramagic/network/handler/ServerSessionHandlers.java`
- [Server Sessions](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/server/ServerSessionManager.java): `common/src/main/java/com/qwaecd/paramagic/spell/server/ServerSessionManager.java`
- [Spell Execution](https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/spell): `common/src/main/java/com/qwaecd/paramagic/spell`
- [Mana Storage](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/mana/ManaStorage.java): `common/src/main/java/com/qwaecd/paramagic/spell/mana/ManaStorage.java`
- [Client Sessions](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/spell/client/ClientSessionManager.java): `common/src/main/java/com/qwaecd/paramagic/spell/client/ClientSessionManager.java`

### Effect Systems

- [Magic Circles](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/feature/circle/MagicCircleManager.java): `common/src/main/java/com/qwaecd/paramagic/feature/circle/MagicCircleManager.java`
- [Effect Requests](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/EffectSpawnBuilder.java): `common/src/main/java/com/qwaecd/paramagic/particle/EffectSpawnBuilder.java`
- [Server Effects](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/server/ServerEffectManager.java): `common/src/main/java/com/qwaecd/paramagic/particle/server/ServerEffectManager.java`
- [Client Effects](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/particle/client/ClientEffectRepository.java): `common/src/main/java/com/qwaecd/paramagic/particle/client/ClientEffectRepository.java`
- [GPU Particles](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/particle/ParticleSystem.java): `common/src/main/java/com/qwaecd/paramagic/core/particle/ParticleSystem.java`
- [Particle GPU Memory](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/particle/memory/ParticleMemoryManager.java): `common/src/main/java/com/qwaecd/paramagic/core/particle/memory/ParticleMemoryManager.java`

### Rendering

- [Render System](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/ModRenderSystem.java): `common/src/main/java/com/qwaecd/paramagic/core/render/ModRenderSystem.java`
- [Shader Manager](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/shader/ShaderManager.java): `common/src/main/java/com/qwaecd/paramagic/core/render/shader/ShaderManager.java`
- [Post Processing](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/post/PostProcessingManager.java): `common/src/main/java/com/qwaecd/paramagic/core/render/post/PostProcessingManager.java`
- [Screen Effects](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/core/render/post/ScreenSpaceEffectManager.java): `common/src/main/java/com/qwaecd/paramagic/core/render/post/ScreenSpaceEffectManager.java`

### Data and Animation

- [Para Data](https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/data/para): `common/src/main/java/com/qwaecd/paramagic/data/para`
- [Para Assembly](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/assembler/ParaComposer.java): `common/src/main/java/com/qwaecd/paramagic/assembler/ParaComposer.java`
- [Animation Data](https://github.com/qwaecd/paramagic/tree/main/common/src/main/java/com/qwaecd/paramagic/data/animation): `common/src/main/java/com/qwaecd/paramagic/data/animation`
- [Animation Runtime](https://github.com/qwaecd/paramagic/blob/main/common/src/main/java/com/qwaecd/paramagic/client/animation/Animator.java): `common/src/main/java/com/qwaecd/paramagic/client/animation/Animator.java`

### Other components

- **Player**

## Connections

- Player → Wand UI: interacts
- Wand UI → UI Manager: dispatches input
- Spell Networking → Session Handlers: dispatches packets
- Session Handlers → Server Sessions: attaches session
- Server Sessions → Spell Execution: ticks runtime
- Spell Execution → Mana Storage: uses mana
- Spell Execution → Server Effects: creates effects
- Spell Execution → Magic Circles: drives circles
- Server Effects → Client Effects: syncs effects
- Client Sessions → Magic Circles: presents circles
- Client Effects → GPU Particles: updates particles
- GPU Particles → Particle GPU Memory: manages buffers
- Magic Circles → Render System: submits renderables
- GPU Particles → Render System: renders effects
- Render System → Shader Manager: loads shaders
- Render System → Post Processing: runs post effects
- Post Processing → Screen Effects: processes screen
- Para Data → Para Assembly: converts data
- Animation Data → Animation Runtime: drives animation
- Animation Runtime → Magic Circles: animates circles
