All Mods Resource Packs Data Packs Shaders Modpacks Plugins
CustomDeathMessages

CustomDeathMessages

by SicklySurgeon • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

CustomDeathMessages

Advanced, context-aware death message and effect management for Minecraft servers.

CustomDeathMessages replaces standard server death notifications with a highly customizable, condition-based messaging engine. It provides server administrators with granular control over death messages, audio cues, particle effects, and visual overlays, ensuring that every player death aligns with the server's unique atmosphere and gameplay loop.


Table of Contents

  1. Core Capabilities
  2. Requirements
  3. Commands & Permissions
  4. Placeholder Reference
  5. Configuration Architecture
  6. Upgrade Guide (v1.4)
  7. Frequently Asked Questions

Core Capabilities

Context-Aware Messaging Engine

  • Conditional Logic: Define complex message triggers using AND/OR operators and mathematical/string evaluations (e.g., >, <, contains, equals).
  • Granular Routing: Assign specific messages based on permission groups (VIP, Admin, Default), specific worlds, or individual death causes.
  • Message Cooldowns: Built-in logic prevents the same randomized message from displaying consecutively to the same player.

Advanced Broadcast System

Take absolute control over who experiences death effects. Every effect (Messages, Sounds, Particles, Titles, Action Bars) can be routed independently using four distinct modes:

  • GLOBAL: Broadcast to all online players across the entire server.
  • WORLD: Restrict the effect to players in the same world as the victim.
  • RADIUS: Limit the effect to players within a configurable block radius.
  • VICTIM_ONLY: Ensure the effect is only seen/heard by the player who died.

Visual and Audio Effects

  • Custom Audio: Assign global or group-specific death sounds with adjustable volume and pitch.
  • Particle Systems: Trigger custom particle explosions or ambient effects upon death.
  • Screen Overlays: Utilize Titles, Subtitles, and Action Bars for immediate visual feedback.
  • Darken Screen Effect: Simulate a fading/darkening screen effect using localized ambient particles.
  • Epic Deaths: Configure a percentage-based chance for "Epic" deaths, triggering unique messages, overridden audio/visuals, and environmental effects like lightning strikes.

Economy and Administration

  • Vault Integration: Charge players a configurable fee for displaying custom death messages, with exemption lists for staff or VIP groups.
  • Atomic Reloading: The /cdm reload command validates the entire configuration in memory before applying it. If validation fails, the plugin safely aborts the reload, preventing server crashes or broken states.
  • Comprehensive Testing Suite: Preview and calibrate messages, sounds, and broadcast radii in real-time without requiring actual player deaths.

Requirements

  • Server Software: Spigot, Paper, or compatible fork.
  • Minecraft Version: 26.3
  • Java Environment: Java 17 or higher.
  • Soft Dependencies (Optional):
    • PlaceholderAPI: For expanding messages with external plugin placeholders.
    • Vault: For economy integration and per-message costing.
    • EssentialsX: For automatic nickname resolution in death messages.

Commands & Permissions

All primary commands are routed through the unified /cdm namespace for a streamlined administrative experience.

Command Description Permission
/cdm test <cause> [killer] [source] Simulates a death event to preview messages and effects. cdm.test
/cdm broadcast <type> <mode> [args] Manually triggers and tests broadcast effects (sound, particle, message). cdm.broadcast
/cdm config validate Runs a deep structural validation of config.yml and messages.yml. cdm.reload
/cdm reload Safely reloads all configuration files with atomic validation. cdm.reload
/cdm help [command] Displays comprehensive, context-aware documentation. cdm.use

Permission Nodes

Permission Node Description Default
cdm.use Base access to the /cdm command router and help menus. true
cdm.test Allows usage of the testing and simulation suite. op
cdm.broadcast Allows manual triggering of broadcast effects. op
cdm.reload Grants access to reload and validation commands. op
cdm.bypass Exempts the player from triggering death messages or effects. false
cdm.message.vip Assigns the player to the "vip" message and effect group. false
cdm.message.admin Assigns the player to the "admin" message and effect group. false

Placeholder Reference

The plugin natively resolves deep contextual data regarding the death event. These can be used in messages.yml and are fully compatible with PlaceholderAPI expansions.

Placeholder Description
{victim} The display name (or nickname) of the player who died.
{killer_name} The entity responsible for the kill (e.g., the Player who shot the arrow, or the Creeper).
{killer_source} The direct source of the damage (e.g., "Arrow", "Fireball", "Lava").
{killer_displayname} The killer's formatted display name, including external prefixes/suffixes.
{cause} The technical Bukkit damage cause (e.g., FALL, ENTITY_ATTACK, VOID).
{world} The name of the world where the death occurred.
{biome} The formatted name of the biome (e.g., "Deep Dark", "Nether Wastes").
{x}, {y}, {z} The exact block coordinates of the death location.
{distance} The distance in blocks between the victim and the killer (formatted to one decimal).
{victim_weapon} The display name of the item held in the victim's main hand.
{victim_effects} A comma-separated list of active potion effects on the victim.
{time} The current server time, formatted via config.yml.
{cost} The economic cost deducted for the message (if Vault is enabled).

Configuration Architecture

The plugin separates routing logic from text and visual definitions to ensure clean maintainability:

  1. config.yml: Governs global server behavior. This includes broadcast routing modes, economy settings, global particle/sound definitions, visual effect toggles, and validation rules.
  2. messages.yml: Contains all text-based data. This includes conditional messages, group-specific definitions, epic death pools, and all system/command feedback messages. Server owners can fully translate or customize every string the plugin outputs without touching the codebase.

Upgrade Guide (v1.4)

Version 1.4 represents a major stability and architecture milestone.

  • Platform Update: The plugin now targets Minecraft 26.3 and requires Java 17.
  • Complete Language Externalization: All hardcoded system messages, command errors, and help menus have been moved to messages.yml. You can now fully translate the plugin's administrative interface.
  • Killer Resolution Overhaul: The logic for determining {killer_name} and {killer_source} has been completely rewritten to accurately distinguish between environmental deaths, projectile shooters, and direct melee attackers, fixing edge cases where victims were incorrectly listed as their own killers.
  • Thread Safety: Asynchronous event handling has been corrected to ensure all world and entity data is processed strictly on the main server thread, eliminating concurrency errors on high-population servers.

Note: Your existing config.yml and messages.yml structures are fully backward compatible. The plugin will automatically generate any missing system-message keys upon startup.


Frequently Asked Questions

How does the plugin differentiate between {killer_name} and {killer_source}? The tracking engine analyzes the damage event chain. If a player is killed by an arrow shot by a Skeleton, {killer_name} will resolve to "Skeleton" (the responsible entity), while {killer_source} will resolve to "Arrow" (the direct object that dealt the damage).

What happens if my configuration contains syntax errors during a reload? The atomic reload system intercepts the process. If ConfigValidator detects structural errors, invalid placeholders, or missing required nodes, the reload is aborted. The plugin will continue running safely on the previous, stable configuration, and output a detailed diagnostic report to the administrator.

Can I restrict specific visual effects to only the dying player? Yes. Using the effects-broadcast section in config.yml, you can set title-mode: VICTIM_ONLY and actionbar-mode: VICTIM_ONLY, while keeping sound-mode: WORLD to ensure nearby players hear the death sound without having their screens obstructed by UI elements.

Does this plugin support external economy plugins? Yes. If Vault is installed and an economy provider is present, you can enable cost-per-death-message. You can also define exempt-groups-from-cost to ensure staff or specific VIP tiers are not charged for their death messages.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3 26.2 26.1.x +13
Bukkit Paper Purpur Spigot
13h ago 1
26.3 26.2 26.1.x +13
Bukkit Paper Purpur Spigot
13h ago 1
26.1.x 1.21.x 1.20.x +11
Bukkit Paper Purpur Spigot
13h ago 1
26.1.x 1.21.x 1.20.x +11
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
1.21.x 1.20.x 1.19.x +10
Bukkit Paper Purpur Spigot
13h ago 1
[1.5] 1.5 by SicklySurgeon on Oct 15, 2026
Download
# CustomDeathMessages – Version 1.5

## Stability, Accuracy, Configuration Alignment, and Production Hardening Release

### Description

Version 1.5 is a major maintenance release focused on correctness, stability, and making advertised features behave as expected. This version fixes several critical issues affecting economy charges, message targeting, broadcast modes, epic deaths, reload behavior, test command reliability, killer/source resolution, placeholders, sound handling, particle handling, permissions, memory cleanup, update checking, optional integrations, and build/runtime compatibility.

The goal of this release is to align runtime behavior with configuration expectations, reduce silent failures, improve admin confidence, and make death messages more accurate and consistent in gameplay.

This revision also incorporates a deeper final audit pass that addressed additional edge cases found after the first 1.5 review, including economy exemption consistency, test command permission-group alignment, broadcast-mode synchronization, reload validation isolation, message-history cleanup, external placeholder resilience, nickname integration recovery, global particle delivery behavior, update-checker lifecycle safety, and build/runtime compatibility hardening.


## Release Statistics

| Category | Count |
|---|---:|
| Critical bug fixes | 18 |
| Standard bug fixes | 36 |
| Total bugs fixed | 54 |
| Stability, memory, and lifecycle improvements | 16 |
| Build and compatibility corrections | 8 |
| Quality-of-life improvements | 28 |
| Behavior changes | 10 |
| New additions | 8 |
| Total changelog entries | 124 |


# Critical Bug Fixes

## Economy and Death Message Charging

  • Fixed the economy system not actually charging players when a death message was triggered.
  • Death message costs configured by server owners are now enforced during the death flow.
  • Players with insufficient funds are now handled correctly instead of silently receiving the full custom death flow.
  • Added proper insufficient-funds feedback using configurable messaging.
  • Added successful charge feedback using configurable messaging.
  • Added exemption feedback so players who do not pay due to group exemption receive clearer behavior.
  • Fixed group-based cost exemptions so exempt groups no longer pay the configured death message cost.
  • Fixed exemption behavior so cost exemptions now depend on the player’s real permission group instead of only on the message-selection group.
  • Improved behavior when the economy provider is missing or unavailable.
  • The plugin now avoids breaking the death flow.
  • A safer fallback behavior is used when economy integration cannot be completed.
  • Improved economy provider recovery so late-loading economy integrations can become available without requiring a full restart.
  • Improved validation of economy transactions instead of assuming withdrawal always succeeds.
  • The cost placeholder now reflects an actually enforced cost rather than being purely cosmetic.


## Message Targeting and Radius Priority

  • Fixed message radius not overriding world-wide message delivery.
  • Configured radius values now correctly take priority when radius messaging is enabled.
  • Death messages now respect the intended targeting order:
  • radius first when configured,
  • world second when radius is disabled,
  • victim-only delivery when neither applies.
  • Fixed inconsistency between documented behavior and actual runtime behavior.
  • Test command broadcast behavior now follows the same targeting rules as real death messages.
  • Prevented test broadcasts from ignoring configured message scope.
  • Improved reliability of nearby-player calculation for radius-based messaging.
  • Reduced unexpected global spam from test commands.
  • Made message delivery more predictable for servers using multiple worlds.


## Broadcast Mode Compatibility and Effective Resolution

  • Fixed the victim-only broadcast mode being unusable through commands despite being advertised in help and tab completion.
  • Added compatibility handling so the shorter victim mode name is accepted and resolved correctly.
  • Extended victim-mode compatibility beyond commands so configuration values using the shorter alias are now resolved correctly as well.
  • Synchronized command usage, help text, tab completion, validation output, and internal mode handling.
  • Fixed divergence between legacy broadcast settings and unified broadcast settings.
  • Broadcast mode resolution now uses a single effective configuration path, reducing confusion when multiple related settings exist.
  • Prevented invalid mode errors when using documented broadcast modes.
  • Improved consistency between sound, particle, message, title, action bar, and screen-effect broadcast modes.
  • Made broadcast mode validation clearer for administrators.
  • Reduced confusion caused by mismatched mode names.
  • Improved reliability of manual broadcast testing commands.


## True Global Particle Broadcasting

  • Fixed global particle broadcasts not actually reaching all online players.
  • Global particle mode now sends particles to all online players instead of being limited by world or tracking range.
  • Improved cross-world particle delivery behavior so players outside the victim’s world still receive a safe visible fallback effect.
  • Improved consistency between global sound broadcasting and global particle broadcasting.
  • Prevented players in other worlds from completely missing particles that were configured as global.
  • Made global particle behavior closer to administrator expectations.
  • Improved reliability of particle tests using global mode.
  • Reduced confusion when comparing global, world, radius, and victim-only particle modes.


## Epic Death System Alignment

  • Fixed epic death effects reading different configuration locations than the ones defined by server owners.
  • Epic sound, particle, particle count, title, and subtitle settings now correctly affect runtime behavior.
  • Fixed epic customization being silently ignored.
  • Improved consistency between epic configuration, validation, and actual death effects.
  • Fixed epic particle count not being applied correctly.
  • Fixed epic title and subtitle not loading from the intended configuration area.
  • Improved epic death reliability across:
  • chat messages,
  • sounds,
  • particles,
  • titles,
  • subtitles,
  • lightning effects.
  • Reduced mismatch between epic messages and epic visual/audio effects.
  • Made epic deaths more predictable and configurable.


## Epic Subtitle and Visual Effect Context Accuracy

  • Fixed epic subtitles using an incomplete death context.
  • Epic subtitles can now correctly resolve placeholders such as:
  • victim,
  • killer name,
  • killer source,
  • cause,
  • distance,
  • world,
  • time.
  • Prevented epic subtitles from showing unknown or empty values when real death information was available.
  • Improved consistency between epic chat messages and epic title/subtitle effects.
  • Made epic deaths feel more integrated and less disconnected.
  • Reduced confusing placeholder output during epic deaths.
  • Improved reliability of custom epic subtitle formatting.


## Visual Effect Placeholder and Color Pipeline

  • Fixed titles, subtitles, and action bar messages bypassing the full placeholder pipeline used by chat messages.
  • Visual death effects now support internal death placeholders more consistently.
  • Visual death effects now support external placeholder expansion where available.
  • Visual death effects now pass through the same color formatting pipeline as chat messages.
  • Reduced cases where visual effects displayed unresolved placeholders, raw ampersands, or missing hex colors.
  • Improved consistency between chat death messages and screen effects.
  • Made custom visual death feedback more expressive and reliable.


## Configuration Reload Stability

  • Fixed reload operations using stale message data when rebuilding internal caches.
  • Reload order was corrected so dependent caches are rebuilt after their source configuration is refreshed.
  • Fixed listeners potentially being registered with outdated formatting components.
  • Improved reload safety for:
  • group sounds,
  • epic effects,
  • message caches,
  • placeholder formatting,
  • broadcast settings,
  • permission-based messages.
  • Fixed reload validation behavior so failed validation no longer risks contaminating live runtime state.
  • Reload attempts now isolate temporary validation work from the active configuration until the reload is confirmed safe.
  • Reduced the need for server restarts after configuration changes.
  • Made reload behavior more predictable for administrators.
  • Improved consistency between validation and live runtime configuration.
  • Reduced rare cases where one reload appeared to succeed but left partially old data active.


## Test Command Determinism

  • Fixed the test command producing inconsistent results because epic status was rolled multiple times independently.
  • The epic state is now calculated once per test execution and shared across:
  • message selection,
  • test summary,
  • sound playback,
  • particle playback,
  • global test flags.
  • Prevented situations where the summary said the test was normal while epic effects played, or vice versa.
  • Improved the test command as a reliable diagnostic tool.
  • Fixed test sound playback using an incorrect permission-group resolution path.
  • Test sounds now respect the victim’s effective permission group according to the server’s permission-based messaging setting.
  • Fixed global test flags ignoring epic state.
  • Global sound and global particle tests now use epic resources when the test rolls as epic.
  • Improved consistency between displayed test information and actual in-game effects.


## Test Command Permissions and Scope

  • Fixed missing permission validation when testing death messages on other players.
  • Players without the appropriate permission can no longer test on other players.
  • Improved permission enforcement for:
  • self-testing,
  • other-player testing,
  • broadcast testing,
  • global effect testing.
  • Fixed test broadcast ignoring configured message targeting.
  • Test broadcasts now respect radius, world, and victim-only settings.
  • Reduced accidental server-wide spam from test commands.
  • Improved safety for shared or public test environments.
  • Made test command behavior closer to real death event behavior.
  • Improved handling of test requests targeting offline players by producing clearer feedback instead of silently falling back in confusing ways.


## Killer and Direct Damage Source Resolution

  • Fixed loss of the direct damage source in many deaths.
  • Projectile-based deaths now preserve both:
  • the responsible killer,
  • the direct source of damage.
  • Improved handling of deaths involving:
  • arrows,
  • tridents,
  • fireballs,
  • thrown potions,
  • TNT,
  • dispenser-shot projectiles,
  • other indirect entity damage.
  • Added safer resolution for projectiles fired by block-based sources, improving accuracy for dispenser and similar indirect damage scenarios.
  • Reduced cases where a player kill by projectile incorrectly displayed the source as a player.
  • Improved accuracy of killer source placeholders.
  • Made death messages more descriptive and technically correct.
  • Reduced confusion caused by oversimplified killer resolution.
  • Improved compatibility with complex death scenarios.


## Killer Resolution Priority

  • Fixed excessive priority given to the basic player killer lookup.
  • More precise damage information is now considered before falling back to simple killer resolution.
  • Improved handling of deaths where the direct source differs from the responsible entity.
  • Reduced incorrect source values in mixed player/environment deaths.
  • Improved reliability of damage tracking during rapid or multi-source deaths.
  • Made environmental deaths less likely to incorrectly inherit a player killer.
  • Improved consistency between real deaths and test simulations.
  • Reduced placeholder contradictions in death messages.


## Distance Placeholder Accuracy

  • Fixed distance calculation only working when the killer was a player.
  • Distance now works for non-player killers and tracked responsible entities.
  • Improved reliability of distance-based conditional messages.
  • Conditions using distance now work more consistently for:
  • mobs,
  • projectiles,
  • indirect damage sources,
  • player killers.
  • Reduced false results where distance appeared as zero despite a valid killer entity.
  • Improved sniper-style messages and range-based death conditions.
  • Made distance placeholders more useful for custom message design.
  • Increased accuracy of death context data.


## Killer Username and Display Name Separation

  • Fixed the killer username placeholder returning a nickname instead of a real username.
  • Added clearer separation between:
  • display-oriented killer name,
  • real killer username,
  • killer display name,
  • direct damage source.
  • Improved consistency with nickname integrations.
  • Reduced confusion when placeholders promised one value but returned another.
  • Made username-based conditions and formatting more reliable.
  • Improved compatibility with servers using nicknames, prefixes, or display name modifications.
  • Reduced accidental leakage of formatted display names into username-only contexts.
  • Improved overall placeholder semantic accuracy.


## PlaceholderAPI Expansion Order

  • Fixed PlaceholderAPI values being expanded after color translation.
  • External placeholders can now return color codes that are correctly processed.
  • Improved rendering of:
  • prefixes,
  • suffixes,
  • group names,
  • ranked tags,
  • custom placeholder values.
  • Reduced literal ampersand color codes appearing in chat.
  • Improved compatibility with placeholder-driven formatting.
  • Made death messages more visually consistent with other plugin-produced text.
  • Reduced unexpected raw formatting sequences in final output.
  • Improved reliability of hybrid placeholder systems.
  • Extended the same safer expansion behavior to visual death effects where applicable.


## Modern Sound Resolution

  • Updated sound handling to work correctly with modern registry-based sound access.
  • Improved support for multiple sound identifier styles.
  • Sounds can now be configured using:
  • dotted namespaced identifiers,
  • custom namespaced identifiers,
  • constant-style uppercase names.
  • Fixed invalid sound values causing unhandled exceptions during startup or reload.
  • Improved fallback behavior when a sound cannot be resolved.
  • Added safer warnings instead of hard failures.
  • Improved compatibility with datapack sounds and custom sound entries.
  • Reduced crash risk from malformed sound configuration.
  • Made sound configuration more flexible and forgiving.


## Safe Particle Resolution

  • Added safer particle parsing and fallback handling.
  • Invalid particle names now produce clearer warnings instead of silent failures.
  • Improved consistency between:
  • runtime particle loading,
  • configuration validation,
  • test commands,
  • broadcast commands.
  • Fixed invalid particle input in broadcast commands being silently replaced without feedback.
  • Improved administrator experience when testing particle effects.
  • Reduced confusion from typo-based particle configuration.
  • Made particle configuration safer and more predictable.
  • Improved overall effect reliability.


## Build and Runtime Compatibility

  • Corrected dependency setup so required integrations are available at compile time.
  • Removed or corrected invalid or unresolved platform dependency declarations.
  • Aligned Java/API targeting with the modern runtime baseline required by the plugin and its target server software.
  • Reduced risk of generating artifacts incompatible with supported server environments.
  • Improved plugin metadata compatibility with modern server software.
  • Removed an unused bundled JSON dependency that increased artifact size and conflict risk without providing runtime benefit.
  • Removed unused networking-related dependency weight where it was no longer necessary.
  • Fixed internal text formatting issues that could affect compilation or output readability.
  • Improved overall build reliability and deployment safety.
  • Reduced the chance of missing-class errors on servers with different library availability.


# Bug Fixes

## Permissions and Group Priority

  • Fixed admin group priority being lower than VIP group priority.
  • Players with both VIP and admin permissions now resolve to the higher-priority admin group.
  • Improved consistency of permission-based message selection.
  • Reduced unexpected group fallback behavior.
  • Made permission hierarchy more intuitive.
  • Improved reliability of group-specific death messages.
  • Reduced confusion for administrators assigning overlapping permissions.
  • Improved consistency between group messages, group sounds, and cost exemptions.


## Undocumented Permission Handling

  • Added missing permission declarations for plugin features that were already used internally.
  • Improved visibility of permissions for server administrators.
  • Reduced confusion when configuring permission plugins.
  • Made command and feature permissions easier to audit.
  • Improved consistency between runtime permission checks and declared permissions.
  • Reduced accidental permission gaps.
  • Improved documentation accuracy inside plugin metadata.
  • Made permission management more reliable.


## Bypass Behavior Cleanup

  • Fixed bypassing players not clearing their tracked damage information.
  • Improved memory hygiene for players who bypass death messages.
  • Reduced stale damage source retention.
  • Made bypass behavior cleaner and more predictable.
  • Improved consistency between bypassed and normal death flows.
  • Reduced rare carryover issues after bypassed deaths.
  • Improved overall tracker reliability.
  • Reduced unnecessary data retention.


## Damage Tracking Lifecycle

  • Fixed damage tracking data remaining after a player disconnects without dying.
  • Added cleanup when players leave the server.
  • Added cleanup when players respawn.
  • Reduced stale entity references.
  • Improved memory hygiene.
  • Reduced risk of invalid entity access after reconnects.
  • Improved reliability of damage tracking across sessions.
  • Made tracker behavior safer under frequent death/respawn cycles.


## Death Flow Exception Safety

  • Improved death handling so tracked damage information is cleaned up even if an unexpected error occurs during message formatting or effect playback.
  • Reduced the chance of stale damage state surviving a partially failed death event.
  • Made the death flow more resilient under abnormal configuration or runtime conditions.
  • Improved production safety for complex death scenarios.


## Console Logging Control

  • Added configurable control over death message console logging.
  • Fixed unconditional console spam for every death.
  • Improved privacy by allowing administrators to disable sensitive death message logging.
  • Reduced log noise on busy servers.
  • Made logging behavior intentional instead of hardcoded.
  • Improved operational comfort for large servers.
  • Reduced accidental exposure of placeholder-derived data in logs.
  • Improved production readiness.


## Help Command Consistency

  • Fixed general help not showing all available commands consistently.
  • Broadcast functionality is now represented more clearly in help output.
  • Reduced confusion between bare command help and detailed help.
  • Improved discoverability of available features.
  • Made help text more aligned with actual command availability.
  • Improved administrator onboarding.
  • Reduced surprise from missing command entries.
  • Improved overall command usability.


## Tab Completion Corrections

  • Fixed incorrect tab completion suggestions for broadcast subcommands.
  • Global broadcast completion now suggests the correct follow-up values.
  • Improved completion consistency for broadcast modes.
  • Reduced invalid suggestions that could fail when executed.
  • Improved completion for test-related arguments.
  • Added permission-aware filtering for test-related command suggestions.
  • Made command discovery smoother.
  • Reduced trial-and-error when using broadcast tools.
  • Improved overall command ergonomics.


## Command Metadata Cleanup

  • Removed or corrected risky command aliases that could conflict with other plugins or vanilla behavior.
  • Fixed usage text advertising unsupported features.
  • Improved accuracy of command descriptions.
  • Reduced confusion from misleading usage strings.
  • Made command metadata more trustworthy.
  • Improved compatibility with server command listings.
  • Reduced accidental command collisions.
  • Improved polish of the command layer.


## Configuration Validation Accuracy

  • Fixed validation checking configuration areas that were not actually used by runtime.
  • Improved alignment between validation results and real behavior.
  • Reduced false positives and false negatives during configuration checks.
  • Improved validation of epic effect settings.
  • Improved validation of sound and particle values.
  • Improved validation coverage for broadcast modes and their effective resolution.
  • Made validation summaries reflect actual message targeting priority.
  • Improved reliability of startup validation.
  • Reduced confusion when diagnosing configuration problems.


## Message Cause Key Matching

  • Fixed cause-based message lookup being overly sensitive to capitalization.
  • Cause keys are now normalized more safely during cache construction.
  • Improved tolerance for common configuration casing mistakes.
  • Reduced silent fallback to default messages caused by lowercase or mixed-case cause keys.
  • Made cause-specific messages more reliable.
  • Improved consistency between validation and runtime lookup.
  • Reduced frustrating configuration mismatches.
  • Improved admin quality of life.


## Conditional Message Cause Matching

  • Fixed conditional message lookup being unnecessarily sensitive to cause-key capitalization.
  • Conditional sections now tolerate common casing variations more safely.
  • Reduced silent skips of valid conditional messages due to formatting inconsistencies.
  • Improved reliability of advanced conditional death message design.


## Conditional Logic Operator Handling

  • Fixed logical operators in conditional messages requiring strict uppercase formatting.
  • Conditional expressions now accept more natural casing for logical operators.
  • Improved usability of complex conditions.
  • Reduced silent condition failures caused by lowercase operators.
  • Made condition writing less brittle.
  • Improved compatibility with human-friendly configuration styles.
  • Reduced confusion when combining multiple conditions.
  • Improved reliability of conditional message selection.


## Screen Darkening Effect Behavior

  • Fixed the screen darkening effect using a stale captured location.
  • The effect now follows the player’s current location during its duration.
  • Added safer cancellation when the player is no longer online.
  • Added safer handling when the player’s world context becomes unavailable during the effect.
  • Reduced visual artifacts after movement, world changes, or rapid respawns.
  • Improved reliability of particle-based screen effects.
  • Made the darken effect feel more responsive.
  • Reduced odd particle placement near dead or moved players.
  • Improved visual polish.


## Epic Particle Count Handling

  • Fixed epic particle count not being read from the intended configuration area.
  • Epic particle density now respects configured values.
  • Improved consistency between epic configuration and runtime particle output.
  • Reduced mismatch between normal and epic particle behavior.
  • Made epic effects more customizable.
  • Improved validation alignment for epic particle settings.
  • Reduced surprise from hardcoded or default-only epic particle amounts.
  • Improved overall epic death presentation.


## Nickname Integration Availability

  • Fixed nickname integration becoming permanently unavailable if the supporting plugin loaded later than expected.
  • Improved recovery behavior for optional integrations.
  • Reduced load-order sensitivity.
  • Made nickname resolution more reliable across different server startup conditions.
  • Improved graceful fallback when nickname integration is unavailable.
  • Reduced inconsistent name display between victims and killers.
  • Improved compatibility with modular server setups.
  • Made optional hooks safer.
  • Improved behavior when the supporting integration is disabled or removed during runtime.


## Update Checker Safety

  • Reduced risk of the update checker acting after the plugin is disabled.
  • Improved safety around asynchronous update checks.
  • Moved update checking onto a lifecycle-aware asynchronous path instead of an unmanaged background task.
  • Reduced chance of errors during server shutdown.
  • Improved connection cleanup behavior during update checks.
  • Improved handling of unexpected remote responses.
  • Prevented update-check logic from depending on mutable configuration state in unsafe asynchronous contexts.
  • Made latest version selection more reliable.
  • Reduced false update notifications.
  • Improved robustness of version parsing.
  • Made background update checking safer in production.


## Broadcast Sound Input Handling

  • Fixed unsafe sound parsing in broadcast test commands.
  • Invalid sound input now produces clearer feedback.
  • Improved fallback behavior for malformed sound names.
  • Reduced command exceptions from bad input.
  • Made broadcast sound testing more beginner-friendly.
  • Improved consistency with modern sound resolution.
  • Reduced silent failures.
  • Improved command reliability.


## Broadcast Particle Feedback

  • Fixed invalid particle input being silently replaced with a default value.
  • Users now receive feedback when a particle name is invalid.
  • Improved discoverability of particle typos.
  • Made broadcast particle testing more transparent.
  • Reduced confusion during effect tuning.
  • Improved alignment with validation behavior.
  • Made command feedback more helpful.
  • Improved overall testing experience.


## Broadcast Test Output Readability

  • Fixed malformed line handling in broadcast test output.
  • Broadcast mode test results now print as clearer, more readable lines.
  • Reduced risk of broken or compressed output.
  • Improved usability of diagnostic broadcast tests.
  • Made mode comparison easier to read.
  • Improved polish of administrative test commands.
  • Reduced confusion from poorly formatted results.
  • Improved command output consistency.


## Broadcast Command Resource Consistency

  • Fixed some broadcast test paths using hardcoded default effect values instead of the server’s configured defaults.
  • Broadcast tests now better reflect the actual configured sound, particle, volume, pitch, count, and offset values.
  • Improved reliability of manual effect testing.
  • Reduced divergence between what administrators configure and what test commands demonstrate.


## Death Context Reuse

  • Improved reuse of a single death context across related systems.
  • Reduced duplicated context creation during death handling.
  • Improved consistency between:
  • chat message,
  • title,
  • subtitle,
  • action bar,
  • placeholders,
  • conditions,
  • effects.
  • Reduced mismatched placeholder values between different parts of the same death event.
  • Improved reliability of complex death presentations.
  • Made death handling more coherent.
  • Reduced subtle inconsistencies during epic deaths.
  • Improved maintainability of death event logic.


## Title, Subtitle, and Action Bar Placeholder Support

  • Improved placeholder resolution for visual death effects.
  • Titles, subtitles, and action bar messages can now use death-related placeholders more reliably.
  • Reduced cases where visual effects showed unresolved or generic values.
  • Improved consistency between chat death messages and screen effects.
  • Made custom visual death feedback more expressive.
  • Improved compatibility with conditional and epic setups.
  • Reduced confusing placeholder output on death screens.
  • Improved overall presentation quality.


## Economy Messaging Consistency

  • Improved consistency between economy success, economy failure, and exemption messaging.
  • Reduced silent economy behavior where players received no explanation.
  • Made cost feedback clearer.
  • Improved alignment between configured economy messages and actual charge outcomes.
  • Reduced confusion around paid death messages.
  • Made economy integration feel complete rather than partial.
  • Improved admin configurability.
  • Improved player-facing clarity.


## Reload Validation Reliability

  • Improved the relationship between validation and reload outcomes.
  • Reduced cases where validation and live configuration could drift apart.
  • Made reload feedback more trustworthy.
  • Improved handling of invalid configuration during reload attempts.
  • Reduced surprise when reload appeared successful but behavior remained old.
  • Improved consistency between startup validation and manual validation.
  • Made configuration iteration safer.
  • Improved operational confidence.


## Internal Message History Hygiene

  • Improved cleanup of internal message history data associated with players.
  • Reduced long-term retention of per-player message selection memory.
  • Added cleanup when players disconnect.
  • Added cleanup when players respawn.
  • Improved behavior on large servers with many unique players.
  • Reduced minor memory growth over time.
  • Made random/non-repeating message selection cleaner across sessions.
  • Improved long-running server stability.
  • Reduced stale per-player state.
  • Improved internal housekeeping.


## Respawn Message Flexibility

  • Improved respawn message handling to support broader placeholder use.
  • Reduced limitation to only a single basic player placeholder.
  • Made respawn messages more consistent with the rest of the plugin’s formatting system.
  • Improved compatibility with nickname and display-name integrations.
  • Added safer color formatting behavior for respawn feedback.
  • Reduced visual inconsistency between death and respawn messaging.
  • Made respawn feedback more customizable.
  • Improved polish of the player lifecycle experience.
  • Expanded creative options for server owners.


## Time Formatting Safety

  • Fixed unsafe time formatting behavior when an invalid time format was configured.
  • Invalid time formats now fall back safely instead of disrupting death processing.
  • Improved resilience of time-based placeholders.
  • Reduced the chance of configuration mistakes causing runtime errors.
  • Made time formatting more production-safe.


## External Placeholder Resilience

  • Fixed external placeholder expansion becoming permanently disabled after a single transient failure.
  • Improved resilience when optional placeholder integrations return temporary errors.
  • Reduced unnecessary loss of placeholder functionality due to isolated exceptions.
  • Made hybrid placeholder pipelines safer and more predictable.


## Misleading Configuration Expectations

  • Reduced confusion caused by configuration options that did not affect runtime behavior.
  • Improved alignment between available settings and actual feature support.
  • Removed or neutralized misleading configuration guidance where the corresponding behavior was not implemented.
  • Made configuration files less deceptive.
  • Reduced frustration from changing options with no effect.
  • Improved trust in plugin configuration.
  • Made administrative tuning more predictable.
  • Improved documentation clarity.
  • Reduced support burden caused by misunderstood options.


# Behavior Changes

## Message Radius Priority

  • Message radius now has clear priority over world-wide messaging when configured.
  • Servers that previously had both world messaging and radius configured may notice narrower message delivery after updating.
  • This change aligns runtime behavior with the intended documented behavior.


## Epic Effects Configuration Location

  • Epic effect settings are now treated as a dedicated epic configuration area.
  • Runtime no longer depends on mismatched system-message locations for epic effects.
  • Existing custom epic setups should be reviewed to ensure values are placed in the intended epic section.


## Victim Broadcast Alias

  • The shorter victim broadcast mode name is now accepted as a compatibility alias.
  • This makes commands, help, tab completion, and configuration handling more consistent with user expectations.


## Effective Broadcast Resolution

  • Broadcast settings are now resolved through a single effective path.
  • Legacy and unified broadcast-related settings are handled more predictably.
  • Administrators should expect validation output and runtime behavior to agree more closely.


## Economy Abort Behavior

  • When a death message cost is enabled and the player cannot pay, the custom death message flow can now be aborted.
  • This makes paid death messages function as an actual gate rather than a cosmetic charge attempt.


## Economy Exemption Group Behavior

  • Cost exemption now evaluates the player’s real permission group more directly.
  • Exempt groups can remain exempt even when message-selection grouping is configured differently.
  • This makes economy exemptions more intuitive and less dependent on unrelated message settings.


## Reload Refresh Order

  • Reload now refreshes dependent configuration layers in a safer order.
  • This reduces stale cache issues after changing sounds, messages, epic effects, or group settings.


## Visual Effect Placeholder Handling

  • Titles, subtitles, and action bar messages now participate more fully in placeholder resolution.
  • This may cause previously static-looking visual effects to display dynamic death information.


## Sound Configuration Flexibility

  • Sound values now accept multiple valid formatting styles.
  • Administrators can use dotted identifiers, custom namespaces, or constant-style names where supported.


## Modern API Baseline

  • The plugin now targets a more modern API baseline consistent with registry-based sound handling and supported server software.
  • Older server environments that cannot support the required runtime level may no longer be suitable targets.


## Test Command Offline Player Handling

  • Testing against a named player who is not online now produces clearer failure behavior instead of silently falling back in potentially confusing ways.
  • This makes the test command more predictable in administrative workflows.


# Changes

  • Updated plugin version metadata to 1.5.
  • Improved plugin description and command metadata clarity.
  • Updated default configuration guidance for message targeting.
  • Added configurable death message console logging.
  • Improved epic death configuration structure.
  • Improved group sound cache reliability.
  • Improved message cache construction.
  • Improved conditional message evaluation.
  • Improved killer/source resolution architecture.
  • Improved damage tracking structure.
  • Improved death context richness.
  • Improved placeholder registry semantics.
  • Improved message formatter pipeline.
  • Improved broadcast manager behavior.
  • Improved particle manager behavior.
  • Improved sound manager behavior.
  • Improved test command flow.
  • Improved test summary accuracy.
  • Improved broadcast command input handling.
  • Improved help command completeness.
  • Improved tab completion correctness.
  • Improved reload manager sequencing.
  • Improved dependency initialization ordering.
  • Improved configuration validator coverage.
  • Improved optional integration resilience.
  • Improved update checker safety.
  • Improved build dependency coherence.
  • Improved runtime compatibility posture.
  • Removed unused or misleading internal components.
  • Removed unused bundled dependency weight where it provided no runtime benefit.
  • Reduced duplicated unsafe parsing logic.
  • Improved consistency between validation and runtime.
  • Improved consistency between commands and configuration.
  • Improved consistency between real deaths and test deaths.
  • Improved consistency between chat effects and visual effects.
  • Improved cleanup discipline for per-player state.
  • Improved exception safety in death handling.
  • Improved safety of asynchronous background tasks.
  • Improved overall code hygiene.
  • Improved production readiness.


# Additions

## New Sound Parsing Layer

  • Added a centralized sound resolution system.
  • Supports safer parsing of modern sound identifiers.
  • Supports fallback behavior for invalid values.
  • Adds clearer warning output.
  • Improves compatibility with custom and datapack sounds.
  • Reduces crash risk from malformed configuration.
  • Makes sound handling consistent across the plugin.


## New Particle Parsing Layer

  • Added a centralized particle resolution system.
  • Supports safer parsing of particle names.
  • Adds fallback behavior for invalid values.
  • Improves feedback for administrators.
  • Reduces silent particle failures.
  • Makes particle handling consistent across runtime, validation, and commands.
  • Improves overall effect reliability.


## Centralized Broadcast Mode Resolution

  • Added a unified effective broadcast-mode resolution path.
  • Supports compatibility aliases such as the shorter victim mode name.
  • Aligns commands, validation, help output, and runtime behavior.
  • Reduces divergence between legacy and newer broadcast-related settings.
  • Makes broadcast configuration easier to reason about.


## Structured Damage Information

  • Added richer damage tracking that separates:
  • responsible entity,
  • direct damage source.
  • Added safer representation for block-based projectile sources where applicable.
  • Improves accuracy for projectile and indirect deaths.
  • Enables better placeholder output.
  • Improves conditional message reliability.
  • Reduces loss of context during complex deaths.
  • Makes death resolution more precise.
  • Improves future extensibility.


## Richer Death Context

  • Added more complete death context data for use across formatting and effects.
  • Supports better placeholder resolution.
  • Improves consistency between chat, titles, subtitles, action bars, and conditions.
  • Reduces repeated context construction.
  • Improves reliability of epic death presentation.
  • Makes custom message design easier.
  • Improves internal coherence.


## New Configurable Logging Option

  • Added a configuration option to control death message console logging.
  • Allows administrators to reduce log spam.
  • Helps protect sensitive placeholder-derived information.
  • Makes production logging more flexible.
  • Improves operational comfort.
  • Aligns logging behavior with server policy needs.
  • Adds a quality-of-life control for large servers.


## New or Clarified Placeholders

  • Clarified separation between:
  • killer display name,
  • killer username,
  • killer source.
  • Improved reliability of:
  • distance,
  • killer source,
  • victim identity,
  • cost.
  • Made placeholder semantics more trustworthy.
  • Improved compatibility with conditional messages.
  • Expanded expressive options for death message design.
  • Reduced ambiguous placeholder behavior.
  • Improved documentation alignment.


## New Permission Declarations

  • Added missing permission declarations for existing plugin behavior.
  • Improves discoverability for administrators.
  • Reduces confusion when using permission management tools.
  • Makes permission auditing easier.
  • Improves alignment between code and metadata.
  • Reduces accidental permission gaps.
  • Improves overall plugin polish.


## Message History Cleanup Lifecycle

  • Added explicit cleanup for internal per-player message selection history.
  • Reduces long-term retention of transient player state.
  • Improves behavior on large servers with many unique players.
  • Makes non-repeating message selection cleaner across sessions.


## Safe Time Formatting Fallback

  • Added safer fallback handling for time-format placeholders.
  • Prevents invalid time formatting from disrupting death processing.
  • Improves resilience of configuration-driven placeholder output.


## Cross-World Global Particle Fallback

  • Added safer delivery behavior for global particle effects involving players in different worlds.
  • Improves the practical visibility of globally configured particle effects.
  • Reduces complete miss scenarios for remote players.


# Improvements

## Architecture and Maintainability

  • Centralized unsafe parsing logic.
  • Reduced duplicated sound and particle resolution code.
  • Centralized broadcast-mode interpretation.
  • Improved separation of responsibilities between systems.
  • Made configuration alignment easier to maintain.
  • Reduced fragile assumptions about key names and paths.
  • Improved consistency between validation and runtime.
  • Made future feature work safer.
  • Improved internal clarity.
  • Reduced long-term maintenance risk.


## Death Event Reliability

  • Death events now share more consistent contextual data.
  • Improved agreement between:
  • message selection,
  • placeholder output,
  • visual effects,
  • audio effects,
  • conditional logic.
  • Reduced mismatched death presentation.
  • Improved behavior during complex or multi-source deaths.
  • Made epic deaths more coherent.
  • Improved reliability under rapid damage sequences.
  • Reduced odd placeholder fallbacks.
  • Improved overall death realism.


## Test Command Reliability

  • The test command is now much more trustworthy.
  • One execution produces one consistent epic outcome.
  • Test output better matches actual playback.
  • Permissions are enforced more correctly.
  • Permission-group resolution is more consistent with real death behavior.
  • Broadcast scope is respected.
  • Global flags behave more predictably.
  • Offline-player test handling is clearer.
  • Improved usefulness for configuration debugging.
  • Reduced confusion during testing.
  • Made the command suitable for real admin workflow.


## Administrator Experience

  • Invalid sounds and particles now produce clearer feedback.
  • Configuration validation better reflects actual runtime behavior.
  • Broadcast mode reporting is more coherent.
  • Help and tab completion are more consistent.
  • Reload behavior is less surprising.
  • Economy settings now have real effect.
  • Economy exemptions behave more intuitively.
  • Radius settings now behave as documented.
  • Improved confidence when editing configuration.
  • Reduced trial-and-error.
  • Improved overall usability for server owners.


## Player Experience

  • Death messages are more accurate.
  • Projectile kills can display the correct source.
  • Mob kills can report meaningful distance values.
  • Nicknames and usernames are handled more predictably.
  • Epic deaths are more consistent across all effect channels.
  • Global particle effects are more reliable when configured as global.
  • Visual effects can use richer placeholder data.
  • Respawn feedback is more polished and consistent.
  • Reduced confusing or contradictory death feedback.
  • Improved immersion and polish.


## Stability and Safety

  • Reduced crash risk from malformed sound configuration.
  • Reduced crash risk from malformed particle configuration.
  • Reduced crash risk from invalid time formatting.
  • Reduced stale cache risk after reload.
  • Reduced stale listener risk after reload.
  • Reduced memory retention from damage tracking.
  • Reduced memory retention from per-player message history.
  • Reduced async update checker risk during shutdown.
  • Reduced dependency conflict risk through safer dependency handling.
  • Reduced build failure risk through corrected dependencies.
  • Improved exception safety during death processing.
  • Improved resilience in production environments.


## Compatibility

  • Improved compatibility with modern server APIs.
  • Improved handling of registry-based sounds.
  • Improved optional integration behavior.
  • Improved tolerance for load-order differences.
  • Improved support for custom sound sources.
  • Improved placeholder integration behavior.
  • Reduced friction with nickname and economy plugins.
  • Improved deployment flexibility.
  • Made the plugin safer across varied server setups.


## Performance and Hygiene

  • Reduced redundant object creation in some death flows.
  • Improved cache rebuild discipline.
  • Reduced unnecessary retained state.
  • Improved cleanup on disconnect and respawn.
  • Reduced long-term memory growth from per-player tracking.
  • Improved efficiency of message and effect resolution.
  • Reduced wasted work during reload.
  • Improved overall runtime cleanliness.
  • Made long-running server behavior more stable.


# Summary of Major 1.5 Outcomes

  • Economy cost now actually works.
  • Economy exemptions now behave more intuitively and independently from message-group settings.
  • Radius messaging now overrides world messaging as intended.
  • Victim broadcast mode now works through commands and configuration.
  • Broadcast modes are now resolved more consistently across runtime, validation, and commands.
  • Global particles are now delivered more reliably, including safer cross-world fallback behavior.
  • Epic effects now read the correct configuration area.
  • Reload no longer leaves obvious stale caches.
  • Reload validation is safer and less likely to contaminate live state.
  • The test command is now internally consistent.
  • The test command now respects permission-based messaging more accurately.
  • Projectile and indirect kills preserve the real damage source.
  • Block-based projectile sources are handled more accurately.
  • Distance works for mobs and projectiles.
  • Killer username returns a real username.
  • PlaceholderAPI colors are now processed correctly.
  • Visual effects now participate more fully in the placeholder and color pipeline.
  • Sound parsing supports modern registry-based sounds safely.
  • Particle parsing is safer and more transparent.
  • Permissions, help, tab completion, and validation are more coherent.
  • Memory and lifecycle handling are cleaner.
  • Update checking is safer.
  • Optional integrations recover more gracefully.
  • Build and runtime compatibility are more reliable.
  • The plugin is substantially harder to break with invalid configuration.
  • Death messages are more accurate, expressive, and trustworthy.
  • The overall experience for administrators and players is significantly improved.
[1.4] Bugs Fixes and Improvements. by SicklySurgeon on Oct 15, 2026
Download
# CustomDeathMessages - Changelog


## Version 1.4

Now targeting Minecraft 26.3.


### Critical Bug Fixes

  • Message Lookup System**

  • Fixed group message cache building incorrect configuration paths. The cache searched for keys without the required parent prefix, causing all group messages to return null at runtime and fall back to the hardcoded default. Messages configured under permission groups now resolve correctly.
  • Fixed cause-specific message keys using an incorrect section name. The lookup expected a different key structure than what the configuration file provides, causing cause-based messages such as FALL, FIRE, and ENTITY_ATTACK to never be found.
  • Fixed default group message key mismatch. The cache builder searched for a key name that does not exist in the configuration schema.
  • Fixed conditional message lookup using an incorrect path prefix. Conditional messages were searched at the wrong configuration depth, preventing all condition-based messages from being evaluated at runtime.
  • Fixed conditional message default entries in the shorthand YAML format not being recognized. Entries using the single-key default notation were ignored because the parser only checked for the explicit condition and message pair format.
  • Fixed group sound cache building paths without the required parent prefix, causing per-group death sounds to never load at runtime despite passing validation.

  • Killer Resolution**

  • Fixed environmental deaths incorrectly resolving the victim as their own killer. The fallback damage cause lookup used a method that returns the damaged entity rather than the damaging entity, causing deaths by lava, fire, fall, and void to display the victim's own name in the killer placeholder.
  • Added defensive handling in the killer name placeholder to return a safe default when the killer is unresolved, preventing edge cases where the placeholder could resolve to an unintended value.

  • Test Command**

  • Fixed the test command rejecting all valid input due to a redundant subcommand check. The command router already consumed the subcommand keyword before passing arguments to the handler, but the handler still expected it, causing every invocation to return a usage error.
  • Fixed argument parsing offset being misaligned by one position after the routing layer strips the subcommand keyword. This caused causes, killers, and sources to be read from the wrong argument positions.
  • Fixed broadcast and effect flags being parsed as cause or killer arguments instead of being extracted before argument interpretation. Flags such as global, global-sound, and global-particles can now appear in any position without corrupting the parsed values.
  • Fixed inconsistent usage documentation between two separate message entries. Both now display the same syntax.

  • Epic Death System**

  • Fixed epic death determination performing two independent random rolls, one for effects and one for message selection. This caused desynchronization where epic effects could play with a normal message, or an epic message could appear without any effects. The roll is now performed once and shared across all systems.
  • Fixed epic messages overriding per-world messages. Per-world messages now always take priority regardless of epic status.
  • Fixed the epic death subtitle displaying a hardcoded generic cause instead of the actual cause of death.

  • Thread Safety**

  • Fixed death message recipient calculation executing on an asynchronous thread, accessing world and entity data outside the main server thread. This could cause concurrent modification exceptions and inconsistent player lists under load. Recipient calculation now executes synchronously on the main thread.

  • Particle Effects**

  • Fixed the darken screen effect spawning zero particles due to a count parameter set to zero. The effect was active in configuration but produced no visible output.

  • Configuration File Structure**

  • Fixed newly added system message entries being placed under the wrong configuration section. All system messages are now correctly located under the system-messages block and are properly loaded at runtime.


### Bug Fixes

  • Help System**

  • Fixed compound command help lookup failing for multi-word commands. The help system only read the first argument, preventing lookup of entries with spaces in their key names such as config validate.
  • Fixed help command displaying a hardcoded player-only error instead of using the configurable message.
  • Fixed help detail labels for description, usage, and permission being hardcoded instead of configurable.
  • Fixed help command list line format being hardcoded instead of configurable.

  • Command System**

  • Fixed unified command router displaying a hardcoded unknown command error instead of using the configurable message.
  • Fixed general help output displaying hardcoded strings instead of using configurable messages.
  • Fixed configuration command displaying hardcoded permission and usage errors instead of using configurable messages.
  • Fixed reload manager displaying hardcoded status messages instead of using configurable messages.
  • Fixed test error output displaying a hardcoded error prefix instead of using the configurable message.
  • Fixed test context builder throwing exceptions with hardcoded messages instead of using configurable messages.

  • Test Summary**

  • Fixed the test summary sound and particle information performing independent random rolls, causing the displayed information to not match the actual test result. The epic status is now determined once and shared across the entire summary.

  • Event Registration**

  • Fixed startup log reporting an incorrect number of registered event listeners.

  • Update Checker**

  • Fixed version comparison crashing with a NumberFormatException when the remote version string contains non-numeric characters such as suffixes or prefixes. Version strings are now sanitized before comparison.

  • Tab Completion**

  • Added tab completion support for the test command, including death causes, online player names, and effect flags.
  • Fixed help tab completion only suggesting an incomplete set of options.

  • Configuration Validator**

  • Fixed validation passing without checking the internal structure of message groups. The validator now verifies that each group contains the required message sections and reports warnings when they are missing, preventing silent runtime failures.
  • Added validation for conditional message structure within each group.

  • Performance**

  • Fixed the particle manager being instantiated twice per death event. A single instance is now created and reused.

  • Build Configuration**

  • Removed a duplicate build configuration file that conflicted with the primary build definition.
  • Removed an unused internal message selection class that contained duplicate path resolution bugs.


### Changes

  • All user-facing messages have been migrated from hardcoded strings to the external message configuration file. Server owners can now fully customize every message the plugin sends, including command errors, help text, test summaries, broadcast confirmations, and reload status messages.
  • Per-world messages now take absolute priority over all other message selection logic, including epic deaths.
  • The epic death flag is determined once per death event and shared consistently across message selection, sound playback, particle effects, titles, action bar, and lightning.
  • The test command now extracts effect flags before parsing positional arguments, allowing flags to appear in any position without corrupting the cause, killer, or source values.
  • The test summary now displays whether the simulated death rolled as epic.
  • The configuration validator now performs deep structural validation of message groups and conditional message sections.


### Improvements

  • Improved killer resolution logic to properly distinguish between entity-caused and environment-caused deaths.
  • Improved message cache construction to align with the actual configuration file schema.
  • Improved conditional message evaluation to support both explicit condition and message pairs and shorthand default entries.
  • Improved nickname resolution through Essentials integration, applied consistently across victim, killer, and respawn message placeholders.
  • Improved broadcast sound playback to use the recipient's location for global and victim-only modes, eliminating world-boundary and distance limitations.
  • Improved particle manager to store a direct plugin reference instead of performing runtime plugin lookups by name.
  • Improved reload sequence to fully unregister and re-register all event listeners, preventing stale listener references after configuration reloads.

[1.3] 1.3 by SicklySurgeon on Oct 15, 2026
Download
# CustomDeathMessages v1.3 Changelog

This release addresses critical issues with configuration reloading, cross-world sound broadcasting, and localization consistency. Server owners upgrading from v1.2 should review the notes below before deployment.

## Bug Fixes
  • Fixed a critical issue where /cdmreload would unregister all event listeners without reinitializing them. This caused the plugin to stop intercepting player deaths, resulting in vanilla death messages appearing and making configuration changes appear ignored or reset.
  • Resolved an issue with the GLOBAL sound broadcast mode. Sounds were previously anchored to the victim's coordinates, causing distance-based attenuation and preventing playback for players in different worlds (particularly noticeable in Multiverse environments). Global sounds now play directly at each recipient's location, ensuring consistent server-wide audio.
  • Fixed configuration validation during reloads to properly abort on critical YAML parsing errors, preventing broken plugin states from malformed configuration files.

## Localization & Translations
  • Corrected missing, inconsistent, and improperly formatted translation keys across messages.yml and internal system messages.
  • Standardized language formatting and improved fallback strings to ensure reliable multi-language server support.
  • Fixed color code parsing in localized messages to maintain consistent formatting across all supported languages.

## Technical Improvements
  • Overhauled ReloadManager to safely reinitialize all event listeners, formatters, and dependency references during hot-reloads.
  • Updated BroadcastManager to dynamically adjust sound origin based on the configured broadcast mode. GLOBAL and VICTIM_ONLY now use recipient coordinates, while WORLD and RADIUS retain victim coordinates for positional audio.
  • Improved internal caching and validation routines for configuration and message files.

## Upgrade Notes
  • A full server restart is recommended when upgrading from v1.2 to clear any lingering listener states from previous reload attempts.
  • If you maintain custom translations, review the updated config.yml template to ensure all corrected keys are properly merged.
  • The /cdmreload command is now fully functional and safe for production use. Configuration changes will apply immediately without requiring a server restart.

For detailed technical changes, refer to the commit history or source repository.
[1.2] 1.2 by SicklySurgeon on Oct 15, 2026
Download
## 📜 CHANGELOG - CustomDeathMessages v1.2

> **🎯 Focused on Accuracy & Stability**
> This update is a direct response to community feedback regarding nickname integration. We have completely overhauled how the plugin retrieves player names to ensure 100% compatibility with Essentials, alongside major internal stability improvements to eliminate hidden background errors.

### 🐛 Critical Bug Fixes

  • ✅ Fixed: Essentials Nicknames Not Showing in Death Messages**
  • Addressing user feedback: *"Seeking help with CustomDeathMessage plugin. The only feature I want is to replace the normal username with the essentials nickname of all players (victim and killer) in all places. Everything I have tried config wise either doesn't work and uses default. Or uses usernames and not nicknames."*
  • What was wrong:** The plugin was relying solely on Minecraft's base API to get names, which only returns raw usernames (e.g., Steve). It wasn't actually "talking" to Essentials to fetch the custom nicknames (e.g., [Admin] Steve).
  • What we did:** We built a dedicated, safe integration system (EssentialsHook) directly into the plugin's core. Now, whenever a death occurs, the plugin securely checks Essentials first. This applies to:
  • The {victim} placeholder.
  • The {killer_name} placeholder.
  • The {killer_displayname} placeholder.
  • Killers shooting from a distance (e.g., bows, crossbows).
  • Respawn messages ({player}).

  • ✅ Fixed: "Uses Default" Fallback Loop**
Related to the issue above, if the plugin struggled to format a message because of a missing nickname, it would sometimes abort and print the hardcoded default message instead of your custom messages.yml text. The new hook prevents this fallback loop, ensuring your custom messages always parse correctly.

### 🌟 New Features & Placeholder Updates

  • ✅ Added: "Raw Username" Placeholders**
Because the plugin now prioritizes Essentials nicknames by default, we added two new placeholders just in case you specifically need the underlying Minecraft username for a specific custom message format:
  • {victim_username} → Shows the raw Minecraft name (e.g., Notch).
  • {killer_username} → Shows the killer's raw Minecraft name.

### 🛠️ Significant Refinements & Improvements

  • ✅ Improved: Core Engine Stability & Java 8 Compatibility**
We performed a deep cleanup of the plugin's internal code to guarantee it runs flawlessly on servers using Java 8. This eliminates several hidden "silent errors" that were occurring in the background, improving overall server performance and ensuring death messages trigger instantly without delay.

  • ✅ Improved: Sound & Biome Detection Accuracy**
Fixed how the plugin reads server data for biomes, potion effects, and custom sounds. Values like {biome} will now format perfectly in all supported Minecraft versions without throwing hidden warnings in your console.

  • ✅ Improved: Safe Plugin Loading**
If Essentials is *not* installed on your server, the plugin will now detect this instantly and gracefully fall back to standard Minecraft usernames without throwing any errors or lagging the startup process.


### 💡 Upgrade Notes for Server Admins
  • No configuration changes required:** Your config.yml and messages.yml do not need to be modified. The {victim} and {killer_name} placeholders will automatically start pulling Essentials nicknames upon updating.
  • Soft Dependency:** Make sure Essentials is installed *before* CustomDeathMessages if you want to use nicknames. If Essentials is installed later, simply run /cdm reload.
[1.1] CustomDeathMessages 1.1 by SicklySurgeon on Oct 15, 2026
Download

## 📜 CHANGELOG - CustomDeathMessages v1.1

> **⚠️ A Sincere Apology**
> We sincerely apologize for any instability or missing features in v1.0. This major update introduces a complete architectural redesign to enhance reliability, maintainability, and future extensibility. Thank you for your patience and invaluable feedback.

### 🗑️ Removed Features

  • ❌ Removed: In-Game Configuration Editor (/cdm editor)**
The in-game editor has been **completely removed** from the plugin. This decision was made to streamline development, improve stability, and focus resources on core features like the new broadcast system. All configuration must now be managed by directly editing the config.yml and messages.yml files.

### 🌟 Major New Features

  • ✅ Added: Advanced Broadcast System**
Introduce fine-grained control over **who sees death effects** (messages, sounds, particles, titles, action bars) with four new broadcast modes:
  • GLOBAL: All online players on the server
  • WORLD: All players in the same world
  • RADIUS: Players within a configurable distance
  • VICTIM_ONLY: Only the dying player
Configurable globally and per-effect type directly in config.yml.

  • ✅ Added: Powerful /cdm broadcast Command Suite**
A new admin command to **test and trigger broadcast effects manually**:
  • /cdm broadcast sound <mode> [radius] [sound]
  • /cdm broadcast particle <mode> [radius] [particle]
  • /cdm broadcast message <mode> <message>
  • /cdm broadcast test – Simulates all broadcast modes
  • /cdm broadcast global <type> – Send an effect to all players instantly.

  • ✅ Added: Full Support for Minecraft 1.21.11**
The plugin has been updated and thoroughly tested to be fully compatible with **Minecraft 1.21.11**, including all new sounds, particles, biome names, and API changes introduced in this version. Configuration defaults and validation now reflect 1.21.11 standards.

### 🐛 Critical Bug Fixes

  • ✅ Fixed: Inaccurate Killer & Source Identification**
The system for determining {killer_name} (the responsible entity) and {killer_source} (the direct damage source, like an arrow or TNT) has been completely rewritten. It now correctly handles:
  • Projectiles (arrows, fireballs) from players, mobs, and dispensers.
  • Direct entity attacks (players, zombies, creepers).
  • Edge cases where the default game API returns incomplete data.

  • ✅ Fixed: Server Startup Crash on Invalid Configuration**
In v1.0, certain misconfigurations could cause the plugin to crash during server startup. This has been resolved with a safer, staged initialization process that guarantees all internal systems load in the correct order.

  • ✅ Fixed: Incorrect Placeholder Values**
Placeholders like {distance}, {biome}, and {victim_effects} now display accurate, properly formatted values (e.g., "nether_wastes" is now shown as "Nether Wastes").

### 🛠️ Significant Refinements & Improvements

  • ✅ Refined: Configuration & Messages Structure**
  • config.yml** now includes new, intuitive settings for the broadcast system (sound-broadcast-mode, particle-broadcast-mode, and a unified effects-broadcast section).
  • messages.yml** is now on **version 1.1** and includes a new broadcast-system section with fully configurable messages for all new /cdm broadcast commands.

  • ✅ Enhanced: Configuration Validation**
The /cdm config validate command now checks the new broadcast settings for validity, preventing misconfiguration and providing clearer, more actionable feedback.

  • ✅ Plugin Version Bump**
The plugin’s version has been officially updated to **1.1** to reflect this major feature release.
[1.0.0] CustomDeathMessages 1.0.0 by SicklySurgeon on Oct 15, 2026
Download
## 📜 CHANGELOG - CustomDeathMessages v1.0.0

> **⚠️ A Sincere Apology**
> I deeply apologize for the extended 4-week gap without updates and for not addressing these critical issues sooner. Thank you for your patience and continued support.

### 🐛 Critical Bug Fixes

  • ✅ Fixed: Broken Killer Tracking & Generic Messages**
The plugin consistently failed to identify the correct killer ({killer_name}) and damage source ({killer_source}), resulting in generic "Unknown" messages. The DamageTracker and message formatter have been overhauled to accurately track and display killer information in all scenarios.

  • ✅ Fixed: In-Game Editor Inventory (80% Non-Functional)**
The /cdm editor inventory was largely unresponsive, with most slots failing to register clicks or open sub-menus. This has been resolved; the editor is now stable and functional for basic navigation and message editing.

### ℹ️ Important Notes

  • 🛠️ Editor Status: Early Access (≈30% Complete)**
While the core functionality of the in-game editor now works, it is **not fully implemented**. Features like editing global config, world-specific messages, and epic message lists are either limited or not yet functional. The editor is provided as an early-access tool for basic message customization, with full completion planned for a future release.
[0.0.9] CustomDeathMessages 0.0.9 by SicklySurgeon on Oct 15, 2026
Download
## 📜 CHANGELOG - CustomDeathMessages v0.0.9

The plugin continues to evolve! Version 0.0.9 introduces a **comprehensive command restructuring** that unifies all functionality under a single command interface while simplifying permissions and improving the overall user experience. This release focuses on **consistency, usability, and maintainability**, making the plugin more intuitive for administrators and reducing complexity for end-users.

> **⚠️ UPDATE INSTRUCTIONS**
> No special migration steps are required for this update. However, please note:
> 1. The previous separate commands (/cdmreload, /cdmconfig, etc.) will no longer function as standalone commands
> 2. All functionality is now accessed through the unified /cdm command
> 3. Your existing configuration files will work without modification
> 4. Permissions have been simplified - if you were using the old permission system, no changes are needed
> 5. **The messages.yml file has been reorganized and translated from Spanish to English** - If you want to use the updated structure, you should delete your existing messages.yml file and let the plugin regenerate it with the new format. If you prefer to keep your current configuration, no action is needed as the plugin will maintain compatibility with your existing file.

#### ✨ New Features

  • Added: Unified Command System**
All commands have been consolidated under a single /cdm command structure:
  • /cdm test - Test death messages (replaces /cdm test)
  • /cdm editor - Open configuration editor (replaces /cdm editor)
  • /cdm help - Access help system (replaces /cdmhelp)
  • /cdm config validate - Validate configuration (replaces /cdmconfig)
  • /cdm reload - Reload configuration (replaces /cdmreload)
  • This simplifies command management and provides a consistent interface

  • Added: Base Permission System**
A new base permission cdm.use has been introduced:
  • Grants access to the main /cdm command and its subcommands
  • Default: true (all players can use the command)
  • Other permissions (cdm.reload, cdm.editor, etc.) now function as sub-permissions within the unified system

  • Added: Enhanced Command Tab Completion**
A new unified tab completer provides context-aware suggestions:
  • Shows only relevant subcommands based on user permissions
  • Provides contextual suggestions as you type
  • Improves discoverability of available commands and parameters

  • Added: Streamlined Help System**
The help system has been updated to reflect the new command structure:
  • Now provides clear guidance on the unified command interface
  • Includes examples of the new command syntax
  • Maintains all the interactive features from previous versions

  • Added: Reorganized & Translated Messages Configuration**
The messages.yml file has been completely restructured and translated to English:
  • All sections previously in Spanish are now in English
  • More consistent structure for easier navigation
  • No functional changes - only language and organization
  • Note: If you want to use the new structure, delete your existing messages.yml and let the plugin generate a new one*

#### 🐛 Bug Fixes

  • Fixed: Command Permission Conflicts**
Resolved issues where permission checks failed due to the previous fragmented command system, ensuring consistent permission handling.

  • Fixed: Tab Completion Conflicts**
Fixed tab completion issues that occurred when multiple commands with the same name but different permissions were registered.

  • Fixed: Command Execution Flow**
Corrected edge cases where command execution would fail when using certain parameter combinations with the previous command structure.

#### 🛠️ Improvements & Optimizations

  • Improved: Code Architecture**
Restructured command handling to use a single executor pattern, reducing code duplication and improving maintainability.

  • Improved: Resource Management**
Optimized the reinitialization process when reloading configuration, ensuring all dependent components are properly reset.

  • Improved: Error Handling**
Enhanced error messages when using invalid subcommands or parameters, providing clearer guidance to users.

  • Optimized: Permission System**
Simplified the permission structure with a logical hierarchy that's easier to understand and manage:
  • cdm.use (base access)
  • cdm.reload (advanced permissions)
  • cdm.editor (specialized access)
  • cdm.test (testing access)

With version 0.0.9, CustomDeathMessages delivers a **more cohesive, professional, and user-friendly interface** while maintaining all the powerful features from previous versions. The unified command system provides a consistent experience across all plugin functionality, and the improved permission structure makes administration simpler. The reorganization of messages.yml and translation to English ensures better compatibility with international server environments while maintaining full backward compatibility. These changes lay the foundation for future enhancements while delivering immediate improvements to the day-to-day experience of using the plugin.
[0.0.8] CustomDeathMessages 0.0.8 by SicklySurgeon on Oct 15, 2026
Download
## 📜 CHANGELOG - CustomDeathMessages v0.0.8

The evolution continues! Version 0.0.8 builds upon the solid foundation of v0.0.7 with two essential new tools: **a built-in in-game configuration editor** and **automatic update notifications**. This release focuses on **improved administrator experience, transparency, and accessibility**, ensuring your custom death message configuration is more manageable than ever.

> **⚠️ UPDATE INSTRUCTIONS**
> To fully leverage the new features:
> 1. **Back up** your current messages.yml file
> 2. **Delete** the messages.yml file from your server's plugins/CustomDeathMessages/ folder
> 3. Restart or reload the server. The plugin will generate new configuration files with all new options
> 4. Manually transfer your custom messages from your backup to the new messages.yml

#### ✨ New Features

  • Added: In-Game Configuration Editor (/cdm editor)**
The flagship feature of this version! This interactive system allows administrators to **edit configuration directly from the game** without needing to access server files:
  • Intuitive menu navigation with categories for groups, causes, and settings
  • Real-time message preview with placeholder substitution
  • Validation of placeholders during editing
  • Confirmation before saving changes
  • Supports editing conditional messages and group-specific messages (default, vip, admin)
  • New permission node cdm.editor for access control

  • Added: Update Notification System**
The plugin now automatically checks for new versions on startup and notifies administrators when they join the server:
  • Checks Modrinth for updates on server startup
  • Notifies players with cdm.admin permission or OP when they join
  • Configurable notification messages in messages.yml
  • Direct link to the plugin page for easy updating

  • Added: New /cdm editor Command**
A dedicated entry point to access the in-game configuration editor. Requires the cdm.editor permission.

  • Added: Support for Minecraft 1.21.9 and 1.21.10**
The plugin has been verified to work with the latest Minecraft versions, ensuring compatibility with the newest server features and mechanics.

#### 🐛 Bug Fixes

  • Fixed: Improved Validation System**
The configuration validator now provides more detailed error descriptions, especially for conditional messages, making it easier to identify and fix configuration issues.

  • Fixed: Editor Compatibility**
Fixed issues that could occur when editing messages while the plugin was reloading, ensuring a more stable editing experience.

#### 🛠️ Improvements & Optimizations

  • Improved: Administrator Experience**
The in-game editor eliminates the need for manual file editing, significantly reducing the risk of syntax errors and making configuration changes faster and safer.

  • Improved: Help System**
The help system has been optimized to integrate with the new editor, providing contextual information about how to use the new features.

  • Improved: Update Transparency**
The update notification system keeps administrators informed about new versions without disrupting regular players.

  • Optimized: Configuration Structure**
The new messages.yml has been reorganized with the editor in mind, making it easier to understand and maintain.

With v0.0.8, CustomDeathMessages is not only more powerful but also **more accessible and transparent**. The in-game editor represents a major leap forward in administrator experience, while the update notifications keep you informed about future improvements to the plugin. The addition of Minecraft 1.21.9 and 1.21.10 support ensures you can use the latest Minecraft features while enjoying customized death messages.
[0.0.7] CustomDeathMessages 0.0.7 by SicklySurgeon on Oct 15, 2026
Download

### 📜 CHANGELOG - CustomDeathMessages v0.0.7

The evolution never stops! Version 0.0.7 takes the solid foundation of v0.0.6 and elevates it with an **essential tool for administrators: a built-in configuration validator**. This release focuses on **error prevention, ease of use, and stability**, ensuring your experience with custom death messages is flawless.

> **⚠️ IMPORTANT UPGRADE NOTE**
> To fully leverage the new features and ensure compatibility:
> 1. **Make a backup** of your current config.yml and messages.yml files.
> 2. **Delete** the config.yml and messages.yml files from your server's plugins/CustomDeathMessages/ folder.
> 3. Restart or reload the server. The plugin will automatically generate new, up-to-date configuration files with all new options, examples, and system messages.
> 4. You can then manually re-add your custom settings and messages from your backup into the new files.

#### ✨ New Features

  • Added: Integrated Configuration Validator (/cdm config validate)**
The flagship feature of this version! This new command allows administrators to **validate the correctness of their config.yml and messages.yml files** before reloading. It scans for:
  • Invalid sounds and particles (global, per-group, and epic).
  • Syntax errors in conditions (unknown operators, malformed placeholders).
  • Generates a detailed report in the chat with success (✅), error (❌), and warning (⚠️) messages, along with a summary of the current configuration.

  • Added: New System Messages for the Validator**
A complete section has been added to messages.yml under system-messages with translatable messages for the validator, such as config-validator-sound-not-found, config-validator-condition-syntax-warning, and config-validator-success-all, enabling a fully localizable user experience.

  • Added: New /cdmconfig Command**
A new entry point for the validator. Administrators can run /cdm config validate to start the validation process. Uses the cdm.reload permission.

#### 🐛 Bug Fixes

  • Fixed: Enhanced Atomic Reload**
The /cdmreload command has been improved to be even more robust. It now **explicitly validates messages.yml before attempting to load config.yml**. If messages.yml has a critical syntax error (e.g., malformed YAML), the reload process stops immediately, notifies the user, and prints the full stack trace to the console, preventing any unstable intermediate state.

  • Fixed: Error Handling in Reload**
Improved error handling in /cdmreload to capture and report unexpected failures more clearly, ensuring the administrator always receives feedback, even in edge cases.

#### 🛠️ Improvements & Optimizations

  • Improved: Administrator Experience**
The validator provides a proactive way to debug configurations, drastically reducing the risk of runtime errors and saving hours of frustration from misplaced brackets or commas.

  • Improved: Documentation**
The config.yml and messages.yml files have been updated with comments referencing the new validation functionality, guiding users on how to keep their configurations error-free.

  • Optimized: Development Workflow**
The introduction of ConfigValidator sets a pattern for future diagnostic and maintenance tools within the plugin, improving the codebase's long-term structure.

With v0.0.7, CustomDeathMessages is not only more powerful but also **safer and easier to manage**. The integrated validator is a giant leap towards a perfect user experience for both players and administrators.
[0.0.6] CustomDeathMessages 0.0.6 by SicklySurgeon on Oct 15, 2026
Download

### 📜 CHANGELOG - CustomDeathMessages v0.0.6

The evolution continues! Version 0.0.6 refines the groundbreaking features of v0.0.5 and introduces powerful new capabilities for unparalleled customization, accuracy, and user experience. This update is all about precision, control, and polish.

> **⚠️ IMPORTANT UPGRADE NOTE**
> To ensure you get all the new configuration options and message placeholders, **it is highly recommended that you**:
> 1. **Make a backup** of your existing config.yml and messages.yml files.
> 2. **Delete** the old config.yml and messages.yml files from your server's plugins/CustomDeathMessages/ folder.
> 3. Restart or reload the server. The plugin will automatically generate fresh, up-to-date configuration files with all the new settings and examples.
> 4. You can then manually re-add your custom messages and settings from your backup into the new files.

#### ✨ New Features

  • Added: Advanced Killer Attribution System**
The plugin now distinguishes between the **Responsible Entity** ({killer_name}) and the **Direct Damage Source** ({killer_source}). For example, if a skeleton shoots you, {killer_name} will be "Skeleton" and {killer_source} will be "Arrow". This allows for incredibly detailed and context-aware messages.

  • Added: Sophisticated Conditional Logic**
Conditional messages now support complex logic with AND and OR operators, plus new comparison operators like equals, startsWith, endsWith, >, <, >=, and <=. You can now create messages for scenarios like: {distance} > 10 AND {victim_effects} contains 'Poison'.

  • Added: New Placeholder: {biome}**
Personalize death messages based on the environment! The new {biome} placeholder (e.g., "Plains", "Nether Wastes", "Deep Dark") allows you to create messages like "consumed by the eternal flames of the Nether".

  • Added: Permission-Based Help System**
Administrators can now control exactly which help pages (/cdmhelp) different user groups can access. Configure this via the new help-permissions section in config.yml (e.g., vip: [1, 2], default: [1]).

  • Added: Dynamic Help Page Generation**
The /cdmhelp command now generates its pages dynamically from the messages.yml file, making it easier to maintain and translate. The system automatically calculates the total number of pages.

  • Added: Atomic Configuration Reload**
The /cdmreload command now uses an atomic reload system. If any part of the new configuration (config or messages) fails to load, the plugin **reverts to the previous, working state**, preventing server crashes due to bad configs.

  • Added: Enhanced Test Command**
The /cdm test command now accepts a fourth optional argument to manually specify the {killer_source} (e.g., /cdm test ENTITY_ATTACK Skeleton Arrow), allowing for comprehensive testing of the new killer attribution system.

#### 🐛 Bug Fixes

  • Fixed: Projectile Attribution**
The DamageTracker has been upgraded to correctly trace projectiles (arrows, fireballs, etc.) back to their original shooter, ensuring {killer_name} is always accurate, even for ranged attacks.

  • Fixed: Biome Name Formatting**
The new {biome} placeholder now correctly formats biome names (e.g., converting "NETHER_WASTES" to "Nether Wastes") for a clean, user-friendly output.

  • Fixed: Help Command Page Validation**
The help command now correctly validates the total number of pages after they are generated, preventing errors when trying to access non-existent pages.

  • Fixed: Epic Effect Caching**
Sound and particle effects for epic deaths are now cached during the MessagesManager initialization, improving performance and eliminating potential null-pointer errors.

#### 🛠️ Improvements & Optimizations

  • Improved: Code Structure and Maintainability**
Key classes like MessageFormatter and MessageSelector have been refactored for better readability and easier future expansion. The DeathContext class now holds richer data.

  • Improved: Configuration Validation**
Added more robust logging for invalid epic sound and particle configurations in messages.yml, helping server admins debug their setups.

  • Improved: Tab Completion**
The /cdm test command's tab completer now provides intelligent suggestions for the new {killer_source} argument (e.g., "Arrow", "Creeper", "Lava").

  • Updated: Documentation**
Both config.yml and messages.yml have been meticulously updated with detailed comments and examples for all new features, including the advanced conditional syntax and the new placeholders.

  • Optimized: Resource Management**
The atomic reload system ensures that server resources are not wasted on partially loaded or broken configurations, leading to a more stable server environment.
[0.0.5] CustomDeathMessages 0.0.5 by SicklySurgeon on Oct 15, 2026
Download

### 📜 CHANGELOG - CustomDeathMessages v0.0.5

Prepare for the ultimate death experience! Version 0.0.5 is a massive overhaul that transforms the plugin with epic new mechanics, economic integration, and a complete help system.

#### ✨ New Features

  • Added: Epic Death System**
There's now a small, configurable chance (epic-death-chance in config.yml) for a death to be **EPIC**! When triggered, it displays a special message, plays a powerful sound, spawns spectacular particles, shows a full-screen title, and... strikes a lightning bolt at the death location!

  • Added: In-Game Help Command (/cdmhelp)**
Need a quick reference? Use /cdmhelp [page] to access a comprehensive, multi-page guide directly in-game, covering commands, permissions (including cdm.admin), placeholders, configuration options, and support.

  • Added: Vault Economy Integration**
Servers can now charge players a configurable fee (cost-per-death-message in config.yml) to display death messages. Specific permission groups (like "admin") can be exempted from this cost via the exempt-groups-from-cost list.

  • Added: Legacy Color Support**
For servers running older versions of Minecraft (pre-1.16), the new legacy-color-support option in config.yml will automatically strip modern hex color codes (<#rrggbb>) from messages, preventing them from appearing as plain text.

  • Added: Conditional Death Messages**
You can now configure messages that only display if a specific condition is met. For example, you can have a unique message if the victim was holding a diamond weapon or was under the effect of poison. Defined in messages.yml using the condition and message syntax.

  • Added: New Configuration Options**
The config.yml file has been significantly expanded with new, powerful settings:
  • epic-death-chance: Probability (0.0 to 1.0) of an epic death occurring.
  • cost-per-death-message: The amount to charge players (requires Vault).
  • exempt-groups-from-cost: A list of permission groups (e.g., - "admin") that do not pay the death message cost.
  • legacy-color-support: Enables compatibility mode for older Minecraft versions.

#### 🐛 Bug Fixes

  • Fixed: Inaccurate or "Unknown" Killer Names**
Implemented a brand new, robust damage-tracking system. The plugin now **100% accurately** identifies the killer's name ({killer}), even in complex scenarios like falling to your death after being pushed by a mob.

  • Fixed: Modern Sound Name Support**
The plugin now fully supports the new, lowercase sound names used in modern Minecraft (e.g., entity.player.death instead of ENTITY_PLAYER_DEATH), ensuring perfect compatibility.

  • Fixed: Update Checker Targeting Wrong Plugin**
The automatic update checker has been refined to ensure it **only checks for updates for CustomDeathMessages**. It will no longer incorrectly notify you about updates for other plugins. It correctly notifies server administrators (players with the cdm.admin permission or OP) when a new version is available, providing a direct download link.

#### 🛠️ Improvements & Optimizations

  • Improved: Overall Performance**
Implemented an advanced caching system for messages and configurations, drastically reducing file reads and boosting plugin speed.

  • Improved: Asynchronous Message Sending**
Sending messages to other players (especially in a radius) is now done in the background, preventing the game from lagging during mass-death events.

  • Updated: Configuration Files**
Both config.yml and messages.yml have been completely overhauled with new parameters, examples, and a clearer structure to support all the exciting new features.
[0.0.3] CustomDeathMessages 0.0.3 by SicklySurgeon on Oct 15, 2026
Download

### 🐛 Bug Fixes

  • Chat Message Color Codes Fixed:**
All messages sent to players via commands (/cdmreload, /cdm test) now correctly process & color codes.

[0.0.2] CustomDeathMessages 0.0.2 by SicklySurgeon on Oct 15, 2026
Download

# 📜 CustomDeathMessages - Changelog v0.0.2


#### 🎉 **Minor Update with Major Improvements!**

This version refines the foundation of v0.0.1, adding new community-requested features and improving stability and developer experience.


#### ✅ **New Features**

  • Killer Support in /cdm test!**
The test command now accepts an optional third argument: the killer's name.
Example: /cdm test ENTITY_ATTACK Notch
This allows you to accurately test placeholders like {killer}, {killer_displayname}, and {distance}.

  • New Placeholder: {killer_displayname}**
Displays the killer’s display name, respecting nicknames, prefixes, and colors set by other plugins (like EssentialsX or LuckPerms).

  • New Placeholder: {distance}**
Shows the distance in blocks between the victim and the killer, formatted to one decimal place (e.g., "5.2").

  • Random Message Cooldown System**
The plugin now remembers the last random message shown to a player and will avoid showing it again until a different message has been displayed. This prevents annoying repetitions.

  • Improved Killer Detection**
The plugin can now correctly detect the killer’s name even if it’s an entity (like a Creeper or Zombie) or has a custom name. Entity names are formatted with initial capital letters (e.g., "Zombie Pigman").

  • Centralized System Messages**
All console messages, warnings, and command responses are now loaded from messages.yml under the system-messages section. This allows administrators to fully translate the plugin without modifying the code.

  • PlaceholderAPI Compatibility in /cdm test**
PlaceholderAPI placeholders are now also expanded when using the test command, providing a more accurate preview.

  • Registered TabCompleter**
The /cdm command now has a functional TabCompleter that suggests "test", damage causes, and names of online players, greatly improving usability.


#### 🐛 **Bug Fixes**

  • Fixed an error in MessagesManager.java where the character encoding when loading the default file was not specified, which could cause issues with special characters. It now uses StandardCharsets.UTF_8.


Thank you for using CustomDeathMessages! This update makes the plugin more powerful, flexible, and easier to use than ever before.
[0.0.1] CustomDeathMessages 0.0.1 by SicklySurgeon on Oct 15, 2026
Download
HELLO MODRINTH!
CustomDeathMessages Icon
Download CustomDeathMessages
Select game version
Select platform