A Minecraft plugin that teleports brand-new players (first-time joiners) to a configurable spawn location. Built exclusively for Folia — the multicore / regionized-threading server software. Not compatible with Spigot / Paper / Purpur.
- 🔧 Set the first-join spawn from your current position, or with exact coordinates
- 🌍 Teleports first-time joiners to the configured spawn location
- 💀 Optionally sets the player's respawn point (
set-as-respawn) so they also spawn there after death - 🔁
always-join-to-spawnoption for servers that want every player to spawn there on every login - 💬 Configurable welcome message for new players in chat
- 📝 Commands write changes straight back to
config.yml - 🧵 Written against the Folia API (regionized schedulers +
teleportAsync) — thread-safe on multithreaded servers
- A Folia server (e.g. Folia 1.20+)
- Java 25+ to compile
- Maven 3.9+
- Download
FirstSpawnPlugin.jar(see the Releases tab, or build it yourself as shown below) - Drop it into the
plugins/folder of your Folia server - Restart the server (or reload)
- Set the first-join spawn with
/setfirstspawn
| Command | Description | Permission |
|---|---|---|
/setfirstspawn |
Uses the calling player's current location (world, position, facing direction) as the first-join spawn | firstspawn.admin |
/setfirstspawn <world> <x> <y> <z> [yaw] [pitch] |
Sets the first-join spawn with explicit coordinates | firstspawn.admin |
/firstspawn |
Shows the currently configured first-join spawn point | firstspawn.admin |
Aliases: /setfirstspawn → sfs, fspawn · /firstspawn → fs
firstspawn.admin— access to all plugin commands
# Set the spawn to where you are standing
/setfirstspawn
# Set the spawn with explicit coordinates in the world "world"
/setfirstspawn world 100.5 64 0.5 90 0
# Show the currently configured spawn
/firstspawnThe plugin generates plugins/FirstSpawnPlugin/config.yml automatically on first run.
# The world players will be teleported to on their first join.
world: "world"
# X, Y, Z coordinates of the first-join spawn point.
x: 0.0
y: 64.0
z: 0.0
# The horizontal facing direction (yaw) in degrees.
# 0 = south, 90 = west, 180 = north, -90 = east.
yaw: 0.0
# The vertical facing direction (pitch) in degrees.
# 90 = looking straight down, -90 = looking straight up.
pitch: 0.0
# When enabled, the plugin also sets the player's respawn point
# (bed spawn) to the first-join spawn location.
set-as-respawn: true
# When enabled, EVERY join (not just the player's very first join)
# teleports them to this spawn point. Disabled by default.
always-join-to-spawn: false
# Message shown to the player in chat after their first-join teleport.
# Set to "" to disable. Supports color codes with & (e.g. &a).
first-join-message: "&aยินดีต้อนรับสู่เซิร์ฟเวอร์! นี่คือจุดเริ่มต้นของคุณ"
# Message sent after a successful /setfirstspawn.
# Placeholders: %world% %x% %y% %z%
set-success-message: "&aตั้งจุดเกิดครั้งแรกสำเร็จที่ %world% (%x%, %y%, %z%)"
# Message shown when a plugin command is run without permission.
no-permission-message: "&cคุณไม่มีสิทธิ์ใช้คำสั่งนี้"git clone https://github.com/Cupjok/FirstSpawnPlugin.git
cd FirstSpawnPlugin
mvn clean packageThe resulting jar is located at target/FirstSpawnPlugin.jar.
- This plugin uses the Folia API (
io.papermc.paper.threadedregions.scheduler) — there is no main thread as in classic server software. - Teleportation uses
Player#teleportAsync()(on Folia,Entity#teleportis intentionally removed). - First-join detection happens on the async
AsyncPlayerPreLoginEvent; the actual teleport inPlayerJoinEventis deferred through the player's own region scheduler for thread safety.
MIT © 2026 Cupjok