# squeek502/appleskin architecture

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

- Interactive diagram: https://gitdiagram.com/squeek502/appleskin
- Repository: https://github.com/squeek502/appleskin

## Overview

AppleSkin is a Minecraft food-status HUD mod. Its runtime workflow registers client HUD, tooltip, and debug handlers plus a synchronization channel; those handlers derive food and hunger values, expose cancellable API events, and render overlays or tooltip indicators. Server-side synchronization sends saturation and exhaustion updates to clients. The README also documents estimated health restoration and third-party event customization. Some listed subsystems are represented by their exact tree paths but were not sampled, so their internal wiring is omitted.

Main entry points: [`java/squeek/appleskin/client/TooltipOverlayHandler.java`](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/TooltipOverlayHandler.java) (Food tooltips), [`java/squeek/appleskin/client/HUDOverlayHandler.java`](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/HUDOverlayHandler.java) (HUD overlays), [`java/squeek/appleskin/AppleSkin.java`](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/AppleSkin.java) (Mod bootstrap), [`java/squeek/appleskin/network/SyncHandler.java`](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/SyncHandler.java) (Sync coordinator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Mod runtime"]
  node_mod["Mod bootstrap<br/>[AppleSkin.java]"]
  node_config["Client settings<br/>[ModConfig.java]"]
  node_foodhelper["Food calculations<br/>[FoodHelper.java]"]
  node_hungerhelper["Hunger state<br/>[HungerHelper.java]"]
end

subgraph group_hud["HUD and debug"]
  node_hud["HUD overlays"]
  node_debug["Debug overlay"]
end

subgraph group_tooltip["Tooltip and API"]
  node_hudapi["HUD events"]
  node_tooltip["Food tooltips"]
  node_foodapi["Food values API<br/>[FoodValues.java]"]
  node_food_event["Food value event"]
  node_tooltip_event["Tooltip events"]
end

subgraph group_sync["State synchronization"]
  node_sync["Sync coordinator<br/>[SyncHandler.java]"]
  node_network["Network channel<br/>[NetworkHelper.java]"]
  node_exhaustion_msg["Exhaustion packet"]
  node_saturation_msg["Saturation packet"]
end

node_player(("Player"))
node_developer(("Mod developers"))

node_mod -->|"registers"| node_config
node_mod -->|"initializes"| node_sync
node_mod -->|"registers"| node_hud
node_mod -->|"registers"| node_debug
node_mod -->|"registers"| node_tooltip
node_player -->|"triggers rendering"| node_hud
node_hud -->|"checks food"| node_foodhelper
node_hud -->|"reads exhaustion"| node_hungerhelper
node_hud -->|"checks settings"| node_config
node_hud -->|"posts events"| node_hudapi
node_hud -->|"renders overlays"| node_player
node_player -->|"hovers food"| node_tooltip
node_tooltip -->|"gets food values"| node_foodhelper
node_tooltip -->|"posts event"| node_food_event
node_tooltip -->|"posts events"| node_tooltip_event
node_tooltip -->|"uses values"| node_foodapi
node_tooltip -->|"checks settings"| node_config
node_tooltip -->|"renders tooltip"| node_player
node_developer -.->|"customizes values"| node_food_event
node_developer -.->|"customizes overlays"| node_hudapi
node_developer -.->|"customizes tooltip"| node_tooltip_event
node_debug -->|"reads exhaustion"| node_hungerhelper
node_debug -->|"adds debug data"| node_player
node_sync -->|"reads exhaustion"| node_hungerhelper
node_sync -->|"creates updates"| node_exhaustion_msg
node_sync -->|"creates updates"| node_saturation_msg
node_sync -->|"sends packets"| node_network
node_exhaustion_msg -->|"gets sided player"| node_network
node_exhaustion_msg -->|"sets exhaustion"| node_hungerhelper

click node_mod "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/AppleSkin.java"
click node_config "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/ModConfig.java"
click node_foodhelper "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/helpers/FoodHelper.java"
click node_hungerhelper "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/helpers/HungerHelper.java"
click node_hud "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/HUDOverlayHandler.java"
click node_debug "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/DebugInfoHandler.java"
click node_hudapi "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/HUDOverlayEvent.java"
click node_tooltip "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/TooltipOverlayHandler.java"
click node_foodapi "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/food/FoodValues.java"
click node_food_event "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/FoodValuesEvent.java"
click node_tooltip_event "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/TooltipOverlayEvent.java"
click node_sync "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/SyncHandler.java"
click node_network "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/NetworkHelper.java"
click node_exhaustion_msg "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/MessageExhaustionSync.java"
click node_saturation_msg "https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/MessageSaturationSync.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_mod,node_config,node_foodhelper,node_hungerhelper toneBlue
class node_hud,node_debug toneAmber
class node_hudapi,node_tooltip,node_foodapi,node_food_event,node_tooltip_event toneMint
class node_sync,node_network,node_exhaustion_msg,node_saturation_msg toneRose
class node_player,node_developer toneIndigo
```

## Components

### Mod runtime

- [Mod bootstrap](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/AppleSkin.java): `java/squeek/appleskin/AppleSkin.java`
- [Client settings](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/ModConfig.java): `java/squeek/appleskin/ModConfig.java`
- [Food calculations](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/helpers/FoodHelper.java): `java/squeek/appleskin/helpers/FoodHelper.java`
- [Hunger state](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/helpers/HungerHelper.java): `java/squeek/appleskin/helpers/HungerHelper.java`

### HUD and debug

- [HUD overlays](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/HUDOverlayHandler.java): `java/squeek/appleskin/client/HUDOverlayHandler.java`
- [Debug overlay](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/DebugInfoHandler.java): `java/squeek/appleskin/client/DebugInfoHandler.java`

### Tooltip and API

- [HUD events](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/HUDOverlayEvent.java): `java/squeek/appleskin/api/event/HUDOverlayEvent.java`
- [Food tooltips](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/client/TooltipOverlayHandler.java): `java/squeek/appleskin/client/TooltipOverlayHandler.java`
- [Food values API](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/food/FoodValues.java): `java/squeek/appleskin/api/food/FoodValues.java`
- [Food value event](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/FoodValuesEvent.java): `java/squeek/appleskin/api/event/FoodValuesEvent.java`
- [Tooltip events](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/api/event/TooltipOverlayEvent.java): `java/squeek/appleskin/api/event/TooltipOverlayEvent.java`

### State synchronization

- [Sync coordinator](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/SyncHandler.java): `java/squeek/appleskin/network/SyncHandler.java`
- [Network channel](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/NetworkHelper.java): `java/squeek/appleskin/network/NetworkHelper.java`
- [Exhaustion packet](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/MessageExhaustionSync.java): `java/squeek/appleskin/network/MessageExhaustionSync.java`
- [Saturation packet](https://github.com/squeek502/appleskin/blob/1.16-forge/java/squeek/appleskin/network/MessageSaturationSync.java): `java/squeek/appleskin/network/MessageSaturationSync.java`

### Other components

- **Player**
- **Mod developers**

## Connections

- Mod bootstrap → Client settings: registers
- Mod bootstrap → Sync coordinator: initializes
- Mod bootstrap → HUD overlays: registers
- Mod bootstrap → Debug overlay: registers
- Mod bootstrap → Food tooltips: registers
- Player → HUD overlays: triggers rendering
- HUD overlays → Food calculations: checks food
- HUD overlays → Hunger state: reads exhaustion
- HUD overlays → Client settings: checks settings
- HUD overlays → HUD events: posts events
- HUD overlays → Player: renders overlays
- Player → Food tooltips: hovers food
- Food tooltips → Food calculations: gets food values
- Food tooltips → Food value event: posts event
- Food tooltips → Tooltip events: posts events
- Food tooltips → Food values API: uses values
- Food tooltips → Client settings: checks settings
- Food tooltips → Player: renders tooltip
- Mod developers → Food value event: customizes values
- Mod developers → HUD events: customizes overlays
- Mod developers → Tooltip events: customizes tooltip
- Debug overlay → Hunger state: reads exhaustion
- Debug overlay → Player: adds debug data
- Sync coordinator → Hunger state: reads exhaustion
- Sync coordinator → Exhaustion packet: creates updates
- Sync coordinator → Saturation packet: creates updates
- Sync coordinator → Network channel: sends packets
- Exhaustion packet → Network channel: gets sided player
- Exhaustion packet → Hunger state: sets exhaustion
