# ozpyn/minecraftbutx architecture

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

## Overview

MinecraftButX is a PaperMC plugin for enabling multiple gameplay-changing scenarios through admin commands. The main flow is command input → scenario manager → scenario activation, after which scenarios modify drops, fishing, chunks, or team-scoped player state in response to game events or scheduled synchronization. Startup registers the available scenarios and commands; shutdown disables active scenarios. The README documents additional shared-inventory variants built through a common builder. Some scenario implementations were not excerpted, so their internal event behavior is represented only at the documented capability level.

Main entry points: [`src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java) (Plugin startup), [`src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioUtils.java`](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioUtils.java) (Scenario utilities), [`src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java`](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java) (Scenario manager), [`src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java`](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java) (Enable command)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Plugin and control"]
  node_plugin["Plugin startup<br/>[MinecraftButX.java]"]
  node_enable["Enable command<br/>[EnableCommand.java]"]
  node_disable["Disable command"]
  node_manager["Scenario manager"]
  node_contract["Scenario lifecycle<br/>[Scenario.java]"]
end

subgraph group_drops["Drop and world changes"]
  node_mobdrops["Mob drops"]
  node_blockdrops["Block drops"]
  node_alldrops["Combined drops"]
  node_fishing["Fishing loot"]
  node_chunks["Random chunks"]
end

subgraph group_shared["Team sharing"]
  node_hunger["Shared hunger"]
  node_health["Shared health"]
  node_effects["Shared effects"]
  node_inventory["Shared inventory"]
  node_inventorybuilder["Inventory variants"]
end

subgraph group_support["Scenario support"]
  node_utils["Scenario utilities<br/>[ScenarioUtils.java]"]
end

node_admins(("Server admins"))

node_admins -->|"enable scenario"| node_enable
node_admins -->|"disable scenario"| node_disable
node_plugin -->|"creates and registers"| node_manager
node_plugin -->|"registers command"| node_enable
node_plugin -->|"registers command"| node_disable
node_enable -->|"enables and lists"| node_manager
node_disable -->|"disables and lists"| node_manager
node_manager -->|"calls lifecycle"| node_contract
node_plugin -->|"registers"| node_mobdrops
node_plugin -->|"registers"| node_blockdrops
node_plugin -->|"registers"| node_alldrops
node_plugin -->|"registers"| node_fishing
node_plugin -->|"registers"| node_chunks
node_plugin -->|"registers"| node_hunger
node_plugin -->|"registers"| node_health
node_plugin -->|"registers"| node_effects
node_plugin -->|"builds inventory variants"| node_inventorybuilder
node_inventorybuilder -->|"creates scenarios"| node_inventory
node_mobdrops -->|"chooses random items"| node_utils
node_blockdrops -->|"chooses random items"| node_utils
node_alldrops -->|"chooses random items"| node_utils
node_fishing -->|"uses item utilities"| node_utils
node_chunks -->|"uses scenario utilities"| node_utils
node_hunger -->|"finds teammates"| node_utils
node_health -->|"finds teammates"| node_utils
node_effects -->|"finds teammates"| node_utils
node_inventory -->|"groups by team"| node_utils

click node_plugin "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java"
click node_enable "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java"
click node_disable "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/command/DisableCommand.java"
click node_manager "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java"
click node_contract "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/Scenario.java"
click node_mobdrops "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/MobDropsScenario.java"
click node_blockdrops "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/BlockDropsScenario.java"
click node_alldrops "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/AllDropsScenario.java"
click node_fishing "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/FishingLootScenario.java"
click node_chunks "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/RandomChunkScenario.java"
click node_hunger "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHungerScenario.java"
click node_health "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHealthScenario.java"
click node_effects "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedEffectsScenario.java"
click node_inventory "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedInventoryScenario.java"
click node_inventorybuilder "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/SharedInventoryBuilder.java"
click node_utils "https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioUtils.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,node_enable,node_disable,node_manager,node_contract toneBlue
class node_mobdrops,node_blockdrops,node_alldrops,node_fishing,node_chunks toneAmber
class node_hunger,node_health,node_effects,node_inventory,node_inventorybuilder,node_admins toneMint
class node_utils toneRose
```

## Components

### Plugin and control

- [Plugin startup](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java): `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`
- [Enable command](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java): `src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java`
- [Disable command](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/command/DisableCommand.java): `src/main/java/dev/ozpyn/minecraftButX/command/DisableCommand.java`
- [Scenario manager](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java`
- [Scenario lifecycle](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/Scenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/Scenario.java`

### Drop and world changes

- [Mob drops](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/MobDropsScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/MobDropsScenario.java`
- [Block drops](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/BlockDropsScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/BlockDropsScenario.java`
- [Combined drops](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/AllDropsScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/AllDropsScenario.java`
- [Fishing loot](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/FishingLootScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/FishingLootScenario.java`
- [Random chunks](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/RandomChunkScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/RandomChunkScenario.java`

### Team sharing

- [Shared hunger](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHungerScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHungerScenario.java`
- [Shared health](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHealthScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHealthScenario.java`
- [Shared effects](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedEffectsScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedEffectsScenario.java`
- [Shared inventory](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedInventoryScenario.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedInventoryScenario.java`
- [Inventory variants](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/SharedInventoryBuilder.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/SharedInventoryBuilder.java`

### Scenario support

- [Scenario utilities](https://github.com/ozpyn/minecraftbutx/blob/master/src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioUtils.java): `src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioUtils.java`

### Other components

- **Server admins**

## Connections

- Server admins → Enable command: enable scenario (evidence: `README.md`)
- Server admins → Disable command: disable scenario (evidence: `README.md`)
- Plugin startup → Scenario manager: creates and registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Enable command: registers command (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Disable command: registers command (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Enable command → Scenario manager: enables and lists (evidence: `src/main/java/dev/ozpyn/minecraftButX/command/EnableCommand.java`)
- Disable command → Scenario manager: disables and lists (evidence: `src/main/java/dev/ozpyn/minecraftButX/command/DisableCommand.java`)
- Scenario manager → Scenario lifecycle: calls lifecycle (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/ScenarioManager.java`)
- Plugin startup → Mob drops: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Block drops: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Combined drops: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Fishing loot: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Random chunks: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Shared hunger: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Shared health: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Shared effects: registers (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Plugin startup → Inventory variants: builds inventory variants (evidence: `src/main/java/dev/ozpyn/minecraftButX/MinecraftButX.java`)
- Inventory variants → Shared inventory: creates scenarios (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/SharedInventoryBuilder.java`)
- Mob drops → Scenario utilities: chooses random items (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/MobDropsScenario.java`)
- Block drops → Scenario utilities: chooses random items (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/BlockDropsScenario.java`)
- Combined drops → Scenario utilities: chooses random items (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/AllDropsScenario.java`)
- Fishing loot → Scenario utilities: uses item utilities (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/FishingLootScenario.java`)
- Random chunks → Scenario utilities: uses scenario utilities (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/RandomChunkScenario.java`)
- Shared hunger → Scenario utilities: finds teammates (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHungerScenario.java`)
- Shared health → Scenario utilities: finds teammates (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedHealthScenario.java`)
- Shared effects → Scenario utilities: finds teammates (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedEffectsScenario.java`)
- Shared inventory → Scenario utilities: groups by team (evidence: `src/main/java/dev/ozpyn/minecraftButX/scenario/impl/SharedInventoryScenario.java`)
