# delta203/tradesystem architecture

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

- Interactive diagram: https://gitdiagram.com/delta203/tradesystem
- Repository: https://github.com/delta203/tradesystem

## Overview

Trade System is a Spigot plugin for player-to-player item and optional coin trades through an in-game GUI. Players invite and accept partners; the plugin creates a shared trade, tracks each offer, and completes or cancels the exchange. Coin balances use a configurable interface to MySQL or YAML-backed files and configurable server commands. The graph reflects sampled command, click, close, and coin-interface behavior; Trade’s excerpt is partial, so unsampled GUI transitions and wiring are not expanded.

Main entry points: [`src/main/java/de/tradesystem/delta203/spigot/TradeSystem.java`](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/TradeSystem.java) (Plugin bootstrap), [`src/main/java/de/tradesystem/delta203/spigot/trade/TradeManager.java`](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/TradeManager.java) (Trade manager), [`src/main/java/de/tradesystem/delta203/spigot/utils/Interface.java`](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/utils/Interface.java) (Coin interface), [`src/main/java/de/tradesystem/delta203/spigot/files/FileManager.java`](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/files/FileManager.java) (Config files)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lifecycle["Plugin lifecycle"]
  node_plugin["Plugin bootstrap<br/>[TradeSystem.java]"]
end

subgraph group_trading["Trade workflow"]
  node_commands["Trade commands<br/>[Commands.java]"]
  node_manager["Trade manager<br/>[TradeManager.java]"]
  node_trade["Trade session<br/>[Trade.java]"]
  node_offer["Player offer<br/>[TradePlayer.java]"]
  node_click["GUI clicks<br/>[Click.java]"]
  node_close["GUI close<br/>[Close.java]"]
  node_quit["Player departure<br/>[Quit.java]"]
end

subgraph group_coins["Coin integration"]
  node_coininterface["Coin interface<br/>[Interface.java]"]
  node_mysqlmanager["MySQL connection<br/>[MySQlManager.java]"]
end

subgraph group_configuration["Configuration"]
  node_files["Config files<br/>[FileManager.java]"]
end

node_player(("Player"))
node_spigot["Spigot server"]
node_yaml["Plugin YAML<br/>[config.yml]"]
node_messages["Messages YAML<br/>[messages.yml]"]
node_mysql[("MySQL database")]
node_playerfiles["External YAML files"]
node_console(("Server console"))

node_spigot -->|"enables plugin"| node_plugin
node_plugin -->|"loads settings"| node_files
node_files -->|"reads config"| node_yaml
node_files -->|"reads messages"| node_messages
node_plugin -->|"registers command"| node_commands
node_plugin -->|"registers listener"| node_click
node_plugin -->|"registers listener"| node_close
node_plugin -->|"registers listener"| node_quit
node_plugin -->|"creates manager"| node_manager
node_plugin -.->|"initializes optionally"| node_coininterface
node_player -->|"invites or accepts"| node_commands
node_commands -->|"records invite"| node_manager
node_commands -->|"creates trade"| node_manager
node_manager -->|"creates session"| node_trade
node_manager -->|"creates offers"| node_offer
node_spigot -->|"dispatches click"| node_click
node_click -->|"looks up trade"| node_manager
node_click -->|"updates offer"| node_trade
node_trade -->|"updates state"| node_offer
node_spigot -->|"dispatches close"| node_close
node_close -->|"unregisters trade"| node_manager
node_close -->|"reads trading partner"| node_trade
node_spigot -->|"dispatches departure"| node_quit
node_quit -->|"clears player state"| node_manager
node_trade -.->|"checks and transfers coins"| node_coininterface
node_coininterface -.->|"connects to MySQL"| node_mysqlmanager
node_mysqlmanager -.->|"opens connection"| node_mysql
node_coininterface -.->|"reads and updates balance"| node_mysql
node_coininterface -.->|"loads player YAML"| node_files
node_files -.->|"reads balance file"| node_playerfiles
node_coininterface -.->|"dispatches coin command"| node_console

click node_plugin "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/TradeSystem.java"
click node_files "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/files/FileManager.java"
click node_yaml "https://github.com/delta203/tradesystem/blob/main/src/main/resources/config.yml"
click node_messages "https://github.com/delta203/tradesystem/blob/main/src/main/resources/messages.yml"
click node_commands "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/commands/Commands.java"
click node_manager "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/TradeManager.java"
click node_trade "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/Trade.java"
click node_offer "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/TradePlayer.java"
click node_click "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Click.java"
click node_close "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Close.java"
click node_quit "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Quit.java"
click node_coininterface "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/utils/Interface.java"
click node_mysqlmanager "https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/mysql/MySQlManager.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_plugin toneBlue
class node_commands,node_manager,node_trade,node_offer,node_click,node_close,node_quit,node_mysql toneAmber
class node_coininterface,node_mysqlmanager,node_spigot,node_console toneMint
class node_files toneRose
class node_player,node_playerfiles toneIndigo
class node_yaml,node_messages toneTeal
```

## Components

### Plugin lifecycle

- [Plugin bootstrap](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/TradeSystem.java): `src/main/java/de/tradesystem/delta203/spigot/TradeSystem.java`

### Trade workflow

- [Trade commands](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/commands/Commands.java): `src/main/java/de/tradesystem/delta203/spigot/commands/Commands.java`
- [Trade manager](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/TradeManager.java): `src/main/java/de/tradesystem/delta203/spigot/trade/TradeManager.java`
- [Trade session](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/Trade.java): `src/main/java/de/tradesystem/delta203/spigot/trade/Trade.java`
- [Player offer](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/trade/TradePlayer.java): `src/main/java/de/tradesystem/delta203/spigot/trade/TradePlayer.java`
- [GUI clicks](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Click.java): `src/main/java/de/tradesystem/delta203/spigot/listners/Click.java`
- [GUI close](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Close.java): `src/main/java/de/tradesystem/delta203/spigot/listners/Close.java`
- [Player departure](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/listners/Quit.java): `src/main/java/de/tradesystem/delta203/spigot/listners/Quit.java`

### Coin integration

- [Coin interface](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/utils/Interface.java): `src/main/java/de/tradesystem/delta203/spigot/utils/Interface.java`
- [MySQL connection](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/mysql/MySQlManager.java): `src/main/java/de/tradesystem/delta203/spigot/mysql/MySQlManager.java`

### Configuration

- [Config files](https://github.com/delta203/tradesystem/blob/main/src/main/java/de/tradesystem/delta203/spigot/files/FileManager.java): `src/main/java/de/tradesystem/delta203/spigot/files/FileManager.java`

### Other components

- **Player**
- **Spigot server**
- [Plugin YAML](https://github.com/delta203/tradesystem/blob/main/src/main/resources/config.yml): `src/main/resources/config.yml`
- [Messages YAML](https://github.com/delta203/tradesystem/blob/main/src/main/resources/messages.yml): `src/main/resources/messages.yml`
- **MySQL database**
- **External YAML files**
- **Server console**

## Connections

- Spigot server → Plugin bootstrap: enables plugin
- Plugin bootstrap → Config files: loads settings
- Config files → Plugin YAML: reads config
- Config files → Messages YAML: reads messages
- Plugin bootstrap → Trade commands: registers command
- Plugin bootstrap → GUI clicks: registers listener
- Plugin bootstrap → GUI close: registers listener
- Plugin bootstrap → Player departure: registers listener
- Plugin bootstrap → Trade manager: creates manager
- Plugin bootstrap → Coin interface: initializes optionally
- Player → Trade commands: invites or accepts
- Trade commands → Trade manager: records invite
- Trade commands → Trade manager: creates trade
- Trade manager → Trade session: creates session
- Trade manager → Player offer: creates offers
- Spigot server → GUI clicks: dispatches click
- GUI clicks → Trade manager: looks up trade
- GUI clicks → Trade session: updates offer
- Trade session → Player offer: updates state
- Spigot server → GUI close: dispatches close
- GUI close → Trade manager: unregisters trade
- GUI close → Trade session: reads trading partner
- Spigot server → Player departure: dispatches departure
- Player departure → Trade manager: clears player state
- Trade session → Coin interface: checks and transfers coins
- Coin interface → MySQL connection: connects to MySQL
- MySQL connection → MySQL database: opens connection
- Coin interface → MySQL database: reads and updates balance
- Coin interface → Config files: loads player YAML
- Config files → External YAML files: reads balance file
- Coin interface → Server console: dispatches coin command
