Waypoints v0.0.2
Server-managed waypoints with access rules, a Java HUD (bedrock coming later), and vanilla commands
See the plugin guide and API reference on the documentation site.
Installation
Put waypoints.wasm from the plugin's GitHub release in your server's plugins/ folder and restart. Hot reload cannot ask for permissions, so the first load needs a restart.
Permissions
Pumpkin asks for these on the server console the first time the plugin loads.
| Permission | Why |
|---|---|
fs.read.data | Read the waypoint store from the plugin data folder. |
fs.write.data | Persist waypoint changes in the plugin data folder. |
http.outbound | Check Pumpkin Market for plugin updates. |
Commands
| Command | Description | Permission | Default access |
|---|---|---|---|
/wp create | Create a waypoint at your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp create <name> | Create a waypoint at your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp create <name> <x> <y> <z> | Create a waypoint at your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp reload | Reload waypoint data from disk | Waypoints:command.admin | operators (level 3) |
/wp delete <name> | Delete a waypoint by name | Waypoints:command.admin | operators (level 3) |
/wp rename <name> <newName> | Rename a waypoint | Waypoints:command.admin | operators (level 3) |
/wp relocate | Move a waypoint to your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp relocate <name> | Move a waypoint to your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp relocate <name> <x> <y> <z> | Move a waypoint to your position or explicit coordinates | Waypoints:command.admin | operators (level 3) |
/wp list | List enabled waypoints you can access | Waypoints:command.use | everyone |
/wp info <name> | Show details for an enabled waypoint you can access | Waypoints:command.use | everyone |
/wp teleport | Teleport to a waypoint or, as an operator, teleport selected players | Waypoints:command.use | everyone |
/wp teleport <name> | Teleport to a waypoint or, as an operator, teleport selected players | Waypoints:command.use | everyone |
/wp teleport <name> <targets> | Teleport to a waypoint or, as an operator, teleport selected players | Waypoints:command.use | everyone |
/wp tp | Alias for teleport | Waypoints:command.use | everyone |
/wp tp <name> | Alias for teleport | Waypoints:command.use | everyone |
/wp tp <name> <targets> | Alias for teleport | Waypoints:command.use | everyone |
/wp enable <name> | Enable a waypoint | Waypoints:command.admin | operators (level 3) |
/wp disable <name> | Disable a waypoint | Waypoints:command.admin | operators (level 3) |
/wp get <name> | Inspect a waypoint, including disabled records | Waypoints:command.admin | operators (level 3) |
/wp access public <name> | Allow every player to access a waypoint | Waypoints:command.admin | operators (level 3) |
/wp access restricted <name> | Restrict a waypoint to its grants | Waypoints:command.admin | operators (level 3) |
/wp access list <name> | List a waypoint access mode and its grants | Waypoints:command.admin | operators (level 3) |
/wp access grant player <name> <player> | Grant access to an online player | Waypoints:command.admin | operators (level 3) |
/wp access grant permission <name> <permission> | Grant access to a permission node | Waypoints:command.admin | operators (level 3) |
/wp access grant group <name> <group> | Grant access to a permission marker group | Waypoints:command.admin | operators (level 3) |
/wp access revoke player <name> <player> | Revoke an online player grant | Waypoints:command.admin | operators (level 3) |
/wp access revoke permission <name> <permission> | Revoke a permission node grant | Waypoints:command.admin | operators (level 3) |
/wp access revoke group <name> <group> | Revoke a permission marker group grant | Waypoints:command.admin | operators (level 3) |
/wp set color <name> <hex> | Set the waypoint color | Waypoints:command.admin | operators (level 3) |
/wp set icon <name> <item> | Set the waypoint item icon | Waypoints:command.admin | operators (level 3) |
/wp set label <name> <label> | Set the waypoint display label | Waypoints:command.admin | operators (level 3) |
/wp set description <name> <description> | Set the waypoint description | Waypoints:command.admin | operators (level 3) |
/wp set visibility-range <name> <range> | Set the waypoint rendering range in blocks | Waypoints:command.admin | operators (level 3) |
/wp reset <name> <property> | Reset one mutable waypoint property to its default | Waypoints:command.admin | operators (level 3) |
Configuration
This plugin has no configuration file.
Create and use waypoints
Operators can create a waypoint at their exact position with /wp create "Home Base", or provide absolute coordinates with /wp create "Home Base" 120.5 64 -30. Names are unique across worlds. Use /wp list to see enabled waypoints you can access, /wp info <name> for details, and /wp tp <name> to teleport yourself. Operators can use /wp tp <name> @a to teleport a player selector.
Only server operators can create, edit, enable, disable, grant, or delete waypoints. Administrative handlers check Pumpkin's operator list even if a command permission was manually granted. Player grants resolve online names and store UUIDs. Group grants check the permission marker Waypoints:group.<slug>; another permission provider must assign that marker to group members.
The versioned store is plugins/data/Waypoints/waypoints.json. If it is malformed or has an unsupported schema, the plugin preserves it and refuses writes until the issue is corrected. A successful v1 migration keeps the original bytes in waypoints.v1.json.
Java waypoint HUD
Minecraft Java 26.3 players see each enabled waypoint they can access in the same dimension and within its optional visibility range. Private display packets keep restricted names and personalized distances off other clients. Names reveal after a settled look and stay visible near the destination; distant peripheral markers show just their distance and icon. Labels use the waypoint color, a shadow, and a subtle backdrop independent of world lighting. Iconless waypoints use a colored diamond.
The HUD uses client-only TextDisplay entities along each waypoint's world direction. A smooth depth curve approaches a maximum of 24 blocks from the player's eyes, reducing the apparent movement caused by delayed position samples. Labels face the viewer and render through terrain. Camera rotation does not move or replace them. Between sixteen and three blocks from a waypoint, the projection blends into a world anchor two blocks above its stored Y coordinate. It never passes the destination during the blend; within three blocks it stays at the anchor. The transition works in both directions.
Perspective sizing uses camera-forward depth to avoid enlarging labels at the screen edges, and keeps their apparent size consistent through the approach at a fixed field of view. Labels are limited to 32 characters on the HUD; /wp info retains the complete text. Distances use meters below one kilometer and tenths of kilometers above it, with hysteresis to prevent rounding flicker. Text, icons, and backdrop fade between two and 0.75 blocks from the destination, leaving the immediate view clear.
Waypoints stored in the same half-block grid cell get a stable vertical stack, ordered by identifier, without camera-dependent rearrangement. Distinct waypoints along the same bearing may still overlap. Steps and jumps receive strong elevation damping while steep vertical destinations respond faster. Damping eases off near the world anchor. Position and scale updates interpolate over one client tick; unchanged text is not resent for appearance-only updates.
This approximates a first-person HUD: network latency, client view bobbing, and third-person camera offsets can still affect alignment. The server cannot read client FOV or reliably detect Java item-use state, so spyglass and modded zoom enlarge the labels. Other Java protocol versions and Bedrock clients do not receive the HUD. Icons use vanilla 26.3 atlas textures; block items use a representative model texture, and custom item IDs require the corresponding item/<path> sprite in the client's resource pack.
See the preview setup and test checklist for building and trying the current HUD.