# run2go/java-minecraft-smartmoving architecture

> Architecture diagram of the GitHub repository run2go/java-minecraft-smartmoving, 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/run2go/java-minecraft-smartmoving
- Repository: https://github.com/run2go/java-minecraft-smartmoving

## Overview

SmartMoving is a Paper Minecraft plugin for player movement abilities, notably crawling and wall jumping. Players trigger crawling and wall-jump behavior through game events; listeners check eligibility and delegate movement state changes to per-player logic. Crawling uses temporary client-side block changes, while wall jumping checks movement and wall conditions. Configuration and translations support tuning and administration. The README documents the combined movement capabilities; sampled source supports the described checks and delegation, but plugin startup and several listeners were not sampled, so those links are omitted.

Main entry points: [`src/main/java/com/github/ipecter/smartmoving/managers/ConfigManager.java`](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/managers/ConfigManager.java) (Settings and Locale), [`src/main/java/com/github/ipecter/smartmoving/listeners/PlayerToggleSneak.java`](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/listeners/PlayerToggleSneak.java) (Sneak Listener), [`src/main/java/com/github/ipecter/smartmoving/utils/WallJumpUtil.java`](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/utils/WallJumpUtil.java) (Wall-Jump Checks), [`src/main/java/com/github/ipecter/smartmoving/SMPlayer.java`](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SMPlayer.java) (Player Movement State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_plugin["Plugin Entry"]
  node_plugin_entry["Plugin Lifecycle<br/>[SmartMoving.java]"]
  node_manager["Player Manager"]
  node_join["Join Listener<br/>[PlayerJoin.java]"]
  node_sneak["Sneak Listener"]
  node_other_listeners["Other Event Listeners"]
  node_command["Admin Command<br/>[Command.java]"]
end

subgraph group_movement["Movement Features"]
  node_smplayer["Player Movement State<br/>[SMPlayer.java]"]
  node_crawl_util["Crawling Checks<br/>[CrawlingUtil.java]"]
  node_wall_util["Wall-Jump Checks<br/>[WallJumpUtil.java]"]
  node_wall_face["Wall Direction"]
end

subgraph group_config["Configuration"]
  node_config_manager["Settings and Locale<br/>[ConfigManager.java]"]
  node_settings["Plugin Settings<br/>[Setting.yml]"]
  node_translations["Translation Files"]
end

subgraph group_compat["Integrations"]
  node_nms_api["Packet Interface<br/>[NmsPackets.java]"]
  node_nms_impl["Fake Block Packets"]
  node_worldguard["Region Rules<br/>[WorldGuard.java]"]
  node_text_file_lib["Text and File Helpers<br/>[RTUPluginLib.java]"]
end

node_player(("Minecraft Player"))
node_admin(("Server Admin"))
node_worldguard_service["WorldGuard"]
node_placeholder_api["PlaceholderAPI"]

node_player -->|"sneak event"| node_sneak
node_player -->|"game events"| node_other_listeners
node_admin -->|"runs command"| node_command
node_join -->|"adds player"| node_manager
node_sneak -->|"gets player state"| node_manager
node_sneak -->|"checks crawling"| node_crawl_util
node_sneak -->|"checks wall"| node_wall_util
node_sneak -->|"starts or stops movement"| node_smplayer
node_smplayer -->|"checks blocks"| node_crawl_util
node_smplayer -->|"checks wall state"| node_wall_util
node_wall_util -->|"uses direction"| node_wall_face
node_smplayer -->|"requests fake blocks"| node_nms_api
node_nms_impl -->|"implements packets"| node_nms_api
node_manager -->|"uses settings"| node_config_manager
node_crawl_util -->|"reads rules"| node_config_manager
node_wall_util -->|"reads rules"| node_config_manager
node_command -->|"reloads settings"| node_config_manager
node_config_manager -->|"loads settings"| node_settings
node_config_manager -->|"loads locale"| node_translations
node_config_manager -->|"copies resources"| node_text_file_lib
node_text_file_lib -.->|"parses placeholders"| node_placeholder_api
node_crawl_util -->|"checks region"| node_worldguard
node_wall_util -->|"checks region"| node_worldguard
node_worldguard -.->|"queries flags"| node_worldguard_service

click node_plugin_entry "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SmartMoving.java"
click node_manager "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SmartMovingManager.java"
click node_join "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/listeners/PlayerJoin.java"
click node_sneak "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/listeners/PlayerToggleSneak.java"
click node_other_listeners "https://github.com/run2go/java-minecraft-smartmoving/tree/main/src/main/java/com/github/ipecter/smartmoving/listeners"
click node_command "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/commands/Command.java"
click node_smplayer "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SMPlayer.java"
click node_crawl_util "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/utils/CrawlingUtil.java"
click node_wall_util "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/utils/WallJumpUtil.java"
click node_wall_face "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/enums/WallJumpWallFace.java"
click node_nms_api "https://github.com/run2go/java-minecraft-smartmoving/blob/main/NMS/src/main/java/com/github/ipecter/nms/NmsPackets.java"
click node_nms_impl "https://github.com/run2go/java-minecraft-smartmoving/blob/main/VersionIndependentNMS/src/main/java/com/github/ipecter/smartmoving/nms/VersionIndependentNmsPackets.java"
click node_config_manager "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/managers/ConfigManager.java"
click node_settings "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/resources/Setting.yml"
click node_translations "https://github.com/run2go/java-minecraft-smartmoving/tree/main/src/main/resources/Translations"
click node_worldguard "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/dependencies/WorldGuard.java"
click node_text_file_lib "https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/lib/RTUPluginLib.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_plugin_entry,node_manager,node_join,node_sneak,node_other_listeners,node_command toneBlue
class node_smplayer,node_crawl_util,node_wall_util,node_wall_face toneAmber
class node_config_manager,node_settings,node_translations,node_admin,node_placeholder_api toneMint
class node_nms_api,node_nms_impl,node_worldguard,node_text_file_lib toneRose
class node_player,node_worldguard_service toneIndigo
```

## Components

### Plugin Entry

- [Plugin Lifecycle](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SmartMoving.java): `src/main/java/com/github/ipecter/smartmoving/SmartMoving.java`
- [Player Manager](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SmartMovingManager.java): `src/main/java/com/github/ipecter/smartmoving/SmartMovingManager.java`
- [Join Listener](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/listeners/PlayerJoin.java): `src/main/java/com/github/ipecter/smartmoving/listeners/PlayerJoin.java`
- [Sneak Listener](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/listeners/PlayerToggleSneak.java): `src/main/java/com/github/ipecter/smartmoving/listeners/PlayerToggleSneak.java`
- [Other Event Listeners](https://github.com/run2go/java-minecraft-smartmoving/tree/main/src/main/java/com/github/ipecter/smartmoving/listeners): `src/main/java/com/github/ipecter/smartmoving/listeners`
- [Admin Command](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/commands/Command.java): `src/main/java/com/github/ipecter/smartmoving/commands/Command.java`

### Movement Features

- [Player Movement State](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/SMPlayer.java): `src/main/java/com/github/ipecter/smartmoving/SMPlayer.java`
- [Crawling Checks](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/utils/CrawlingUtil.java): `src/main/java/com/github/ipecter/smartmoving/utils/CrawlingUtil.java`
- [Wall-Jump Checks](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/utils/WallJumpUtil.java): `src/main/java/com/github/ipecter/smartmoving/utils/WallJumpUtil.java`
- [Wall Direction](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/enums/WallJumpWallFace.java): `src/main/java/com/github/ipecter/smartmoving/enums/WallJumpWallFace.java`

### Configuration

- [Settings and Locale](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/managers/ConfigManager.java): `src/main/java/com/github/ipecter/smartmoving/managers/ConfigManager.java`
- [Plugin Settings](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/resources/Setting.yml): `src/main/resources/Setting.yml`
- [Translation Files](https://github.com/run2go/java-minecraft-smartmoving/tree/main/src/main/resources/Translations): `src/main/resources/Translations`

### Integrations

- [Packet Interface](https://github.com/run2go/java-minecraft-smartmoving/blob/main/NMS/src/main/java/com/github/ipecter/nms/NmsPackets.java): `NMS/src/main/java/com/github/ipecter/nms/NmsPackets.java`
- [Fake Block Packets](https://github.com/run2go/java-minecraft-smartmoving/blob/main/VersionIndependentNMS/src/main/java/com/github/ipecter/smartmoving/nms/VersionIndependentNmsPackets.java): `VersionIndependentNMS/src/main/java/com/github/ipecter/smartmoving/nms/VersionIndependentNmsPackets.java`
- [Region Rules](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/dependencies/WorldGuard.java): `src/main/java/com/github/ipecter/smartmoving/dependencies/WorldGuard.java`
- [Text and File Helpers](https://github.com/run2go/java-minecraft-smartmoving/blob/main/src/main/java/com/github/ipecter/smartmoving/lib/RTUPluginLib.java): `src/main/java/com/github/ipecter/smartmoving/lib/RTUPluginLib.java`

### Other components

- **Minecraft Player**
- **Server Admin**
- **WorldGuard**
- **PlaceholderAPI**

## Connections

- Minecraft Player → Sneak Listener: sneak event
- Minecraft Player → Other Event Listeners: game events
- Server Admin → Admin Command: runs command
- Join Listener → Player Manager: adds player
- Sneak Listener → Player Manager: gets player state
- Sneak Listener → Crawling Checks: checks crawling
- Sneak Listener → Wall-Jump Checks: checks wall
- Sneak Listener → Player Movement State: starts or stops movement
- Player Movement State → Crawling Checks: checks blocks
- Player Movement State → Wall-Jump Checks: checks wall state
- Wall-Jump Checks → Wall Direction: uses direction
- Player Movement State → Packet Interface: requests fake blocks
- Fake Block Packets → Packet Interface: implements packets
- Player Manager → Settings and Locale: uses settings
- Crawling Checks → Settings and Locale: reads rules
- Wall-Jump Checks → Settings and Locale: reads rules
- Admin Command → Settings and Locale: reloads settings
- Settings and Locale → Plugin Settings: loads settings
- Settings and Locale → Translation Files: loads locale
- Settings and Locale → Text and File Helpers: copies resources
- Text and File Helpers → PlaceholderAPI: parses placeholders
- Crawling Checks → Region Rules: checks region
- Wall-Jump Checks → Region Rules: checks region
- Region Rules → WorldGuard: queries flags
