Die with style, not silence! Replace boring death notices with hilarious, colorful, and personalized messages. Add sounds, particles, and titles to turn every demise into a memorable event.
Автор: SicklySurgeon4,1 тыс.6обновлён 20 окт. 2026 г.
Context-aware death messages, sounds, particles and screen effects for Minecraft servers.
CustomDeathMessages replaces vanilla death notifications with a fully configurable messaging engine. Choose different messages per damage cause, permission group and world, add hex colors, audio and particle effects, titles and action bars, and decide exactly who sees or hears each effect.
Highlights
Per-cause, per-group and per-world messages - different texts for falling, fire, PvP, projectiles and every Bukkit damage cause, with default, vip and admin groups.
True hex colors - &#RRGGBB and <#RRGGBB> are rendered correctly instead of being displayed as text.
Independent broadcast modes - route messages, sounds, particles, titles, action bars and the darken-screen effect with GLOBAL, WORLD, RADIUS or VICTIM_ONLY.
Epic deaths - a configurable chance for a special message, custom sound, particle burst and a lightning strike at the death location.
Conditional messages - show a line only when a condition matches, using placeholders such as {distance}, {biome} or {victim_effects} with AND/OR and comparison operators.
Rich placeholders - victim, killer, weapon, biome, coordinates, time, cost and more, with optional PlaceholderAPI expansion support.
# CustomDeathMessages — Version 1.6
## Hex Color Rendering, Performance, and Minecraft 26.3 Compatibility Release
### Description
Version 1.6 is a focused quality, compatibility, and performance release. It resolves the remaining hex color rendering problems that could make `<#RRGGBB>` and `&#RRGGBB` appear as literal text, fixes action bar colors, and makes color handling consistent across every configurable message path.
This release also improves death attribution, removes several cross-world and null-configuration edge cases, reduces per-death configuration work through caching, and updates the plugin for Minecraft 26.3 with Java 21.
Server owners can upgrade without rewriting their configuration. Existing `config.yml` and `messages.yml` files remain valid; the new broadcast message keys have built-in defaults and can be added optionally.
---
## Release Statistics
| Category | Count |
|---|---:|
| Critical fixes | 6 |
| Bug fixes | 22 |
| Performance improvements | 14 |
| Configuration and message additions | 6 |
| Quality-of-life improvements | 10 |
| Behavior changes | 7 |
| **Total documented changes** | **65** |
---
# Critical Fixes
## Hex Color Rendering
- Fixed `<#RRGGBB>` and `&#RRGGBB` colors not rendering in death messages, titles, subtitles, action bars, command feedback, help text, test summaries, broadcast feedback, reload messages, configuration validation, update notices, and respawn messages. Both hex syntaxes are now translated consistently instead of being shown as literal text. Raw color sequences also no longer appear in console enable/disable logs.
## Action Bar Colors
- Fixed action bar text not interpreting legacy `§` color codes correctly. Action bar messages now use legacy text parsing, so colors and formatting render as intended.
## Death Attribution and World Safety
- Fixed a cross-world distance error that could occur when the victim and the responsible entity were in different worlds. Distance is now calculated only when both entities share the same world.
- Fixed stale killer attribution. Damage information used to credit a killer now expires after 15 seconds, preventing an old hit from claiming an unrelated later death.
- Fixed projectile fallback attribution. When tracked damage data is unavailable, projectile deaths now resolve the shooter instead of crediting the projectile itself.
## Platform Compatibility
- Added Minecraft 26.3 support with Spigot API 26.3 and Java 21, including an updated `api-version` declaration.
---
# Bug Fixes
## Commands and Message Formatting
- Fixed hex colors in `/cdm`, `/cdmhelp`, `/cdm test`, `/cdmbroadcast`, `/cdm reload`, and `/cdm config` feedback.
- Fixed hex colors in update notifications and respawn messages.
- Fixed `/cdmhelp` formatting command descriptions twice, which could alter literal `&` sequences or produce unexpected colors.
- Fixed blank or missing values in `messages.yml` causing `NullPointerException`s in commands.
- Fixed the invalid-cause response from the message formatter bypassing the color pipeline.
- Fixed the broadcast mode overview using hardcoded text instead of configurable `messages.yml` entries.
## Broadcast Handling
- Fixed negative broadcast radii being interpreted as a sound or particle name instead of a radius value.
- Fixed invalid broadcast radii not being reported clearly. The invalid value and the fallback radius are now shown.
- Fixed broadcast mode and radius resolution reading configuration through multiple inconsistent paths; both now use one effective resolution path and refresh on reload.
## Messages, Placeholders, and Integrations
- Fixed conditional death messages being rebuilt from YAML on every death. They are now cached by group and damage cause.
- Fixed a blank `message-not-found` entry in `messages.yml` causing a `NullPointerException` during fallback message selection.
- Fixed unnecessary placeholder work by resolving only the placeholders that actually appear in the selected message.
- Fixed PlaceholderAPI availability being checked repeatedly. Availability is now cached, while still allowing recovery if PlaceholderAPI is enabled later.
- Fixed a broken PlaceholderAPI installation repeatedly attempting placeholder expansion; a missing class is now handled once and the death flow continues normally.
- Fixed Essentials nickname lookups repeating unnecessary plugin-manager checks; the hook now revalidates itself when needed.
- Fixed the missing-economy warning being printed on every death. It is now shown once per server session.
## Validation and Safety
- Fixed negative epic particle counts being passed to the server; they are now clamped to a safe value.
- Fixed negative group sound volumes; they are now clamped to zero.
- Fixed the update checker retaining state between checks; it now resets before each check.
- Fixed the test command creating multiple death contexts for a single test instead of reusing one.
- Fixed tab completion suggestions not being filtered by the typed prefix and using locale-sensitive casing.
- Fixed console enable/disable messages containing raw color codes instead of clean, readable text.
---
# Performance Improvements
- Conditional death messages are cached per group and damage cause, eliminating repeated YAML section traversal during the death flow.
- Broadcast mode and radius settings are cached and rebuilt only when the configuration is reloaded.
- Placeholder resolution skips lookups for placeholders that are not present in the selected message.
- PlaceholderAPI availability is cached after the first successful check, avoiding a plugin lookup for every message.
- Essentials integration avoids repeated plugin-manager lookups during nickname resolution.
- The darken-screen particle ring offsets are precomputed once instead of recalculating trigonometry every tick.
- Darken-screen recipients are resolved once per tick instead of once for each of the 12 particle points.
- `/cdm test` reuses a single `DeathContext` and cached effect managers.
- `/cdmbroadcast` caches its `BroadcastManager`, `SoundManager`, and `ParticleManager` instances.
- Message selection uses `Random.nextDouble()` instead of the shared `Math.random()` implementation.
- Tab completion filters candidates by prefix before constructing the suggestion list.
- Case conversions use `Locale.ROOT`, preventing locale-dependent behavior and unnecessary work.
- Victim weapon resolution reads `ItemMeta` once per lookup instead of twice.
- Particle counts, sound volumes, radii, durations, and economy costs are clamped early, preventing invalid or unexpectedly expensive effect calls.
---
# Configuration and Message Additions
The following new keys are available under `system-messages` in `messages.yml`:
- `broadcast-current-sound-radius` — current sound broadcast radius display.
- `broadcast-current-particle-radius` — current particle broadcast radius display.
- `broadcast-current-message-radius` — current message radius display.
- `broadcast-current-message-world` — current world message mode display.
- `broadcast-current-message-victim` — current victim-only message mode display.
- `broadcast-invalid-radius` — feedback shown when an invalid broadcast radius is entered.
These keys are optional. If they are missing from an existing `messages.yml`, the plugin uses built-in defaults.
---
# Quality-of-Life Improvements
- `/cdmbroadcast modes` now uses configurable `messages.yml` entries for its current-settings output.
- Invalid radius feedback now shows both the rejected value and the fallback value.
- Broadcast command help and examples are now sourced from the message system, making them easier to translate and customize.
- Help descriptions containing color codes now render exactly as written.
- Missing or blank message entries fall back to readable built-in defaults instead of failing silently.
- Console logs are clean and readable without raw `&` or hex color sequences.
- Vault users receive one clear warning when an economy cost is configured but no economy provider is available.
- Tab completion responds faster and only suggests entries matching the current input.
- `/cdm test` output follows the same formatting and context path as real death messages.
- Update notifications and broadcast feedback now match the plugin's normal color formatting.
---
# Behavior Changes
- `<#RRGGBB>` is now fully supported in addition to `&#RRGGBB`.
- `legacy-color-support: false` translates hex colors; `legacy-color-support: true` removes hex colors for older clients. The setting keeps its original meaning and is now applied consistently.
- Negative broadcast radii are clamped to `0` instead of being interpreted as a sound or particle name.
- Broadcast mode and radius changes are picked up after `/cdm reload`.
- Killer attribution no longer uses damage older than 15 seconds.
- Blank `messages.yml` entries now fall back to defaults rather than causing errors.
- Version 1.6 targets Minecraft 26.3 and Java 21. Servers on older Minecraft versions should remain on 1.5.
---
# Upgrade Notes
1. Back up your current `plugins/CustomDeathMessages/config.yml` and `messages.yml`.
2. Replace the old plugin JAR with `customdeathmessages-1.6.jar`.
3. Restart the server. A full restart is recommended after a major platform update.
4. Your existing configuration files will not be overwritten.
5. If you want to customize the new broadcast messages, add the six keys listed above to your existing `messages.yml`.
6. Keep `legacy-color-support: false` on Minecraft 26.3 to enable hex colors. Set it to `true` only if you intentionally need hex codes removed for older clients.
7. Verify the update with `/cdm reload`, `/cdm test FALL`, and `/cdmbroadcast modes`.
---
# Summary of Major 1.6 Outcomes
- Hex colors now render correctly across all configurable message paths.
- Action bar colors now render correctly.
- Cross-world distance errors no longer interrupt death processing.
- Killer attribution is more accurate and no longer uses stale damage.
- Projectile fallback attribution now identifies the shooter.
- Conditional messages, broadcast settings, placeholders, and particle recipients are handled with less repeated work.
- Commands and configuration messages are more resilient to missing or blank values.
- Broadcast feedback is more configurable and easier to translate.
- The plugin is ready for Minecraft 26.3 and Java 21.
# 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.
# 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.
---
# 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.
## 📜 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`.
## 📜 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.
## 📜 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.
## 📜 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.
## 📜 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.