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.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 and anti-alt-farming.
- 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.
- 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].
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 disabled
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 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. |
/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 |
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.
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.
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: ""
# 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
# 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
# ─── 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