Content generated with AI — it may contain mistakes.

Modules

Movement

Spawn, homes, warps, TPA, /back, random teleport and /near — the seven modules that move a player.

Seven modules move players. Five of them share the same warmup: a countdown drawn as an action bar and a title, cancelled by moving or by taking damage, with a per-second sound and a permission that skips it entirely. Each module has its own copy of those settings, so a home can be instant while a warp takes five seconds.

A teleport that cannot happen at all says why instead of doing nothing. Spawn, homes, warps, TPA, /back and portals share four lines in messages.yml: errors.server-unreachable (the place is on a server this one cannot reach), errors.world-not-loaded, errors.player-not-found and errors.teleport-failed.

Spawn

/spawn teleports to the server spawn. /spawn set stores it, and needs exyliasurvivalcore.spawn.set.

SettingDefaultWhat it does
warmup-seconds3Countdown before the teleport
cancel-on-move, cancel-on-damagetrueWhat stops it
permission-bypass-warmupexyliasurvivalcore.spawn.bypassThe node that skips the countdown — the string is yours to change
blacklisted-worlds[]Worlds /spawn refuses from
teleport-on-joinfalseEvery join goes to spawn
teleport-on-first-jointrueA first join goes to spawn
respawn-at-spawntrueDeath sends them to spawn
override-bed-spawntrueEven when they have a bed

/spawn itself checks no permission. The spawn is also pushed to clients as a waypoint where Apollo or Feather is installed.

Every server keeps its own spawn. The row is named after the server, so servers sharing one database no longer overwrite each other with a place in a world the others do not have. A server with no row of its own reads the single spawn older versions wrote and saves a copy under its own name. If the spawn's world is not loaded on that server, respawn-at-spawn leaves the respawn point alone.

Homes

Personal named locations. /sethome [name], /home [name], and /homes for the menu — rename, re-icon, teleport, delete.

SettingDefaultWhat it does
max-homes3The floor for everybody
default-home-namehomeWhat /sethome with no name is called
default-iconGRASS_BLOCKThe icon a new home gets
home-name-max-length16Longest name
warmup-seconds and friends3As above

How many homes a player gets is a permission tier: exyliasurvivalcore.homes.max_homes.<n>, and the highest node they hold wins. max-homes is only what somebody with no node gets.

A home knows which server it was set on

Homes store a server alongside the coordinates, so /home works from anywhere on the network. A home on another server has no local location at all — which is why the API exposes a teleport method rather than leaving callers to read the coordinates.

/homesadmin delhome <player> <home> and /homesadmin listhomes <player> need survivalcore.admin.homes, and both run from the console.

Warps

Server-wide named locations, built from /warpadmin. Each one has a display name, an icon, a cost, an optional permission and a location.

/warp opens the list of the ones a player may use; /warp <id> goes straight there. Warps also cross the network.

Bypass nodeWhat it skips
exyliasurvivalcore.warps.bypassBoth the cost and the cooldown
exyliasurvivalcore.warps.bypass.costThe cost
exyliasurvivalcore.warps.bypass.cooldownThe cooldown

exyliasurvivalcore.warps.bypass also skips the warp's countdown.

SettingDefaultWhat it does
warmup-seconds3Countdown before the warp
cancel-on-move, cancel-on-damagetrueWhat stops it
cooldown-seconds0Seconds before the same player may use the same warp again. 0 turns it off
blacklisted-worlds[]Worlds /warp refuses from

The cooldown is counted per player and per warp, and it is stored in the database (sc_warp_cooldowns), so a warp that puts the player on another server does not hand them a fresh cooldown there.

The cost is checked before the countdown but charged on arrival. Money and cooldown are only spent once the teleport succeeds: walking out of the countdown, a world that is no longer loaded or a server that cannot be reached costs nothing and starts no cooldown.

modules/warps/menus/warp_setup.yml is an admin editor that lives with the player menus rather than under menus/admin/, so your edits to it are kept. Everything under menus/admin/ is rewritten from the jar on every start.

TPA

/tpa <player> asks to go to them; /tpahere <player> asks them to come to you. /tpaccept and /tpadeny answer, with an optional name to pick which request. With no name they answer the newest one.

/tpacancel [player] takes back a request you sent and have not had answered yet, the newest one when no name is given. It needs exyliasurvivalcore.tpa.cancel. Tab completion only offers names that mean something: /tpaccept and /tpadeny suggest the players waiting on you, and /tpacancel suggests the players you asked.

Across servers

The other player can be on any server of the network. That needs ExyliaLib's cross-server teleports: where they are not available, a player on another server reads as not found. Whoever moves is handed over to the other player's server. A tpa moves the sender and a tpahere moves the target, and where the other player stands is read when the countdown ends, not when the request was accepted.

  • Auto-accept is decided by the target's own settings, on the target's server.
  • The confirmation screen shows a player on another server by that server's name. Their world, position, health and food read —.
A sender who switches servers before the answer is not moved

Each server keeps its own copy of the requests that involve somebody standing on it. A sender who leaves for a third server while waiting has no copy there. When the target accepts, the target is told it was accepted, but nobody moves. The source comment says such a sender "still gets their answer wherever they are". The code does not do that.

The request itself is a centred prompt with clickable [✔ ACCEPT] and [✘ DENY] buttons. tpa.request-received and tpa.request-here-received are now lists, one line per entry, and a line may open with [center]. An existing messages.yml gets the new prompt only where the line was still the old default. A line you rewrote stays yours.

SettingDefaultWhat it does
request-expire-seconds60How long a request lives
send-confirm-defaulttrueWhether a confirmation screen is shown before sending
tpa-enabled-defaulttrueWhether players accept requests at all to begin with
auto-accept-defaultfalseWhether requests are accepted without asking

/tpatoggle flips whether they receive requests; /tpatoggle autoaccept and /tpatoggle confirm flip the other two. /autotpaaccept exists as well and is an exact duplicate of /tpatoggle autoaccept — same behaviour, same node.

All three of these preferences are also on the /settings screen, reading and writing the same rows.

Back

/back returns a player to where they were. Which moments are remembered is configuration:

SettingDefault
save-on-deathtrue
save-on-teleporttrue
save-on-portalfalse
blacklisted-worlds[]

One place is remembered per player, and it is stored in the database (sc_back). It survives a restart, and it follows the player to another server: the place they left on one server is the one /back offers on the next. It stops being offered after teleport.back-history-minutes in config.yml, 30 by default.

Homes, /back and a TPA on the same server record the place only when the teleport succeeds, so a countdown the player walks out of leaves no /back pointing at where they stood. A warp records it after its countdown, just before the move, and so does a TPA that hands the player to another server. The other server reads the row as they join, so it is written before they leave.

Random teleport

/rtp opens a world list; /rtp <world> goes straight to one. Worlds come from modules/rtp/worlds.yml — a world that is not in the file cannot be reached at all.

Per-world keyWhat it does
enabledWhether it is offered
display-name, iconHow it appears in the menu
min-x, max-x, min-z, max-zThe box searched
priceCharged per teleport
cooldownSeconds, or -1 to use the module's own
biome-blacklistBiomes a landing spot may not be in

A pool keeps safe locations ready in advance, so /rtp is instant rather than a search:

pool:
  enabled: true
  size: 40
  max-concurrent-searches: 3
  refill-interval: 30

Pre-generating the world's chunks — with Chunky, for instance — collapses the time the pool needs to fill.

The RTP bypass nodes are config strings

bypass-cooldown-permission and bypass-price-permission both ship as survivalcore.rtp.bypass — note the short prefix. They are whatever you write there, not fixed nodes.

/rtpadmin forcertp <player> <world> sends somebody, and /rtpadmin pool reports the pool.

Near

/near lists nearby players with their distance and a compass direction.

SettingDefaultWhat it does
display-modeUIUI for the menu, CHAT for a chat list
default-radius100Searched when nothing else applies
max-radius1000The ceiling, permission included
cooldown-seconds3Between uses
distance-typeHORIZONTALHORIZONTAL or 3D, for filtering

exyliasurvivalcore.near.radius.<n> raises a player's radius, highest node winning — but max-radius still caps it. distance-type only decides who is filtered in; the distance shown is always horizontal.

The teleport section

config.yml has a teleport section, handed to ExyliaLib on start and again on every /sc reload. It holds the defaults for any teleport that does not set its own, plus what cross-server handovers share.

teleport:
  warmup-seconds: 0.0
  cancel-on-move: true
  cancel-on-damage: true
  safe-search-radius: 5
  safe-max-attempts: 32
  cross-server-ttl-seconds: 300
  cross-server-settle-seconds: 0.5
  back-history-size: 3
  back-history-minutes: 30
  tpa-expiry-seconds: 60
  tpa-max-pending: 8
  random-max-attempts: 16
KeyRangeWhat it does here
warmup-seconds0 or moreThe countdown for a teleport no module times itself. Decimals allowed
cancel-on-move, cancel-on-damage—The same, for that countdown
cross-server-ttl-seconds30–3600How long a destination queued for another server stays valid
cross-server-settle-seconds0.05–5How long the arriving server waits before moving the player
back-history-minutes1–1440How long /back keeps offering its place

Values outside the range are clamped.

`warmup-seconds` reaches the teleports that were meant to be instant

The modules only set a countdown when theirs is above zero and the player has no bypass node. Every other teleport uses this default instead: a spawn, home or /back for a player holding that module's bypass node, a warp for a player holding exyliasurvivalcore.warps.bypass, a spawn, home, warp, TPA or /back whose own warmup-seconds is 0, a portal, and the move a warp makes after its own countdown. Raising it above 0 adds a second countdown to warps and a plain one, with no title or sound, to the rest.

Six of these keys change nothing in this plugin

safe-search-radius, safe-max-attempts, back-history-size, tpa-expiry-seconds, tpa-max-pending and random-max-attempts belong to ExyliaLib's own safe landings, back history, requests and random teleports. No module here uses them. TPA requests expire after the tpa module's request-expire-seconds, /back keeps one place, and /rtp searches with its own pool.

Something missing on this page? Tell us on Discord