Lifesteal SMP Servers

Run a Lifesteal SMP from scratch with LifeStealZ: heart rules, withdrawing and crafting hearts, revive beacons, eliminations that don't lock players out forever, combat logging, alts, PvP balance, world border and seasons

Minecraft Game Modes

17 min readIntermediateLast updated Oct 31, 2026

On a Lifesteal SMP, killing a player steals one of their hearts. Die to a player and you lose a heart; kill one and you gain it. Run out of hearts and you're eliminated until someone revives you. Underneath, it's a survival server, so everything in the advanced SMP guide still applies. Lifesteal adds a layer of rules that decide whether your server feels exciting or just cruel.

What you'll build: a Paper survival server with LifeStealZ, heart rules you've chosen on purpose, craftable hearts and a revive beacon, eliminations with a clear way back, a grace period for new players, combat-log protection, alt detection, a pre-generated map, backups and a plan for seasons.

Time: 2–3 hours for setup, plus an evening testing kills, withdrawals and revives with a friend.

Before you start:

  • A Minecraft server on the panel running Paper, with a pinned Minecraft version on Startup. See Paper and Purpur servers.
  • Memory: 4–6 GB for up to ~30 players, 6–8 GB for more.
  • You can use Console and Files, and install plugins.
  • A second Minecraft account (or a friend) to test kills. You can't test heart stealing alone.
1

Choose a lifesteal plugin

Plugin Where Notes
LifeStealZ (ZetaPlugins) Modrinth, Hangar The most complete free option. Supports current releases (the Modrinth page lists 1.19 through 26.x) on Paper, Purpur and Spigot. Custom heart items and recipes, revive item and revive beacon, grace period, anti-alt, WorldGuard flag, PlaceholderAPI, SQLite or MySQL/MariaDB, Discord webhooks. Docs at docs.zetaplugins.com. This guide uses it.
SimpleLifesteal Hangar Smaller, newer releases for current Paper.
LifeSteal (ls-smp) Modrinth Hearts, eliminations, revive mechanics and custom items.
LifestealCore BuiltByBit (paid) Paid all-in-one.

There are many lifesteal plugins and most do the same core loop. Check the download page lists your Minecraft version and was updated recently. Install only one: two lifesteal plugins will both take hearts on every kill.

2

Install the plugins

Plugin Why
LifeStealZ Hearts, eliminations, revives.
LuckPerms Ranks and permissions.
EssentialsX (+ Vault) /spawn, homes, /tpa, an economy if you want one.
WorldGuard + WorldEdit Protect spawn; LifeStealZ adds a heartloss flag.
CoreProtect Logs every block, chest and kill-related item change.
Chunky Pre-generate the map.
PvPManager or CombatLogX Combat tagging and newbie protection.
Grim Free anti-cheat.
LibertyBans Bans and alt detection.
PlaceholderAPI (optional) Show hearts on a scoreboard or tab list.
  1. Open Minecraft Plugins, search each one and choose the download icon. Upload anything not on Modrinth through Files → plugins → Upload.
  2. Restart from Console.
  3. Run plugins: all green.
  4. Run lifestealz help. If it lists commands, LifeStealZ loaded. Its files are now in plugins/LifeStealZ/: config.yml (rules), items.yml (hearts, revive items, recipes) and storage.yml (database).
3

Decide your heart rules

Stop the server, then open plugins/LifeStealZ/config.yml in Files. These are the decisions that shape your server:

Option Default Suggested Why
startHearts 10 10 Vanilla health.
maxHearts 20 15–20 One player can't become unkillable. Lower values keep fights closer.
heartsPerKill 1 1 Hearts moved from victim to killer.
minHearts 0 0 At this many hearts a player is eliminated. The file says to change it only if you know what you're doing.
looseHeartsToNature true your choice Lose a heart to mobs, falling, lava. true is brutal for new players; many servers set false so only PvP matters.
heartsPerNaturalDeath 1 1 How many hearts a natural death costs, if the option above is on.
looseHeartsToPlayer true true The whole point.
dropHeartsPlayer false false false gives the heart straight to the killer. true drops it as an item anyone can grab.
dropHeartsNatural true true Hearts lost to nature drop as an item, so you can go back for them.
dropHeartsIfMax true true If the killer is already at max, the heart drops as an item instead of being wasted.
announceElimination true true Eliminations are the server's drama.
heartRewardOnElimination true true The final kill still gives the killer a heart.
preventTotems false your choice Totems make players much harder to kill.
preventCrystalPVP false true on most servers End crystal PvP kills in a split second and dominates lifesteal.
preventRespawnAnchors false true Anchor explosions in the Overworld are another instant-kill weapon.
preventBeds false true Same for beds in the Nether and End.
preventCustomItemsInItemFrames true true Prevents a known duplication route. Leave it on.

A balanced starting config:

startHearts: 10
maxHearts: 20
heartsPerKill: 1
heartsPerNaturalDeath: 1
minHearts: 0
looseHeartsToNature: false
looseHeartsToPlayer: true
dropHeartsPlayer: false
dropHeartsNatural: true
dropHeartsIfMax: true
announceElimination: true
heartRewardOnElimination: true
preventTotems: false
preventCrystalPVP: true
preventRespawnAnchors: true
preventBeds: true
preventCustomItemsInItemFrames: true

Change only the values you mean to change, keep the rest of the file as generated, and save. Start the server and check the console for YAML errors (a red error at start-up usually means a missing space after a colon).

4

Withdrawing and crafting hearts

Withdraw

Players turn hearts into items with /withdrawheart [amount]. They lose one max heart per item and receive a heart item they can trade, store, or give to a teammate.

Option Default Suggested Why
allowDyingFromWithdraw true false With true, a player at 1 heart can withdraw it (with /withdrawheart 1 confirm) and eliminate themselves.
minWithdrawHearts 0 3 The lowest a player can withdraw down to. Stops panic withdrawals before a fight.

The permission is lifestealz.withdraw, given to everyone by default. Remove it in LuckPerms if you don't want trading: lp group default permission set lifestealz.withdraw false.

Use

Right-click a heart item to gain its hearts. heartCooldown (milliseconds, default 0) adds a delay between uses so players can't eat a stack mid-fight; 5000 (5 seconds) is a fair value. healOnHeartUse (default false) decides whether using a heart also heals.

Craft

Heart items are defined in items.yml. The default heart is called defaultheart. Each item has a customItemType (heart, revive, revivebeacon or none), a material, a name, and optional crafting recipes:

crystalheart:
  name: "&dCrystal Heart"
  lore:
    - "&7Right-click to gain hearts"
  material: "NETHER_STAR"
  enchanted: true
  customItemType: "heart"
  customHeartValue: 1
  minHearts: 0
  maxHearts: 15
  requirePermission: false
  craftable: true
  whitelistedWorlds: []
  recipes:
    1:
      rowOne: ["DIAMOND_BLOCK", "NETHERITE_INGOT", "DIAMOND_BLOCK"]
      rowTwo: ["NETHERITE_INGOT", "TOTEM_OF_UNDYING", "NETHERITE_INGOT"]
      rowThree: ["DIAMOND_BLOCK", "NETHERITE_INGOT", "DIAMOND_BLOCK"]
  invulnerable: true
  despawnable: false
  • maxHearts: 15 here means the crafted heart only works while the player has 15 or fewer, so crafting alone can't reach the server maximum: the last hearts must be won in PvP.
  • invulnerable: true and despawnable: false stop hearts burning in lava or vanishing.
  • Recipe entries can be materials, AIR, another custom item's ID, or a tag such as #wool.

Price the recipe from how rare you want hearts to be. A cheap recipe turns the server into a crafting race; an expensive one (netherite, totems) makes hearts something a group works towards. Players see recipes in game with /lifestealz recipe.

Restart after editing items.yml, then test: craft the heart, use it, and check /hearts.

5

Revives: the way back

Revives are what keep eliminated players around. LifeStealZ offers:

  • A revive item (customItemType: revive): right-click it to revive an eliminated player.
  • A revive beacon (customItemType: revivebeacon): placed down, it revives a player over a timer, with a laser and particle ring that everyone nearby can see. Recent versions make the beacon the default revive item.

Beacon options in items.yml:

Option What it does Suggested
reviveTime Seconds the beacon takes 30–120. Longer makes it a defend-the-beacon event.
allowBreakingBeaconWhileReviving Whether enemies can break it to cancel true for drama, false for a casual server.
showLaser, showParticleRing, particleColor Visuals Leave on: it tells everyone a revive is happening.

In config.yml:

Option Default Suggested
reviveHearts 1 3. Coming back on one heart means dying again immediately.
maxRevives -1 (unlimited) -1, or 2–3 per season on hardcore servers.
showBossbar false true while a beacon is running.

Staff can revive directly with /revive <player>. Add bypass (with the lifestealz.bypassrevivelimit permission) to ignore the revive limit.

6

Elimination without locking people out forever

By default, LifeStealZ bans an eliminated player from joining until they're revived. That's dramatic, and it's also the number one reason lifesteal servers lose players: someone eliminated on day two, with no friends to revive them, never comes back.

Pick one of these approaches and write it in your rules:

Option A: revives are easy enough to reach

Keep the default ban, but make the revive beacon a realistic mid-game craft, and keep maxRevives unlimited. Eliminated players depend on their friends. Works well for servers with established groups.

Option B: a timed ban instead

LifeStealZ's config describes this pattern: turn off its own ban and run your own commands instead.

disablePlayerBanOnElimination: true
eliminationCommands:
  - "ban &player& 1d Eliminated - back tomorrow"

&player& is replaced with the eliminated player's name. The example uses LibertyBans' /ban <player> <duration> <reason> syntax; adjust it to your ban plugin.

Option C: amnesty

Keep the default ban, and revive everyone on a schedule: a weekly "revive day", or at the start of each season. Staff run /revive <player> for each eliminated player. Announce it in Discord so eliminated players know when to return.

Whichever you choose:

  • Turn on the elimination webhook so eliminations post to Discord: webhook.elimination: true and your Discord webhook URL in webhook.url. It keeps eliminated players in the community.
  • Keep a list of eliminated players for the next amnesty or season reset.
  • Never make eliminations permanent with no way back. The server needs players more than it needs the stakes.
7

Protect new players

A new player with iron armour is a free heart for anyone. Without protection, veterans farm newcomers and newcomers quit.

LifeStealZ grace period

gracePeriod:
  enabled: true
  duration: 1800
  announce: true
  playSound: true
  damageFromPlayers: false
  damageToPlayers: false
  useHearts: false
  looseHearts: false
  gainHearts: false
  allowWithdraw: false

duration is measured in seconds (check the comment above it in your file); 1800 gives 30 minutes. During grace the player can't take or deal PvP damage, or gain or lose hearts. Staff can end or restart a player's grace with /lifestealz graceperiod <player> skip or reset.

Heart gain cooldown

Stops one player farming the same victim, or a group passing kills around:

heartGainCooldown:
  enabled: true
  cooldown: 300000
  dropOnCooldown: true
  preventPickup: true

cooldown is in milliseconds (300000 = 5 minutes).

PvPManager newbie protection

PvPManager can also protect new players for a set time (players check or end it with /newbie). Use either PvPManager's or LifeStealZ's grace period, not both, so players get one clear timer.

Spawn

Make spawn a no-PvP, no-heart-loss area with WorldGuard:

rg define spawn
rg flag spawn pvp deny
rg flag spawn heartloss deny

(Select the area with //wand first.) heartloss is the flag LifeStealZ adds; run rg flags spawn and look on the last page if you want to set it through the menu.

8

Combat logging

If players can log out mid-fight, they keep their hearts and the fight means nothing.

  • PvPManager (free, very actively maintained): tags both players when they fight, punishes logging out while tagged, and stops tagged players running into protected areas. Players see their tag time with /pvptag.
  • CombatLogX (free): another modular combat tagger. It needs its BlueSlimeCore dependency installed too.

Set the combat tag to 15–30 seconds, and make the punishment for logging out while tagged death, so the heart transfers as if the player had been killed.

Check it works: hit your test account, log it out, log it back in. It should be dead and down a heart.

9

Stop alt accounts

An alt is a second account. On lifesteal, alts are used to farm hearts (kill your own alt for free hearts) or to dodge elimination.

  • LifeStealZ anti-alt is on by default and logs attempts. To actually stop farming, set:

    antiAlt:
      enabled: true
      logAttempt: true
      preventKill: true
      sendMessage: true
    

    preventKill stops kills that look like alt farming from moving hearts.

  • LibertyBans: /alts <player> shows suspected alts, staff are notified when a banned player's alt joins, and IP bans block a banned player's alts automatically.

  • CoreProtect: /co lookup u:<player> t:7d a:session shows logins, useful for spotting two accounts that always play together.

  • Write the rule down: "one account per person; alt farming is a ban".

Players sharing a house or network will share an IP. Check before banning.

10

PvP balance

Lifesteal lives or dies on whether fights feel fair.

  • Crystals, anchors and beds: turn them off with the prevent... options in step 3 unless your community specifically wants crystal PvP.
  • Maximum hearts: 20 hearts is double health. If a few players run away with the server, lower maxHearts to 15.
  • Mace and other burst weapons: newer Minecraft versions add weapons that can kill in one hit. Decide whether to allow them, and limit enchantment levels with a plugin if needed.
  • Combat style: if your players want 1.8-style combat, see PvP servers for OldCombatMechanics.
  • Anti-cheat: install Grim and watch its alerts for the first week. Kill aura and reach are what cost honest players hearts.
  • Bounties and events: a bounty on the top-hearts player, or a weekly PvP event at spawn, keeps fights happening between players who'd otherwise avoid each other.
11

The world

Border and pre-generation

A smaller map means players meet, which is the point of lifesteal.

Players Border radius
Up to 20 2,000–3,000
20–60 3,000–5,000
60+ 5,000–7,500
worldborder center 0 0
worldborder set 6000
chunky world world
chunky worldborder
chunky start

That's a 3,000-block radius. Pre-generate overnight, and do the Nether too. Pre-generate

A shrinking border for end-of-season

For the final week, shrink the border to force everyone together: worldborder set 1000 86400 shrinks it to 1,000 wide over 86,400 seconds (one day). Announce it well ahead.

Settings

File Setting Value
server.properties view-distance 8
server.properties simulation-distance 6
server.properties difficulty hard or normal
config/paper-world-defaults.yml environment.optimize-explosions true
config/paper-world-defaults.yml chunks.entity-per-chunk-save-limit experience_orb: 16, arrow: 16
12

Permissions plan

lp group default permission set lifestealz.withdraw true
lp group default permission set lifestealz.viewhearts true
lp group default permission set lifestealz.admin.revive false
lp creategroup mod
lp creategroup admin
lp group mod permission set lifestealz.admin.revive true
lp group admin parent add mod
lp group admin permission set lifestealz.admin.setlife true
lp group admin permission set lifestealz.admin.giveitem true
lp group admin permission set lifestealz.admin.eliminate true
lp group admin permission set lifestealz.admin.reload true
lp group admin permission set lifestealz.admin.graceperiod true
lp createtrack staff
lp track staff append mod
lp track staff append admin
Node Allows
lifestealz.withdraw /withdrawheart
lifestealz.viewhearts /hearts
lifestealz.admin.revive /revive
lifestealz.admin.setlife /lifestealz hearts set <player> <amount> (also add, remove, get)
lifestealz.admin.giveitem /lifestealz giveItem <player> <item> <amount>
lifestealz.admin.eliminate /eliminate <player>
lifestealz.admin.graceperiod /lifestealz graceperiod
lifestealz.bypass Exempts a player from heart rules (not given to anyone by default, not even ops)

Keep admin heart commands to as few people as possible, and log their use: every /lifestealz hearts set changes the game for everyone. Use CoreProtect's a:command lookups to audit them.

13

Storage and backups

LifeStealZ stores hearts and elimination status in SQLite by default. For a single server that's fine. If you run more than one server, or want the data outside the server files, switch to MySQL/MariaDB:

  1. In the panel, open Databases → Create Database, name it lifestealz. Databases

  2. Stop the server and edit plugins/LifeStealZ/storage.yml:

    type: "MySQL"
    host: "10.11.30.202"
    port: 3306
    database: "s22_lifestealz"
    username: "u22_xxxxxxxx"
    password: "the-password-from-the-panel"
    

    Use the values from your database's details. The comments in the file list the accepted type values. To move existing data, see the Data Migration page in the LifeStealZ docs first.

Backup schedule

Schedule Cron (UTC) Tasks
Backup every 6 hours 0 */6 * * * Send Command save-all, then Create Backup (offset 10 s)
Daily restart 0 9 * * * say warnings at 5 min and 1 min, then Restart

Set Only when server is online to off for the backup. Check Backups the next day. Backup schedules

14

Seasons

Lifesteal works best in seasons of 1–2 months: hearts concentrate in a few players over time, and a reset brings everyone back.

End of season:

  1. Announce the end date two weeks ahead. Run a final event (shrinking border, a last revive day).
  2. Record the winners: most hearts, most kills (PlaceholderAPI leaderboards make this easy).
  3. Lock a final backup and Download it.

Reset:

  1. Stop the server.
  2. In Files, rename or delete world, world_nether and world_the_end.
  3. Reset LifeStealZ data: delete its player database (the SQLite file in plugins/LifeStealZ/, or the tables in your MySQL database). Keep config.yml and items.yml.
  4. Unban everyone who was banned for elimination (LibertyBans /unban <player> if you used option B).
  5. Change level-seed in server.properties if you want a new map, start the server, pre-generate, then open.

Launch checklist

  • [ ] Paper on a pinned version; only one lifesteal plugin; plugins all green.
  • [ ] Heart rules decided: start, max, natural deaths, crystals/anchors/beds.
  • [ ] Withdraw floor set (allowDyingFromWithdraw: false, minWithdrawHearts).
  • [ ] Heart recipe priced; tested crafting and using one.
  • [ ] Revive beacon recipe and reviveHearts set; tested a full revive with a second account.
  • [ ] Elimination approach chosen (A, B or C) and written in /rules.
  • [ ] lifestealz.admin.revive denied to players.
  • [ ] Grace period and heart gain cooldown on.
  • [ ] Spawn protected with pvp deny and heartloss deny.
  • [ ] Combat tagging tested (log out mid-fight = death).
  • [ ] Anti-alt preventKill: true; LibertyBans installed.
  • [ ] Grim running; CoreProtect running.
  • [ ] World border set; map pre-generated.
  • [ ] Discord elimination webhook working.
  • [ ] Backups every 6 hours and a daily restart, tested with Run now; a locked launch backup.

Common problems

Problem Likely cause Fix
Players eliminate themselves withdrawing hearts allowDyingFromWithdraw: true Set it to false and set minWithdrawHearts.
Eliminated players never come back Default ban with no realistic revive Use option A, B or C from step 6.
Players lose hearts to fall damage and quit looseHeartsToNature: true Set it to false, or keep dropHeartsNatural: true so they can recover it.
New players farmed for hearts No grace period Enable gracePeriod; add a heart gain cooldown.
Players kill their own alts for hearts Anti-alt only logging Set antiAlt.preventKill: true; ban alt farming.
Players log out to save hearts No combat tag Install PvPManager or CombatLogX; punish with death.
Hearts given twice per kill Two lifesteal plugins installed Remove one.
Heart items duplicated An item frame or exploit Keep preventCustomItemsInItemFrames: true; update plugin and Paper; keep unsupported-settings off.
Heart items burn or despawn Item settings invulnerable: true and despawnable: false in items.yml.
Anyone can run /revive Default permission lp group default permission set lifestealz.admin.revive false.
Config changes don't apply Edited while running Stop, edit, start; or lifestealz reload for small changes.
Players die in spawn No heartloss/pvp flags Add the WorldGuard region in step 7.
Crystal PvP dominates Crystals allowed preventCrystalPVP: true.

Going further

  • Scoreboards: show hearts with LifeStealZ's PlaceholderAPI placeholders (listed in its docs under PlaceholderAPI).
  • Custom items: extra heart tiers (worth 2 hearts, only usable below 10) or a revive item with a different recipe.
  • Teams: a teams or claims plugin turns lifesteal into a group game, but make sure claims don't block PvP or heart drops in ways you didn't intend.
  • Bedrock players: Bedrock crossplay. Grim exempts Geyser players, so watch them with other tools.
  • LifeStealZ's full docs (commands, config, custom items, migration, API) are at docs.zetaplugins.com.