AnziLifesteal Documentation
Welcome to the AnziLifesteal documentation! AnziLifesteal is a comprehensive, highly configurable plugin for Paper and Spigot servers running a Lifesteal SMP. It features cross-server synchronization, customizable recipes, an in-game recipe editor, rebirth mechanics, spawn-kill and alt protections, Discord webhook notifications, and more.
Overview
AnziLifesteal provides everything you need to run a professional Lifesteal SMP. Players steal hearts from each other on kill, are eliminated when they reach 0 hearts, and can be revived using craftable Revive Beacons. The plugin includes a rebirth prestige system, optional MySQL synchronization for proxy networks, optional Discord notifications, and extensive anti-exploit protections.
| Detail | Value |
|---|---|
| Current version | 1.4.3 |
| Platform | Paper / Spigot, api-version: '1.20' |
| Soft dependencies | PlaceholderAPI (placeholders), Vault (rebirth money cost) |
| Storage | Local data.yml by default, optional MySQL |
Features
- Lifesteal Mechanics: Steal a heart from every player you kill, lose one when you die. Heart loss on non-player deaths is configurable.
- Heart Items: Withdraw hearts into physical items and consume them later. A stolen heart is handed over as a physical Heart item when the killer is already at their personal maximum.
- Eliminations & Reviving: Players reaching 0 hearts are banned for a progressively longer duration each time. They can be brought back with a craftable Revive Beacon.
- Rebirth System: A prestige system that resets hearts in exchange for a permanently higher personal heart cap.
- MySQL Synchronization: Sync hearts, elimination counts, rebirths, and toggle states across a proxy network.
- Protections: Built-in anti-spawn-kill, anti-alt-farming, a minimum-hearts floor, and minigame protection so deaths in minigames never cost hearts.
- Toggle System: Admins can temporarily or permanently exempt players from lifesteal.
- Discord Webhooks: Optional embeds for withdrawals, kills, eliminations, revives, and rebirths.
- PlaceholderAPI Integration: 17 placeholders for scoreboards, tab lists, and leaderboards.
- Support Dumps:
/als dumpgives you a private link with the plugin's log, the full server log and your server's setup to send to support. See Support Dumps. - Automatic Updates: New versions download by themselves after a license check and load on the next restart. New settings are added to your config files with their comments. See Automatic Updates.
- Update Checker: Admins are notified in-game and in console when a new release is available.
Installation & License
- Download the latest AnziLifesteal release.
- Place the JAR in your Paper or Spigot
plugins/folder. - Start the server once so the configuration files are generated.
- Open
plugins/AnziLifesteal/config.ymland paste your license key. - Restart the server and confirm the console reports a successful license check.
AnziLock License
AnziLifesteal is protected by AnziLock. License keys are issued through the Discord community — use the /claim command there to receive yours, then set it in config.yml:
license:
key: "YOUR_LICENSE_KEY_HERE"
On startup the plugin verifies the key against license.ajdnikov-dev.com and then runs a low-frequency heartbeat in the background. The last signed verification is cached, so a short outage of the license server will not take your server down — the plugin continues on the cached result for the offline grace period. Console lines are prefixed with [AnziLock] and [AnziLS].
Automatic Updates
Since 1.4.2, AnziLifesteal updates itself. When a new version is released, it checks your license again, downloads the new jar into plugins/update, and the server loads it on the next restart. The file is kept only if its size and checksum match the signed license answer. Nothing changes while the server is running.
- Turn it off with
auto-update: falseinconfig.yml. - Players with
als.updates(ops by default) are told on join when a new version is waiting for a restart. - New settings are added to
config.ymlanddiscord.ymlon start, with their comments. Your values stay, and the old file is kept as.bak. Recipe ingredients stay exactly as you set them. - Coming from 1.4.1 or older? Install 1.4.2 or newer by hand once. Every later version arrives by itself.
How the download is checked: AnziLock → Automatic Updates.
Support Dumps
Since 1.4.3, /als dump makes a private link for support. The page shows AnziLifesteal's own log next to the full server log, and your server's setup: software and version, uptime, TPS, RAM, disk, CPU, Java, worlds, every plugin, and config.yml and discord.yml with keys, passwords and webhooks blanked out. Only you see the link in chat: click it, or click [Copy], and send it to whoever helps you on Discord.
/als dump 6covers only the last 6 hours./als dump localuploads nothing and saves the dump inplugins/AnziLifesteal/dumps/as a readable.txtand a.json.gz.- On the page you can filter and search both logs, show only the lines about AnziLifesteal (stack traces included), and save everything to your PC as
.txtor.json. A saved.jsonopens again atlicense.ajdnikov-dev.com/dumpafter the link has expired. - The link works for
dump.link-hours(24 by default, at most 168). You can remove it sooner on your licence page under Dumps. - IP addresses are replaced with
x.x.x.xunless you setdump.hide-ips: false. - Needs
als.dump(ops by default).
dump:
# Hours of AnziLifesteal's log to keep on disk (dump-logs/) and put in a dump.
log-hours: 48
# How long the link works, in hours (at most 168).
link-hours: 24
# Replace IP addresses in the logs with x.x.x.x.
hide-ips: true
What a dump contains and how long it is kept: AnziLock → Support Dumps.
Generated Files
config.yml— license, heart rules, protections, rebirth, MySQL, recipes, GUI text, and messagesdiscord.yml— the webhook URL and per-event embedsdata.yml— local player data, used when MySQL is disabledconfig.yml.bak,discord.yml.bak— your files as they were before an update added new settingsdump-logs/— the plugin's log for support dumps, one file per hourdumps/— dumps saved with/als dump local, or when an upload failed
Commands & Permissions
Player Commands
| Command | Description | Permission |
|---|---|---|
/withdraw <amount> | Withdraws the specified number of hearts into physical Heart items. | None |
/rebirth | Opens the rebirth GUI to prestige. | None |
Admin Commands
Permission required: als.admin (except /lstoggle, which requires als.toggle).
| Command | Description |
|---|---|
/als set_hearts <player> <amount> | Sets a player's current hearts. |
/als give <heart|revive_beacon> <player> [amount] | Gives the specified custom item. Note the item type comes before the player name. |
/als recipes <heart|revive_beacon> | Opens the in-game Recipe Editor GUI for that recipe. |
/als max_hearts <amount> | Sets and saves the global maximum heart cap. |
/als hearts_when_revived <amount> | Sets how many hearts a revived player receives. |
/als min_withdraw <amount> | Sets the minimum hearts a player must retain when withdrawing. |
/als min_hearts_protection <true|false> | Toggles the minimum-hearts protection. |
/als min_hearts <number> | Sets the protected minimum heart count (at least 1). |
/als min_hearts_killer_heart <true|false> | Whether a killer still gets a heart for killing a player at the minimum. |
/als ban_on_zero <true|false> | Toggles whether players are banned at 0 hearts. |
/als lose_on_non_player_death <true|false> | Toggles losing hearts to PvE deaths. |
/als anti_spawn_kill <true|false> | Toggles spawn-kill protection. |
/als anti_alt <true|false> | Toggles alt-farming prevention. |
/als link_alt <player1> <player2> | Manually links two players as alts. |
/als unlink_alt <player1> <player2> | Removes a manual alt link. |
/als toggle <player> <on|off> [time] | Admin alias for changing a player's lifesteal state. |
/als reload | Reloads config.yml, recipes, and the Discord webhook config. |
/als dump [hours] [local] | A private link with the plugin's log, the full server log and your server's setup, for support. Also needs als.dump. See Support Dumps. |
/lstoggle <player> <on|off> [time] | Toggles lifesteal for a player — requires als.toggle. |
Permissions
| Permission | Description | Default |
|---|---|---|
als.admin | Access to all /als admin subcommands. | OP |
als.toggle | Access to /lstoggle. | OP |
als.updates | Told on join when a new version has been downloaded and is waiting for a restart. | OP |
als.dump | Use /als dump. | OP |
Configuration Guide
Core Settings
starting-hearts: Hearts a new player starts with. Default10.max-hearts: The absolute maximum hearts a player can reach. Default20.min-withdraw-hearts: Prevents withdrawing if it would drop the player below this threshold.lose-hearts-on-non-player-death: If true, dying to mobs, fall damage, or the void costs a heart.
Elimination Settings
ban-on-zero: If true, hitting 0 hearts eliminates (bans) the player. If false they stay at 1 heart but stop giving hearts on death.ban-durations: A progressive list of ban lengths (for example1h,24h,7d). The last value repeats once a player exceeds the list.-1means a permanent ban, and an empty list means every elimination is permanent.hearts-when-revived: Hearts given when a ban expires or a player is revived.enable-revive-beacon: Enables or disables the Revive Beacon item and its recipe.
Note: with minimum-hearts protection on (the default), players at the minimum stop losing hearts, so they never reach 0 and are never banned. Turn it off with /als min_hearts_protection false if you want eliminations.
Applying Changes
Run /als reload after editing config.yml directly. The reload re-reads the config, reloads player data, re-registers recipes, and reloads discord.yml.
Protections
Anti-Spawn-Kill
anti-spawn-kill:
enabled: true
max-kills: 3 # max heart steals from the same victim per window
time-window: 180 # window length in seconds
spawn-radius: 10 # blocks from the victim's respawn point
When a kill is blocked, no hearts are transferred in either direction and both players are told why. Toggle at runtime with /als anti_spawn_kill.
Anti-Alt
anti-alt:
enabled: false
Blocks heart transfers between accounts sharing an IP address, and between accounts an admin has manually linked with /als link_alt. Toggle at runtime with /als anti_alt.
Minimum Hearts
min-hearts:
enabled: true
amount: 1 # the protected minimum (at least 1)
killer-gets-heart: false # does the killer still get a heart?
Players at (or below) amount hearts don't lose hearts when they die, so they can never drop to 0 hearts and never get banned. Both players are told why. With killer-gets-heart: true, the killer still gets a heart (the victim keeps theirs); with false, the killer gets nothing. Withdrawing also can't take a player below this minimum. Change it at runtime with /als min_hearts_protection, /als min_hearts and /als min_hearts_killer_heart.
It is on by default, including on configs from before 1.4 that have no min-hearts section. If you run eliminations with ban-on-zero, turn it off.
Minigame Protection
minigame-protection:
enabled: true
ajdnikov-gamemodes: true # protect players in an AjdnikovGamemodes game
worlds: # also protect every death in these worlds; * matches any text
- "ag_game_*"
- "ag_preloaded_*"
Players don't lose or steal hearts when they die in a minigame, so dying in a game (or the game ending) never costs anyone hearts. With ajdnikov-gamemodes: true, players in an AjdnikovGamemodes game are protected in every world, including the shared Nether and End during Manhunt or speedruns. Add any other minigame worlds to worlds. AjdnikovGamemodes also keeps Heart and Revive Beacon items through games with its item rescue.
Rebirth System
Rebirth is a prestige mechanic. Players who meet the heart, money, and XP requirements can reset their hearts in exchange for a permanently higher personal heart cap. The GUI opens with /rebirth and shows live progress against every requirement.
rebirth:
hearts-after-rebirth: 10
extra-max-hearts-per-rebirth: 1
required-hearts-percentage: 50
max-rebirths: -1
cost-money: 0
cost-money-multiplier: 1.0
cost-xp-levels: 0
hearts-after-rebirth: Hearts the player is reset to.extra-max-hearts-per-rebirth: Permanent increase to their personal heart cap.required-hearts-percentage: Percentage of the range above starting hearts required to rebirth (0–100).max-rebirths: Maximum number of rebirths.-1is unlimited.cost-money: Base money cost. Requires Vault and an economy plugin. Set to0to disable.cost-money-multiplier: Scales the money cost per rebirth —1.5makes each rebirth 50% more expensive,1.0keeps it flat.cost-xp-levels: XP levels required. Set to0to disable.
Formula: starting-hearts + (max-hearts - starting-hearts) × percentage
Example: starting = 10, max = 20, 50% → 10 + (20−10) × 0.5 = 15 hearts needed
Toggle System
Admins can exempt individual players from lifesteal entirely — useful for content creators, builders, or a temporary truce. While a player is toggled off they neither steal nor lose hearts, and other players cannot steal from them.
/lstoggle <player> off 1h # disable for one hour
/lstoggle <player> off # disable permanently
/lstoggle <player> on # re-enable
Durations accept formats such as 10s, 34m, 4h, and 1d. Omitting the duration disables lifesteal until it is explicitly turned back on. Running /lstoggle <player> with no action reports the player's current state.
toggle:
sync-interval-seconds: 30
When MySQL is enabled, toggle states are pulled from the database at this interval, so a toggle set on one backend takes effect network-wide. Affected players are notified when their state changes from another server.
MySQL & Syncing
MySQL is optional. With it disabled the plugin stores everything in a local data.yml. Enable it to share hearts, elimination counts, rebirths, and toggle states across a Velocity or BungeeCord network.
mysql:
enabled: true
host: "localhost"
port: 3306
database: "lifesteal"
username: "root"
password: ""
pool-size: 10
server-id: "server-1"
Point every backend server at the same database, and give each one a unique server-id.
Recipe System
Recipes are fully customizable in config.yml using a shape matrix, or in-game through the Recipe Editor GUI:
/als recipes heart
/als recipes revive_beacon
Changes made in the editor are saved back to config.yml and the recipes re-register immediately — no restart needed.
| Item | Default ingredients |
|---|---|
| Heart | Diamond, Nether Star, Gold Ingot |
| Revive Beacon | Ender Eye, Nether Star, Obsidian, Beacon |
Each recipe has its own enabled flag, so you can remove one from the game entirely. The Revive Beacon also respects the global enable-revive-beacon setting.
Discord Webhooks
AnziLifesteal can post rich embeds to a Discord channel for every major lifesteal event. Configuration lives in its own file, plugins/AnziLifesteal/discord.yml.
# Master toggle - set to false to disable all Discord messages
enabled: false
# Your Discord webhook URL (Server Settings -> Integrations -> Webhooks)
webhook-url: "https://discord.com/api/webhooks/YOUR_WEBHOOK_URL_HERE"
# Bot display name and avatar shown in Discord
bot-name: "Lifesteal"
bot-avatar-url: ""
Events
Each event can be toggled on or off individually and carries its own embed title, description, color (decimal), and footer.
| Event | Fires when | Placeholders |
|---|---|---|
withdraw | A player withdraws hearts into items | {player}, {amount}, {hearts} |
kill | A player kills another and steals a heart | {killer}, {victim}, {killer_hearts}, {victim_hearts} |
elimination | A player loses all hearts and is banned | {player}, {duration} |
revive | A Revive Beacon brings a player back | {player}, {target} |
rebirth | A player successfully rebirths | {player}, {rebirths}, {max_hearts} |
Example event block:
events:
kill:
enabled: true
title: "⚔ Player Killed"
description: "**{killer}** killed **{victim}** and stole a heart!"
color: 16711680
footer: "Anzi Lifesteal"
Colors are decimal values — 16711680 red, 65280 green, 16776960 yellow, 16746496 orange, 0 black. Run /als reload after editing discord.yml.
PlaceholderAPI Integration
When PlaceholderAPI is installed, AnziLifesteal registers the lifesteal expansion automatically. It persists across /papi reload.
Hearts
| Placeholder | Returns |
|---|---|
%lifesteal_hearts% | The player's current hearts |
%lifesteal_max_hearts% | Their personal maximum, including rebirth bonuses |
%lifesteal_starting_hearts% | The configured starting hearts |
%lifesteal_hearts_display% | Hearts drawn as icons, e.g. ❤❤❤ |
%lifesteal_hearts_fraction% | Current over maximum, e.g. 8/20 |
%lifesteal_hearts_percent% | Current hearts as a percentage, e.g. 40% |
Rebirth
| Placeholder | Returns |
|---|---|
%lifesteal_rebirths% | Total number of rebirths completed |
%lifesteal_rebirth_bonus% | Extra max hearts gained from rebirths |
%lifesteal_can_rebirth% | true / false — whether they meet the heart requirement |
Status & Settings
| Placeholder | Returns |
|---|---|
%lifesteal_is_eliminated% | true / false — whether the player is at 0 hearts |
%lifesteal_ban_count% | How many times the player has been eliminated |
%lifesteal_ban_on_zero% | true / false — whether elimination bans are enabled |
%lifesteal_min_withdraw% | Minimum hearts required when withdrawing |
%lifesteal_hearts_when_revived% | Hearts granted on revival |
%lifesteal_revive_beacon_enabled% | true / false — whether the Revive Beacon is enabled |
%lifesteal_lose_on_non_player_death% | true / false — whether PvE deaths cost a heart |
Messages & GUI Text
Every GUI title, lore line, and chat message is fully customizable with standard Minecraft color codes (&) inside the gui-text and messages sections of config.yml.
GUI Text
The gui-text section covers the Recipe Editor, the Revive Beacon player picker, and the Rebirth GUI — including separate lore blocks for the ready, not-ready, and maxed-out rebirth states. Rebirth lore supports {hearts}, {required_hearts}, {max_hearts}, {player_money}, {cost_money}, {player_xp}, and {cost_xp}.
Messages
The messages section covers heart gains and losses, withdrawals, eliminations, revives, rebirths, config changes, protection blocks, and the full toggle-system message set (including notifications sent when a toggle is synced from another server).
Note: Run /als reload after making direct changes to config.yml.
Full config.yml
The default configuration, with the GUI text and message sections abbreviated:
# ══════════════════════════════════════════════
# Anzi Lifesteal - Configuration
# ══════════════════════════════════════════════
# ─── ANZILOCK LICENSE ───────────────────────────
# Insert the license key you received via Discord here (see /claim).
license:
key: ""
# Download new versions of AnziLifesteal automatically when they are released.
# They are checked against your license and load on the next restart.
# Players with als.updates (ops by default) are told when one is waiting.
auto-update: true
# /als dump makes a private link with the plugin's log, the full server log and the server's setup
# to share with support. "dump local" only saves it in plugins/AnziLifesteal/dumps/.
dump:
# Hours of the plugin's log to keep on disk (dump-logs/) and put in a dump.
log-hours: 48
# How long the link works, in hours (at most 168).
link-hours: 24
# Replace IP addresses in the logs with x.x.x.x.
hide-ips: true
# Starting hearts for new players (1 heart = 1 full vanilla heart)
starting-hearts: 10
# Maximum hearts a player can have
max-hearts: 20
# Minimum hearts a player must be left with when withdrawing
min-withdraw-hearts: 1
# ─── MINIMUM HEARTS PROTECTION ──────────────────
# Players at (or below) the minimum don't lose hearts when they die,
# so they can never drop to 0 hearts and never get banned.
min-hearts:
# Turn the protection on or off
enabled: true
# The minimum heart count (at least 1)
amount: 1
# If true, the killer still gets a heart when killing a player at minimum hearts
# (the victim still keeps theirs). If false, the killer gets nothing.
killer-gets-heart: false
# If true, players are banned when they reach 0 hearts
# If false, they stay at 1 heart but don't give hearts on death
ban-on-zero: true
# How long a player is banned each time they lose all hearts.
# Formats: 1m, 1h, 1d, etc. If a value is -1, it's a permanent ban.
# The last value is used if they exceed the list length.
ban-durations:
- "1h"
- "24h"
- "7d"
# How many hearts players have when their ban expires or they are revived.
hearts-when-revived: 1
# If true, the revive beacon item can be used and its recipe works.
enable-revive-beacon: true
# If true, players lose a heart when dying to non-player causes (mobs, lava, etc.)
lose-hearts-on-non-player-death: true
# ─── MINIGAME PROTECTION ────────────────────────
# Players don't lose or steal hearts when they die in a minigame, so dying in a
# game (or the game ending) never costs anyone hearts.
minigame-protection:
# Turn the protection on or off
enabled: true
# Protect players while they are in an AjdnikovGamemodes game (works in every
# world, including the shared Nether/End during Manhunt or speedruns)
ajdnikov-gamemodes: true
# Also protect every death in these worlds. * matches any text.
# The defaults are the AjdnikovGamemodes game worlds.
worlds:
- "ag_game_*"
- "ag_preloaded_*"
# ─── ANTI SPAWN KILL ────────────────────────────
anti-spawn-kill:
enabled: true
max-kills: 3
time-window: 180
spawn-radius: 10
# ─── ALT DETECTION ──────────────────────────────
anti-alt:
enabled: false
# ─── REBIRTH ────────────────────────────────────
rebirth:
hearts-after-rebirth: 10
extra-max-hearts-per-rebirth: 1
required-hearts-percentage: 50
max-rebirths: -1
cost-money: 0
cost-money-multiplier: 1.0
cost-xp-levels: 0
# ─── MYSQL (Velocity Sync) ──────────────────────
mysql:
enabled: false
host: "localhost"
port: 3306
database: "lifesteal"
username: "root"
password: ""
pool-size: 10
server-id: "server-1"
# ─── TOGGLE SYSTEM ──────────────────────────────
toggle:
sync-interval-seconds: 30
# ─── RECIPES ────────────────────────────────────
recipes:
heart:
enabled: true
shape:
- "DND"
- "NGN"
- "DND"
ingredients:
D: DIAMOND
N: NETHER_STAR
G: GOLD_INGOT
revive_beacon:
enabled: true
shape:
- "ENE"
- "OBO"
- "OOO"
ingredients:
E: ENDER_EYE
N: NETHER_STAR
O: OBSIDIAN
B: BEACON
# ─── GUI TEXT ───────────────────────────────────
# All GUI titles and button labels are configurable here.
gui-text:
recipe-editor-title: "&6&lRecipe Editor: &e{type}"
revive-gui-title: "&b&lRevive Beacon - Select Player"
rebirth-gui-title: "&c&lREBIRTH"
# ... save/cancel buttons, revive lore, and the full rebirth lore blocks
# ─── MESSAGES ───────────────────────────────────
# All chat messages.
messages:
heart-gained: "&a+1 ❤ You now have &e{hearts}&a hearts!"
heart-lost: "&c-1 ❤ You now have &e{hearts}&c hearts!"
heart-withdrawn: "&aWithdrawn &e{amount}&a heart(s)!"
banned: "&cYou have lost all your hearts and have been eliminated!"
revived: "&aYou have been revived with 1 heart!"
spawn-kill-blocked: "&cSpawn kill protection! No hearts were transferred."
alt-kill-blocked: "&cAlt account detected! No hearts were transferred."
rebirth-success: "&a⭐ You have successfully rebirthed!"
# ... plus the full toggle-system message set