# atlasentinel/simplejobs architecture

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

- Interactive diagram: https://gitdiagram.com/atlasentinel/simplejobs
- Repository: https://github.com/atlasentinel/simplejobs

## Overview

SimpleJobs is a Minecraft server plugin for job-based XP and player-owned villager assistants (“larbins”). Players gain job XP through gameplay, level up and receive configured rewards; commands manage jobs, XP and preferences. A separate interaction flow lets players tame, command, upgrade and store items in larbins. The sampled code shows profile persistence to a runtime data.yml file. The README is empty, and JobListener was excerpted only partially, so unsampled event handling and configuration use are represented only where supported by the excerpts.

Main entry points: [`src/main/java/fr/noe/simpleJobs/JobListener.java`](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java) (Job Events), [`src/main/java/fr/noe/simpleJobs/SimpleJobs.java`](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/SimpleJobs.java) (Plugin Lifecycle), [`src/main/java/fr/noe/simpleJobs/JobManager.java`](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobManager.java) (Profile Manager), [`src/main/java/fr/noe/simpleJobs/LarbinListener.java`](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinListener.java) (Larbin Interactions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Plugin and Commands"]
  node_plugin["Plugin Lifecycle<br/>[SimpleJobs.java]"]
  node_jobcommands["Job Commands<br/>[SimpleJobs.java]"]
end

subgraph group_jobs["Jobs and Progression"]
  node_joblistener["Job Events<br/>[JobListener.java]"]
  node_jobtypes["Job Types<br/>[JobType.java]"]
  node_jobconfig["Job Configuration<br/>[config.yml]"]
  node_progressui["XP Boss Bar<br/>[JobListener.java]"]
  node_rewards["Level Rewards<br/>[JobListener.java]"]
end

subgraph group_larbins["Larbin Assistants"]
  node_larbinlistener["Larbin Interactions"]
  node_larbinmanager["Larbin Manager<br/>[LarbinManager.java]"]
  node_villager["Owned Villager<br/>[LarbinManager.java]"]
  node_inventory["Larbin Inventory<br/>[LarbinManager.java]"]
end

subgraph group_state["Player State"]
  node_jobmanager["Profile Manager<br/>[JobManager.java]"]
  node_profile["Player Profile<br/>[PlayerProfile.java]"]
  node_profiledata[("Profile Data<br/>[JobManager.java]")]
end

node_player(("Player"))
node_server(("Minecraft Server"))

node_server -->|"enables plugin"| node_plugin
node_plugin -->|"creates manager"| node_jobmanager
node_plugin -->|"creates manager"| node_larbinmanager
node_plugin -->|"registers events"| node_joblistener
node_plugin -->|"registers events"| node_larbinlistener
node_player -->|"runs commands"| node_jobcommands
node_jobcommands -->|"gets or resets profiles"| node_jobmanager
node_jobcommands -->|"sets job"| node_joblistener
node_player -->|"triggers gameplay events"| node_joblistener
node_joblistener -->|"gets profile"| node_jobmanager
node_joblistener -->|"awards job XP"| node_profile
node_joblistener -->|"reads reward settings"| node_jobconfig
node_joblistener -->|"updates display"| node_progressui
node_joblistener -->|"grants level items"| node_rewards
node_progressui -->|"shows progress"| node_player
node_rewards -->|"gives items"| node_player
node_jobmanager -->|"creates and updates"| node_profile
node_jobmanager -->|"loads job values"| node_jobtypes
node_plugin -->|"saves on shutdown"| node_profiledata
node_jobmanager -->|"loads and saves"| node_profiledata
node_player -->|"interacts with villager"| node_larbinlistener
node_larbinlistener -->|"requests actions"| node_larbinmanager
node_larbinmanager -->|"spawns and controls"| node_villager
node_larbinmanager -->|"opens and upgrades"| node_inventory
node_larbinlistener -->|"drops contents on death"| node_inventory
node_larbinlistener -->|"opens inventory"| node_player
node_plugin -->|"loads defaults"| node_jobconfig
node_larbinmanager -->|"schedules following"| node_server

click node_plugin "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/SimpleJobs.java"
click node_jobcommands "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/SimpleJobs.java"
click node_joblistener "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java"
click node_jobmanager "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobManager.java"
click node_profile "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/PlayerProfile.java"
click node_jobtypes "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobType.java"
click node_jobconfig "https://github.com/atlasentinel/simplejobs/blob/master/src/main/resources/config.yml"
click node_progressui "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java"
click node_rewards "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java"
click node_profiledata "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobManager.java"
click node_larbinlistener "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinListener.java"
click node_larbinmanager "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.java"
click node_villager "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.java"
click node_inventory "https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.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_jobcommands toneBlue
class node_joblistener,node_jobtypes,node_jobconfig,node_progressui,node_rewards toneAmber
class node_larbinlistener,node_larbinmanager,node_villager,node_inventory,node_server toneMint
class node_jobmanager,node_profile,node_profiledata toneRose
class node_player toneIndigo
```

## Components

### Plugin and Commands

- [Plugin Lifecycle](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/SimpleJobs.java): `src/main/java/fr/noe/simpleJobs/SimpleJobs.java`
- [Job Commands](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/SimpleJobs.java): `src/main/java/fr/noe/simpleJobs/SimpleJobs.java`

### Jobs and Progression

- [Job Events](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java): `src/main/java/fr/noe/simpleJobs/JobListener.java`
- [Job Types](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobType.java): `src/main/java/fr/noe/simpleJobs/JobType.java`
- [Job Configuration](https://github.com/atlasentinel/simplejobs/blob/master/src/main/resources/config.yml): `src/main/resources/config.yml`
- [XP Boss Bar](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java): `src/main/java/fr/noe/simpleJobs/JobListener.java`
- [Level Rewards](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobListener.java): `src/main/java/fr/noe/simpleJobs/JobListener.java`

### Larbin Assistants

- [Larbin Interactions](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinListener.java): `src/main/java/fr/noe/simpleJobs/LarbinListener.java`
- [Larbin Manager](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.java): `src/main/java/fr/noe/simpleJobs/LarbinManager.java`
- [Owned Villager](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.java): `src/main/java/fr/noe/simpleJobs/LarbinManager.java`
- [Larbin Inventory](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/LarbinManager.java): `src/main/java/fr/noe/simpleJobs/LarbinManager.java`

### Player State

- [Profile Manager](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobManager.java): `src/main/java/fr/noe/simpleJobs/JobManager.java`
- [Player Profile](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/PlayerProfile.java): `src/main/java/fr/noe/simpleJobs/PlayerProfile.java`
- [Profile Data](https://github.com/atlasentinel/simplejobs/blob/master/src/main/java/fr/noe/simpleJobs/JobManager.java): `src/main/java/fr/noe/simpleJobs/JobManager.java`

### Other components

- **Player**
- **Minecraft Server**

## Connections

- Minecraft Server → Plugin Lifecycle: enables plugin
- Plugin Lifecycle → Profile Manager: creates manager
- Plugin Lifecycle → Larbin Manager: creates manager
- Plugin Lifecycle → Job Events: registers events
- Plugin Lifecycle → Larbin Interactions: registers events
- Player → Job Commands: runs commands
- Job Commands → Profile Manager: gets or resets profiles
- Job Commands → Job Events: sets job
- Player → Job Events: triggers gameplay events
- Job Events → Profile Manager: gets profile
- Job Events → Player Profile: awards job XP
- Job Events → Job Configuration: reads reward settings
- Job Events → XP Boss Bar: updates display
- Job Events → Level Rewards: grants level items
- XP Boss Bar → Player: shows progress
- Level Rewards → Player: gives items
- Profile Manager → Player Profile: creates and updates
- Profile Manager → Job Types: loads job values
- Plugin Lifecycle → Profile Data: saves on shutdown
- Profile Manager → Profile Data: loads and saves
- Player → Larbin Interactions: interacts with villager
- Larbin Interactions → Larbin Manager: requests actions
- Larbin Manager → Owned Villager: spawns and controls
- Larbin Manager → Larbin Inventory: opens and upgrades
- Larbin Interactions → Larbin Inventory: drops contents on death
- Larbin Interactions → Player: opens inventory
- Plugin Lifecycle → Job Configuration: loads defaults
- Larbin Manager → Minecraft Server: schedules following
