/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.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).hologram-cleanup-removed and hologram-cleanup-none added to all 8 locale files (en, de, es, fr, nl, pt, ru, zh).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.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.TeamBankService and TeamBankAdminService; coverage for modified lines now meets project rules.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.
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
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
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.
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.
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.
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.
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.ClassCastException whenever the plugin tried to issue a ban. Fixed.deposit/withdraw validated the heart amount before checking whether the
feature was enabled, returning a misleading error. Corrected to check enabled-state first.de, 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.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.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 |
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 |
🌙 Automated nightly beta build (May 13, 2026).
Built from
78cbbc3
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!
SeasonResetEventlifesteal.yml configuration file
lifesteal-killstreak.yml configuration filelifesteal-core.yml configuration filelifesteal-drops.yml configuration filelifesteal-worlds.yml configuration filemessages.yml, all configurable messages are now in languages/*.yml# 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
%ezlifesteal_is_banned% placeholder in EzLifesteal%ezlifesteal_is_banned_<player>% placeholder (returns true or false)LifestealPlayer POJOLifestealPlayer POJO to prevent database calls where possible/lifesteal help subcommand
/lifesteal to /lifesteal help/lifesteal info subcommand/lifesteal beacon add/lifesteal beacon clear/lifesteal beacon list/lifesteal beacon remove
Steal hearts from other players with leaderboard, auto-ban and more tools for competitive Minecraft Lifesteal servers