# maevescz/dashman architecture

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

## Overview

DashMan is a Paper/Bukkit server plugin for managing other plugins at runtime. A server command enters through the registered `/dashman` executor, is permission-checked and dispatched to a subcommand, which either inspects installed plugins or scans/changes plugin files and lifecycle state. The graph separates command routing, inspection, and lifecycle operations. Runtime command wiring and the sampled handlers are visible; scan/load metadata and dependency checks are implemented inside their handlers, while broader server behavior is delegated to Bukkit/Paper. `unload` currently disables the plugin rather than removing it from the server registry.

Main entry points: [`src/main/java/eve/command/sub/PluginManager.java`](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginManager.java) (Command router), [`src/main/java/eve/DashMan.java`](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/DashMan.java) (DashMan entry), [`src/main/java/eve/command/sub/PluginLoader.java`](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginLoader.java) (Plugin loader), [`src/main/java/eve/command/sub/ListCommand.java`](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/ListCommand.java) (Plugin list)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_routing["Command routing"]
  node_dashman["DashMan entry<br/>[DashMan.java]"]
  node_descriptor["Command descriptor<br/>[plugin.yml]"]
  node_router["Command router<br/>[PluginManager.java]"]
  node_subcommand["Subcommand API<br/>[SubCommand.java]"]
end

subgraph group_inspection["Plugin inspection"]
  node_help["Help command<br/>[HelpCommand.java]"]
  node_listing["Plugin list<br/>[ListCommand.java]"]
  node_plugininfo["Plugin details<br/>[InfoCommand.java]"]
  node_scan["JAR scanner<br/>[ScanCommand.java]"]
end

subgraph group_lifecycle["Plugin lifecycle"]
  node_loader["Plugin loader<br/>[PluginLoader.java]"]
  node_activation["Enable / disable<br/>[PluginActive.java]"]
  node_reloader["Plugin reloader"]
  node_unloader["Plugin unloader<br/>[UnloadCommand.java]"]
end

node_admin(("Admin / sender"))
node_server["Bukkit plugin manager"]
node_plugindir[("Plugins directory")]

node_admin -->|"issues command"| node_dashman
node_descriptor -->|"declares command"| node_dashman
node_dashman -->|"registers and wires"| node_router
node_dashman -->|"registers executor"| node_server
node_router -->|"dispatches by API"| node_subcommand
node_router -->|"runs default"| node_help
node_router -->|"dispatches"| node_listing
node_router -->|"dispatches"| node_plugininfo
node_router -->|"dispatches"| node_scan
node_router -->|"dispatches"| node_loader
node_router -->|"dispatches"| node_activation
node_router -->|"dispatches"| node_reloader
node_router -->|"dispatches"| node_unloader
node_listing -->|"reads plugin state"| node_server
node_plugininfo -->|"reads plugin details"| node_server
node_scan -->|"reads JAR files"| node_plugindir
node_loader -->|"reads JAR and metadata"| node_plugindir
node_loader -->|"checks dependencies; loads and enables"| node_server
node_activation -->|"looks up; enables or disables"| node_server
node_reloader -->|"looks up; disables and enables"| node_server
node_unloader -->|"looks up; disables"| node_server

click node_dashman "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/DashMan.java"
click node_descriptor "https://github.com/maevescz/dashman/blob/main/src/main/resources/plugin.yml"
click node_router "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginManager.java"
click node_subcommand "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/SubCommand.java"
click node_help "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/HelpCommand.java"
click node_listing "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/ListCommand.java"
click node_plugininfo "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/InfoCommand.java"
click node_scan "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/ScanCommand.java"
click node_loader "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginLoader.java"
click node_activation "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginActive.java"
click node_reloader "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginReloader.java"
click node_unloader "https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/UnloadCommand.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_dashman,node_descriptor,node_router,node_subcommand toneBlue
class node_help,node_listing,node_plugininfo,node_scan,node_plugindir toneAmber
class node_loader,node_activation,node_reloader,node_unloader toneMint
class node_admin,node_server toneIndigo
```

## Components

### Command routing

- [DashMan entry](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/DashMan.java): `src/main/java/eve/DashMan.java`
- [Command descriptor](https://github.com/maevescz/dashman/blob/main/src/main/resources/plugin.yml): `src/main/resources/plugin.yml`
- [Command router](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginManager.java): `src/main/java/eve/command/sub/PluginManager.java`
- [Subcommand API](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/SubCommand.java): `src/main/java/eve/command/sub/SubCommand.java`

### Plugin inspection

- [Help command](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/HelpCommand.java): `src/main/java/eve/command/sub/HelpCommand.java`
- [Plugin list](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/ListCommand.java): `src/main/java/eve/command/sub/ListCommand.java`
- [Plugin details](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/InfoCommand.java): `src/main/java/eve/command/sub/InfoCommand.java`
- [JAR scanner](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/ScanCommand.java): `src/main/java/eve/command/sub/ScanCommand.java`

### Plugin lifecycle

- [Plugin loader](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginLoader.java): `src/main/java/eve/command/sub/PluginLoader.java`
- [Enable / disable](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginActive.java): `src/main/java/eve/command/sub/PluginActive.java`
- [Plugin reloader](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/PluginReloader.java): `src/main/java/eve/command/sub/PluginReloader.java`
- [Plugin unloader](https://github.com/maevescz/dashman/blob/main/src/main/java/eve/command/sub/UnloadCommand.java): `src/main/java/eve/command/sub/UnloadCommand.java`

### Other components

- **Admin / sender**
- **Bukkit plugin manager**
- **Plugins directory**

## Connections

- Admin / sender → DashMan entry: issues command
- Command descriptor → DashMan entry: declares command
- DashMan entry → Command router: registers and wires
- DashMan entry → Bukkit plugin manager: registers executor
- Command router → Subcommand API: dispatches by API
- Command router → Help command: runs default
- Command router → Plugin list: dispatches
- Command router → Plugin details: dispatches
- Command router → JAR scanner: dispatches
- Command router → Plugin loader: dispatches
- Command router → Enable / disable: dispatches
- Command router → Plugin reloader: dispatches
- Command router → Plugin unloader: dispatches
- Plugin list → Bukkit plugin manager: reads plugin state
- Plugin details → Bukkit plugin manager: reads plugin details
- JAR scanner → Plugins directory: reads JAR files
- Plugin loader → Plugins directory: reads JAR and metadata
- Plugin loader → Bukkit plugin manager: checks dependencies; loads and enables
- Enable / disable → Bukkit plugin manager: looks up; enables or disables
- Plugin reloader → Bukkit plugin manager: looks up; disables and enables
- Plugin unloader → Bukkit plugin manager: looks up; disables
