Lifesteal Plugin 图标

Minecraft 服务端插件

Lifesteal Plugin

A fully customizable, production-grade Minecraft plugin that implements a complete lifesteal system with hearts, bans, revives, MySQL support, advanced crafting recipes, and full admin control — designed for scalable SMP servers.

冒险类小游戏工具类bukkitpaperpurpurspigot
版本范围
1.20–26.2
下载量
1.7 万

插件介绍

Banner


LifestealSMP 🔪❤️

LifestealSMP is a highly configurable and fully featured Lifesteal plugin designed for modern Minecraft SMP servers.
It offers a complete hearts-based survival system, revive mechanics, advanced crafting, multi-language support, and full administrative control.


Discord invitation Github Invitation Operation in Minecraft 1.21+


🔧 Core Features

  • Heart System: Fully configurable heart loss and gain based on deaths, PvP, or environment.
  • Heart Items: Withdraw hearts into physical items that can be traded or consumed.
  • Heart Tiers: 5 tiers of heart items allow restoring from +1 up to +5 hearts.
  • Custom Crafting Recipes: Create your own crafting recipes for heart items and revive beacon.
  • Revive System: Revive banned players using special Revive Beacons via a chat-based confirmation system.
  • Rare Revive Beacon Recipe: Uses expensive materials like Netherite Blocks, Nether Stars, Wither Skulls, Enchanted Golden Apples & Totems.
  • Ban System: Players get automatically banned upon reaching 0 hearts.
  • Admin Control: Powerful /lifestealadmin system with full server control.
  • Command Hiding: Commands are hidden dynamically for players without permission.
  • Database Support: MySQL and SQLite database options for scalable player data.
  • Multi-Language Support: Fully translatable through external language files.
  • Configuration Reloading: Reload configuration and language files live using /reloadlifesteal.
  • Safe Bukkit API Design: Compatible with Bukkit, Spigot, Paper & Purpur.
  • Recipe viewer
  • Revenge system

🎯 Commands

Main Commands:

CommandUsagePermission
/withdrawheartWithdraw hearts into itemlifesteal.withdraw
/reloadlifestealReload configurationlifesteal.reload
/recipeview <heart|beacon|all>Display recipeslifesteal.recipeview
/lifestealadminAdmin main commandlifesteal.admin

Admin Subcommands (/lifestealadmin)

SubcommandDescription
set <player> <amount>Set hearts
add <player> <amount>Add hearts
remove <player> <amount>Remove hearts
giveheart <player> [tier] [amount]Give heart items (Tier 1-5)
revivebeacon <player>Give Revive Beacon
unban <player>Unban player
purgebansUnban everyone
setmax <amount>Set maximum hearts
resetallReset hearts for all players
banlistList all banned players
reloadReload config & language

🎯 Permissions

PermissionDescriptionDefault
lifesteal.adminFull admin accessOP
lifesteal.reloadReload configurationsOP
lifesteal.withdrawWithdraw hearts into itemstrue
lifesteal.reviveUse revive beaconstrue
lifesteal.bypasslimitBypass max hearts limitOP

🔁 PlaceholderAPI Support

LifestealSMP includes built-in PlaceholderAPI expansion for dynamic integration with scoreboards, tab lists, nametags, holograms, and other placeholder-compatible systems. You can display player-specific data across your server in real-time.

PlaceholderDescription
%lifesteal_hearts%Shows the player’s current number of hearts (if online)
%lifesteal_maxhearts%Returns the configured max hearts a player can reach
%lifesteal_is_banned%Displays "true" or "false" based on whether the player is banned
%lifesteal_database_type%Shows the active database type, either "mysql" or "sqlite"
%lifesteal_lang%Displays the active language config file name
%lifesteal_startinghearts%Returns the configured default hearts for new players
%lifesteal_prefix%Inserts the plugin’s configured prefix string
%lifesteal_online%Displays "true" or "false" depending on player online status
%lifesteal_ban_reason%Displays a hardcoded reason ("Out of hearts") if the player is banned
%lifesteal_playername%Displays the player’s current username
%lifesteal_uuid%Returns the player’s UUID
%lifesteal_health%Shows the player’s current health points (HP)
%lifesteal_maxhealth%Shows the player’s current max health (HP)
%lifesteal_hearts_left%Shows how many hearts are left before hitting max hearts
%lifesteal_online_count%Displays the number of online players
%lifesteal_database_connected%Returns "true" or "false" depending on DB connection status

These placeholders allow server owners and developers to deeply customize their user experience, creating rich, dynamic interfaces that reflect each player's lifesteal status in real-time.


🚀 Supported Platforms


Available for multi platforms


  • ✅ Bukkit 26.1+
  • ✅ Spigot 26.1+
  • ✅ Paper 26.1+
  • ✅ Purpur 26.2+
  • ✅ MySQL & SQLite Databases

🔒 No NMS - No Version Lock

  • 100% version-independent.
  • No use of NMS, reflections, or unsafe internal APIs.
  • Fully safe for future Minecraft versions.

⚙ Planned Expansions

  • ✅ Economy integration
  • ✅ Custom revive options
  • ✅ More heart tier recipes
  • ✅ Crafting recipe GUI configuration
  • ✅ Expanded admin control panels

🔥 Perfect For:

  • ✅ Survival servers
  • ✅ Hardcore SMP
  • ✅ Lifesteal communities
  • ✅ Private or public SMP servers
  • ✅ Large network environments

LifestealSMP delivers a full Lifesteal SMP experience while remaining fully scalable, safe, and professional for any Minecraft server.


Made with ❤️ by MidnightZone


Have fun

版本与下载

推荐下载

lifestealsmp-1.8.0.jar版本 1.8.0 · 176 KBSHA-1 0d59faf1fc019b2edf499ebb1c8cec91c56987e7下载 lifestealsmp-1.8.0.jar

1.8.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.20 · 1.20.1 · 1.20.2 · 1.20.3 · 1.20.4 · 1.20.5 · 1.20.6 · 1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7 · 1.21.8 · 1.21.9 · 1.21.10 · 1.21.11 · 26.1 · 26.1.1 · 26.1.2 · 26.2
lifestealsmp-1.8.0.jar176 KBSHA-1 0d59faf1fc019b2edf499ebb1c8cec91c56987e7获取文件 lifestealsmp-1.8.0.jar
展开更新日志
AreaChangeDetails
Revenge ThreadNew revenge system addedAdded a full revenge-thread mechanic that binds a victim to the player who killed them for a configurable amount of time.
Revenge ThreadStructured revenge state modelAdded a dedicated revenge thread object with validated victim ownership, killer ownership, start time, expiry time, and lifecycle helpers.
Revenge ThreadConfigurable revenge durationAdded configurable revenge duration using revenge-thread.duration-seconds.
Revenge ThreadConfigurable revenge bonus damageAdded a revenge-only damage multiplier against the killer using revenge-thread.damage-multiplier.
Revenge ThreadDirectional revenge trackingAdded direction tracking toward the killer through action bar and optional compass behavior.
Revenge ThreadCompass guidanceAdded optional compass tracking toward the revenge target.
Revenge ThreadAction bar direction hintsAdded direction hints through %direction%-based action bar messaging.
Revenge ThreadLocalized direction labelsAdded configurable direction strings like north, south, north-east, nearby, and more.
Revenge ThreadClose-range revealAdded a configurable reveal mechanic that briefly highlights the revenge target when nearby.
Revenge ThreadTrap resistanceAdded configurable revenge trap resistance so victims take reduced trap-like damage from the player tied to the thread.
Revenge ThreadBlock trap toggleAdded block-damage-enabled support to explicitly control whether generic environmental block damage participates in revenge resistance.
Revenge ThreadVisible crimson thread visualsAdded a particle thread between victim and target with configurable color, render distance, wave motion, update interval, and point density.
Revenge ThreadConfigurable revenge soundsAdded configurable sounds for thread creation, completion, reveal, and break events.
Revenge ThreadCreation feedbackAdded title, subtitle, message, and sound feedback when a revenge thread is created.
Revenge ThreadCompletion feedbackAdded title, subtitle, message, and sound feedback when revenge is successfully claimed.
Revenge ThreadBreak feedbackAdded dedicated thread-break messaging for expiration, logout, and invalidated revenge paths.
Revenge ThreadLogout-aware handlingAdded configurable logout-breaking behavior using break-on-logout.
Revenge ThreadCentralized manager flowConsolidated revenge behavior into a dedicated manager handling creation, cleanup, tracking, reveal, visuals, sounds, and resolution.
Revenge ThreadImproved listener flowReworked revenge event handling into cleaner, less fragile listener logic.
Revenge ThreadPlaceholder supportAdded placeholder support for revenge active state, revenge target, and time remaining.
Revenge ThreadBetter placeholder formattingImproved placeholder outputs with safer defaults, cleaner time formatting, and more stable values.
Revenge ThreadStronger validationAdded stricter validation against invalid revenge state like self-targeting and impossible timing.
Console / LoggingColored console output fixedReworked plugin status logging to use the proper console sender path instead of Java logger paths that printed raw § codes.
Console / LoggingStyled console helpers addedAdded clearer helper methods for info, success, warning, and error console output.
Console / LoggingStartup and shutdown logs cleanedRefined plugin lifecycle messaging to be more attractive, cleaner, and less repetitive.
Console / LoggingDuplicate log noise reducedReduced duplicated startup chatter from overlapping manager/bootstrap summaries.
Language / LocalizationRuntime language switching improvedStrengthened language syncing and reload behavior so language changes apply more reliably without restart.
Language / LocalizationLanguage-aware reload pathReload flow now refreshes synced language data and active language manager content more cleanly.
Language / LocalizationBetter missing-language fallbackAdded safer fallback behavior when a requested language file is missing.
Language / LocalizationMissing key handling retainedMissing keys continue to be logged once instead of spamming endlessly.
ConfigExpanded config coverageExtended config support for revenge visuals, sounds, trap resistance, direction strings, and other new behavior.
ConfigMore polished defaultsRefined default fallback messages to be brighter, cleaner, and more visually appealing.
ConfigWider gameplay message supportAdded or refined config-backed messages for deaths, revives, withdraws, reloads, indirect kills, inventory issues, and more.
ConfigDefensive parsing retainedKept safer fallback behavior for materials and similar config-driven values.
DatabaseStyled database status logsDatabase connection and table messages now use the same polished console output approach.
DatabaseCleaner upsert-style persistenceRefined SQLite/MySQL write behavior toward safer conflict/update handling.
DatabaseCleaner backend lifecycleDatabase setup/close flow remains structured and easier to maintain.
Commands / AdminAdmin UX polishedAdmin command messages were redesigned to be clearer, flashier, and more consistent.
Commands / AdminReload command improvedReload flow messaging and feedback were cleaned up and aligned with the upgraded style.
Commands / AdminWithdraw command improved/withdrawheart feedback now looks better and communicates failure/success more clearly.
Commands / AdminPermission-aware command visibility preservedCommand hiding and execution blocking remain aligned with permission-aware visibility handling.
Gameplay MessagesFull message beautification passRefined fallback player-facing text across the plugin to be gaudy, colorful, polished, and more aesthetically appealing without being too noisy.
Gameplay MessagesConsistent prefix stylingStandardized the plugin prefix and message presentation style.
Gameplay MessagesCleaner success/warning/error toneReworked message tone and category styling for clearer positive, warning, and negative feedback.
Sound DesignMore gameplay sound feedbackAdded or refined sound cues for heart usage, revive flow, reloads, rewards, denials, and key system events.
Sound DesignDedicated revenge sound layerAdded revenge-specific sound moments for thread creation, reveal, completion, and breakage.
Recipes / UIRecipe system support retainedPreserved custom recipe support while improving surrounding consistency and documentation readiness.
Recipes / UIRecipe/help support expandedImproved support for recipe-related help and translation coverage.
Code QualityGeneral hardening passApplied stronger null handling, validation, cleaner helper structure, and better cross-file consistency.
Code QualityShared utility consistency improvedBetter aligned message, config, color, and manager usage across the codebase.
Code QualityCross-system polish passRefined behavior and presentation across commands, managers, listeners, placeholders, config, and console output.

1.7.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7 · 1.21.8 · 1.21.9 · 1.21.10 · 1.21.11 · 26.1 · 26.1.1 · 26.1.2 · 26.2
lifestealsmp-1.7.0.jar138.1 KBSHA-1 9ac1a233476b3ecdffb298dacac488ffadc5182f获取文件 lifestealsmp-1.7.0.jar
展开更新日志

New features

ChangeDescription
Recipe preview systemAdded a full in-game recipe preview system for the plugin’s custom items. Players no longer need to rely on chat messages, screenshots, or outside documentation to understand how to craft important items. The feature introduces a dedicated GUI-based workflow for browsing and previewing custom recipes directly inside Minecraft.
/recipeview commandAdded a new /recipeview command as the entry point for the recipe preview system. It supports targeted previewing as well as overview browsing, making the feature usable both for players who already know what they want to inspect and for players who are just exploring available custom recipes.
Heart recipe previewAdded a dedicated Heart recipe preview menu. This screen visually displays the configured 3×3 recipe layout, the crafted result, and supporting GUI information so players can immediately understand how the Heart item is made without needing external help.
Revive Beacon recipe previewAdded a dedicated Revive Beacon recipe preview menu. Just like the Heart preview, it presents the full crafting layout and output item in a clean GUI, making one of the plugin’s most important late-game items much easier to understand and communicate to players.
Recipe overview menuAdded an overview GUI accessible through /recipeview all. This acts as a recipe browser where players can see the available custom recipe categories in one place and open the exact recipe they want from there. It improves discoverability and makes the feature feel like a proper in-game interface instead of a command-only utility.
GUI navigation flowAdded menu navigation between overview and detailed recipe previews, including a dedicated back button in recipe screens. Players can now move through the recipe system naturally instead of reopening commands every time they want to inspect another item.
Localized recipe GUIAdded full language-system support for the recipe preview feature. GUI titles, labels, status text, instructions, back button text, ingredient labels, and error messages are now language-aware, allowing the feature to work properly across your translated language files instead of being locked to English.
Recipeview language namespaceAdded a dedicated recipeview.* language section to organize all recipe-browser-related messages and GUI text. This makes the translation structure much cleaner and gives every language file a clear place for recipe preview strings without scattering them across unrelated sections.
Styled recipe interfaceAdded a more polished visual presentation for the recipe GUI, including custom-labeled interface items, a styled “Crafts Into” indicator, themed borders, and clearer UI separation between ingredients, output, and navigation. This makes the feature look intentional and server-ready instead of like a debug menu.
GUI sound feedbackAdded sound feedback for menu open, recipe selection, returning to the overview, and denied/error states. This improves the feel of the recipe interface and gives players clearer feedback while navigating the new system.
Animated menu bordersAdded a subtle animated border effect to the recipe menus. This gives the GUI a more premium feel and helps the feature stand out visually from a plain static inventory screen.
Runtime language switchingImproved the plugin so language changes can be tested by changing the configured language and reloading, rather than requiring a full server restart. This makes translation work much easier and allows faster iteration when maintaining many language files.

Optimizations and internal improvements

ChangeDescription
Recipe GUI now uses a cached text bundleRecipeViewCommand was refactored to load GUI-related language strings into a single structured text bundle instead of repeatedly calling the language manager for the same keys throughout menu construction. This reduces repeated lookup work, makes the command cleaner, and centralizes fallback behavior.
Missing language-key spam greatly reducedLangManager now tracks missing keys and logs each missing language key only once per load/reload cycle instead of spamming the console every time the key is requested. This is a major operational improvement, especially for your many-language setup where translation coverage may be incomplete during development.
Null/empty lang key warnings reducedThe language manager also limits repeated warnings for null or empty language-key requests. This keeps the console cleaner and makes real problems easier to notice when debugging.
Replacement warning noise reducedPlaceholder replacement validation inside LangManager now avoids repeatedly spamming the same malformed replacement-pair warning. This is small but useful when testing message formatting.
Language files now auto-sync on startupLifestealSMP now syncs bundled language files into the plugin data folder during startup. Missing keys are copied from the bundled resources into existing language files without wiping user translations. This makes updates much safer when new features introduce new language keys.
Selected language can be resynced on demandIn addition to syncing all language files, the main plugin class now has support for syncing the selected language file path based on the configured language code. This improves maintainability and gives the plugin a cleaner language-update workflow.
Reload flow now refreshes recipes tooReloadCommand was upgraded so reload no longer just refreshes config/lang data. It now also unregisters and re-registers recipes after config reload, ensuring recipe changes immediately take effect without a full restart. This is a practical runtime optimization for development and live tweaking.
Reload flow now syncs language files before language reloadOn reload, language resources are now synchronized before the language manager is refreshed. That means newly added keys from bundled resources are available immediately after reload, which avoids stale-language states and reduces manual maintenance.
Correct reload permission handlingReload command permission handling was tightened so it uses the correct reload-oriented permission path instead of mixing responsibilities with broader admin permissions. This is a cleaner separation of access control and avoids permission-model ambiguity.
Recipe preview is fully read-onlyThe GUI blocks top-inventory clicks, dangerous drag operations, shift-click behavior, hotbar swap abuse, and several inventory actions that could otherwise move items into or out of the preview. This prevents menu exploitation and makes the feature safer in production use.
Viewer-bound GUI ownership checksRecipe GUI instances are associated with the player who opened them, and interactions from mismatched viewers are cancelled. This is a safety hardening step that prevents odd behavior with shared inventory references or unexpected interaction paths.
Animation lifecycle cleanupThe animated recipe GUI now starts and stops its scheduled animation tasks based on inventory open state, close events, and player quit events. This avoids leaving useless tasks running and prevents animation logic from leaking after the menu is no longer in use.
Back-button overwrite bug fixedThe recipe preview animation originally reused the same slot as the back button, causing the arrow to visually disappear while its click handler still worked. The border slot list was corrected so animated border repainting no longer overwrites the back button slot. This fixes both visual integrity and UI trustworthiness.
Recipe preview logic tied to recipe manager definitionsThe recipe preview system reads from shared recipe definitions instead of acting like an unrelated mock GUI. This keeps visual previews aligned with the actual registered recipes and reduces drift between gameplay logic and presentation logic.
Command visibility model remains integratedThe plugin’s command registration and permission visibility caching still integrate the new /recipeview command into the same command-hiding and permission-aware visibility model used elsewhere in the plugin. This keeps the new feature consistent with the overall command UX.
Multi-language maintenance improvedBecause the main plugin now syncs missing language keys and the language manager now falls back cleanly with reduced spam, you can translate files incrementally instead of needing every language file to be perfect immediately. This is a major maintainability improvement for a plugin with many translation targets.

1.6.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7 · 1.21.8 · 1.21.9 · 1.21.10 · 1.21.11 · 26.1 · 26.1.1 · 26.1.2 · 26.2
lifestealsmp-1.6.0.jar109.7 KBSHA-1 09460000268785b8e8c269c5fb6f82e364878101获取文件 lifestealsmp-1.6.0.jar
展开更新日志

Lifesteal SMP — Changelog


Important Notice

ChangeDescription
PlaceholderAPI incompatibility on 26.2This plugin version is currently not compatible with PlaceholderAPI when running on Minecraft 26.2 (server).

Changelog/Improvements

New featuresDescription
Heart Refund systemDeaths from non-player causes can now be handled more fairly, depending on server settings. (configurable)
Player-only heart loss optionServers can now make heart loss happen only when a player is killed by another player. (configurable)
Anti-Farm protectionRepeatedly killing the same player in a short time no longer lets players farm hearts unfairly. (configurable)
Indirect kill supportIndirect player-caused deaths are now handled more accurately, making heart rewards feel fairer. (configurable)
API support addedLifestealSMP now includes API support, allowing better compatibility with supported addons and external features.

Small notice: All of the new features (except for API) can be enabled/disabled in the config.yml based on user's preferences

ChangeDescription
Fairer death handlingNon-combat and environmental deaths now behave more consistently.
Better PvP heart transfersHeart gain and heart loss during PvP is now more reliable and predictable.
Cleaner indirect kill rewardsPlayers can now be rewarded more properly for certain indirect kills.
Anti-farm cooldown enforcementRepeated killer → victim kills inside the cooldown no longer transfer hearts.
Lifesteal ban checks improvedCompatible systems can now detect whether a player is banned through the Lifesteal system more cleanly.
ChangeDescription
Safer heart withdrawalWithdrawing a heart is now more reliable and less likely to fail unfairly.
Better inventory protectionPlayers are less likely to lose a heart if their inventory is full.
Improved heart consumptionUsing heart items is now more consistent and less prone to accidental issues.
Better max-heart checksHeart items now behave more cleanly when a player is already near or at the limit.
Heart item supportCompatible systems can now create and give heart items more cleanly.
Heart actions supportedSupported integrations can now read, add, remove, and set player hearts more directly and reliably.
ChangeDescription
More stable revive sessionsReviving players now works more smoothly and consistently.
Better revive timeout handlingExpired revive attempts clean up more reliably.
Improved revive beacon usageRevive Beacons now behave more safely during interaction and chat flow.
Revives supportedSupported integrations can now trigger player revival in a cleaner and more consistent way.
Revive Beacon supportCompatible systems can now create, give, and recognize Revive Beacons more reliably.

1.5.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7 · 1.21.8 · 1.21.9 · 1.21.10 · 1.21.11 · 26.1 · 26.1.1
lifestealsmp-1.5.0.jar92 KBSHA-1 769407bceecb9976b3392e210387ec0a75dbb1ce获取文件 lifestealsmp-1.5.0.jar
展开更新日志
ChangeDescription
Removed noisy normal-case loggingStopped treating “no player row found” as an INFO event, because this is normal for first join / first lookup.
Debug-only missing-record logsKept optional visibility by moving the message behind debug: true instead of always spamming console.
Cleaner DB readsMySQL#getHearts() and SQLite#getHearts() now return starting-hearts quietly when no record exists.
Reduced console clutterMakes real errors easier to notice because harmless first-time lookups no longer flood logs.
Safer connection checksAdded isConnectionOpen() style checks before queries so bad connection states are logged clearly and separately.
ChangeDescription
Custom-beacon-only detectionThe revive listener no longer treats any plain beacon as a revive beacon; it checks the custom beacon metadata.
Right-click + place supportThe beacon now works seamlessly whether the player right-clicks it or tries to place it. Placement is cancelled and revive mode starts instead.
Config-synced beacon metadata/lifestealadmin revivebeacon now builds the beacon from revive-beacon-crafting.display-name and revive-beacon-crafting.lore, matching listener checks exactly.
Session timeout handlingRevive sessions now expire cleanly after the timeout instead of lingering awkwardly.
Duplicate-session preventionA player cannot start multiple revive sessions at once.
Safer target lookupRevive chat logic now resolves the target more carefully and handles invalid names more safely.
Guaranteed beacon consumption on successAfter a successful revive, the beacon is consumed correctly from the reviver’s main hand.
Listener cleanupChat listener unregisters itself and cancels timeout tasks after completion, preventing stale revive sessions.
ChangeDescription
Pre-check before consumeThe listener now checks current hearts before consuming the heart item.
No wasted item at max heartsIf the player is already at the max-heart cap, the item is not consumed.
No partial-overflow lossIf a tiered heart item would exceed max hearts, usage is blocked instead of silently consuming the item for no effective gain.
Clear user feedbackPlayers now get a proper message when they cannot use a heart item due to the cap.
Cap respects bypass permissionlifesteal.bypasslimit still allows exceeding the configured max as intended.
ChangeDescription
Revive beacon creation centralizedAdded a dedicated buildReviveBeacon() path so admin-given beacons always match plugin expectations.
Inventory-full protectiongiveheart and revivebeacon now check leftovers from Inventory#addItem() instead of silently failing.
Safer player targetingUses exact player lookup in the improved version for more reliable targeting.
More consistent prefixed messagesStandardized more admin feedback through MessageUtils.sendWithPrefix().
Config-driven beacon metadataRemoved hardcoded revive-beacon metadata drift by syncing item creation with config values.
ChangeDescription
Main-hand beacon validationBefore reviving, the plugin verifies the player still has the proper revive beacon in hand.
Safe session cleanupCancels timeout tasks and unregisters the listener after the chat flow ends.
Safer chat handlingIgnores unrelated chat, trims input, and handles blank target names safely.
Controlled revive flowThe revive only proceeds when the target exists, is banned, and the reviver still holds the valid beacon.
Consumption after successBeacon removal occurs as part of the success path, so valid revives actually spend the item.
ChangeDescription
Unified revive session startMoved the common revive-start behavior into one reusable method.
Placement interceptionBlockPlaceEvent support lets the beacon work even when the player tries placing it.
Metadata normalizationName/lore checks normalize formatting and stripped colors for more reliable matching.
Lore-aware validationThe listener can validate both display name and lore, reducing accidental matches.
Permission-first handlingFails early with a clear message if the player lacks lifesteal.revive.
ChangeDescription
Max-cap sanitationKeeps hearts from going negative and clamps to config max unless bypass permission exists.
Reliable health syncApplies max health immediately after heart changes so gameplay matches stored values.
At-least-one-heart safeguardConverts heart counts to health with a minimum of 2.0 health.
Cleaner heart adjustment pathCentralizes add/remove behavior through adjustHearts().
Recommended sync-save pathI recommended replacing async per-change saves with synchronous saves for heart updates to avoid race conditions under rapid events.
Modern max-health recommendationI recommended switching from player.setMaxHealth(...) to the attribute API for newer server compatibility.
ChangeDescription
Verified kill transfer logicConfirmed PvP deaths give the killer +1 heart and remove -1 from the victim.
Non-PvP penalty preservedConfirmed non-player deaths only remove a heart if death-penalty-enabled is true.
Ban check after heart lossVictims are checked for zero hearts immediately after removal.
Cleaner structure recommendationI suggested splitting PvP and non-PvP death handling into dedicated helper methods for clarity.
Optional feedback messagesAdded a cleaner version that informs killer and victim about the heart transfer.
ChangeDescription
Safer ban checksVerifies player validity and avoids duplicate bans.
Consistent kick-on-ban behaviorPermanent ban flow bans and kicks with a constructed config-based message.
Cleaner unban pathPrevents null/invalid unban attempts and logs successful unbans clearly.
Better naming/flow clarityRecommended a cleaner banSync() path and more direct checkBan() flow.
Compatibility with heart-loss flowWorks correctly with the victim heart removal path so players reaching 0 hearts are punished immediately.

1.4.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7 · 1.21.8
lifesteal-smp-1.4.0.jar308.2 KBSHA-1 9bed35fed2a99aa9db5123428188d1fb305fcac4获取文件 lifesteal-smp-1.4.0.jar
展开更新日志

1. BanManager Improvements

ChangeDescription
Fail-safe banningChecks player validity (online state, name) before banning.
Customizable ban reasonsPrepares ban messages with clear reasons and placeholders.
Safer unbanningPrevents unban attempts for null/invalid players.
Consolidated log messagesUnified logging with better error context.
Future-proofingAdded potential for temporary bans (Date parameter left open).

2. HeartManager Improvements

ChangeDescription
Centralized validationSanitizes heart values (no negatives, max cap) via sanitize().
Safe schedulingDelays health update with Bukkit.runTask() only when necessary.
Single DB access per callAvoids redundant DB calls by reusing PlayerData.
Flexible heart updatesaddHearts() and removeHearts() now ensure health sync post-save.
Improved max health logicAlways guarantees at least 1 heart (2.0 health).
Better null handlingAll methods safely return/exit when player or UUID is null.

3. RecipeManager Improvements

ChangeDescription
Recipe validationVerifies shape (3x3 max), logs invalid formats.
Dynamic tiersSupports tier setting for Heart recipe.
Configurable outputsItem name and lore now pulled from config.
Safe removalWraps Bukkit.removeRecipe() with checks.
Centralized registrationregisterAllRecipes() introduced.
Detailed error logsDetects missing/invalid materials per symbol.
Extensible designReady for additional custom recipes.

Added new placeholders!

PlaceholderDescription
%lifesteal_playername%Returns the player’s name, or offline name if player is not online
%lifesteal_uuid%Returns the UUID of the player
%lifesteal_health%Shows the current health (HP) of the player (as an integer)
%lifesteal_maxhealth%Shows the maximum health (HP) of the player (as an integer)
%lifesteal_hearts_left%Displays how many hearts the player can still gain before reaching max
%lifesteal_online_count%Shows the number of currently online players
%lifesteal_database_connected%Displays "true" or "false" depending on whether the database is connected

1.3.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7
lifesteal-smp-1.3.0.jar299.6 KBSHA-1 01f3c6a94b3c68ee1b0fa7679b962fdc2d33e769获取文件 lifesteal-smp-1.3.0.jar
展开更新日志

ADDED PLACEHOLDERS (GOING ALONGSIDE MINOR IMPORVEMENTS)


DimensionDescriptionStatus
1. Resilience ArchitectureCommands and placeholder systems are built to continue functioning even under partial system failure (e.g., config loss, null plugin fields, SQL failure, PAPI missing). This is resilience by design, not exception handling afterthought.
2. Graceful DegradationInstead of crashing or halting features when a dependency is missing (like PlaceholderAPI or MySQL), your system downgrades functionality while maintaining UX continuity ("Offline", "ERR", fallback materials, default config values).
3. Dynamic Reflection Proxy for Optional APIPlaceholderRegistrar uses dynamic reflection and proxying to register placeholders without compile-time binding to PAPI, supporting modular deployment and late binding. This is a decoupling architecture pattern.
4. Semantic Placeholder Decoding LayerThe use of switch(identifier.toLowerCase()) with contextual logic (like online checks, config fallbacks) builds a semantic parser for identifiers. This design allows for scalable growth (e.g., %lifesteal_kills_today%, %lifesteal_revive_tokens%).
5. Config-Driven Control LayerAll messages, materials, database types, and display elements are externalized to config, making the plugin highly customizable without code changes — a hallmark of production-tier design.
6. Contextual Tab Completion DSLAdminTabCompleter is essentially a domain-specific suggestion language for command trees. It parses arg index, subcommand semantics, and sender context to give tailored completions.
7. Game Rule-Aware BehaviorCommands like /withdraw respect game logic constraints (e.g., minimum 1 heart), making the plugin exploit-resistant and gameplay-consistent. This isn't just a check — it enforces the design of the gamemode.
8. Structural Plugin IsolationEvery subsystem (BanManager, HeartManager, ConfigManager, etc.) is accessed through clear, isolated interfaces, with plugin-safe guards. There is no deep structural coupling, supporting unit testability and future refactors.
9. Developer-Aware Feedback SystemLogger messages are structured, scoped ([PlaceholderAPI]), and precise — aiding devs with immediate traceability on user-side issues (like SQL faults or PAPI issues).
10. Deferred Execution AwarenessSQL-heavy operations are guarded and designed to be lightweight in the main thread, preparing for future asynchronous conversion, especially for placeholders.⚠️ Ready for async, but not async yet
11. Plugin Reload SafetyAll commands and placeholders support plugin.getConfigManager().reload() and react immediately to config changes, enabling hot-reload capability and zero-downtime admin operations.
12. Internal Type NormalizationThe use of .toLowerCase(Locale.ROOT) and guards like safeString(...) ensure locale-agnostic and NPE-safe string handling, which is internationalization best practice.
13. Minimal Surface Area ExposureThe command classes expose only necessary logic; onCommand and utilities are not overexposed via public static or deep inheritance. This limits accidental misuse and encourages encapsulation.
14. Performance-Aware Inventory HandlingHeart item creation (ItemBuilder) happens only if checks pass, and only 1 item is created and added, minimizing GC and lag.
15. Command Feedback TemplatingEvery message supports {player}, {tier}, {amount} tokens — making it dynamic, parseable, and reusable, not hardcoded. This bridges with chat plugins and structured JSON systems.
16. Compatibility-Aware VersioninggetVersion() in placeholders is dynamically retrieved from plugin metadata — no static literals — maintaining compatibility and correct display in admin panels.

CURRENTLY SUPPORTED PLACEHOLDERS!

PlaceholderPurpose
%lifesteal_hearts%Player's current hearts (if online)
%lifesteal_maxhearts%Max hearts from config
%lifesteal_is_banned%Whether the player is banned
%lifesteal_database_type%Database type ("mysql"/"sqlite")
%lifesteal_lang%Active language config file
%lifesteal_startinghearts%Configured starting hearts
%lifesteal_prefix%Plugin prefix string
%lifesteal_online%Is player currently online
%lifesteal_ban_reason%(Hardcoded for now) "Out of hearts" if banned

1.2.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6 · 1.21.7
lifesteal-smp-1.2.0.jar285.5 KBSHA-1 31434d8f26dd2d5b3d7837691f8489037ef08ae3获取文件 lifesteal-smp-1.2.0.jar
展开更新日志

SQL ENHANCEMENTS!!


CategoryImprovementReasonResult
Thread Safety & Singletoninstance field is marked as volatile for thread safety.Ensures safe access to the plugin’s singleton instance across multiple threads.Prevents concurrent thread issues with inconsistent or conflicting access to the plugin instance.
Modularization & ReadabilityRefactored onEnable() and onDisable() into smaller methods (init(), registerListeners(), etc.)Makes the code more modular, readable, and maintainable.Easier to manage and extend the plugin with minimal impact on the core plugin lifecycle.
Error Handling & LoggingEnhanced error logging with detailed logs in critical areas.Provides clearer debugging information when issues arise.Better visibility in logs for identifying and troubleshooting issues.
Command RegistrationCommands now have permissions and tab completions (setTabCompleter(), setPermission()).Enhances command functionality and security.Commands are more user-friendly (with tab completions) and secure (with permissions).
Null Checks & ValidationAdded null checks for commands, listeners, and database connections.Prevents NullPointerException and ensures proper initialization before use.More robust and reliable behavior, with appropriate fallbacks or warnings.
Separation of ConcernsSeparated command and listener registration into individual methods.Improves maintainability by breaking down responsibilities into smaller, manageable chunks.Clearer organization and modularity in the code.
Resource ManagementProper resource cleanup during plugin shutdown (safelyShutdown() method).Prevents memory leaks and ensures that resources are freed correctly when the plugin is disabled.Ensures the plugin shuts down cleanly and frees resources (e.g., database connections).
Logging ImprovementsConsole messages now use Minecraft’s color formatting (& to §).Improves readability and visibility of logs for administrators.More visually appealing and easier-to-read logs for server admins.
SQL EnhancementsEnhanced database interactions with prepared statements and better error handling.Prevents SQL injection and improves the security and reliability of database operations.More secure and stable SQL interactions.
SQL Connection ManagementValidates connection state before performing SQL operations.Ensures the plugin doesn't attempt to execute queries on invalid or closed connections.Prevents errors or unexpected behavior due to closed/stale database connections.
SQL Query ImprovementsReturns default fallback values if SQL queries fail or no data is found.Ensures the plugin continues working smoothly even if database interactions encounter issues or missing data.The plugin continues functioning even when database errors or missing data occur.
SQL Resource ManagementProperly closes database resources (PreparedStatement, ResultSet) using try-with-resources.Ensures resources are properly released, preventing memory leaks and improving performance.More efficient and cleaner database code.
Plugin Disable EnhancementsEnsured safe shutdown of resources (database connections, recipes, etc.).Prevents lingering resources, file locks, or incomplete cleanup during the plugin's shutdown.A stable and reliable server experience with clean shutdown behavior.

1.1.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5 · 1.21.6
lifesteal-smp-1.0.0.jar280.2 KBSHA-1 29e2c513b9351206ac83715ea9a9a179ba252207获取文件 lifesteal-smp-1.0.0.jar
展开更新日志

🧠 Architecture & Design

  1. Centralized Utility APIs – MessageUtils, ColorUtils, ItemBuilder provide DRY, reusable patterns.

  2. Singleton-safe plugin access – consistent use of getInstance() for global plugin reference.

  3. Separation of concerns – clearly segmented managers (HeartManager, BanManager, etc.) avoid bloated main class.

  4. Graceful failover & shutdown – plugin disables on fatal error; database and recipes properly closed.

  5. Dynamic command delegation – uses executor-permission binding; fallback warnings for missing entries.


⚙️ Code Quality & Safety

  1. Null safety added – guards against null messages, lists, strings, ItemMeta, etc.

  2. Cloning of mutable objects – avoids returning internal ItemStack references directly.

  3. Input validation – amount clamped (1–64), tier limited (1–5), keys checked.

  4. Regex matching via Matcher.appendReplacement() – safe and efficient HEX color parsing.

  5. Safe config fallback – missing lang keys gracefully return default with warning.


📈 Performance Improvements

  1. Efficient string coloring – reused helper for batch lore coloring reduces overhead.

  2. Deferred meta setting – avoids redundant operations on ItemMeta.

  3. Command tab completer registered conditionally – avoids NPE if command is missing.


📜 Documentation & Readability

  1. Full JavaDocs added – method-level docs explain parameters, return values, and side effects.

  2. Consistent naming and formatting – fluent, descriptive method and variable names.

  3. Simplified logging interface – log(String) method wraps colored console output.


🚨 Error Handling & Logging

  1. Fallback logs for lang keys – warns when translation keys are missing.

  2. Structured exception logging – prints full stack trace on startup failure.

  3. Invalid hex codes skipped silently – prevents plugin crash from user config errors.


🧩 Extensibility Support

  1. Lore overloads and builder extensibility – builder pattern allows for chaining, expansion (e.g., enchantments).

  2. Formatted string retrieval in LangManager – supports runtime placeholders with String.format(...).

1.0.0

正式版
加载器
bukkit · paper · purpur · spigot
MC 版本
1.21 · 1.21.1 · 1.21.2 · 1.21.3 · 1.21.4 · 1.21.5
lifesteal-smp-1.0.0.jar279.2 KBSHA-1 ca364eac9f80791b5a9179827ab7d4c4a8c20591获取文件 lifesteal-smp-1.0.0.jar
展开更新日志

Plugin has already been tested and proved operational. Further changes will be implemented down the road!

依赖关系