Overview
PolarSouls is a sophisticated hardcore lives system plugin for Minecraft 1.21.X running on Spigot, Paper, or Purpur, designed for Velocity proxy networks. Players are exiled to a Limbo server upon losing all lives, with multiple revival methods to bring them back — creating high-stakes teamwork and memorable moments.
Lives System
Configurable starting lives (default: 2) with a maximum cap (default: 5). Extra Life items let players earn additional lives through crafting.
Three Death Modes
Choose between immediate Limbo exile, permanent spectator on Main, or a hybrid countdown — giving your community the experience they want.
Revival Rituals
Build a 3×3×3 ritual structure, craft a Revive Skull item, or use admin commands to bring dead teammates back from Limbo.
Grace Period
New players get configurable protected time (counts only online hours) to learn the server before they risk losing lives.
Cross-Server Architecture
MySQL-backed persistence across Main and Limbo servers. Dead players transfer automatically; revivals teleport them back instantly.
Limbo Visiting
Alive players can visit Limbo anytime to interact with dead teammates, then leave freely with /leavelimbo.
Requirements
- Minecraft: 1.21.X (Spigot, Paper, or Purpur)
- Proxy: Velocity (BungeeCord/Waterfall may work but is untested)
- Database: MySQL 5.7+ or MariaDB 10.2+
- Java: 21 or higher
- Servers: Two backend servers (Main + Limbo)
hardcore=true in server.properties. Leave it as false — the plugin manages hardcore mechanics internally.
Quick Start
Get PolarSouls running in 8 steps. For full details, see the Installation section.
- Download the latest
PolarSouls-1.3.6.jarfrom GitHub Releases or Modrinth. - Install the JAR in the
plugins/folder of both backend servers (Main and Limbo). Do NOT install on the Velocity proxy. - Start both servers to generate default
plugins/PolarSouls/config.ymlfiles, then stop both servers. - Configure database — edit
config.ymlon both servers with identical MySQL credentials. - Set server roles — set
is-limbo-server: falseon Main andis-limbo-server: trueon Limbo. Make suremain-server-nameandlimbo-server-namematch yourvelocity.toml. - Set Limbo spawn — start the Limbo server, join it, stand at the desired spawn point, and run
/setlimbospawn. - Configure Velocity — set
player-info-forwarding-mode = "modern"invelocity.toml. - Restart both servers and test: check
/pstatus, lose all lives, verify Limbo transfer, then revive with/psadmin revive <player>.
config.yml must exactly match the names in your velocity.toml (case-sensitive).
Death Mode Quick Reference
| Mode | Behavior |
|---|---|
hybrid (default) |
Dead players enter spectator on Main for 5 minutes; transfer to Limbo if not revived in time. |
spectator |
Dead players stay on Main in spectator mode indefinitely until revived. |
limbo |
Dead players are immediately transferred to the Limbo server. |
Installation
Network Architecture
PolarSouls requires two backend servers connected through a Velocity proxy, sharing a single MySQL database:
┌─────────────────┐
│ Velocity Proxy │
└────────┬────────┘
│
┌──────────────┴──────────────┐
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ Main │◄───────────────►│ Limbo │
│ Server │ MySQL/MariaDB │ Server │
└───────────┘ └───────────┘
Database Setup
PolarSouls creates the necessary table automatically, but you must create the database first.
CREATE DATABASE polarsouls CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'polarsouls_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON polarsouls.* TO 'polarsouls_user'@'localhost';
FLUSH PRIVILEGES;
For Pterodactyl or shared hosting, create the database from your hosting panel and note the provided credentials.
Plugin Installation
- Stop both servers if running.
- Place
PolarSouls-1.3.6.jarin theplugins/folder on both servers. - Start both servers to generate config files, then stop them again.
- Edit
config.ymlon both servers (see Configuration section). - Start both servers and verify database connection messages in the console.
Velocity Configuration
player-info-forwarding-mode = "modern"
[servers]
main = "localhost:25566"
limbo = "localhost:25567"
try = ["main"]
Main Server Config
is-limbo-server: false
main-server-name: "main"
limbo-server-name: "limbo"
database:
host: "localhost"
port: 3306
name: "polarsouls"
username: "polarsouls_user"
password: "your_secure_password"
pool-size: 5
table-name: "hardcore_players"
lives:
default: 2
max-lives: 5
on-revive: 1
grace-period: "24h"
revive-cooldown-seconds: 30
main:
death-mode: "hybrid"
hybrid-timeout-seconds: 300
detect-hrm-revive: true
send-to-limbo-delay-ticks: 20
Limbo Server Config
is-limbo-server: true
main-server-name: "main"
limbo-server-name: "limbo"
database:
host: "localhost"
port: 3306
name: "polarsouls"
username: "polarsouls_user"
password: "your_secure_password"
pool-size: 5
table-name: "hardcore_players"
limbo:
check-interval-seconds: 3
spawn:
world: "world"
x: 0.5
y: 65.0
z: 0.5
Common Mistakes to Avoid
Installing on the proxy
PolarSouls is a backend plugin. Do NOT place it in the Velocity or BungeeCord plugins folder.
Server names don't match proxy config
Config says main but velocity.toml says survival? Player transfers will silently fail. Names are case-sensitive.
Enabling Minecraft hardcore mode
Keep hardcore=false in server.properties. The plugin manages hardcore mechanics itself.
Forgetting to set Limbo spawn
Dead players will spawn at the world default spawn instead of your intended location. Always run /setlimbospawn after setup.
Configuration
All settings live in plugins/PolarSouls/config.yml on each server. After editing, run /psadmin reload (from console or an already-authorized account) or restart the server.
Lives System
| Key | Default | Description |
|---|---|---|
lives.default |
2 |
Starting lives for new players (1 = classic hardcore, 2 = standard) |
lives.max-lives |
5 |
Maximum lives cap; players cannot exceed this via items or commands |
lives.on-revive |
1 |
Lives restored when a dead player is revived |
lives.grace-period |
"24h" |
New player protection (counts only online time). Format: "24h", "2h30m", "0" to disable |
lives.revive-cooldown-seconds |
30 |
Post-revival protection seconds where the player cannot lose lives |
Death Modes
main:
death-mode: "hybrid" # hybrid | spectator | limbo
hybrid-timeout-seconds: 300 # 5 minutes for hybrid mode
HRM (Hardcore Revive Mode)
hrm:
enabled: true # Master on/off for all HRM features
drop-heads: true # Drop player heads on death
structure-revive: true # Enable ritual structure detection
revive-skull-recipe: true # Enable Revive Skull crafting
head-wearing-effects: true # Speed II + Night Vision when wearing dead player's head
detect-hrm-revive: true # Auto-detect completed ritual structures
leave-structure-base: true # Keep base structure after revival
Limbo OP Security
This prevents players who are OP only on the Limbo server from executing admin/revive commands.
limbo-op-security-check: true # Recommended: keep enabled
limbo-trusted-admins:
- "069a79f4-44e9-4726-a5be-fca90e38aaf5" # UUID (recommended)
- "YourUsername" # Username also works
/psadmin reload from the server console (or an already-whitelisted admin account) after adding new trusted admins — a newly-added user cannot reload their own access.
Extra Life Item
extra-life:
enabled: true
item-material: "NETHER_STAR"
recipe:
row1: "DED" # D=Diamond Block, E=Emerald Block
row2: "INI" # I=Netherite Ingot, N=Nether Star
row3: "GEG" # G=Gold Block
ingredients:
G: "GOLD_BLOCK"
E: "EMERALD_BLOCK"
N: "NETHER_STAR"
D: "DIAMOND_BLOCK"
I: "NETHERITE_INGOT"
Commands
Player Commands
| Command | Permission | Description |
|---|---|---|
/pstatus [player] |
polarsouls.status (all) |
Check your lives, death status, and grace period remaining |
/revive <player> |
polarsouls.revive (op) |
Revive a dead player and return them to Main |
/limbo |
polarsouls.visit (all) |
Visit the Limbo server as a living player. Alias: /visitlimbo |
/leavelimbo |
polarsouls.visit (all) |
Return from Limbo to Main (living visitors only). Alias: /hub |
Admin Commands
All /psadmin commands require polarsouls.admin (op by default). Alias: /psa
| Command | Description |
|---|---|
/psadmin revive <player> |
Revive a dead player; works offline — they revive on next login |
/psadmin kill <player> |
Force-kill a player (sets lives to 0 and sends to Limbo) |
/psadmin lives <player> <amount> |
Set a player's life count to a specific value |
/psadmin grace <player> <hours> |
Set or remove a player's grace period (0 = disable) |
/psadmin reset <player> |
Reset player to defaults: default lives, no grace, alive status |
/psadmin info <player> |
View detailed player info: UUID, lives, death state, timestamps, grace period |
/psadmin reload |
Reload configuration without server restart |
/setlimbospawn |
Set the Limbo spawn to your current position (run on Limbo server) |
Permissions
| Permission | Default | Description |
|---|---|---|
polarsouls.admin |
op | Full admin access; all /psadmin commands and /setlimbospawn |
polarsouls.revive |
op | Allows using /revive and /psadmin revive |
polarsouls.status |
true | Allows using /pstatus |
polarsouls.visit |
true | Allows using /limbo, /leavelimbo, /hub |
polarsouls.bypass |
false | Bypass all death mechanics (passive, no commands) |
polarsouls.bypass-limbo-op-security |
false | Allow OP users on Limbo to execute privileged commands |
Revival System
PolarSouls supports four revival methods that can be used in combination:
| Method | Who | Requirement | Speed |
|---|---|---|---|
| Ritual Structure | Any player | Build 3×3×3 structure + place dead player's head | Slow (building) |
| Revive Skull | Any player | Craft item, use GUI to get dead player's head, then build structure | Medium |
| /revive | Mod/Admin | polarsouls.revive permission |
Instant |
| /psadmin revive | Admin | polarsouls.admin permission |
Instant |
Ritual Structure
Build a 3×3×3 structure and place the dead player's head on top to automatically revive them.
Layer 1 — Base (3×3)
Soul Sand | Stair | Soul Sand
Stair | Ore Block | Stair
Soul Sand | Stair | Soul Sand
Use 4 Soul Sand at corners, 4 Stair blocks (any type) at edges, and 1 Ore block (any ore) in the center.
Layer 2 — Middle
Wither Rose | (empty) | Wither Rose
(empty) | Fence | (empty)
Wither Rose | (empty) | Wither Rose
Place 4 Wither Roses on top of the Soul Sand corners. Place a Fence on top of the center ore block.
Layer 3 — Top
(empty) | (empty) | (empty)
(empty) | Head | (empty)
(empty) | (empty) | (empty)
Place the dead player's head on top of the fence. The plugin automatically detects the completed structure and revives the player.
Revive Skull Item
A craftable item that opens a GUI showing all dead players. Click a player's name to receive their head without needing the original dropped head.
Default Recipe (Shapeless)
| Material | Amount |
|---|---|
| Obsidian | 4× |
| Ghast Tear | 2× |
| Totem of Undying | 2× |
| Any Skull/Head | 1× |
Extra Life Item
Craft this item and right-click it to gain +1 life (up to your max). Cannot be used while dead.
Default Recipe
Diamond Block | Emerald Block | Diamond Block
Netherite Ingot| Nether Star | Netherite Ingot
Gold Block | Emerald Block | Gold Block
The recipe is fully customizable in config.yml — see the Configuration section.
Head Mechanics
- When a player loses all lives, their player head drops at the death location and they receive a message with coordinates.
- Living players who wear a dead player's head receive Speed II and Night Vision effects.
- The Revive Skull can generate a fresh copy of any dead player's head at any time — even if the original was lost.
Troubleshooting
Players not transferring to Limbo
- Verify
is-limbo-serverisfalseon Main andtrueon Limbo. - Confirm server names in
config.ymlexactly match yourvelocity.toml(case-sensitive). - Check that
player-info-forwarding-mode = "modern"is set in Velocity. - Death mode must be
hybridorlimbo—spectatorkeeps players on Main indefinitely.
Revivals not working
- Ensure
hrm.enabled: trueandhrm.structure-revive: truein config. - Confirm
main.detect-hrm-revive: trueon the Main server. - Test with
/psadmin revive <player>— if this works, the issue is structure detection only. - Verify the Limbo server is running; it polls the database to process pending revivals.
Ritual structure not triggering
- Double-check block types: Soul Sand (not Soul Soil), any ore block (gold/diamond/emerald), Wither Roses, any Fence, dead player's head on top.
- The head must be the correct dead player's head — not a decorative block.
- Enable
debug: truetemporarily to see detection logs in console.
Admin commands not working on Limbo server
- This is expected when
limbo-op-security-check: trueis set — OP-only users on Limbo are blocked by default. - Add the user to
limbo-trusted-adminsby UUID or username, then reload from console. - Or grant
polarsouls.bypass-limbo-op-securityvia LuckPerms.
Database connection errors
- Verify credentials match on both servers.
- Confirm the database exists and the user has the required grants.
- For Pterodactyl/shared hosting, use the panel-provided host, not
localhost. - Check firewall rules — both backend servers must be able to reach the database host.
Grace period not working
- Confirm
lives.grace-periodis not"0". - Use
/pstatus <player>to check remaining grace time. - Grace counts only online hours — it pauses when the player is offline.
Hardcore hearts not showing
- Do NOT set
hardcore=trueinserver.properties— this can break the plugin. - The plugin applies the visual through packet manipulation; confirm PolarSouls loaded successfully (check console).
Enable Debug Logging
- Open
config.ymland setdebug: true. - Run
/psadmin reloadfrom console. - Reproduce the issue and review console output for detailed information.
- Disable debug logging after investigation to reduce log noise.
FAQ
Can I install PolarSouls on my Velocity proxy?
No. PolarSouls is a backend plugin — install it only on your Main and Limbo servers. It will not function on Velocity, BungeeCord, or Waterfall.
Do I need the Limbo server if I use spectator death mode?
The Limbo server is optional in spectator mode. Dead players stay on Main in spectator indefinitely. However, you still need it for limbo and hybrid modes.
Can I use BungeeCord instead of Velocity?
BungeeCord/Waterfall support is untested. Velocity with modern forwarding is recommended. If you test BungeeCord, please report your findings.
Can my database be shared with other plugins?
Yes. PolarSouls creates its own table (hardcore_players by default) and does not touch other tables. You can safely share a MySQL instance with CoreProtect or any other plugin.
What happens if a player disconnects while dead in hybrid mode?
If a dead player disconnects during the hybrid countdown, they are sent straight to Limbo on their next login — the timer does not wait for them to reconnect.
Can I revive an offline player?
Yes. Use /psadmin revive <player>. The revival is stored in the database and applied automatically when the player next logs in.
How do I reset a player's data entirely?
Run /psadmin reset <player>. This restores default lives, clears grace period, sets status to alive, and removes revive cooldowns.
Can players abuse the Revive Skull to copy heads?
The Revive Skull is a consumable-style item (it can be reused, but must be crafted). The GUI shows only currently dead players, so it cannot be used to generate heads for living players.
How do I update PolarSouls?
Stop both servers, replace the JAR in each plugins/ folder with the new version, and start both servers. Both servers must always run the same version.
Support & Contributing
Need help or found a bug? Here's how to get support:
- Check the Troubleshooting section above for common issues.
- Review the FAQ for quick answers.
- Search existing issues on GitHub.
- Open a new issue with your server version, plugin version, and console logs.
Contributing
Contributions are welcome! Feel free to submit pull requests or open issues on the GitHub repository. If you enjoy PolarSouls, consider hearting it on Modrinth and starring the repo.
License
PolarSouls is licensed under the GNU General Public License v3.0 (GPL-3.0). You are free to use, modify, and distribute this plugin according to the terms of the license. See the LICENSE file for details.