# henkelmax/better-respawn architecture

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

- Interactive diagram: https://gitdiagram.com/henkelmax/better-respawn
- Repository: https://github.com/henkelmax/better-respawn

## Overview

Better Respawn is a server-side Minecraft mod that searches for a safe respawn location near where a player died, while preserving nearby bed/respawn-anchor behavior and falling back to the ordinary respawn location when the search yields none. The main flow runs through player lifecycle hooks into a shared manager; platform entry points supply configuration. The sampled sources show the search and state handling, but not the packet-listener or player-list mixin implementations, so those links are omitted.

Main entry points: [`common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java`](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java) (Respawn manager), [`common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java`](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java) (Shared mod setup), [`common/src/main/java/de/maxhenkel/betterrespawn/config/ServerConfig.java`](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/config/ServerConfig.java) (Shared settings), [`common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java) (Player hooks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Respawn runtime"]
  node_lifecycle["Player hooks"]
  node_manager["Respawn manager"]
  node_spawnfinder["Spawn finder"]
  node_modcore["Shared mod setup"]
end

subgraph group_state["Player state"]
  node_abilities["Respawn state API"]
  node_playerstate["Player state mixin"]
end

subgraph group_config["Configuration adapters"]
  node_configbase["Shared settings<br/>[ServerConfig.java]"]
  node_fabricentry["Fabric entry point"]
  node_fabricconfig["Fabric settings"]
  node_forgeentry["Forge entry point"]
  node_forgeconfig["Forge settings"]
  node_neoentry["NeoForge entry point"]
  node_neoconfig["NeoForge settings"]
end

node_player(("Server player"))

node_player -->|"triggers hooks"| node_lifecycle
node_lifecycle -->|"delegates death"| node_manager
node_manager -->|"searches positions"| node_spawnfinder
node_manager -->|"reads and writes"| node_abilities
node_playerstate -->|"implements API"| node_abilities
node_lifecycle -->|"stores state"| node_playerstate
node_fabricentry -->|"initializes"| node_modcore
node_fabricentry -->|"builds settings"| node_fabricconfig
node_fabricconfig -->|"defines values"| node_configbase
node_forgeentry -->|"initializes"| node_modcore
node_forgeentry -->|"registers settings"| node_forgeconfig
node_forgeconfig -->|"defines values"| node_configbase
node_neoentry -->|"initializes"| node_modcore
node_neoentry -->|"registers settings"| node_neoconfig
node_neoconfig -->|"defines values"| node_configbase
node_modcore -->|"creates manager"| node_manager
node_modcore -->|"holds settings"| node_configbase
node_manager -->|"sets temporary spawn"| node_player

click node_lifecycle "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java"
click node_manager "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java"
click node_abilities "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/RespawnAbilities.java"
click node_playerstate "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java"
click node_configbase "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/config/ServerConfig.java"
click node_fabricentry "https://github.com/henkelmax/better-respawn/blob/master/fabric/src/main/java/de/maxhenkel/betterrespawn/FabricBetterRespawnMod.java"
click node_fabricconfig "https://github.com/henkelmax/better-respawn/blob/master/fabric/src/main/java/de/maxhenkel/betterrespawn/config/FabricServerConfig.java"
click node_forgeentry "https://github.com/henkelmax/better-respawn/blob/master/forge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java"
click node_forgeconfig "https://github.com/henkelmax/better-respawn/blob/master/forge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java"
click node_neoentry "https://github.com/henkelmax/better-respawn/blob/master/neoforge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java"
click node_neoconfig "https://github.com/henkelmax/better-respawn/blob/master/neoforge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java"
click node_modcore "https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.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_lifecycle,node_manager,node_spawnfinder,node_modcore toneBlue
class node_abilities,node_playerstate toneAmber
class node_configbase,node_fabricentry,node_fabricconfig,node_forgeentry,node_forgeconfig,node_neoentry,node_neoconfig,node_player toneMint
```

## Components

### Respawn runtime

- [Player hooks](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java): `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`
- [Respawn manager](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java): `common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java`
- **Spawn finder**
- [Shared mod setup](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java): `common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java`

### Player state

- [Respawn state API](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/RespawnAbilities.java): `common/src/main/java/de/maxhenkel/betterrespawn/RespawnAbilities.java`
- [Player state mixin](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java): `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`

### Configuration adapters

- [Shared settings](https://github.com/henkelmax/better-respawn/blob/master/common/src/main/java/de/maxhenkel/betterrespawn/config/ServerConfig.java): `common/src/main/java/de/maxhenkel/betterrespawn/config/ServerConfig.java`
- [Fabric entry point](https://github.com/henkelmax/better-respawn/blob/master/fabric/src/main/java/de/maxhenkel/betterrespawn/FabricBetterRespawnMod.java): `fabric/src/main/java/de/maxhenkel/betterrespawn/FabricBetterRespawnMod.java`
- [Fabric settings](https://github.com/henkelmax/better-respawn/blob/master/fabric/src/main/java/de/maxhenkel/betterrespawn/config/FabricServerConfig.java): `fabric/src/main/java/de/maxhenkel/betterrespawn/config/FabricServerConfig.java`
- [Forge entry point](https://github.com/henkelmax/better-respawn/blob/master/forge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java): `forge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`
- [Forge settings](https://github.com/henkelmax/better-respawn/blob/master/forge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java): `forge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java`
- [NeoForge entry point](https://github.com/henkelmax/better-respawn/blob/master/neoforge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java): `neoforge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`
- [NeoForge settings](https://github.com/henkelmax/better-respawn/blob/master/neoforge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java): `neoforge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java`

### Other components

- **Server player**

## Connections

- Server player → Player hooks: triggers hooks (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`)
- Player hooks → Respawn manager: delegates death (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`)
- Respawn manager → Spawn finder: searches positions (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java`)
- Respawn manager → Respawn state API: reads and writes (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java`)
- Player state mixin → Respawn state API: implements API (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`)
- Player hooks → Player state mixin: stores state (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/mixin/ServerPlayerMixin.java`)
- Fabric entry point → Shared mod setup: initializes (evidence: `fabric/src/main/java/de/maxhenkel/betterrespawn/FabricBetterRespawnMod.java`)
- Fabric entry point → Fabric settings: builds settings (evidence: `fabric/src/main/java/de/maxhenkel/betterrespawn/FabricBetterRespawnMod.java`)
- Fabric settings → Shared settings: defines values (evidence: `fabric/src/main/java/de/maxhenkel/betterrespawn/config/FabricServerConfig.java`)
- Forge entry point → Shared mod setup: initializes (evidence: `forge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`)
- Forge entry point → Forge settings: registers settings (evidence: `forge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`)
- Forge settings → Shared settings: defines values (evidence: `forge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java`)
- NeoForge entry point → Shared mod setup: initializes (evidence: `neoforge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`)
- NeoForge entry point → NeoForge settings: registers settings (evidence: `neoforge/src/main/java/de/maxhenkel/betterrespawn/ForgeBetterRespawnMod.java`)
- NeoForge settings → Shared settings: defines values (evidence: `neoforge/src/main/java/de/maxhenkel/betterrespawn/config/ForgeServerConfig.java`)
- Shared mod setup → Respawn manager: creates manager (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java`)
- Shared mod setup → Shared settings: holds settings (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/BetterRespawnMod.java`)
- Respawn manager → Server player: sets temporary spawn (evidence: `common/src/main/java/de/maxhenkel/betterrespawn/RespawnManager.java`)
