Перейти к содержимому
Mineforgian

EzLifesteal

Steal hearts from other players with leaderboard, auto-ban and more tools for competitive Minecraft Lifesteal servers

Загрузки
2K
Подписчики
3
Обновлён
31 мая 2026 г.
Лицензия
MIT

Опубликован 24 января 2026 г.

GitHub Discord License

A full-featured lifesteal plugin for Minecraft built for Paper servers. EzLifesteal gives server owners precise control over heart gain and loss, a complete heart item economy, seasonal resets, anti-abuse systems, and a revive beacon subsystem - all in one lightweight, highly configurable jar.

Gameplay Features

  • Per-world heart rules - set default, minimum, and maximum hearts; configure kill rewards and death penalties; choose zero-heart ban or respawn behaviour; define per-world overrides in lifesteal-worlds.yml.
  • Mob heart drops - let mobs drop hearts on death with per-entity permission nodes and world allow/deny lists.
  • Kill streak rewards - trigger money payouts (Vault), console commands, item grants, and server broadcasts at configurable milestone streaks.
  • Heart item economy - physical heart objects with custom materials, textures, and optional NBT. Players give, trade, auction, or consume them to gain hearts. Configured in hearts.yml.
  • Heart shop - configurable shop GUI where players can spend in-game currency on hearts.
  • Combat logout protection - tags PvP sessions for a configurable window and punishes quitters so duels stay fair.
  • Leaderboards & overlays - action-bar / boss-bar overlays, a self-updating /lifesteal hologram place leaderboard, /lifesteal top rankings, and live PlaceholderAPI data for scoreboards.
  • Smurf detection - monitors farm loops and rotating kill rings; alerts staff holding lifesteal.alert; stores full history for review.
  • Admin controls - define staff by ops, permission node, UUID, or name; optionally bypass heart gain or loss for admins; smurf alerts can be kept admin-only.
  • Seasonal resets - install EzSeasons for automated season scheduling, countdown broadcasts, and automatic heart resets. No extra bridge jars required.
  • 8 built-in translations - English, German, Spanish, French, Dutch, Portuguese, Russian, and Chinese. All messages editable in languages/<locale>.yml.

Revive Beacon

Banned players can be restored by a teammate who right-clicks a beacon block with a configurable voucher item.

  • Whitelist existing beacons with /lifesteal beacon add, or let the plugin place and manage beacons automatically.
  • Beacon spawn subsystem - places BEACON blocks at random or specified coordinates on a schedule or on demand.
  • Full lifecycle: placement → optional WorldGuard protection region → optional EzCountdown warm-up timer → available → auto-expiry.
  • When a beacon becomes claimable, the plugin fires a server-wide broadcast, title overlay, particles, and fireworks - fully configurable under revive-beacon.spawn.availability-event. -- Beacon commands: /beacon spawn [world x y z], /beacon despawn <id|all>, /beacon spawns.

Screenshots

Beacon countdown

Beacon warming-up Beacon player selection

Heart Objects

Physical heart items that players can hold, trade, and consume to gain hearts.

  • Define any number of heart tiers in hearts.yml with custom materials, player head textures, and optional NBT data.
  • Use /lifesteal giveheart <player> <id|tier> [amount] to hand them out. Items drop at the player's feet if inventory is full.
  • Use cases: loot drops on kill, auction-house trading, rare collectible hearts, heart-based economy.

Optional Integrations

EzLifesteal leaderboard and scoreboard

EzLifesteal runs standalone. All integrations are soft dependencies, the plugin starts normally if any of them are absent.

Integration Purpose
PlaceholderAPI Player and leaderboard placeholders for scoreboards, tab lists, and other plugins
Vault Economy payouts for kill streak rewards
EzSeasons Automated season scheduling and heart resets
WorldGuard Protection region around each plugin-spawned beacon
EzCountdown Visible countdown timer during beacon warm-up (falls back to built-in Bukkit task)
TeamsAPI Skip heart transfers between teammates (team-kill-bypass-with-teams-api in lifesteal-core.yml)

Configuration Presets

Casual SMP

Raise the heart floor and disable zero-heart bans so everyone keeps playing.

# lifesteal-core.yml
default-hearts: 12.0
min-hearts: 6.0
max-hearts: 30.0
hearts-per-kill: 1.0
hearts-lost-on-death: 1.0
ban-when-zero-hearts: false

Hardcore Grind

Every fight counts - lose two hearts on death, gain half a heart on kills, with tougher rules in the Nether.

# lifesteal-core.yml
default-hearts: 8.0
min-hearts: 1.0
max-hearts: 16.0
hearts-per-kill: 0.5
hearts-lost-on-death: 2.0
ban-when-zero-hearts: true

# lifesteal-worlds.yml
world-overrides:
  world_nether:
    hearts-per-kill: 0.25
    hearts-lost-on-death: 3.0

PlaceholderAPI Placeholders

Install PlaceholderAPI and the expansion registers automatically.

  • %ezlifesteal_hearts% / %ezlifesteal_current_hearts% - stored heart count for a player.
  • %ezlifesteal_default_hearts%, %ezlifesteal_min_hearts%, %ezlifesteal_max_hearts%
  • %ezlifesteal_top_<n>_hearts%, %ezlifesteal_top_<n>_current_hearts%, %ezlifesteal_top_<n>_name%, %ezlifesteal_top_<n>_uuid%

Commands & Permissions

Scope Examples
Player /lifesteal, /lifesteal top, /lifesteal transfer, /lifesteal shop
Staff /lifesteal give, /lifesteal revive, /lifesteal reload, /lifesteal test
Beacon `/beacon add

Permission bundles: lifesteal.player · lifesteal.mod · lifesteal.admin

See the full Commands reference and Permissions list.

Storage & Reliability

  • YAML (default) - one file per player at data/players/<uuid>.yml; auto-migrates legacy players.yml on first load.
  • MySQL - table created on startup using ON DUPLICATE KEY UPDATE for safe concurrent saves.
  • All I/O runs off the main thread. Use /lifesteal reload to switch backends without restarting.

Quick Start

  1. Place the jar in your server's plugins/ folder and start the server.
  2. Pick YAML or MYSQL storage in storage.yml, set your language in config.yml, and tune heart rules in lifesteal-core.yml.
  3. Configure world overrides in lifesteal-worlds.yml and overlays in features.yml. Install EzSeasons if you want season resets.
  4. Review admin.yml to define staff and bypass rules.
  5. Use /lifesteal reload after config changes. Run /lifesteal test <kill|death> to validate flows before going live.

Need help or want to request a feature? Join our Discord. Source: GitHub repository

Try the other plugins in the EzPlugins series

Ченджлог

1.1.2Релиз1.21.9, 1.21.10, 1.21.11 · 31 мая 2026 г.

Added

  • Hologram orphan cleanup command: /lifesteal hologram cleanup [radius] (player-only, requires lifesteal.scoreboard.remove or lifesteal.hologram or lifesteal.admin). Scans nearby entities within the given radius (default 10, clamped to 1–64) and removes armor stands that look like EzLifesteal hologram lines but are no longer tracked by the manager. Useful after unexpected server crashes that leave ghost stands in the world.
  • PersistentDataContainer tagging — every armor stand spawned by TopHologramManager is now tagged with a NamespacedKey("hologram_line") PDC entry. This makes orphan detection reliable across server restarts. Pre-existing untagged stands are identified via a heuristic (marker, invisible, no gravity, small, custom-name-visible, no base-plate, no arms).
  • Language keys hologram-cleanup-removed and hologram-cleanup-none added to all 8 locale files (en, de, es, fr, nl, pt, ru, zh).
  • EzCountdown 2.0.1: richer countdown configuration — bumped the EzCountdown dependency to 2.0.1 and exposed six new CountdownBuilder fields through revive-beacon.yml under spawn.countdown:
    • start-message: server-wide broadcast sent when the countdown starts (leave blank to disable).
    • end-message: server-wide broadcast sent when the countdown ends (leave blank to disable).
    • end-commands: list of console commands dispatched when the countdown ends; supports {name} placeholder for the countdown ID.
    • update-interval-seconds: how often EzCountdown refreshes the display in seconds (default 1; increase to reduce load on high-player-count servers).
    • visibility-permission: permission node required to see the countdown overlay; leave blank to show to all players.
    • ephemeral: when true (default) the countdown lives only in memory and is never written to EzCountdown's countdowns.yml, preventing orphaned entries after a server restart.

Changed

  • EzCountdownBeaconHook now catches DuplicateCountdownException separately (reuses an existing countdown by name rather than silently dropping it) and catches the base EzCountdownException for all other EzCountdown errors, with distinct log messages for easier diagnosis.

1.1.1Релиз26.1, 26.1.1, 26.1.2 · 24 мая 2026 г.

Added

  • Bumped project version to 1.1.1.
  • Short-term fix for team-bank persistence: perform a compensating rollback of a player's profile when a subsequent team-bank save fails, preventing inconsistent state between player hearts and the team bank.
  • Added focused unit tests that exercise team-bank rollback and atomicity paths to address patch-level coverage requirements; JaCoCo checks pass locally.

Changed

  • Bumped dependency versions (WorldEdit, WorldGuard, EzCountdown, Testcontainers, JUnit, Awaitility, SLF4J and others) per dependabot updates.

Fixed

  • Resolved a patch-coverage failure by adding targeted tests for TeamBankService and TeamBankAdminService; coverage for modified lines now meets project rules.

1.1.0Релиз26.1, 26.1.1, 26.1.2 · 17 мая 2026 г.

What's new in 1.1.0: shared Team Heart Bank (requires TeamsAPI), automated revive beacon placement with scheduling and random regions, WorldGuard protection for auto-spawned beacons, EzCountdown support for beacon warm-up timers, and an expanded interactive beacon GUI. Several bug fixes for bans, beacons, and the team bank.

Added

Team Heart Bank (requires TeamsAPI)

Teams can now pool hearts into a shared bank. Players deposit and withdraw hearts; admins can inspect or adjust any team's balance directly from the console or in-game.

Player commands:

Command Permission
/lifesteal teambank balance lifesteal.teambank.balance
/lifesteal teambank deposit <amount> lifesteal.teambank.deposit
/lifesteal teambank withdraw <amount> lifesteal.teambank.withdraw

Admin commands — operate on any team by name or UUID:

Command Permission
/lifesteal teambank admin balance <team> lifesteal.teambank.admin.balance
/lifesteal teambank admin deposit <team> <amount> lifesteal.teambank.admin.deposit
/lifesteal teambank admin withdraw <team> <amount> lifesteal.teambank.admin.withdraw
/lifesteal teambank admin reset <team> lifesteal.teambank.admin.reset
/lifesteal teambank admin transfer <from> <to> <amount> lifesteal.teambank.admin.transfer

The bank uses YAML or MySQL storage, matching your existing storage setting.

New lifesteal-core.yml keys:

team-bank:
  enabled: true
  max-hearts: 100           # global cap on a team bank balance
  per-team-overrides:       # optional per-team cap (overrides max-hearts for that team)
    MyTeam: 50              # key: team name or UUID

Team-kill bypass — heart transfers are skipped when killer and victim share a team. Replaces the old flat team-kill-bypass-with-teams-api boolean with a richer section (old key still works as a fallback — see Migration notes below):

team-kill-bypass:
  enabled: true
  exempt-worlds:            # worlds where the bypass does NOT apply
    - pvp-arena
  min-team-size: 2          # bypass only activates when the team has at least N members

Beacon Auto-Spawn

The plugin can now place revive beacons in the world automatically — on a recurring timer, on demand via command, or at a random location within a configured bounding box or weighted region list.

EzCountdown Bossbar countdown

EzCountdown Beacon Countdown

Warming up time

Minecraft Lifesteal Revive Beacon Warming Up

Player selection

Beacon Player selection Revive

New /beacon command — top-level alias for /lifesteal beacon — with three new subcommands:

Command Description
/beacon spawn [world x y z] Place a beacon at explicit coordinates, or a random location
/beacon despawn <id|all> Remove one or all active plugin-spawned beacons
/beacon spawns List all active plugin-spawned beacons and their status

New revive-beacon.yml keys under spawn:

spawn:
  max-concurrent: 1           # maximum simultaneously active plugin-spawned beacons
  expiry-minutes: 60          # auto-remove after N minutes (0 = never expire)
  cooldown-minutes: 30        # minimum time between consecutive spawns (0 = no cooldown)
  schedule:
    interval-minutes: 120     # auto-spawn every N minutes (0 = disabled)
  random-spawn:
    world: world
    min-x: -1000
    max-x:  1000
    min-z: -1000
    max-z:  1000
    min-y: 0                  # 0 = use world surface height (getHighestBlockY)
    max-y: 0
  random-spawn-regions:       # optional: named weighted regions replace the single bounding box
    spawn-area:
      weight: 3
      min-x: -200
      max-x:  200
      min-z: -200
      max-z:  200
  availability-event:         # announcements/effects when beacon becomes usable
    broadcast: true
    title: true
    particles: true
    fireworks: true
  countdown:
    name-prefix: "beacon-"    # EzCountdown timer name prefix
    per-type-messages: {}     # per-display-type message overrides

WorldGuard integration (optional)

A WorldGuard region is automatically created around each plugin-spawned beacon to prevent players from breaking or tampering with it. The region is removed when the beacon despawns. Configurable radius and flag overrides: deny-build, deny-pvp, deny-mob-damage, deny-explosions. Silently skipped when WorldGuard is not installed.

EzCountdown integration (optional)

An EzCountdown timer is shown while a beacon warms up before becoming available. Supports ACTION_BAR, BOSS_BAR, CHAT, TITLE, and SCOREBOARD display types. Falls back to an internal timer when EzCountdown is not installed.

Soft dependencies

WorldGuard, EzCountdown, and TeamsAPI are now listed as softdepend in plugin.yml. The plugin loads and works fully without any of them — each integration is silently skipped when its dependency is absent.

Translations

All new messages (team bank player/admin commands, beacon auto-spawn announcements) are translated in all eight bundled locales: en, de, es, fr, nl, pt, ru, zh.

Fixed

  • Players were not banned at zero hearts when using the default min-hearts setting — the zero-heart ban check ran against an already-floored value, so players reaching zero hearts were never banned under the default min-hearts: 1.0. Ban now fires correctly.
  • /pardon <player> was reversed on server restart — manually pardoning a player (via /pardon or by editing banned-players.json) was undone the next time the server started, because the plugin re-applied the stored ban. Bukkit's ban list is now treated as authoritative: if a ban is missing there, it is removed from storage too.
  • Crash on Paper 26.1.2 when banning players — an incompatibility with the Paper 26.1.2 ban API caused a ClassCastException whenever the plugin tried to issue a ban. Fixed.
  • Revive beacon GUI opened when holding a revive voucher — right-clicking a beacon with a valid voucher in hand should trigger a revive, not open the info GUI. The GUI was opening anyway due to listener priority ordering. Fixed.
  • Beacon availability broadcast and effects not fired for instant-availability beacons — beacons with no countdown (immediate availability) skipped the availability event entirely, so no server broadcast, title overlay, particles, or fireworks were shown. Fixed.
  • Team bank returned "invalid amount" instead of "feature disabled" — when the team bank was turned off, deposit/withdraw validated the heart amount before checking whether the feature was enabled, returning a misleading error. Corrected to check enabled-state first.
  • Overflow heart items dropped at the victim's respawn point instead of the kill location — when a killer's inventory was full, the extra heart item spawned at the victim's new respawn position rather than at the kill site. Now dropped at the killer's location.
  • Team-bank messages missing from non-English localesde, es, fr, nl, pt, ru, and zh locale files were missing the team-bank message keys introduced in earlier builds. All locale files are now complete.

Changed

  • Beacon info GUI expanded from 27 to 54 slots: rows 4–5 now list eliminated players (click to select a revive target); row 6 has pagination and a direct "Use Beacon" button — players no longer need to close and reopen the beacon to perform a revive.
  • team-kill-bypass-with-teams-api flat key superseded by the new team-kill-bypass section (see Added above). The old flat key is still read as a fallback — no immediate action required.

Migration notes

No breaking changes. Existing configs continue to work without modification. One key is superseded but remains backward-compatible:

Old key (lifesteal-core.yml) Replacement Notes
team-kill-bypass-with-teams-api: true/false team-kill-bypass.enabled: true/false Old key still works as a fallback

Developer API

Four Bukkit events are fired during the plugin-spawned beacon lifecycle (package com.skyblockexp.ezlifesteal.api.event):

Event Cancellable Fires when
BeaconSpawnEvent Before the beacon block is placed in the world
BeaconAvailableEvent Beacon transitions from warm-up to available
BeaconUsedEvent A player successfully uses a beacon to revive someone
BeaconExpiredEvent Beacon expires naturally or is forcibly despawned
1.1.0-nightly.20260513Бета26.1, 26.1.1, 26.1.2 · 13 мая 2026 г.

Added

Changed

Fixed

Removed


Notes

🌙 Automated nightly beta build (May 13, 2026).

Built from 78cbbc3

1.0.1Релиз26.1, 26.1.1, 26.1.2 · 20 апреля 2026 г.

Thank you for checking out the latest 26.1 release of EzLifesteal. Please follow the project to keep up-to-date. If you have any feature requests or run into a bug please let us know in the Discord server!

What changed?

  • Published Github source code on Github: https://github.com/ez-plugins/EzLifesteal
  • Added online documentation: https://ez-plugins.github.io/EzLifesteal/
  • Rewritten Markdown topic
  • Rewritten bbcode topic
  • Added unit test CI
    • Added unit tests
  • Added feature test CI
    • Added feature tests
  • Added test coverage CI
  • Rewritten main plugin class
  • Made EzSeasons integration optional
    • Refactored integration to use new EzSeasons 1.0.0 SeasonResetEvent
  • Split the lifesteal.yml configuration file
    • Added lifesteal-killstreak.yml configuration file
    • Added lifesteal-core.yml configuration file
    • Added lifesteal-drops.yml configuration file
    • Added lifesteal-worlds.yml configuration file
  • Removed messages.yml, all configurable messages are now in languages/*.yml
  • Added craftable recipes for existing vouchers in EzLifesteal
# Optional craftable recipes. Define recipes under the `recipes` section using the heart id as the key.
# Supported types: "shaped" and "shapeless".
# Shaped recipe example:
# recipes:
# gold:
# type: shaped
# amount: 1
# pattern:
# - "ABA"
# - "BCB"
# - "ABA"
# ingredients:
# A: GOLD_INGOT
# B: NETHER_STAR
# C: DIAMOND
# Shapeless recipe example:
# basic:
# type: shapeless
# amount: 1
# ingredients:
# - IRON_INGOT
# - NETHER_STAR
  • Added %ezlifesteal_is_banned% placeholder in EzLifesteal
  • Added %ezlifesteal_is_banned_<player>% placeholder (returns true or false)
  • Added storage for ban information besides default Bukkit ban storage
  • Added profile information to storage
    • Added LifestealPlayer POJO
  • Refactored all subcommands to a file per subcommand structure
  • Improved performance for large-scale data handling (large amounts of players)
    • Added local data caching through LifestealPlayer POJO to prevent database calls where possible
  • Added /lifesteal help subcommand
    • Routed /lifesteal to /lifesteal help
  • Added /lifesteal info subcommand
  • Added beacon revive feature
  • Added /lifesteal beacon add
  • Added /lifesteal beacon clear
  • Added /lifesteal beacon list
  • Added /lifesteal beacon remove
0.4.4Релиз1.21.9, 1.21.10, 1.21.11 · 16 февраля 2026 г.
  • Added option to prevent losing hearts from deaths by mobs
dont-remove-hearts-from-mobs: true
  • Added option to set mimimum hearts required to lose 1 heart when killed by a mob. -1 can be used to disable.
mob-remove-hearts-greater-than: -1
  • Fixed issue in heart vouchers not being dropped on death
  • Fixed pojectile deaths losing hearths, ignoring the settings
0.4.3Релиз1.21.9, 1.21.10, 1.21.11 · 3 февраля 2026 г.
  • Improved the /lifesteal giveheart subcommand autocomplete
  • Improved the lores of the Heart Vouchers
  • Fixed redeeming Heart Vouchers
  • Removed NBT data debug from the heart vouchers
0.4.2Релиз1.21.9, 1.21.10, 1.21.11 · 1 февраля 2026 г.
  • Added option to enable/disable losing hearts when players get killed by mobs. Default this is set to true when not configured in the lifesteal.yml
dont-remove-hearts-from-mobs: true
  • Improved autocomplete of the /lifesteal command on Paper servers
  • Fixed issue causing the /lifesteal command to show usage message

Комментарии

Загружаем…