# virtuoel/pehkui architecture

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

- Interactive diagram: https://gitdiagram.com/virtuoel/pehkui
- Repository: https://github.com/virtuoel/pehkui

## Overview

Pehkui is a Minecraft modding library and runtime mod for changing entity scale and adapting scale-dependent behavior. A mod developer or player supplies scale settings through the public API or commands; scale types, data, and modifiers represent those settings, while game mixins apply them to entity behavior and client rendering. The README also documents dependent properties such as movement speed, explosion size, and reach. Client networking receives scale updates and applies them to entities. The tree and excerpts do not show server packet construction or most subsystem implementations, so those wiring details are omitted.

Main entry points: [`src/main/java/virtuoel/pehkui/api/ScaleData.java`](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleData.java) (Scale data), [`src/main/java/virtuoel/pehkui/command/argument/ScaleTypeArgumentType.java`](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/command/argument/ScaleTypeArgumentType.java) (Scale commands), [`src/main/java/virtuoel/pehkui/api/ScaleType.java`](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleType.java) (Scale types), [`src/main/java/virtuoel/pehkui/mixin/EntityMixin.java`](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/EntityMixin.java) (Entity integration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scale_api["Scale API"]
  node_scale_data["Scale data<br/>[ScaleData.java]"]
  node_scale_types["Scale types<br/>[ScaleType.java]"]
  node_registries["Scale registries"]
  node_modifiers["Scale modifiers<br/>[ScaleModifier.java]"]
  node_easing["Scale easing<br/>[ScaleEasings.java]"]
end

subgraph group_user_inputs["User Inputs"]
  node_commands["Scale commands"]
  node_selector_options["Entity selectors"]
end

subgraph group_game_runtime["Game Runtime"]
  node_entity_hooks["Entity integration<br/>[EntityMixin.java]"]
  node_dependent_behavior["Scaled behavior"]
  node_reach["Reach adjustment"]
  node_render_hooks["Scale rendering"]
end

subgraph group_client_sync["Client Sync"]
  node_client_init["Client initializer<br/>[PehkuiClient.java]"]
  node_scale_packets["Scale updates<br/>[PehkuiClient.java]"]
end

node_developer(("Mod developer"))
node_player(("Player"))
node_minecraft["Minecraft runtime"]

node_developer -->|"sets scale"| node_scale_data
node_player -->|"runs commands"| node_commands
node_commands -->|"selects type"| node_scale_types
node_commands -->|"changes scale"| node_scale_data
node_selector_options -->|"extends selection"| node_minecraft
node_scale_types -->|"registered in"| node_registries
node_scale_data -->|"modified by"| node_modifiers
node_scale_data -->|"interpolates with"| node_easing
node_minecraft -->|"invokes hooks"| node_entity_hooks
node_entity_hooks -->|"reads scale"| node_scale_data
node_dependent_behavior -->|"reads scale"| node_scale_data
node_reach -->|"reads scale"| node_scale_data
node_render_hooks -->|"renders scale"| node_scale_data
node_minecraft -->|"initializes client"| node_client_init
node_client_init -->|"registers handlers"| node_scale_packets
node_scale_packets -->|"applies updates"| node_scale_data

click node_scale_data "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleData.java"
click node_scale_types "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleType.java"
click node_registries "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleRegistries.java"
click node_modifiers "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleModifier.java"
click node_easing "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleEasings.java"
click node_commands "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/command/argument/ScaleTypeArgumentType.java"
click node_selector_options "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/command/PehkuiEntitySelectorOptions.java"
click node_entity_hooks "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/EntityMixin.java"
click node_dependent_behavior "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/compat1205plus/LivingEntityMixin.java"
click node_reach "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/reach/PlayerEntityMixin.java"
click node_render_hooks "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/client/compat121plus/EntityRendererMixin.java"
click node_client_init "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/PehkuiClient.java"
click node_scale_packets "https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/PehkuiClient.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_scale_data,node_scale_types,node_registries,node_modifiers,node_easing toneBlue
class node_commands,node_selector_options toneAmber
class node_entity_hooks,node_dependent_behavior,node_reach,node_render_hooks toneMint
class node_client_init,node_scale_packets toneRose
class node_developer,node_player,node_minecraft toneIndigo
```

## Components

### Scale API

- [Scale data](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleData.java): `src/main/java/virtuoel/pehkui/api/ScaleData.java`
- [Scale types](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleType.java): `src/main/java/virtuoel/pehkui/api/ScaleType.java`
- [Scale registries](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleRegistries.java): `src/main/java/virtuoel/pehkui/api/ScaleRegistries.java`
- [Scale modifiers](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleModifier.java): `src/main/java/virtuoel/pehkui/api/ScaleModifier.java`
- [Scale easing](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/api/ScaleEasings.java): `src/main/java/virtuoel/pehkui/api/ScaleEasings.java`

### User Inputs

- [Scale commands](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/command/argument/ScaleTypeArgumentType.java): `src/main/java/virtuoel/pehkui/command/argument/ScaleTypeArgumentType.java`
- [Entity selectors](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/command/PehkuiEntitySelectorOptions.java): `src/main/java/virtuoel/pehkui/command/PehkuiEntitySelectorOptions.java`

### Game Runtime

- [Entity integration](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/EntityMixin.java): `src/main/java/virtuoel/pehkui/mixin/EntityMixin.java`
- [Scaled behavior](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/compat1205plus/LivingEntityMixin.java): `src/main/java/virtuoel/pehkui/mixin/compat1205plus/LivingEntityMixin.java`
- [Reach adjustment](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/reach/PlayerEntityMixin.java): `src/main/java/virtuoel/pehkui/mixin/reach/PlayerEntityMixin.java`
- [Scale rendering](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/mixin/client/compat121plus/EntityRendererMixin.java): `src/main/java/virtuoel/pehkui/mixin/client/compat121plus/EntityRendererMixin.java`

### Client Sync

- [Client initializer](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/PehkuiClient.java): `src/main/java/virtuoel/pehkui/PehkuiClient.java`
- [Scale updates](https://github.com/virtuoel/pehkui/blob/fabric/1.14.4-1.x.x/src/main/java/virtuoel/pehkui/PehkuiClient.java): `src/main/java/virtuoel/pehkui/PehkuiClient.java`

### Other components

- **Mod developer**
- **Player**
- **Minecraft runtime**

## Connections

- Mod developer → Scale data: sets scale
- Player → Scale commands: runs commands
- Scale commands → Scale types: selects type
- Scale commands → Scale data: changes scale
- Entity selectors → Minecraft runtime: extends selection
- Scale types → Scale registries: registered in
- Scale data → Scale modifiers: modified by
- Scale data → Scale easing: interpolates with
- Minecraft runtime → Entity integration: invokes hooks
- Entity integration → Scale data: reads scale
- Scaled behavior → Scale data: reads scale
- Reach adjustment → Scale data: reads scale
- Scale rendering → Scale data: renders scale
- Minecraft runtime → Client initializer: initializes client
- Client initializer → Scale updates: registers handlers
- Scale updates → Scale data: applies updates
