PolarSouls

Hardcore Lives System for Minecraft 1.21.X

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)
Important: Do NOT enable 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.

  1. Download the latest PolarSouls-1.3.6.jar from GitHub Releases or Modrinth.
  2. Install the JAR in the plugins/ folder of both backend servers (Main and Limbo). Do NOT install on the Velocity proxy.
  3. Start both servers to generate default plugins/PolarSouls/config.yml files, then stop both servers.
  4. Configure database — edit config.yml on both servers with identical MySQL credentials.
  5. Set server roles — set is-limbo-server: false on Main and is-limbo-server: true on Limbo. Make sure main-server-name and limbo-server-name match your velocity.toml.
  6. Set Limbo spawn — start the Limbo server, join it, stand at the desired spawn point, and run /setlimbospawn.
  7. Configure Velocity — set player-info-forwarding-mode = "modern" in velocity.toml.
  8. Restart both servers and test: check /pstatus, lose all lives, verify Limbo transfer, then revive with /psadmin revive <player>.
Tip: The server names in 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

  1. Stop both servers if running.
  2. Place PolarSouls-1.3.6.jar in the plugins/ folder on both servers.
  3. Start both servers to generate config files, then stop them again.
  4. Edit config.yml on both servers (see Configuration section).
  5. Start both servers and verify database connection messages in the console.
Critical: Both servers must use the same plugin version and identical database credentials. A mismatch will cause data synchronization failures.

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
Tip: Run /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
Ghast Tear
Totem of Undying
Any Skull/Head

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-server is false on Main and true on Limbo.
  • Confirm server names in config.yml exactly match your velocity.toml (case-sensitive).
  • Check that player-info-forwarding-mode = "modern" is set in Velocity.
  • Death mode must be hybrid or limbospectator keeps players on Main indefinitely.

Revivals not working

  • Ensure hrm.enabled: true and hrm.structure-revive: true in config.
  • Confirm main.detect-hrm-revive: true on 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: true temporarily to see detection logs in console.

Admin commands not working on Limbo server

  • This is expected when limbo-op-security-check: true is set — OP-only users on Limbo are blocked by default.
  • Add the user to limbo-trusted-admins by UUID or username, then reload from console.
  • Or grant polarsouls.bypass-limbo-op-security via 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-period is 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=true in server.properties — this can break the plugin.
  • The plugin applies the visual through packet manipulation; confirm PolarSouls loaded successfully (check console).

Enable Debug Logging

  1. Open config.yml and set debug: true.
  2. Run /psadmin reload from console.
  3. Reproduce the issue and review console output for detailed information.
  4. 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:

  1. Check the Troubleshooting section above for common issues.
  2. Review the FAQ for quick answers.
  3. Search existing issues on GitHub.
  4. 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.