# pmgopher/pocketmine-go architecture

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

- Interactive diagram: https://gitdiagram.com/pmgopher/pocketmine-go
- Repository: https://github.com/pmgopher/pocketmine-go

## Overview

pocketmine-go is an early, incomplete Go port of the PocketMine-MP Minecraft Bedrock server. Its current player workflow is to connect through the Bedrock network stack, enter a session, explore streamed/generated worlds, break blocks, and interact with other players; block placing and several other gameplay actions remain incomplete. The README also documents server administration, world persistence and generation, crafting, events, resource packs, and query support. The supplied excerpts show selected subsystem behavior, not the complete server wiring, so uncertain call paths are omitted.

Main entry points: [`pocketmine/world/world_manager.go`](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/world/world_manager.go) (World manager), [`pocketmine/network/network_session_manager.go`](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/network_session_manager.go) (Session manager), [`cmd/pocketmine-go/main.go`](https://github.com/pmgopher/pocketmine-go/blob/main/cmd/pocketmine-go/main.go) (Server entry), [`pocketmine/entity/entity.go`](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/entity.go) (Entities and players)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Server Runtime"]
  node_main["Server entry<br/>[main.go]"]
end

subgraph group_networking["Networking"]
  node_sessions["Session manager"]
  node_inventory["Inventory sync"]
  node_protocol["Bedrock protocol"]
  node_query["Query handler<br/>[query_handler.go]"]
end

subgraph group_gameplay["World Gameplay"]
  node_world_manager["World manager<br/>[world_manager.go]"]
  node_blocks["Block behavior<br/>[block.go]"]
  node_block_mapping["Block mappings"]
  node_entities["Entities and players<br/>[entity.go]"]
  node_experience["Experience"]
  node_effects["Entity effects<br/>[effect_manager.go]"]
  node_crafting["Crafting recipes"]
end

subgraph group_services["Server Services"]
  node_events["Event dispatch<br/>[manager.go]"]
  node_commands["Commands<br/>[command_map.go]"]
  node_resource_packs["Resource packs"]
  node_permissions["Permissions<br/>[manager.go]"]
end

node_player(("Bedrock player"))

node_main -->|"starts sessions"| node_sessions
node_player -->|"connects via"| node_protocol
node_protocol -->|"creates sessions"| node_sessions
node_sessions -->|"exchanges packets"| node_protocol
node_sessions -->|"syncs containers"| node_inventory
node_sessions -->|"plays in worlds"| node_world_manager
node_world_manager -->|"ticks world"| node_blocks
node_world_manager -->|"hosts entities"| node_entities
node_world_manager -->|"dispatches events"| node_events
node_world_manager -->|"autosaves worlds"| node_main
node_blocks -->|"serializes states"| node_block_mapping
node_entities -->|"tracks experience"| node_experience
node_entities -->|"manages effects"| node_effects
node_entities -->|"dispatches events"| node_events
node_crafting -->|"loads recipes"| node_events
node_query -->|"sends raw replies"| node_protocol
node_main -.->|"configures packs"| node_resource_packs
node_main -.->|"registers commands"| node_commands
node_commands -.->|"checks permissions"| node_permissions

click node_main "https://github.com/pmgopher/pocketmine-go/blob/main/cmd/pocketmine-go/main.go"
click node_sessions "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/network_session_manager.go"
click node_inventory "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/mcpe/inventory_manager.go"
click node_query "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/query/query_handler.go"
click node_world_manager "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/world/world_manager.go"
click node_blocks "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/block/block.go"
click node_block_mapping "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/data/bedrock/block/convert/block_object_to_state_serializer.go"
click node_entities "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/entity.go"
click node_experience "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/experience_manager.go"
click node_effects "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/effect/effect_manager.go"
click node_crafting "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/crafting/crafting_manager.go"
click node_events "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/event/manager.go"
click node_commands "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/command/command_map.go"
click node_resource_packs "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/resourcepacks/resource_pack_manager.go"
click node_permissions "https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/permission/manager.go"

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_main toneBlue
class node_sessions,node_inventory,node_protocol,node_query toneAmber
class node_world_manager,node_blocks,node_block_mapping,node_entities,node_experience,node_effects,node_crafting toneMint
class node_events,node_commands,node_resource_packs,node_permissions toneRose
class node_player toneIndigo
```

## Components

### Server Runtime

- [Server entry](https://github.com/pmgopher/pocketmine-go/blob/main/cmd/pocketmine-go/main.go): `cmd/pocketmine-go/main.go`

### Networking

- [Session manager](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/network_session_manager.go): `pocketmine/network/network_session_manager.go`
- [Inventory sync](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/mcpe/inventory_manager.go): `pocketmine/network/mcpe/inventory_manager.go`
- **Bedrock protocol**
- [Query handler](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/network/query/query_handler.go): `pocketmine/network/query/query_handler.go`

### World Gameplay

- [World manager](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/world/world_manager.go): `pocketmine/world/world_manager.go`
- [Block behavior](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/block/block.go): `pocketmine/block/block.go`
- [Block mappings](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/data/bedrock/block/convert/block_object_to_state_serializer.go): `pocketmine/data/bedrock/block/convert/block_object_to_state_serializer.go`
- [Entities and players](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/entity.go): `pocketmine/entity/entity.go`
- [Experience](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/experience_manager.go): `pocketmine/entity/experience_manager.go`
- [Entity effects](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/entity/effect/effect_manager.go): `pocketmine/entity/effect/effect_manager.go`
- [Crafting recipes](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/crafting/crafting_manager.go): `pocketmine/crafting/crafting_manager.go`

### Server Services

- [Event dispatch](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/event/manager.go): `pocketmine/event/manager.go`
- [Commands](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/command/command_map.go): `pocketmine/command/command_map.go`
- [Resource packs](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/resourcepacks/resource_pack_manager.go): `pocketmine/resourcepacks/resource_pack_manager.go`
- [Permissions](https://github.com/pmgopher/pocketmine-go/blob/main/pocketmine/permission/manager.go): `pocketmine/permission/manager.go`

### Other components

- **Bedrock player**

## Connections

- Server entry → Session manager: starts sessions
- Bedrock player → Bedrock protocol: connects via
- Bedrock protocol → Session manager: creates sessions
- Session manager → Bedrock protocol: exchanges packets
- Session manager → Inventory sync: syncs containers
- Session manager → World manager: plays in worlds
- World manager → Block behavior: ticks world
- World manager → Entities and players: hosts entities
- World manager → Event dispatch: dispatches events
- World manager → Server entry: autosaves worlds
- Block behavior → Block mappings: serializes states
- Entities and players → Experience: tracks experience
- Entities and players → Entity effects: manages effects
- Entities and players → Event dispatch: dispatches events
- Crafting recipes → Event dispatch: loads recipes
- Query handler → Bedrock protocol: sends raw replies
- Server entry → Resource packs: configures packs
- Server entry → Commands: registers commands
- Commands → Permissions: checks permissions
