Waystones
Waystones are admin-defined fast-travel points. Players discover them by walking near, interacting with them, completing quests, or anything else you can script with MythicMobs. Once discovered, players can open /waystones to teleport between any waystones they know, and bind one as a respawn point that takes priority over graveyards.
Like graveyards, waystones live in pack files at <pack>/waystones/*.yml. Unlike graveyards, each waystone is rendered in-world as a MythicMobs mob (so you can give it any model, animation, sounds, particles, name-plate, hitbox, etc.) and shows up differently per player depending on whether that player has discovered it.
How it works
Every waystone defines up to three states, each backed by a different MythicMobs mob:
| State | When the player sees this variant |
|---|---|
UNDISCOVERED |
Default. Players who have never discovered the waystone. |
DISCOVERED |
Players who have discovered the waystone. |
ACTIVE |
Optional. Players who have selected this waystone as their respawn. |
All three mobs are spawned at the waystone's coordinates simultaneously. MythicRPG hides the variants you shouldn't see and shows only the one matching your current state, so different players standing in the same spot see a different mob. This works for plain MythicMobs mobs and Model Engine models without any extra setup.
State only ever changes through MythicRPG's mechanics — typically waystoneDiscover fired from a proximity skill, but it can be any MythicMobs trigger: completing a quest, looting a chest, sneezing on a Tuesday, your call.
Discovery and the bound respawn waystone are stored per profile. A player with multiple profiles starts each one from a blank slate.
Configuration
Schema
IRONFORGE: # the waystone id (case-insensitive, must be unique)
DisplayName: '<gold>Ironforge' # used in the menu and as a friendly name in placeholders
Icon: IRON_INGOT # the item shown in the teleport menu (any Material)
World: world # required
X: 100.5 # required
Y: 65 # required
Z: -250.5 # required
Yaw: 180 # optional, default 0
Pitch: 0 # optional, default 0
Networks: # optional list of group names (see Networks below)
- overworld
- dwarven-cities
Respawnable: true # optional, default true. If false, this waystone can't be bound as respawn
Permission: mythicrpg.waystone.ironforge # optional. If set, the player must have it to discover and use this waystone
States: # required. UNDISCOVERED is mandatory; DISCOVERED and ACTIVE are optional
UNDISCOVERED:
Mob: WaystonePillarDormant # the MythicMobs mob to spawn for this variant
DISCOVERED:
Mob: WaystonePillarLit
OnEnter: # optional. MythicMobs skills fired with the player as caster
- WaystoneDiscoveredFx # when they transition INTO this state
ACTIVE:
Mob: WaystonePillarActive
OnEnter:
- WaystoneActiveFx
TeleportConditions: # optional. MythicMobs conditions checked when this waystone is the DESTINATION
- inWorld{w=world}
- hasMoney{amount=50}
| Option | Description | Default |
|---|---|---|
DisplayName |
Pretty name used in the menu, placeholders, and chat. Supports MiniMessage tags. | the waystone id |
Icon |
The vanilla Material shown as the menu icon for this waystone. |
ENDER_PEARL |
World |
World the waystone is in. If the world is unloaded the waystone is skipped. | required |
X / Y / Z |
Coordinates. | required |
Yaw / Pitch |
Facing direction the player is set to after teleporting in. | 0 |
Networks |
Group names this waystone belongs to. Used to gate teleport pairs (see Networks). A waystone with no networks can never be teleported to from another waystone via the network check, but can still be reached from the menu. | [] |
Respawnable |
Whether players are allowed to bind this waystone as their respawn point. | true |
Permission |
Optional permission node. If set, players without it can't discover or teleport to the waystone. | (none) |
States.<STATE>.Mob |
MythicMobs mob id used as this state's visual. | required per declared state |
States.<STATE>.OnEnter |
List of MythicMobs skill names fired with the player as caster on transition into the state. | [] |
TeleportConditions |
List of Mythic conditions. All must pass before a teleport to this waystone is allowed. Also checked when selecting this waystone as a respawn target. | [] |
State-variant MM mobs
Because the variants are just MythicMobs mobs, you have the full Mythic feature set to work with. A minimal pair:
# In <pack>/mobs/waystone-pillars.yml
WaystonePillarDormant:
Type: ARMOR_STAND
Display: '<gray>Ancient Pillar'
Options:
Despawn: false
Persistent: true
NoAI: true
Invulnerable: true
Silent: true
AIGoalSelectors:
- clear
WaystonePillarLit:
Type: ARMOR_STAND
Display: '<gold>Ancient Pillar'
Options:
Despawn: false
Persistent: true
NoAI: true
Invulnerable: true
Silent: true
Glowing: true
Skills:
- effect:particles{p=end_rod;amount=2;y=2} @self ~onTimer:20
Always set
Despawn: false,Persistent: true,NoAI: true,Invulnerable: trueon your variants. They're static fixtures, not real mobs.
Networks
A waystone's Networks: field decides which other waystones it can teleport to when teleport is happening from a specific source waystone. Two waystones can teleport between each other if they share at least one network name. The names are arbitrary strings: overworld, dwarven-cities, dungeon-1-floors-1-3, whatever you want.
This only matters when you call waystoneTeleport with both a from and a to, or use canTeleportToWaystone with both. The default /waystones menu doesn't pass a source, so any discovered waystone is reachable from it. Network gating is opt-in for "must travel between physical waystones" designs.
Respawn integration
If a player has bound a waystone as their respawn point (via waystoneSetRespawn or /waystones admin setrespawn), it's used in place of a graveyard on death, provided:
- The waystone is currently discovered for that profile.
Respawnable:istrue.- All
TeleportConditions:pass.
If any of those fails, the death falls through to the graveyard selector.
When the player respawns at a waystone, MythicRPG fires the ~onWaystoneRespawn trigger with the variable waystone set to the matched waystone id.
The Player Menu
/waystones (aliases: waystones, wp) opens a paginated menu of every waystone the player has discovered. Clicking one teleports them after running the destination's TeleportConditions and firing the ~onWaystoneTeleport trigger.
The menu is a standard MythicMobs custom menu defined in <plugin>/menus/waystones.yml. The default ships a 6-row layout with a paged content area; you can fully reskin it the same way you reskin spellbook.yml.
For a programmatic open (e.g. from another menu's icon, or from an NPC interaction), use the waystoneOpenMenu mechanic.
Wiring discovery yourself
Because discovery is fully scripted, the simplest pattern is a passive proximity scan on the DISCOVERED / ACTIVE mob variant of each waystone:
# In <pack>/skills/waystones.yml
WaystoneScan_IRONFORGE:
Skills:
- waystoneDiscover{waystone=IRONFORGE} @PlayersInRadius{r=6} ?!waystoneDiscovered{waystone=IRONFORGE}
# Then on a variant mob:
WaystonePillarLit_IRONFORGE:
Parent: WaystonePillarLit
Skills:
- skill{s=WaystoneScan_IRONFORGE} ~onTimer:40
For a quest-style unlock (e.g. "this waystone is gifted to you on completing a delivery"), call waystoneDiscover from anywhere: a quest mechanic, a chest interaction, a level-up trigger, etc. It's the same mechanic.
If you want a right-click to interact flavor (player must approach AND right-click), wire it on the mob's ~onInteract trigger:
WaystonePillarLit_IRONFORGE:
Parent: WaystonePillarLit
Skills:
- skill{s=WaystoneOnInteract_IRONFORGE} ~onInteract
WaystoneOnInteract_IRONFORGE:
Skills:
- waystoneDiscover{waystone=IRONFORGE} @trigger ?!waystoneDiscovered{waystone=IRONFORGE}
- waystoneOpenMenu @trigger ?waystoneDiscovered{waystone=IRONFORGE}
Costs, cooldowns, and effects
MythicRPG ships no built-in teleport cost or cooldown. Both are scripted with MythicMobs skills hooked into the triggers below.
For costs that must gate the teleport, put the check in the waystone's TeleportConditions: (e.g. hasMoney{amount=50}). The teleport won't happen if it fails.
For actually deducting the cost (or applying a cooldown), hook ~onWaystoneTeleport:
WaystoneTeleportTax:
Skills:
- takeMoney{amount=50} @self
- setCooldown{id=waystone-tp;ticks=1200} @self
Then make the cooldown gate part of the destination conditions:
TeleportConditions:
- hasMoney{amount=50}
- cooldownPassed{cd=60;id=waystone-tp}
MythicMobs Integration
The full surface MythicRPG exposes for scripting waystone behavior:
Mechanics
| Mechanic | Description |
|---|---|
waystoneDiscover |
Marks the target player as having discovered a waystone. |
waystoneForget |
Resets a waystone back to UNDISCOVERED for the target player. |
waystoneSetState |
Low-level: set a player's state for a waystone to any value. |
waystoneTeleport |
Server-side teleport to a waystone, skipping the menu. |
waystoneOpenMenu |
Opens the waystone menu for the target player. |
waystoneSetRespawn |
Binds the target player's respawn to a waystone. |
waystoneClearRespawn |
Unbinds the target player's waystone respawn. |
waystoneReveal |
Forces a waystone visible to one player regardless of state (cinematic reveal). |
waystoneHide |
Forces a waystone hidden from one player regardless of state. |
Conditions
| Condition | Description |
|---|---|
waystoneDiscovered |
Whether the player has discovered the given waystone. |
waystoneState |
Matches the player's current state for the given waystone. |
inWaystoneNetwork |
Whether a waystone belongs to a network. |
canTeleportToWaystone |
Whether the player can currently teleport to a waystone (discovery + permission + conditions). |
Triggers
| Trigger | When it fires |
|---|---|
~onWaystoneDiscover |
Right after a player transitions from UNDISCOVERED into DISCOVERED. |
~onWaystoneTeleport |
After a successful waystone teleport. This is where you deduct costs and apply cooldowns. |
~onWaystoneStateChange |
Any waystone state change for the player (discover, forget, set to ACTIVE, etc.). |
~onWaystoneRespawn |
When the player respawns at a bound waystone. |
~onWaystoneInteract |
Reserved hook for admin scripts; not auto-fired by mythicrpg. Fire it yourself with the trigger mechanic if you want a uniform place to hang interact behavior. |
Placeholders
See the Placeholders page for the full PAPI surface.
Commands
See Commands and Permissions for the full list. Quick reference:
| Command | Description |
|---|---|
/waystones |
Open the discovered-waystones menu (player). |
/waystones list <network> |
List your discovered waystones (optionally filtered). |
/waystones reload |
Reload waystone definitions from packs. |
/waystones admin list |
List every loaded waystone. |
/waystones admin discover <player> <id> |
Mark a waystone as discovered for a player. |
/waystones admin forget <player> <id> |
Reset a waystone to UNDISCOVERED for a player. |
/waystones admin tp <player> <id> |
Teleport a player to a waystone. |
/waystones admin setrespawn <player> <id> |
Bind a player's respawn waystone. |
/waystones admin clearrespawn <player> |
Unbind a player's respawn waystone. |
Storage
Discoveries persist to the same backend as other profile data (JSON or MySQL, whatever Storage.Driver is set to in config-rpg.yml). On the MySQL driver, the data lives in two places:
mythicrpg_profile_waystone— one row per(profile, waystone)pair recording its state and discovery time.mythicrpg_profile.respawn_waystone_id— nullable column on the existing profile row.
Both are created automatically by the schema migrator on first startup after upgrading.