# fxbixn03/betterstorage architecture

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

- Interactive diagram: https://gitdiagram.com/fxbixn03/betterstorage
- Repository: https://github.com/fxbixn03/betterstorage

## Overview

BetterStorage is a Hytale server plugin for building pipe-linked storage networks, managing their contents through a terminal, and crafting from shared ingredients. Players place and connect network blocks; the plugin registers those blocks with UtilityConnect, reads network storage for terminal and observer views, and supports item transfers and network crafting. The README also describes chunk loading, storage upgrades, crafting benches, and Acid Grounds progression. Sampled source confirms key registration, inventory, and UI responsibilities; unsampled subsystem wiring is represented only where documented.

Main entry points: [`src/main/java/com/cyberpiratepenguin/betterstorage/BetterStoragePlugin.java`](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/BetterStoragePlugin.java) (Plugin lifecycle), [`src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageObserverPage.java`](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageObserverPage.java) (Network observer), [`src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkNodes.java`](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkNodes.java) (Network node tracking), [`src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageTerminalPage.java`](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageTerminalPage.java) (Storage terminal)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_network["Network topology"]
  node_blockevents["Block events"]
  node_nodes["Network node tracking"]
  node_blockkinds["Network block roles"]
  node_locator["Network lookup"]
  node_chunkloader["Chunk loading"]
end

subgraph group_storage["Storage and inventory"]
  node_networkinventory["Network inventory"]
  node_cells["Storage cells<br/>[StorageCells.java]"]
  node_index["Item index<br/>[StorageIndex.java]"]
  node_capacity["Capacity calculation"]
  node_filters["Container slot filters"]
end

subgraph group_experience["Player interfaces"]
  node_terminal["Storage terminal"]
  node_observer["Network observer"]
end

subgraph group_crafting["Crafting progression"]
  node_crafting["Network crafting"]
  node_benches["Bench stations<br/>[BenchStations.java]"]
  node_upgrades["Assembler and cell upgrades"]
  node_acidgrounds["Acid Grounds content"]
end

subgraph group_operations["Plugin operations"]
  node_plugin["Plugin lifecycle"]
  node_config["Plugin config"]
  node_commands["Admin commands"]
end

node_player(("Player"))
node_game(("Hytale server"))
node_utilityconnect["UtilityConnect"]

node_player -->|"plays on"| node_game
node_plugin -->|"registers systems"| node_game
node_plugin -->|"registers"| node_commands
node_plugin -->|"loads config"| node_config
node_plugin -->|"registers resolver"| node_utilityconnect
node_game -->|"dispatches events"| node_blockevents
node_blockevents -->|"reports changes"| node_nodes
node_nodes -->|"classifies blocks"| node_blockkinds
node_nodes -->|"adds or removes nodes"| node_utilityconnect
node_nodes -->|"notifies changes"| node_chunkloader
node_utilityconnect -->|"provides network lookup"| node_locator
node_player -->|"opens terminal"| node_terminal
node_player -->|"opens observer"| node_observer
node_terminal -->|"locates network"| node_locator
node_terminal -->|"reads inventory"| node_networkinventory
node_terminal -->|"requests crafting"| node_crafting
node_networkinventory -->|"reads cell contents"| node_cells
node_networkinventory -->|"builds item index"| node_index
node_observer -->|"locates network"| node_locator
node_observer -->|"reads inventory"| node_networkinventory
node_observer -->|"calculates capacity"| node_capacity
node_observer -->|"reads loader status"| node_chunkloader
node_crafting -->|"uses station recipes"| node_benches
node_plugin -->|"registers systems"| node_upgrades
node_plugin -->|"registers system"| node_filters
node_player -.->|"gathers progression materials"| node_acidgrounds

click node_plugin "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/BetterStoragePlugin.java"
click node_config "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/config/BetterStorageConfig.java"
click node_commands "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/commands/BetterStorageCommand.java"
click node_blockevents "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/BlockPlaceSystem.java"
click node_nodes "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkNodes.java"
click node_blockkinds "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkBlocks.java"
click node_locator "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkLocator.java"
click node_chunkloader "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkChunkLoader.java"
click node_networkinventory "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkInventory.java"
click node_cells "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageCells.java"
click node_index "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/storage/StorageIndex.java"
click node_terminal "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageTerminalPage.java"
click node_observer "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageObserverPage.java"
click node_capacity "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkCapacity.java"
click node_crafting "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/NetworkCrafting.java"
click node_benches "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/BenchStations.java"
click node_upgrades "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/AssemblerTiers.java"
click node_filters "https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageContainerFilters.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_blockevents,node_nodes,node_blockkinds,node_locator,node_chunkloader toneBlue
class node_networkinventory,node_cells,node_index,node_capacity,node_filters toneAmber
class node_terminal,node_observer,node_game toneMint
class node_crafting,node_benches,node_upgrades,node_acidgrounds toneRose
class node_plugin,node_config,node_commands,node_player,node_utilityconnect toneIndigo
```

## Components

### Network topology

- [Block events](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/BlockPlaceSystem.java): `src/main/java/com/cyberpiratepenguin/betterstorage/network/BlockPlaceSystem.java`
- [Network node tracking](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkNodes.java): `src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkNodes.java`
- [Network block roles](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkBlocks.java): `src/main/java/com/cyberpiratepenguin/betterstorage/network/StorageNetworkBlocks.java`
- [Network lookup](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkLocator.java): `src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkLocator.java`
- [Chunk loading](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkChunkLoader.java): `src/main/java/com/cyberpiratepenguin/betterstorage/network/NetworkChunkLoader.java`

### Storage and inventory

- [Network inventory](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkInventory.java): `src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkInventory.java`
- [Storage cells](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageCells.java): `src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageCells.java`
- [Item index](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/storage/StorageIndex.java): `src/main/java/com/cyberpiratepenguin/betterstorage/storage/StorageIndex.java`
- [Capacity calculation](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkCapacity.java): `src/main/java/com/cyberpiratepenguin/betterstorage/inventory/NetworkCapacity.java`
- [Container slot filters](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageContainerFilters.java): `src/main/java/com/cyberpiratepenguin/betterstorage/inventory/StorageContainerFilters.java`

### Player interfaces

- [Storage terminal](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageTerminalPage.java): `src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageTerminalPage.java`
- [Network observer](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageObserverPage.java): `src/main/java/com/cyberpiratepenguin/betterstorage/ui/StorageObserverPage.java`

### Crafting progression

- [Network crafting](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/NetworkCrafting.java): `src/main/java/com/cyberpiratepenguin/betterstorage/crafting/NetworkCrafting.java`
- [Bench stations](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/BenchStations.java): `src/main/java/com/cyberpiratepenguin/betterstorage/crafting/BenchStations.java`
- [Assembler and cell upgrades](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/crafting/AssemblerTiers.java): `src/main/java/com/cyberpiratepenguin/betterstorage/crafting/AssemblerTiers.java`
- **Acid Grounds content**

### Plugin operations

- [Plugin lifecycle](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/BetterStoragePlugin.java): `src/main/java/com/cyberpiratepenguin/betterstorage/BetterStoragePlugin.java`
- [Plugin config](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/config/BetterStorageConfig.java): `src/main/java/com/cyberpiratepenguin/betterstorage/config/BetterStorageConfig.java`
- [Admin commands](https://github.com/fxbixn03/betterstorage/blob/main/src/main/java/com/cyberpiratepenguin/betterstorage/commands/BetterStorageCommand.java): `src/main/java/com/cyberpiratepenguin/betterstorage/commands/BetterStorageCommand.java`

### Other components

- **Player**
- **Hytale server**
- **UtilityConnect**

## Connections

- Player → Hytale server: plays on
- Plugin lifecycle → Hytale server: registers systems
- Plugin lifecycle → Admin commands: registers
- Plugin lifecycle → Plugin config: loads config
- Plugin lifecycle → UtilityConnect: registers resolver
- Hytale server → Block events: dispatches events
- Block events → Network node tracking: reports changes
- Network node tracking → Network block roles: classifies blocks
- Network node tracking → UtilityConnect: adds or removes nodes
- Network node tracking → Chunk loading: notifies changes
- UtilityConnect → Network lookup: provides network lookup
- Player → Storage terminal: opens terminal
- Player → Network observer: opens observer
- Storage terminal → Network lookup: locates network
- Storage terminal → Network inventory: reads inventory
- Storage terminal → Network crafting: requests crafting
- Network inventory → Storage cells: reads cell contents
- Network inventory → Item index: builds item index
- Network observer → Network lookup: locates network
- Network observer → Network inventory: reads inventory
- Network observer → Capacity calculation: calculates capacity
- Network observer → Chunk loading: reads loader status
- Network crafting → Bench stations: uses station recipes
- Plugin lifecycle → Assembler and cell upgrades: registers systems
- Plugin lifecycle → Container slot filters: registers system
- Player → Acid Grounds content: gathers progression materials
