https://github.com/standardan/lifesteal
Hardcore Lifesteal SMP for Paper 1.21+ - steal hearts on kill, elimination, heart items, revives.
https://github.com/standardan/lifesteal
bukkit java lifesteal minecraft minecraft-plugin paper paper-plugin pvp smp spigot survival
Last synced: 5 days ago
JSON representation
Hardcore Lifesteal SMP for Paper 1.21+ - steal hearts on kill, elimination, heart items, revives.
- Host: GitHub
- URL: https://github.com/standardan/lifesteal
- Owner: Standardan
- Created: 2026-05-29T02:21:20.000Z (5 days ago)
- Default Branch: main
- Last Pushed: 2026-05-29T03:06:24.000Z (5 days ago)
- Last Synced: 2026-05-29T04:17:02.957Z (5 days ago)
- Topics: bukkit, java, lifesteal, minecraft, minecraft-plugin, paper, paper-plugin, pvp, smp, spigot, survival
- Language: Java
- Size: 10.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Lifesteal
A hardcore **Lifesteal SMP** plugin for Paper 1.21+ — the most-played survival genre of 2025.
Kill a player, steal a heart. Hit zero hearts, you're eliminated. Hearts are a tradable
item economy, and admins can revive the fallen.
## Download
**[Download the latest release »](https://github.com/Standardan/lifesteal/releases/latest)**
Drop the `.jar` into your server's `plugins/` folder and restart. Requires Paper 1.21+ (Java 21).
## Features
- **Heart transfer on kill** — the killer gains a heart (up to a cap), the victim loses one
- **Elimination** at zero hearts — `ban` (blocked from rejoining) or `spectator` mode, your choice
- **Heart items** — withdraw a heart into a tradable item (`/withdraw`), right-click to consume one; craftable too
- **Revives** — `/lifesteal revive ` restores an eliminated player, even offline
- **Persistent** per-player hearts in SQLite, applied via the `MAX_HEALTH` attribute
- Player-kill only — no farming mobs or suicides for free hearts
## Commands & permissions
| Command | Description | Permission |
|---|---|---|
| `/hearts` | Show your heart count | everyone |
| `/withdraw` | Withdraw a heart as an item | `lifesteal.withdraw` (default: all) |
| `/lifesteal reload` | Reload config | `lifesteal.admin` (op) |
| `/lifesteal sethearts ` | Set a player's hearts | `lifesteal.admin` |
| `/lifesteal revive ` | Revive an eliminated player | `lifesteal.admin` |
## Configuration (`config.yml`)
```yaml
starting-hearts: 10
max-hearts: 20
min-hearts: 1 # elimination triggers below this
elimination: ban # ban | spectator
drop-heart-on-elimination: true
```
## Design notes
- **Hearts are cached in memory** (`HeartManager`) so combat math is instant; the database is
updated asynchronously off the main thread.
- **Items are identified by a PersistentDataContainer tag**, not their name — players can't
forge a Heart by renaming a Nether Star.
- Elimination runs **one tick after** the death event, since the player is mid-death when the
kill is processed.
## Building
JDK 21 + Maven. `mvn clean package` → `target/lifesteal-1.0.0.jar`.