NapNodes

← Minecraft guides

Minecraft · updated 4 November 2026

Minecraft /transfer Command: Move Players Between Servers Without BungeeCord

Since 1.20.5, Minecraft Java has a command that sends a player to another server without dropping them to the menu: /transfer. With it you can build a small network (a lobby and a survival, or a survival and a minigames server) without BungeeCord or Velocity. Here's how to write it, what to turn on in the server that receives players, how to let players choose where to go and what nobody takes with them when they switch.

What /transfer does and what it needs

The server tells the player's game «connect to this other address», and the game does it: a loading screen shows up and the player appears on the other server. For the player it's like joining again, but without going back to the server list or typing anything.

You need Minecraft Java 1.20.5 or later on both servers and in the game of whoever switches. Bedrock doesn't have it. It requires permission level 3: an op can use it (ops have level 4 unless someone lowered it) and so can the server console, but not a regular player or a command block, which stay at level 2.

The server that sends doesn't need anything special. The one that receives does: it has to accept players coming from another server (next section). Otherwise the player gets stuck on an error screen saying the server doesn't accept transfers, and has to join again by hand.

Rather not set it up yourself? Minecraft servers from €6 a month, no contract and a full refund within 72 hours. Or create a free Minecraft server, no card needed.

Turn on accepts-transfers in the receiving server

It's one line in server.properties: accepts-transfers=true. It comes as false. It only goes in the server players arrive at; if you want them to go and come back, in both.

Turning it on doesn't let anyone extra in: whoever arrives through /transfer goes through the usual door. That server's whitelist, bans and «Official Minecraft accounts only» apply exactly as if they had typed the address.

  1. Open the settings of the receiving server

    In the NapNodes panel, that server's «Settings», in the «Joining and players» group.

  2. Turn on «Accept players from other servers»

    That's accepts-transfers. It saves by itself, there's no «Save» button.

  3. Restart that server

    With «Restart». Until then it keeps rejecting players coming from another server.

How to write it: address, port and players

The full form is /transfer <address> <port> <players>. The address is the other server's, without the port; the port, a separate number; and the players, a name or a selector like @a.

/transfer survival.example.com 25570 sends you. /transfer survival.example.com 25570 @a sends everyone online, and /transfer survival.example.com 25570 Alex Steve only those two. From the server console there's no «you»: always say who.

If you leave out the port, the game uses 25565. Always put the port of the server you're going to, even if you join it from the server list without typing one: that way you don't depend on anything else. At NapNodes it's the primary one in that server's «Advanced settings» → «Ports», and the address is the one on its «Address to play» card.

When the command says it worked, it only means it sent the order. If the other server is off or doesn't accept transfers, the player has already left the first one and ends up on the error screen.

A lobby: let players choose where to go

Since /transfer needs level 3, a regular player can't type it. The no-plugin way is for the player to type /trigger ir, which needs no permissions, and have a server function run the /transfer for them. It's five files in a datapack; red is its name: change it to your own in lowercase everywhere it appears, and put your address and port in ir.mcfunction.

The function that runs the /transfer needs level 3, and datapack functions stay at 2 unless you change it. In «Settings» → «Joining and players», set «Datapack function permission level» to 3. Only do it with datapacks you wrote yourself or understand: every function on the server gets the same power.

data/red/function/load.mcfunction
# Runs when the datapack loads: the scoreboard anyone can use
scoreboard objectives add ir trigger
data/red/function/tick.mcfunction
# Every tick: everyone can type /trigger ir
scoreboard players enable @a ir
# Whoever typed it, off to the survival
execute as @a[scores={ir=1..}] run function red:ir
data/red/function/ir.mcfunction
# Reset the score first: otherwise they'd leave again when they come back to the lobby
scoreboard players reset @s ir
tellraw @s {"text":"Taking you to the survival...","color":"light_purple"}
transfer survival.example.com 25570 @s
data/minecraft/tags/function/load.json
{ "values": ["red:load"] }
data/minecraft/tags/function/tick.json
{ "values": ["red:tick"] }
  1. The pack.mcmeta

    At the root, next to the data folder, the pack.mcmeta with your version's format: get it with the pack.mcmeta generator. The two tags/function files are separate, each with its own line.

  2. Zip it and upload it

    A .zip with pack.mcmeta and the data folder inside, with no other folder above them, into world/datapacks of the server that sends (the lobby). Restart (the datapacks guide shows how to check it loaded).

  3. Test it with an account that isn't op

    Type /trigger ir. If you see «Taking you to the survival...» and don't switch servers, check the console: if it says it has no permission, the 3 in «Datapack function permission level» is missing; if the game shows a connection error, check the address, the port and «Accept players from other servers» on the other server.

Buttons instead of typing

With a dialog (since 1.21.6) the lobby can have a menu with one button per server. Each button runs /trigger ir as if whoever clicks had typed it, and the function above does the rest. How to build the menu is in the /dialog guide, or ready-made as a .zip with the dialog generator (a «Run a command» button with trigger ir).

For more than one destination, one scoreboard per server (ir_survival, ir_minigames) and an ir function for each, each with its own address.

Clickable chat text doesn't work: the click of a tellraw with run_command also runs with the player's permissions, so it has to be the same /trigger. How to write those texts is in the /tellraw guide.

What doesn't travel with the player

Each server is a separate world: inventory, experience, health, advancements and where you were stay on the server you leave. On the other one you have whatever you had there (the first time, nothing). For a lobby and a survival that's exactly what you want; if you're after an inventory shared between servers, that's plugin territory.

Permissions don't travel either: being op or having a LuckPerms rank on one server doesn't give it to you on the other. You set them on each one (the LuckPerms guide). Same with the whitelist: if the destination has it on, the player has to be on both.

Chat isn't shared either: whoever is in the lobby doesn't read what's written in the survival. A Discord channel for both with DiscordSRV is the simple way to bring them together (the DiscordSRV guide).

/transfer or a proxy like Velocity

A proxy (Velocity, or BungeeCord, the older one) sits in front of all the servers: players always join through it, the switch is instant and the proxy's plugins see everyone at once (a shared chat, the list of who's where, a /server). In exchange, it's one more program to set up and look after, and the servers behind it have to be configured to only accept what comes through the proxy.

/transfer needs none of that: each server stays a normal server, with its own address, that you can also join directly. The switch takes as long as a normal join and there's nothing that sees everyone at once.

For two or three servers for a group of friends or a small community, /transfer is usually enough. A network with many modes, queues and a shared chat is where a proxy pays off.

Common problems

«Unknown or incomplete command»: the server is older than 1.20.5, or you're not op. From the «Console», op YourName fixes the second one.

The player sees that the server doesn't accept transfers: accepts-transfers=true is missing on the receiving one, or it wasn't restarted after turning it on.

They get stuck on a connection error: the other server is off, or the address or port is wrong. Try joining by hand with that same address and port from the server list: if that doesn't work either, it's not /transfer's fault.

From a command block it does nothing: command blocks have level 2 and /transfer needs 3. Use a function with the level raised, like in the lobby above.

A player comes back to the lobby and gets sent to the survival again without typing anything: their score stayed set. That's why ir.mcfunction resets it before the /transfer.

If your server has Bedrock players (at NapNodes, with «Turn on Bedrock»), test with one before building the network on /transfer: the command is meant for the Java game.

At NapNodes

Minecraft servers run on Paper with the latest version, so /transfer is there and «Accept players from other servers» and «Datapack function permission level» are changed in «Settings», without touching files. Each server has its address and its primary port in «Advanced settings» → «Ports».

The RAM you pay for belongs to your account, not to one server: in «My servers», «Create server» lets you split it between several. A 6 GB plan is enough for a 2 GB lobby and a 4 GB survival, and 2 GB is the minimum a Minecraft server runs on. If you run short later, «Buy RAM» adds GB to the account and «Adjust» gives them to the server that needs them.

The free server is one per person, it turns off after an hour with nobody on, and while it's off it doesn't receive anyone: to try /transfer with friends it works as a destination while it's on, but a network that runs on its own needs paid servers.

Frequently asked questions

How do you use the /transfer command in Minecraft?

As an op (level 3) on Java 1.20.5 or later: /transfer <address> <port> <players>, for example /transfer survival.example.com 25570 @a. The server they go to must have accepts-transfers=true in server.properties.

How do I connect two Minecraft servers without BungeeCord?

With /transfer: turn on accepts-transfers in the receiving server and, from the other one, run /transfer with its address and port. To let players choose without being op, a datapack with /trigger that runs the /transfer for them.

What is accepts-transfers in server.properties?

The option that lets in players arriving from another server through /transfer. It comes as false. Whoever arrives still goes through that server's whitelist and bans.

Does a player keep their inventory when switching servers?

No. Each server keeps its own inventory, experience and position; on the other one, the player has whatever they had there.

Can a player who isn't op use /transfer?

Not directly, because it needs level 3. They can type /trigger, and a datapack function with the function permission level at 3 runs the /transfer for them.

Does /transfer work in a command block?

No: command blocks have level 2 and /transfer needs 3. Run it from the console, as an op, or from a datapack function with the level raised.

Shall we set it up for you?

Minecraft servers from €6 a month, never oversold: your RAM is yours alone. And if you'd rather start without paying, there's a free Minecraft server, no card needed.

Your server doesn't show up in the game? Check it in a second with “Is my Minecraft server online?”: players, version and MOTD, free. Need a player's UUID for the whitelist or permissions? Look it up here. Handing out enchanted items? Build the command with the /give generator.

Free tool: Minecraft dialog generator. Rules that pop up on join and a menu with buttons (Discord, spawn, copy the IP) for your Minecraft server: the datapack as a .zip, no plugins.

Keep reading

All Minecraft guides, sorted →