AlphaTPADocs v2.0.0
AlphaTPAGuidesTeleport requests

Teleport requests

How a teleport request travels from /tpa to a safe landing, and every setting on the way.

On this page

The request flow

/tpa: go to someone

  1. The sender asks with /tpa <player>. A confirm menu opens showing the target's world and whether they are flying.
  2. The sender confirms. The target gets a chat message with clickable [accept] and [deny] buttons. If gui.popup-on-request is on, the accept menu also opens by itself.
  3. The target accepts by clicking [accept] or typing /tpaccept. The accept menu opens first, showing the sender's head, world, health and hunger, whether they are flying, and their game mode. Accepting there starts the countdown.
  4. The countdown runs for the person who travels, then they teleport to a safe spot next to the target.

/tpahere: bring someone to you

The same flow with the roles reversed: the sender asks, and when the target accepts, the target is the one who counts down and travels to the sender. It has its own pair of menus.

Other ways to answer

CommandEffect
/tpaccept [player] /tpyesAccept the request. With no name it answers the newest one.
/tpdeny [player] /tpadeny /tpnoDeny it.
/tpacancel /tpcancelCancel the requests you sent.
/tpauto /tpaautoAccept incoming requests automatically.

Unanswered requests disappear after request.expiration seconds (120 by default).

All four are 27 slots with no filler, in menus/players/:

FileShown toWhen
tpa-request.ymlThe sender of /tpaBefore the request is sent. Confirm or cancel.
tpa-accept.ymlThe target of /tpaOn accepting. Accept or deny.
tpahere-request.ymlThe sender of /tpahereBefore the request is sent.
tpahere-accept.ymlThe target of /tpahereOn accepting.

Countdown

teleport:
  countdown: 5                    # 0 = instant
  allowed-walk-range: 0           # blocks you may drift before it cancels
  cancel-on-damage: true
  countdown-display: action-bar   # action-bar, chat or both
  countdown-title: true           # also a big centred number

The countdown starts after the request is accepted, and it is shown to everyone, operators included. With allowed-walk-range: 0 any change of block cancels it. Taking damage cancels it too while cancel-on-damage is true. Players with alphatpa.bypass.warmup skip it.

Safe landing

teleport:
  safe-location: true
  search-radius: 3
  search-vertical: 3
  cancel-if-destination-flying: true
  blocked-worlds: []

Request limits

request:
  expiration: 120      # seconds before an unanswered request disappears
  cooldown: 30         # seconds before you may ask the same player again
  daily-limit: -1      # requests per player per day, -1 = unlimited
  max-outgoing: 3      # open requests one player may have at once
LimitBypass permission
Cooldownalphatpa.bypass.cooldown
Daily limitalphatpa.bypass.limit
Countdownalphatpa.bypass.warmup
Bypass nodes are off for operators too. They default to false for everyone, so an op sees the countdown and the cooldowns like anybody else. Grant them through your permissions plugin to the people who should skip them.

Player toggles

Players control what they receive. Each choice is saved per player in data/players.yml and survives restarts.

CommandSwitches
/tpatoggleIncoming /tpa requests.
/tpaheretoggleIncoming /tpahere requests.
/tpautoAuto-accepting incoming requests.
/tpaguitoggleThe confirm and accept menus.
Do not edit data/players.yml while the server is running. The plugin writes it asynchronously and atomically.

Command takeover

CMI and EssentialsX also register /tpa, and the first plugin to register a label keeps it. AlphaTPA loads after both, and with features.override-conflicts: true it points every conflicting label at its own commands. The console says Took over N command label(s) from other plugins. Their namespaced forms, such as essentials:tpa, still reach the other plugin. Set override-conflicts to false to leave the other plugin in charge.