# pai100707/paimc architecture

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

- Interactive diagram: https://gitdiagram.com/pai100707/paimc
- Repository: https://github.com/pai100707/paimc

## Overview

PaiMC is a Paper-derived, high-performance Minecraft server with a plugin-facing API. The main user-to-result path is server administration starting the server, then plugins being discovered, dependency-checked, loaded and enabled so they can extend server behavior through the API. The API also exposes distinct command, event, data-component, datapack and profiling capabilities; timings provide an internal performance-reporting layer. The source excerpts chiefly illuminate plugin management, classloading and profile lookup, so other API branches are represented as capabilities without speculative wiring.

Main entry points: [`paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java`](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java) (Java plugin), [`paper-server`](https://github.com/pai100707/paimc/tree/main/paper-server) (Minecraft server), [`paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java`](https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java) (Provider storage), [`paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java`](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java) (Classloader storage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Server runtime"]
  node_server["Minecraft server"]
  node_profile["Profile lookup"]
end

subgraph group_plugins["Plugin lifecycle"]
  node_pluginmeta["Plugin metadata<br/>[PluginMeta.java]"]
  node_provider["Plugin provider"]
  node_providerstorage["Provider storage"]
  node_legacyload["Legacy plugin manager"]
  node_plugin["Java plugin<br/>[JavaPlugin.java]"]
  node_pluginclassloader["Plugin classloader"]
  node_configuredloader["Configured classloader"]
  node_loaderstorage["Classloader storage"]
end

subgraph group_api["Plugin API"]
  node_serverapi["Server interface<br/>[Server.java]"]
  node_commands["Brigadier commands<br/>[Commands.java]"]
  node_events["Plugin events<br/>[HandlerList.java]"]
  node_components["Data components"]
  node_datapacks["Datapack API"]
  node_permissions["Permissions"]
end

subgraph group_operations["Operations and profiling"]
  node_timings["Timing collection"]
  node_timingreport["Timing reports<br/>[TimingHistory.java]"]
end

node_admin(("Server admin"))
node_pluginuser(("Plugin developer"))

node_admin -->|"starts"| node_server
node_server -->|"exposes"| node_serverapi
node_pluginuser -->|"uses"| node_serverapi
node_provider -->|"reads metadata"| node_pluginmeta
node_providerstorage -->|"loads plugin"| node_plugin
node_providerstorage -->|"configures"| node_provider
node_legacyload -->|"enables"| node_plugin
node_pluginclassloader -->|"instantiates"| node_plugin
node_configuredloader -->|"exposes config"| node_pluginmeta
node_loaderstorage -->|"registers"| node_configuredloader
node_loaderstorage -->|"registers"| node_pluginclassloader
node_server -.->|"looks up profiles"| node_profile
node_profile -->|"fires profile events"| node_events
node_timings -.->|"collects history"| node_timingreport
node_plugin -->|"registers commands"| node_commands
node_plugin -.->|"uses permissions"| node_permissions

click node_server "https://github.com/pai100707/paimc/tree/main/paper-server"
click node_serverapi "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/Server.java"
click node_pluginmeta "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java"
click node_provider "https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/io/papermc/paper/plugin/provider/PluginProvider.java"
click node_providerstorage "https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java"
click node_legacyload "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java"
click node_plugin "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java"
click node_pluginclassloader "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java"
click node_configuredloader "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/ConfiguredPluginClassLoader.java"
click node_loaderstorage "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java"
click node_commands "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/command/brigadier/Commands.java"
click node_events "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/event/HandlerList.java"
click node_components "https://github.com/pai100707/paimc/tree/main/paper-api/src/main/java/io/papermc/paper/datacomponent"
click node_datapacks "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/datapack/DatapackManager.java"
click node_profile "https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java"
click node_timings "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/co/aikar/timings/TimingsManager.java"
click node_timingreport "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/co/aikar/timings/TimingHistory.java"
click node_permissions "https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/PermissionManager.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,node_profile toneBlue
class node_pluginmeta,node_provider,node_providerstorage,node_legacyload,node_plugin,node_pluginclassloader,node_configuredloader,node_loaderstorage toneAmber
class node_serverapi,node_commands,node_events,node_components,node_datapacks,node_permissions,node_admin toneMint
class node_timings,node_timingreport toneRose
class node_pluginuser toneIndigo
```

## Components

### Server runtime

- [Minecraft server](https://github.com/pai100707/paimc/tree/main/paper-server): `paper-server`
- [Profile lookup](https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java): `paper-server/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java`

### Plugin lifecycle

- [Plugin metadata](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java): `paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java`
- [Plugin provider](https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/io/papermc/paper/plugin/provider/PluginProvider.java): `paper-server/src/main/java/io/papermc/paper/plugin/provider/PluginProvider.java`
- [Provider storage](https://github.com/pai100707/paimc/blob/main/paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java): `paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java`
- [Legacy plugin manager](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java): `paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java`
- [Java plugin](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java): `paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java`
- [Plugin classloader](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java): `paper-api/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java`
- [Configured classloader](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/ConfiguredPluginClassLoader.java): `paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/ConfiguredPluginClassLoader.java`
- [Classloader storage](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java): `paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java`

### Plugin API

- [Server interface](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/Server.java): `paper-api/src/main/java/org/bukkit/Server.java`
- [Brigadier commands](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/command/brigadier/Commands.java): `paper-api/src/main/java/io/papermc/paper/command/brigadier/Commands.java`
- [Plugin events](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/org/bukkit/event/HandlerList.java): `paper-api/src/main/java/org/bukkit/event/HandlerList.java`
- [Data components](https://github.com/pai100707/paimc/tree/main/paper-api/src/main/java/io/papermc/paper/datacomponent): `paper-api/src/main/java/io/papermc/paper/datacomponent`
- [Datapack API](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/datapack/DatapackManager.java): `paper-api/src/main/java/io/papermc/paper/datapack/DatapackManager.java`
- [Permissions](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/io/papermc/paper/plugin/PermissionManager.java): `paper-api/src/main/java/io/papermc/paper/plugin/PermissionManager.java`

### Operations and profiling

- [Timing collection](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/co/aikar/timings/TimingsManager.java): `paper-api/src/main/java/co/aikar/timings/TimingsManager.java`
- [Timing reports](https://github.com/pai100707/paimc/blob/main/paper-api/src/main/java/co/aikar/timings/TimingHistory.java): `paper-api/src/main/java/co/aikar/timings/TimingHistory.java`

### Other components

- **Server admin**
- **Plugin developer**

## Connections

- Server admin → Minecraft server: starts (evidence: `README.md`)
- Minecraft server → Server interface: exposes (evidence: `README.md`)
- Plugin developer → Server interface: uses (evidence: `README.md`)
- Plugin provider → Plugin metadata: reads metadata (evidence: `paper-server/src/main/java/io/papermc/paper/plugin/provider/PluginProvider.java`)
- Provider storage → Java plugin: loads plugin (evidence: `paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java`)
- Provider storage → Plugin provider: configures (evidence: `paper-server/src/main/java/io/papermc/paper/plugin/storage/ServerPluginProviderStorage.java`)
- Legacy plugin manager → Java plugin: enables (evidence: `paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java`)
- Plugin classloader → Java plugin: instantiates (evidence: `paper-api/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java`)
- Configured classloader → Plugin metadata: exposes config (evidence: `paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/ConfiguredPluginClassLoader.java`)
- Classloader storage → Configured classloader: registers (evidence: `paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java`)
- Classloader storage → Plugin classloader: registers (evidence: `paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java`)
- Minecraft server → Profile lookup: looks up profiles (evidence: `paper-server/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java`)
- Profile lookup → Plugin events: fires profile events (evidence: `paper-server/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java`)
- Timing collection → Timing reports: collects history (evidence: `paper-api/src/main/java/co/aikar/timings/TimingsManager.java`)
- Java plugin → Brigadier commands: registers commands (evidence: `paper-api/src/main/java/org/bukkit/plugin/java/JavaPlugin.java`)
- Java plugin → Permissions: uses permissions
