# disezmike/wynnstats architecture

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

- Interactive diagram: https://gitdiagram.com/disezmike/wynnstats
- Repository: https://github.com/disezmike/wynnstats

## Overview

Wynnstats is a client-side Fabric mod that exports the player’s equipped Wynncraft gear and parsed stats as JSON. The main workflow starts with the `/wynnstats` client command: it selects gear slots, parses item lore using cached reference data, builds character data, writes the export, and reports success or failure in chat. The cache can load locally or download reference gear data. The README also names ability-tree and advanced-stat exports as planned, not implemented. Relationships reflect the sampled command, parser, cache, and model code; unsampled wiring is omitted.

Main entry points: [`src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`](https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java) (Export command), [`src/main/java/com/disezmike/wynnstats/util/ItemCache.java`](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/ItemCache.java) (Item reference cache), [`src/main/java/com/disezmike/wynnstats/util/LoreParser.java`](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/LoreParser.java) (Lore parser), [`src/main/java/com/disezmike/wynnstats/model/Message.java`](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/Message.java) (Feedback message)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Client entry"]
  node_client_init["Client initializer"]
  node_command["Export command"]
end

subgraph group_analysis["Gear analysis"]
  node_parser["Lore parser<br/>[LoreParser.java]"]
  node_stat_mapper["Stat mapper<br/>[StatMapper.java]"]
  node_stats["Parsed item stats"]
end

subgraph group_reference["Reference data"]
  node_mod_init["Mod initializer<br/>[Wynnstats.java]"]
  node_cache["Item reference cache<br/>[ItemCache.java]"]
  node_cache_store[("Local item cache")]
  node_item_data["Typed item data<br/>[ItemData.java]"]
end

subgraph group_export["Export and feedback"]
  node_character["Character export data<br/>[CharacterData.java]"]
  node_json_export["Pretty JSON export"]
  node_message["Feedback message<br/>[Message.java]"]
  node_message_type["Feedback type<br/>[MessageType.java]"]
  node_color["Chat colors<br/>[Color.java]"]
  node_feedback["Chat feedback"]
end

node_player(("Minecraft player"))
node_gear_api["Wynntils gear data"]

node_client_init -->|"registers"| node_command
node_mod_init -->|"initializes"| node_cache
node_player -.->|"invokes"| node_command
node_command -->|"parses lore"| node_parser
node_parser -->|"looks up item"| node_cache
node_parser -->|"maps stat names"| node_stat_mapper
node_parser -->|"creates stats"| node_stats
node_cache -->|"loads or saves"| node_cache_store
node_cache -->|"downloads"| node_gear_api
node_cache -->|"deserializes"| node_item_data
node_command -->|"adds parsed gear"| node_character
node_character -->|"writes JSON"| node_json_export
node_command -->|"builds feedback"| node_message
node_command -->|"selects status"| node_message_type
node_command -->|"sends feedback"| node_feedback
node_feedback -->|"renders"| node_message
node_message -->|"uses codes"| node_color

click node_client_init "https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/WynnstatsClient.java"
click node_command "https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java"
click node_mod_init "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/Wynnstats.java"
click node_parser "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/LoreParser.java"
click node_stat_mapper "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/StatMapper.java"
click node_stats "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/ItemStatsAnalysis.java"
click node_cache "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/ItemCache.java"
click node_item_data "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/ItemData.java"
click node_character "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/CharacterData.java"
click node_message "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/Message.java"
click node_message_type "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/MessageType.java"
click node_color "https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/Color.java"
click node_feedback "https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/util/FeedbackHelper.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_client_init,node_command toneBlue
class node_parser,node_stat_mapper,node_stats toneAmber
class node_mod_init,node_cache,node_cache_store,node_item_data toneMint
class node_character,node_json_export,node_message,node_message_type,node_color,node_feedback toneRose
class node_player,node_gear_api toneIndigo
```

## Components

### Client entry

- [Client initializer](https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/WynnstatsClient.java): `src/client/java/com/disezmike/wynnstats/WynnstatsClient.java`
- [Export command](https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java): `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`

### Gear analysis

- [Lore parser](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/LoreParser.java): `src/main/java/com/disezmike/wynnstats/util/LoreParser.java`
- [Stat mapper](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/StatMapper.java): `src/main/java/com/disezmike/wynnstats/util/StatMapper.java`
- [Parsed item stats](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/ItemStatsAnalysis.java): `src/main/java/com/disezmike/wynnstats/model/ItemStatsAnalysis.java`

### Reference data

- [Mod initializer](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/Wynnstats.java): `src/main/java/com/disezmike/wynnstats/Wynnstats.java`
- [Item reference cache](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/ItemCache.java): `src/main/java/com/disezmike/wynnstats/util/ItemCache.java`
- **Local item cache**
- [Typed item data](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/ItemData.java): `src/main/java/com/disezmike/wynnstats/model/ItemData.java`

### Export and feedback

- [Character export data](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/CharacterData.java): `src/main/java/com/disezmike/wynnstats/model/CharacterData.java`
- **Pretty JSON export**
- [Feedback message](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/Message.java): `src/main/java/com/disezmike/wynnstats/model/Message.java`
- [Feedback type](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/model/MessageType.java): `src/main/java/com/disezmike/wynnstats/model/MessageType.java`
- [Chat colors](https://github.com/disezmike/wynnstats/blob/main/src/main/java/com/disezmike/wynnstats/util/Color.java): `src/main/java/com/disezmike/wynnstats/util/Color.java`
- [Chat feedback](https://github.com/disezmike/wynnstats/blob/main/src/client/java/com/disezmike/wynnstats/util/FeedbackHelper.java): `src/client/java/com/disezmike/wynnstats/util/FeedbackHelper.java`

### Other components

- **Minecraft player**
- **Wynntils gear data**

## Connections

- Client initializer → Export command: registers (evidence: `src/client/java/com/disezmike/wynnstats/WynnstatsClient.java`)
- Mod initializer → Item reference cache: initializes (evidence: `src/main/java/com/disezmike/wynnstats/Wynnstats.java`)
- Minecraft player → Export command: invokes (evidence: `README.md`)
- Export command → Lore parser: parses lore (evidence: `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`)
- Lore parser → Item reference cache: looks up item (evidence: `src/main/java/com/disezmike/wynnstats/util/LoreParser.java`)
- Lore parser → Stat mapper: maps stat names (evidence: `src/main/java/com/disezmike/wynnstats/util/LoreParser.java`)
- Lore parser → Parsed item stats: creates stats (evidence: `src/main/java/com/disezmike/wynnstats/util/LoreParser.java`)
- Item reference cache → Local item cache: loads or saves (evidence: `src/main/java/com/disezmike/wynnstats/util/ItemCache.java`)
- Item reference cache → Wynntils gear data: downloads (evidence: `src/main/java/com/disezmike/wynnstats/util/ItemCache.java`)
- Item reference cache → Typed item data: deserializes (evidence: `src/main/java/com/disezmike/wynnstats/util/ItemCache.java`)
- Export command → Character export data: adds parsed gear (evidence: `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`)
- Character export data → Pretty JSON export: writes JSON (evidence: `src/main/java/com/disezmike/wynnstats/model/CharacterData.java`)
- Export command → Feedback message: builds feedback (evidence: `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`)
- Export command → Feedback type: selects status (evidence: `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`)
- Export command → Chat feedback: sends feedback (evidence: `src/client/java/com/disezmike/wynnstats/command/WynnstatsCommand.java`)
- Chat feedback → Feedback message: renders (evidence: `src/client/java/com/disezmike/wynnstats/util/FeedbackHelper.java`)
- Feedback message → Chat colors: uses codes (evidence: `src/main/java/com/disezmike/wynnstats/model/Message.java`)
