# skebzy/projectliminal architecture

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

- Interactive diagram: https://gitdiagram.com/skebzy/projectliminal
- Repository: https://github.com/skebzy/projectliminal

## Overview

Project Liminal is a Bukkit plugin that creates a procedurally generated Backrooms-style Level 0 world and moves joining players to its spawn. The sampled code shows the Level 0 generation stages—layout-based room painting, spawn carving, then optional lighting and pillars—and the join teleport flow. The tree also contains grid, hybrid, and noise layout strategies, but their wiring and the chunk-generator implementation were not sampled, so those connections are left out.

Main entry points: [`src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0.java`](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0.java) (Level 0 orchestration), [`src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/LightPlacer.java`](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/LightPlacer.java) (Light placer), [`src/main/java/dev/skebzy/projectLiminal/listener/JoinListener.java`](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/listener/JoinListener.java) (Join listener), [`src/main/java/dev/skebzy/projectLiminal/levels/engine/palette/Palette.java`](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/palette/Palette.java) (Palette contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_plugin["Plugin lifecycle"]
  node_plugin_entry["Plugin entry"]
  node_join_listener["Join listener<br/>[JoinListener.java]"]
  node_world["Level 0 world"]
end

subgraph group_generation["World generation"]
  node_chunk_generator["Chunk generator"]
  node_level0["Level 0 orchestration<br/>[Level0.java]"]
  node_level_config["Level 0 config<br/>[Level0Config.java]"]
end

subgraph group_layout["Layout engine"]
  node_layout_contract["Layout contract"]
  node_noise_layout["Noise layout<br/>[NoiseLayout.java]"]
  node_grid_layout["Grid layout<br/>[GridLayout.java]"]
  node_hybrid_layout["Hybrid layout<br/>[HybridLayout.java]"]
  node_room_grid["Backrooms room grid"]
  node_sector_math["Sector math"]
end

subgraph group_painting["Block painting"]
  node_level_palette["Level 0 palette<br/>[Level0Palette.java]"]
  node_room_painter["Room painter<br/>[RoomPainter.java]"]
  node_lights["Light placer<br/>[LightPlacer.java]"]
  node_pillars["Pillar decorator"]
  node_palette["Palette contract<br/>[Palette.java]"]
end

node_player(("Joining player"))
node_bukkit["Bukkit server"]

node_player -->|"joins"| node_join_listener
node_plugin_entry -->|"creates world"| node_bukkit
node_plugin_entry -->|"sets generator"| node_chunk_generator
node_plugin_entry -->|"registers listener"| node_join_listener
node_join_listener -->|"gets world; schedules"| node_bukkit
node_join_listener -->|"teleports to spawn"| node_player
node_chunk_generator -->|"generates chunks"| node_level0
node_level0 -->|"reads settings"| node_level_config
node_level0 -->|"paints rooms"| node_room_painter
node_level0 -->|"places lights"| node_lights
node_level0 -->|"adds pillars"| node_pillars
node_level0 -->|"supplies palette"| node_palette
node_room_painter -->|"checks openness"| node_layout_contract
node_room_painter -->|"reads materials"| node_palette
node_noise_layout -->|"plans sectors"| node_room_grid
node_noise_layout -->|"maps coordinates"| node_sector_math
node_lights -->|"plans fixtures"| node_room_grid
node_lights -->|"maps sectors"| node_sector_math
node_lights -->|"reads light block"| node_palette
node_pillars -->|"reads wall material"| node_palette

click node_plugin_entry "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/ProjectLiminal.java"
click node_join_listener "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/listener/JoinListener.java"
click node_chunk_generator "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0ChunkGenerator.java"
click node_level0 "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0.java"
click node_level_config "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Config.java"
click node_level_palette "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Palette.java"
click node_layout_contract "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/LayoutStrategy.java"
click node_noise_layout "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/NoiseLayout.java"
click node_grid_layout "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/GridLayout.java"
click node_hybrid_layout "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/HybridLayout.java"
click node_room_grid "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsRoomGrid.java"
click node_sector_math "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsSectorMath.java"
click node_room_painter "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/surfaces/RoomPainter.java"
click node_lights "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/LightPlacer.java"
click node_pillars "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/PillarDecorator.java"
click node_palette "https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/palette/Palette.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_entry,node_join_listener,node_world toneBlue
class node_chunk_generator,node_level0,node_level_config toneAmber
class node_layout_contract,node_noise_layout,node_grid_layout,node_hybrid_layout,node_room_grid,node_sector_math,node_bukkit toneMint
class node_level_palette,node_room_painter,node_lights,node_pillars,node_palette toneRose
class node_player toneIndigo
```

## Components

### Plugin lifecycle

- [Plugin entry](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/ProjectLiminal.java): `src/main/java/dev/skebzy/projectLiminal/ProjectLiminal.java`
- [Join listener](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/listener/JoinListener.java): `src/main/java/dev/skebzy/projectLiminal/listener/JoinListener.java`
- **Level 0 world**

### World generation

- [Chunk generator](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0ChunkGenerator.java): `src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0ChunkGenerator.java`
- [Level 0 orchestration](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0.java): `src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0.java`
- [Level 0 config](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Config.java): `src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Config.java`

### Layout engine

- [Layout contract](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/LayoutStrategy.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/LayoutStrategy.java`
- [Noise layout](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/NoiseLayout.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/NoiseLayout.java`
- [Grid layout](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/GridLayout.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/GridLayout.java`
- [Hybrid layout](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/HybridLayout.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/strategies/HybridLayout.java`
- [Backrooms room grid](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsRoomGrid.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsRoomGrid.java`
- [Sector math](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsSectorMath.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/layout/grid/BackroomsSectorMath.java`

### Block painting

- [Level 0 palette](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Palette.java): `src/main/java/dev/skebzy/projectLiminal/levels/level0/Level0Palette.java`
- [Room painter](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/surfaces/RoomPainter.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/surfaces/RoomPainter.java`
- [Light placer](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/LightPlacer.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/LightPlacer.java`
- [Pillar decorator](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/PillarDecorator.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/paint/features/PillarDecorator.java`
- [Palette contract](https://github.com/skebzy/projectliminal/blob/master/src/main/java/dev/skebzy/projectLiminal/levels/engine/palette/Palette.java): `src/main/java/dev/skebzy/projectLiminal/levels/engine/palette/Palette.java`

### Other components

- **Joining player**
- **Bukkit server**

## Connections

- Joining player → Join listener: joins
- Plugin entry → Bukkit server: creates world
- Plugin entry → Chunk generator: sets generator
- Plugin entry → Join listener: registers listener
- Join listener → Bukkit server: gets world; schedules
- Join listener → Joining player: teleports to spawn
- Chunk generator → Level 0 orchestration: generates chunks
- Level 0 orchestration → Level 0 config: reads settings
- Level 0 orchestration → Room painter: paints rooms
- Level 0 orchestration → Light placer: places lights
- Level 0 orchestration → Pillar decorator: adds pillars
- Level 0 orchestration → Palette contract: supplies palette
- Room painter → Layout contract: checks openness
- Room painter → Palette contract: reads materials
- Noise layout → Backrooms room grid: plans sectors
- Noise layout → Sector math: maps coordinates
- Light placer → Backrooms room grid: plans fixtures
- Light placer → Sector math: maps sectors
- Light placer → Palette contract: reads light block
- Pillar decorator → Palette contract: reads wall material
