Verox' RPG Runestones
Runestones for fast traveling to known locations.
Runestones are waystones for the Verox' RPG series: a floating crystal, circled by eight rune tablets and a spinning stone frame. Players awaken them, travel between them through a radial menu and take friends, pets and familiars along inside a teleport bubble.
Required: GeckoLib, Curios API
Optional: Jade
Getting started
- Craft Rune Dust from amethyst shards
- Craft a Runestone and place it - it needs two blocks of space
- Give it a name, or keep the suggested one
- Place a second runestone somewhere else, walk back and right-click the first one - the second appears in the ring
The player who places a runestone knows it right away. Everyone else sees it asleep until they touch it.
Items
| Item | Recipe | Use |
|---|---|---|
| Rune Dust | 1 Amethyst Shard → 3 | Pays for teleports |
| Runestone | Stone Bricks, Amethyst Shard, Rune Dust | A waystone, two blocks tall |
| Rune Tablet | Rune Dust around Smooth Stone | Teleports you from anywhere |
| Soul Anchor | Chain, Eye of Ender, Rune Dust | Charm - lets friends travel to you |
Runestones
States
Every player sees each runestone in their own state:
| State | When | What you see |
|---|---|---|
| Dormant | You haven't touched it yet | Tablets and frame lie scattered on the ground, the crystal rests tilted and low |
| Awakening | Your first right-click | The pieces rise one after another, the crystal lifts, the ring starts turning |
| Idle | You know it | The crystal floats and turns, the tablets bob in a wave, ring and frame turn against each other |
| Active | You know it and stand within 6 blocks | Same as idle, but faster |
Two players standing next to each other can see the same runestone asleep and awake. Global runestones are awake for everyone.
While dormant, only the pile on the ground can be clicked. Once awake, the whole stone can be targeted. The stone itself only has a low base you can step onto - you never bump into floating pieces.
Using runestones
- Discovering: right-click a runestone to add it to your destinations. The owner knows their own stones automatically
- Names: new stones get a random name from a list of 200 fantasy names, never one that's already taken. Names are limited to 20 characters
- Editing: click the name plate in the ring to rename the stone or change its mode - only the owner, operators and creative players can
- Breaking: drops the runestone again. The stone disappears from everyone's ring
The radial menu
| Element | Action |
|---|---|
| Stones | Each stone is a destination with its initials. Hover for name, distance and cost, click to travel |
| Name plate | Shows the current runestone. Click to edit it |
| Center display | Name, distance or dimension, and cost of the hovered stone |
| Arrows / mouse wheel | Turn the page - 8 destinations per page |
| Friends button | Opens the friends menu |
| Shift + drag | Swaps two stones, or moves a stone to the end when dropped on an empty slot |
Long names scroll while hovered. Soul Anchors of your friends always come first and show their name in gold.
The teleport bubble
Travelling from a runestone builds a sphere of rune light with a radius of 4 blocks around the stone for 2.5 seconds. The tablets and frame fly out to the edge of the bubble and trace it while it forms, then snap back into the ring right before the jump. At the destination runestone they fly in from the edge. Everyone travelling along glows during the charge, and every player nearby sees the animation.
Travels along: friends, pets, familiars, villagers, animals and horses within 4 blocks of the runestone Stays behind: enemies, bosses, armor stands, players who aren't your friends and spectators
Companions arrive in the same arrangement around you. Leaving the bubble, dying or logging out cancels the teleport - nothing is paid until the jump.
Rune Tablet
Opens the ring from anywhere and teleports you instantly - without bubble and without companions. It reaches runestones and Soul Anchors, costs more (rune_tablet.base_cost) and goes on cooldown after each jump. The cooldown is shown on the item and survives a relog. Creative players travel for free, but the cooldown still applies.
Friends
Open the friends menu from the ring. Type a player name and press Send to send a request - it works for offline players who have joined the server before. Requests appear under Requests, with a counter on the button. If two players request each other, they become friends right away. Friendships are mutual and saved with the world.
Soul Anchor
Wear the Soul Anchor in a charm slot. While you're online, every friend sees you as a destination in their ring and can travel to your current position - from a runestone with their bubble, or instantly with a tablet.
Global runestones
A global runestone appears in every player's ring without being discovered - ideal for spawn hubs and server towns. Switch the mode in the edit screen (Mode: Discovery / Mode: Global) or with /runestones setglobal.
Creative players and operators can always set the mode. With players_can_set_global = true, every owner can do it for their own stones.
Global runestones are shown in purple - their initials in the ring, their name in the display, in Jade and in /runestones list.
When a stone is switched back to discovery, it disappears for everyone who only had it because it was global.
Costs
| Base cost | Extra | |
|---|---|---|
| Runestone | cost.base | +1 per cost.blocks_per_extra blocks, + cost.cross_dimension_extra for other dimensions |
| Rune Tablet | rune_tablet.base_cost | same extras |
Costs are paid in Rune Dust by default. With cost.mode set to XP they're paid in experience levels, with NONE travel is free. Creative players always travel for free.
Protection
With protect_runestones = true:
- Only the owner, operators and creative players can break a runestone
- Global runestones can only be broken by operators and creative players - or by their owner when
players_can_set_globalis true - Explosions can't destroy runestones
- Pistons can never move them
Commands
All commands require operator permission level 2.
| Command | Effect |
|---|---|
/runestones list | Lists every runestone with position and a clickable teleport link |
/runestones teleport <id> | Teleports you to a runestone |
/runestones remove <id> | Removes a runestone and its block |
/runestones setglobal <id> <true/false> | Switches a runestone between global and discovery |
/runestones rename <id> <name> | Renames a runestone |
IDs are suggested while typing, and /runestones list shows them when hovering over the teleport link.
Config
Server config: serverconfig/verox_rpg_runestones-server.toml in the world folder.
| Option | Default | Effect |
|---|---|---|
cost.mode | DUST | DUST, XP or NONE |
cost.base | 1 | Base cost of a runestone teleport |
cost.blocks_per_extra | 5000 | Every this many blocks add 1 to the cost, 0 disables it |
cost.cross_dimension_extra | 2 | Extra cost for another dimension |
teleport.allow_cross_dimension | true | Allows travel between dimensions |
teleport.players_can_set_global | false | Lets every owner make their stones global |
teleport.protect_runestones | true | Enables the break and explosion protection |
rune_tablet.cooldown_seconds | 300 | Tablet cooldown after a teleport |
rune_tablet.base_cost | 3 | Base cost of a tablet teleport |
bubble.charge_ticks | 50 | Charge time of the bubble, 0 = instant |
bubble.takes_friends | true | Friends travel along |
bubble.takes_creatures | true | Non-hostile creatures travel along |
Datapacks
Runestone names
New runestones pick their name from data/<namespace>/runestone_names/<file>.json:
{
"replace": false,
"names": ["Moonveil", "Stone of Whispers", "Gate of Embers"]
}All files are merged. "replace": true drops the names loaded before it - use it to replace the built-in list completely. Names longer than 20 characters are skipped.
Resource packs
The runestone is a GeckoLib model. Resource packs can replace these files:
| File | Content |
|---|---|
assets/verox_rpg_runestones/geo/runestone.geo.json | Model |
assets/verox_rpg_runestones/animations/runestone.animation.json | Animations: dormant, awaken, idle, active, teleport, arrive |
assets/verox_rpg_runestones/textures/block/runestone.png | Texture |
assets/verox_rpg_runestones/textures/block/runestone_glowmask.png | Glowing pixels - fully transparent everywhere else |
assets/verox_rpg_runestones/models/item/runestone.json | Item display settings |
Keep the bone names when changing the model - the animations rely on them.
Compatibility
- Curios API: adds the charm slot for the Soul Anchor
- Jade: shows a runestone's name, owner and global status
- Familiars and pets from other mods: travel along as long as they aren't hostile
Troubleshooting
A runestone doesn't show up in my ring
You have to right-click it once to discover it, unless it's global. Runestones in other dimensions are hidden when allow_cross_dimension is false.
My friend doesn't travel with me
Check that you're friends - both of you see each other in the friends menu - and that your friend stands inside the bubble when it closes.
My friend's Soul Anchor isn't in the ring
The Soul Anchor has to be worn in a charm slot, and your friend has to be online.
Credits
Runestones are inspired by Waystones by BlayTheNinth.
