Skip to content
RitomasssCommunity
Product documentation

NexaCombat Documentation

NexaCombat is a premium combat control platform for PvP, SMP, Lifesteal and Survival servers.

21Java target
Paper 1.21Server target
YAML/SQLStorage mode
Deep soft hooksHook posture

Overview#

Product purpose, target audience, main systems, dependencies and quick links.

Quick links: Installation, First Setup, Combat Tag, Damage Attribution, Combat UI, CombatLog, Loot, Restrictions, Safezones, Old PvP, PvP Toggle, Bounties, Rewards, Ranking, Trophies, Recaps, Evidence, Anti-Farm, Replay, Heatmap, GUI, Storage, Network, Integrations, Common Setups, Troubleshooting, Changelog and Support.

What is NexaCombat?#

A combat layer for tags, combatlog punishments, safezones, old PvP tuning, bounties, rewards, evidence, recaps and anti-abuse checks.

Who is it for?#

PvP and survival server owners who need more than a simple combat tag timer.

Supported server types#

PvP, SMP, Lifesteal, Survival, BoxPvP, Factions-style and practice-adjacent servers.

Main features#

  • Combat tag engine
  • Combatlog punishments
  • Safezone and border control
  • Restriction engine
  • Old PvP tuning
  • Bounties and rewards
  • Fight recaps and evidence
  • Admin GUI
  • Product Positioning
  • Core Platform
  • Combat Tag Engine
  • Damage Attribution

Dependencies#

  • Java 21
  • Paper 1.21
  • LicenseGate key
  • Vault/PlaceholderAPI/LuckPerms optional
  • WorldGuard optional

Installation#

Installation gets the plugin to boot. First Setup prepares it for production use.

Do not replace plugin jars while the server is running. Always make a backup before updating.
Download the latest NexaCombat jar from the official buyer/download source.
Stop the server before replacing the jar.
Upload the jar to /plugins.
Start the server once and confirm the plugin folder was generated.
Configure license, storage and core files listed in the Configuration section.
Restart the server and run the main status/admin command.

First Setup#

Recommended first configuration pass after the plugin has generated its files.

Make one change at a time, reload or restart, then test the player workflow with a real account.

Setup checklist#

  1. Choose combatlog punishment mode
  2. Set combat tag duration
  3. Configure blocked commands
  4. Configure safezone behavior
  5. Enable or disable rewards
  6. Set anti-farm rules
  7. Test with two players

Production notes#

  • Give permissions through LuckPerms or your permission manager.
  • Keep backups of YAML files and database tables.
  • Use a staging server before large updates.
  • Do not claim Folia or network support unless the full setup has been tested.

Commands#

Commands, permissions, and usage examples.

Command entries are read from this product's plugin.yml.
/nexacombatCommand
Description

NexaCombat admin command.

Permission

nexacombat.admin

Example

/nexacombat

/forcetagCommand
Description

Forcefully tag a player into combat.

Permission

nexacombat.admin

Example

/forcetag

/forceuntagCommand
Description

Forcefully untag a player from combat.

Permission

nexacombat.admin

Example

/forceuntag

/combatuiCommand
Description

Toggle your combat UI visibility.

Permission

Not declared in plugin.yml

Example

/combatui

/togglepvpCommand
Description

Toggle PvP status.

Permission

Not declared in plugin.yml

Example

/togglepvp

/bountyCommand
Description

Create and inspect combat bounties.

Permission

Not declared in plugin.yml

Example

/bounty

/deathbackCommand
Description

Return to your last saved death location.

Permission

Not declared in plugin.yml

Example

/deathback

/sellheadCommand
Description

Sell a NexaCombat trophy head from your hand.

Permission

Not declared in plugin.yml

Example

/sellhead

/graceCommand
Description

Manage newbie protection.

Permission

Not declared in plugin.yml

Example

/grace

Permissions#

Permission nodes are based on plugin.yml. Assign admin and bypass permissions carefully.

/lp group admin permission set nexacombat.admin true
/lp group default permission set nexacombat.admin true
nexacombat.admin

Allows using NexaCombat admin commands.

Default: opOwner/Admin
nexacombat.bypass.tag

Bypasses combat tagging.

Default: falseCustom group
nexacombat.bypass.safezone

Bypasses safezone combat pushback.

Default: falseCustom group
nexacombat.bypass.region-rules

Bypasses WorldGuard region-specific combat rules.

Default: falseCustom group
nexacombat.bypass.rule-profiles

Bypasses rule profile matching.

Default: falseCustom group
nexacombat.bypass.loot

Bypasses combat loot protection.

Default: opOwner/Admin
nexacombat.bypass.killfarm

Bypasses anti kill farm detection.

Default: falseCustom group
nexacombat.bypass.cleanup

Bypasses fair-fight cleanup detection.

Default: falseCustom group
nexacombat.bypass.replay-cooldown

Bypasses visual replay cooldowns.

Default: opOwner/Admin
nexacombat.bypass.item-rules

Bypasses dynamic item rules.

Default: falseCustom group
nexacombat.bypass.mythicmobs

Bypasses MythicMobs PvE tag rules.

Default: falseCustom group
nexacombat.bypass.playerparticles

Bypasses PlayerParticles combat disable rules.

Default: falseCustom group
nexacombat.bypass.essentials-cmi

Bypasses EssentialsX/CMI combat state controls.

Default: falseCustom group
nexacombat.bypass.featherboard

Bypasses FeatherBoard combat scoreboard triggers.

Default: falseCustom group
nexacombat.bypass.vanish-disguise

Bypasses Vanish/Disguise combat state controls.

Default: falseCustom group
nexacombat.bypass.duel-hooks

Bypasses duel plugin combat state hooks.

Default: falseCustom group
nexacombat.bypass.suite-hooks

Bypasses Nexa plugin combat command/state hooks.

Default: falseCustom group
nexacombat.bypass.packetverify

Bypasses packet-based combat verification.

Default: falseCustom group

Configuration#

Configuration YAML files below contain short bundled default excerpts, not full files. Message YAML is documented only in Messages & Language.

Validate YAML indentation before restarting the server.
addons.yml short excerpt, not full file

Plugin-specific YAML settings used by this product.

Short YAML preview only. This block shows selected lines from addons.yml. The generated file contains more options than this docs excerpt.
# ...
# Short documentation excerpt from addons.yml.
# This is not the complete YAML file.
# Lines before and after this preview are omitted from the docs.
# ...
settings:
  apply-pending-on-reload: true
  allow-delete: true
  marketplace:
    enabled: false
    catalog-url: ""
    timeout-ms: 10000
    download-artifacts: false
    download-directory: "addons"
  messages:
    queued-install: "&aQueued addon install: &e%addon%&a."
    queued-update: "&aQueued addon update: &e%addon%&a."
    queued-delete: "&cQueued addon delete: &e%addon%&c."
    enabled: "&aEnabled addon: &e%addon%&a."
    disabled: "&cDisabled addon: &e%addon%&c."
    cancelled: "&eCancelled pending action for &6%addon%&e."
    artifact-downloaded: "&aDownloaded addon artifact for &e%addon%&a."
    artifact-failed: "&cCould not download addon artifact for &e%addon%&c: %error%"
    marketplace-disabled: "&cAddon marketplace sync is disabled."
    marketplace-missing-url: "&cAddon marketplace catalog-url is empty."
    marketplace-synced: "&aSynced &e%count% &aaddon catalog entrie(s)."
    marketplace-failed: "&cAddon marketplace sync failed: %error%"
addons:
  actionbar-ui:
    display-name: "ActionBar UI"
    category: "ui"
    description:
      - "Combat timer actionbar expansion."
    version: "1.0.0"
    latest-version: "1.0.0"
    installed: true
    installed-version: "1.0.0"
    enabled: true
    restart-required: false
# ...
# More options continue in the generated plugin YAML file.
# Open plugins/<plugin-folder>/addons.yml to review every setting.
# ...
Top-level keys

settings, addons

Production handling

Back up this file, edit the generated copy under the plugin folder, then run the product reload command or restart for startup-level settings.

config.yml short excerpt, not full file

Main runtime settings, license, modules, limits, storage and feature behavior.

Short YAML preview only. This block shows selected lines from config.yml. The generated file contains more options than this docs excerpt.
# ...
# Short documentation excerpt from config.yml.
# This is not the complete YAML file.
# Lines before and after this preview are omitted from the docs.
# ...
license-key: LICENSE

settings:
  debug: false
  event-priorities:
    enabled: false
    note: "When enabled, core combat listener methods are registered programmatically with these priorities."
    listeners:
      combat-damage: MONITOR
      combat-block-damage: MONITOR
      combat-death: MONITOR
      combat-quit: NORMAL
      combat-join: NORMAL
      mob-death: MONITOR

command-aliases:
  enabled: false
  aliases:
    combatmenu: "combat menu"
    nc: "nexacombat"

language:
  active: messages.yml

hooks:
  vault: true
  suite-plugins:
    enabled: true
    cache-expire: 2s
    additional-plugin-names: []
    command-blocks:
      enabled: true
      bypass-permission: nexacombat.bypass.suite-hooks
      message: "&cYou cannot use that Nexa plugin command while in combat."
# ...
# More options continue in the generated plugin YAML file.
# Open plugins/<plugin-folder>/config.yml to review every setting.
# ...
Top-level keys

license-key, settings, command-aliases, language, hooks, storage

Production handling

Back up this file, edit the generated copy under the plugin folder, then run the product reload command or restart for startup-level settings.

network-sync.yml short excerpt, not full file

Plugin-specific YAML settings used by this product.

Short YAML preview only. This block shows selected lines from network-sync.yml. The generated file contains more options than this docs excerpt.
# ...
# Short documentation excerpt from network-sync.yml.
# This is not the complete YAML file.
# Lines before and after this preview are omitted from the docs.
# ...
servers: {}
# ...
# More options continue in the generated plugin YAML file.
# Open plugins/<plugin-folder>/network-sync.yml to review every setting.
# ...
Top-level keys

servers

Production handling

Back up this file, edit the generated copy under the plugin folder, then run the product reload command or restart for startup-level settings.

Messages & Language#

Translation and formatting guidance based on the product's bundled resources.

Message reload follows the product's reload command. Restart after jar, storage or license changes.

How to edit messages#

This product ships messages.yml. Edit the generated copy in the plugin folder, keep placeholders intact, then reload the plugin command or restart for startup-level changes.

Formatting#

<red>Error message</red>
&cLegacy color message
{player} {amount} {reason}
messages.yml short excerpt, not full file
Short YAML preview only. This block shows selected lines from messages.yml. The generated file contains more message keys than this docs excerpt.
# ...
# Short documentation excerpt from messages.yml.
# This is not the complete YAML file.
# Lines before and after this preview are omitted from the docs.
# ...
prefix: "&8[&6NexaCombat&8] &7"
missing-message: "&cMissing message: %key%"

no-permission: "&cNo permission."
player-not-found: "&cPlayer not found."
only-players: "&cOnly players can use this command."
config-reloaded: "&aNexaCombat configs reloaded."
invalid-number: "&cInvalid number."

admin-input:
  title: "&8&m------------------------------"
  prompt: "&7Type a new value for &e%label%&7."
  integer-prompt: "&7Type a whole number for &e%label%&7."
  current: "&7Current: &e%current%"
  range: "&7Range: &e%min% &7- &e%max%"
  clear: "&7Type &e- &7to clear this value."
  cancel: "&7Type &ccancel &7to cancel."
  cancelled: "&cInput cancelled."
  empty-denied: "&cThis value cannot be empty."
  too-long: "&cThis value is too long. Max length is 128 characters."
  invalid-integer: "&cInvalid number."
  out-of-range: "&cValue must be between &e%min% &cand &e%max%&c."
  saved: "&aSaved &e%label%&a."

language:
  display-name: "&eEnglish"
  material: BOOK
  changed: "&aLanguage changed to &e%language%&a."
  reloaded: "&aMessages reloaded."
  not-found: "&cLanguage file not found."

combat-ui:
  shown: "&aCombat UI is now visible."
  hidden: "&cCombat UI has been hidden."
# ...
# More options continue in the generated plugin YAML file.
# Open plugins/<plugin-folder>/messages.yml to review every setting.
# ...

GUI / Menus#

GUI cards describe the actual menus available in this product build.

Each card shows the configured menu title, inventory size, item count and detected actions when those values exist.

Admin#

NexaCombat staff dashboard for status, reloads, debug tools, player commands, sync, bounty/editor entry points and module controls.

  • Configured title: NexaCombat Admin
  • Size: 54 slots
  • Configured items: 24
  • Actions: DEBUG_VIEWER, RELOAD, TOGGLE_DEBUG, PLAYER_COMMAND

Language#

Language management menu for reloading and navigating combat message files without digging through every YAML path.

  • Configured title: NexaCombat Languages
  • Size: 27 slots
  • Configured items: 4
  • Actions: NONE, RELOAD_MESSAGES, BACK, CLOSE

Placeholders#

PlaceholderAPI examples available for this product.

Use the exact identifier shown here in scoreboards, chat formats and external display plugins.

Placeholder surface#

Identifier: nexacombat. The expansion covers combat state, remaining time, opponent, kills, deaths, combatlogs, bounties, assists, reputation and ranked values.

Usage notes#

  • Install PlaceholderAPI before using these values in scoreboards or chat formats.
  • Reload PlaceholderAPI expansions after plugin updates.
  • Keep placeholder identifiers lowercase exactly as shown unless the product uses a legacy mixed-case identifier.
PlaceholderAPI examples documented
PlaceholderExample outputDescription
%nexacombat_tagged%trueReturns whether the player is combat-tagged.
%nexacombat_time%21Returns remaining combat time.
%nexacombat_opponent%RitoMasssReturns the current combat opponent name.
%nexacombat_kills%14Returns tracked PvP kills.
%nexacombat_bounty_total%,500Returns the player's active bounty total.
%nexacombat_reputation_tier%CleanReturns the player's reputation tier.

Storage#

Storage docs explain YAML, SQLite, MySQL, MariaDB and backup expectations when supported.

Always back up before changing storage type or updating a production server.

Storage recommendation#

Use YAML for small tests, SQLite for simple single-server storage, and MySQL/MariaDB for production networks or busy PvP servers.

Backup checklist#

  • Stop the server before copying live flat files.
  • Export SQL databases before updates.
  • Keep plugin version and server version in backup notes.
  • Test migration on a copy first.

Integrations#

Each integration explains purpose, required/optional status, setup steps and troubleshooting.

Soft hooks load after the dependency is available through Bukkit's plugin manager.
WorldGuard Optional hook

Purpose: Connects gameplay behavior to claims, regions or group ownership rules.

Troubleshooting: If region or claim rules do not apply, check region priority, claim ownership, world names and whether the hook is enabled.

  1. Install the claim or region plugin before this product starts.
  2. Create the region, claim, town or faction area you want the plugin to read.
  3. Enable the matching hook in the integration/config file when a toggle exists.
  4. Test the protected workflow inside and outside the region with a normal player.
Vault Optional hook

Purpose: Provides economy withdrawals, deposits, prices, banks or metadata through Vault.

Troubleshooting: If balances, rewards or banks do not work, confirm Vault has an active economy provider and that no economy plugin loads after this product.

  1. Install Vault and one compatible economy or permission provider.
  2. Restart the server and confirm Vault reports a provider in console.
  3. Enable prices, banks, rewards or currency features that depend on Vault.
  4. Test one deposit and one withdrawal with a non-op account.
LuckPerms Optional hook

Purpose: Provides permission, group and metadata checks for admin access, limits, bypass nodes and formatted player data.

Troubleshooting: If permissions or metadata look wrong, run a verbose LuckPerms check and verify inherited groups, contexts and bypass nodes.

  1. Install LuckPerms before this product starts.
  2. Create the permission groups and inheritance used by your server.
  3. Assign the permission nodes listed in the Permissions section.
  4. Test with a non-op account so inherited admin and bypass nodes do not hide permission issues.
PlaceholderAPI Optional hook

Purpose: Registers or consumes PlaceholderAPI values for scoreboards, formats and external displays.

Troubleshooting: If values stay blank, reload expansions and verify the identifier exactly matches the placeholder shown in this docs page.

  1. Install PlaceholderAPI or the listed placeholder provider.
  2. Install required expansions when the provider uses external expansions.
  3. Use the exact placeholder identifiers documented in this page.
  4. Reload the display plugin after changing scoreboard, tablist, menu or chat format files.
Citizens Optional hook

Purpose: Provides NPC entities used by bot or combat punishment workflows.

Troubleshooting: If NPCs or bots fail, check Citizens startup errors, skin fetch warnings, disabled worlds and pathfinder restrictions.

  1. Install Citizens before starting the server.
  2. Confirm Citizens loads without NPC registry errors.
  3. Enable the feature that uses NPCs, bots, corpses or combat entities.
  4. Spawn or trigger one test entity and check console for skin, pathfinder or trait errors.
Sentinel Optional hook

Purpose: Adds combat AI behavior on top of Citizens NPC entities when NPC combat behavior is enabled.

Troubleshooting: If NPCs or bots fail, check Citizens startup errors, skin fetch warnings, disabled worlds and pathfinder restrictions.

  1. Install Citizens before starting the server.
  2. Confirm Citizens loads without NPC registry errors.
  3. Enable the feature that uses NPCs, bots, corpses or combat entities.
  4. Spawn or trigger one test entity and check console for skin, pathfinder or trait errors.
ProtocolLib Optional hook

Purpose: Provides packet-level compatibility for visual, combat or display features that need lower-level server events.

Troubleshooting: If packet features fail, update ProtocolLib for your exact server build and check for packet listener errors on startup.

  1. Install the ProtocolLib build that matches your server version.
  2. Restart and confirm ProtocolLib has no packet listener errors.
  3. Enable the visual/combat feature that depends on packet events.
  4. Test with one normal player and watch console for packet compatibility warnings.
Lands Optional hook

Purpose: Connects gameplay behavior to claims, regions or group ownership rules.

Troubleshooting: If region or claim rules do not apply, check region priority, claim ownership, world names and whether the hook is enabled.

  1. Install the claim or region plugin before this product starts.
  2. Create the region, claim, town or faction area you want the plugin to read.
  3. Enable the matching hook in the integration/config file when a toggle exists.
  4. Test the protected workflow inside and outside the region with a normal player.
Towny Optional hook

Purpose: Connects gameplay behavior to claims, regions or group ownership rules.

Troubleshooting: If region or claim rules do not apply, check region priority, claim ownership, world names and whether the hook is enabled.

  1. Install the claim or region plugin before this product starts.
  2. Create the region, claim, town or faction area you want the plugin to read.
  3. Enable the matching hook in the integration/config file when a toggle exists.
  4. Test the protected workflow inside and outside the region with a normal player.
Factions Optional hook

Purpose: Connects gameplay behavior to claims, regions or group ownership rules.

Troubleshooting: If region or claim rules do not apply, check region priority, claim ownership, world names and whether the hook is enabled.

  1. Install the claim or region plugin before this product starts.
  2. Create the region, claim, town or faction area you want the plugin to read.
  3. Enable the matching hook in the integration/config file when a toggle exists.
  4. Test the protected workflow inside and outside the region with a normal player.
EventPractice Optional hook

Purpose: Connects this product to the practice and bot training ecosystem.

Troubleshooting: If queues or duels do not bridge, confirm the arena/kit exists and both plugins agree on the same mode/profile names.

  1. Install EventPractice and confirm arenas, kits and queues load correctly.
  2. Enable the practice/bot duel bridge in the relevant config file.
  3. Use a test queue, duel or arena flow to confirm both plugins exchange state.
  4. Check that match cleanup works after the integration flow ends.
TrainingBot Optional hook

Purpose: Connects this product to the practice and bot training ecosystem.

Troubleshooting: If bots do not fight correctly, test the profile directly in TrainingBot before testing the external bridge.

  1. Install TrainingBot and its runtime requirements when bot fights are used.
  2. Create at least one saved bot profile and kit.
  3. Enable the hook from the practice or combat plugin config.
  4. Start one bot duel or bot spawn test and verify movement, attacks and cleanup.
NexaTeams Optional hook

Purpose: Connects this product to another Nexa plugin so team, chat, combat, shop or vault state can be reused.

Troubleshooting: If the Nexa bridge does not react, confirm both plugin versions are compatible and that the shared module/hook is enabled on the same server.

  1. Install both Nexa plugins on the same server or network target.
  2. Confirm both products load successfully before testing the bridge.
  3. Enable the related hook or module in config when available.
  4. Test the shared workflow, such as team checks, chat metadata, combat restrictions, shop transactions or vault access.

Combat Tag & Session Setup#

The runtime session is the foundation for every other module: PvP/PvE tagging, durations, opponent/cause tracking, multi-attacker state and cleanup.

Keep force-tag permissions staff-only; use the reason/cause field in support tickets.

Setup surface#

Configuration: combat.tagging · combat.durations · combat.disabled-worlds · combat.permission-durations

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Set default PvP/PvE durations and disabled worlds.
  2. Test melee, projectile, mob and multi-attacker sessions.
  3. Verify timer expiry, death, quit, reload and shutdown cleanup.
  4. Add permission duration overrides only after the default state is stable.
Commands & operator flow daily use
/forcetag <player> [opponent] [duration] [cause] · /forceuntag <player> · /combat status

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. A tag starts only for valid damage and records the correct cause.
  2. A forced recovery clears UI, restrictions, storage state and opponent references.
  3. A reconnect cannot duplicate or resurrect an expired session.

Damage Attribution Setup#

Attribution connects melee, projectiles, pets, TNT, crystals, anchors, beds, fire and lava to the player who should receive combat, recap, bounty and reward credit.

Run attribution QA before enabling economy or bounty rewards; wrong attribution is a data-integrity issue.

Setup surface#

Configuration: damage-attribution.cache-expire · max-tracked-entries · explosion-location-radius · ignored-projectiles

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Test direct melee and projectile shooter attribution.
  2. Test trident, potion, fishing hook and pet owner fallback.
  3. Test TNT, crystal, respawn anchor, bed, fire and lava ownership.
  4. Tune cache expiry/max entries after measuring a busy fight server.
Commands & operator flow daily use
/combat recap <player|id> timeline · /combat evidence <player|id> export

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Cancelled/zero damage does not create a false tag.
  2. Ignored projectiles never create reward credit.
  3. Recap source labels match the actual damage source after delayed explosions.

Combat UI & Indicators Setup#

Actionbar, bossbar, scoreboard, titles, sounds, progress bars, themes, opponent/cause display, health and damage indicators explain combat state to players.

Use PlaceholderAPI values for TAB, holograms and external scoreboards instead of duplicating combat timers.

Setup surface#

Configuration: ui.actionbar · ui.bossbar · ui.scoreboard · ui.themes · ui.damage-indicator · ui.protection

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable actionbar timer and confirm remaining time/opponent/cause.
  2. Add bossbar progress and select PvP/PvE/bounty themes.
  3. Enable scoreboard only if it does not conflict with another provider.
  4. Configure title/subtitle/sound and then test damage indicators in controlled fights.
Commands & operator flow daily use
/combatui · /combatui on · /combatui off

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Normal, protected, bypass and bounty players see the correct state.
  2. Other scoreboard/bossbar plugins do not overwrite NexaCombat output.
  3. UI visibility persists correctly through reload and reconnect.

CombatLog Punishment Setup#

Quit detection, rejoin persistence, warning/escalation profiles, admin logs and inventory actions form the anti-combatlog system.

Do not enable KILL or CLEAR on a live server until DROP/corpse recovery is proven.

Setup surface#

Configuration: punishments.inventory-action · quit-commands · rejoin-commands · smart-combatlog · admin-log

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Start with warning/log mode and a disposable inventory.
  2. Test quit while tagged, rejoin inside the window and rejoin after expiry.
  3. Choose NONE, CLEAR, DROP, KILL, NPC, CORPSE, GRAVESTONE or BLOCK only after recovery QA.
  4. Test Citizens/Sentinel optional paths and restart persistence.
Commands & operator flow daily use
/combat debug · /combat evidence list · /combat recap

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Punishment happens once and is linked to the combatlog record.
  2. Full inventory, armor and offhand are recoverable where configured.
  3. A corpse/ghost cleanup does not delete items during restart or timeout.

Loot Protection, Corpses & Saved Drops#

Death drops, combatlog drops, killer/victim/assistant access, smart loot, void restoration and saved-drop matching protect valuable items.

Use disposable items when testing clear/drop/corpse transitions; never validate recovery with production inventories.

Setup surface#

Configuration: loot-protection · saved-drops · punishments.corpse-gui · punishments.block-chest

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Choose access mode: killer, victim, both, assistants or smart threshold.
  2. Test pickup denial with killer, victim, assistant, outsider and bypass accounts.
  3. Define saved-drop rules by material, display name, enchantment, lore or PDC.
  4. Test void death, full inventory, disabled worlds, timed cleanup and restart.
Commands & operator flow daily use
/combat debug · /combat evidence <player|id> gui

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Each item is accessible to exactly the configured roles.
  2. Saved items restore once and leftovers follow the configured policy.
  3. Corpse GUI/chest access and protection messages match the permission matrix.

Restrictions & Dynamic Item Rules#

Command, chat, movement, item, inventory, block, entity, portal, sleep, book, teleport and protected-player restrictions share a config-backed rule model.

Use rule profiles for different worlds or modes; avoid a global blacklist when a scoped rule is enough.

Setup surface#

Configuration: restrictions · item-rules · rule-profiles · menus/restrictions.yml

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable one restriction in one test world.
  2. Configure disabled worlds, mode/profile, bypass permission, message and cooldown.
  3. Add material/enchantment/command lists through the GUI or YAML.
  4. Test interact, consume, projectile, elytra, totem, pickup and block actions.
Commands & operator flow daily use
/combat profile · /combat reload · /combat debug

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. The rule blocks only the intended scope and reports a clear message.
  2. Bypass works for staff without disabling unrelated protection.
  3. A malformed material/enchantment/command entry produces a safe validation warning.

Safezone, Region Rules & Border Setup#

WorldGuard hooks, PvP-deny/invincibility zones, tagged-player entry denial, pushback borders and region-specific combat rules control combat geography.

Document the owner and priority of every region used in combat rules; overlapping regions are a common support issue.

Setup surface#

Configuration: safezone · region-rules · hooks.worldguard · border material/height/radius

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Install/validate WorldGuard before enabling region rules.
  2. Test combat start inside/outside safezones and entry while already tagged.
  3. Configure pushback, warning throttle, particles, border material and optional damage.
  4. Create region duration/tag overrides and verify region priority.
Commands & operator flow daily use
/combat region [player] · /combat worlds

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Region resolution matches WorldGuard priority.
  2. Teleport, portal, pearl and world-change restrictions follow the intended escape policy.
  3. Bypass accounts can test safely without granting normal players a bypass.

Old PvP, Knockback & Combat Mechanics#

Old attack timing, shields/offhand, regeneration, hunger, armor, weapon damage, projectile behavior, hit delay and custom knockback reproduce older combat styles.

Change one mechanic at a time; old-PvP values interact and a single bulk change is difficult to balance.

Setup surface#

Configuration: old-pvp · combat-items · custom knockback editor

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable old PvP only in selected worlds.
  2. Set attack-speed/cooldown, shield/offhand, regen, hunger, armor and sharpness behavior.
  3. Configure material weapon damage, durability, burn/hit delay and projectile randomness.
  4. Tune sprint/crit/damage knockback, clamps, cooldown and resistance removal.
Commands & operator flow daily use
/combat oldpvp · /combat knockback

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Use one fixed kit and compare normal, sprint, critical, projectile and explosion hits.
  2. Test with competing combat/knockback listeners disabled first.
  3. Restart after GUI edits and confirm the saved profile is active.

PvP Toggle & Newbie Protection#

Player PvP state, first-join/respawn grace, protected-player damage rules, lava/fire abuse prevention and PvP-zone entry denial protect new players.

Give disable-protection and emergency unstuck permissions only to senior staff.

Setup surface#

Configuration: toggle-pvp · newbie-protection · grace/respawn settings

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable toggle confirmation, cooldown and persistence.
  2. Test PvP-disabled attacker and target prevention.
  3. Configure first-join and respawn grace, then test expiry.
  4. Test lava/fire, projectile, command and item-pickup abuse around protected players.
Commands & operator flow daily use
/togglepvp · /pvp · /grace status · /grace give <player> <duration> · /grace remove <player> · /grace disable

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Protection cannot be used to farm or trap other players.
  2. Bounty/forced-combat rules resolve against protection exactly as documented.
  3. Placeholders and UI show the true PvP/protection state.

Bounty System Setup#

Bounty creation, tax, expiry, anonymous display, target glow/prefix, forced combat, compass tracking and weighted claim/assist payouts form the bounty loop.

Run bounty QA after attribution and anti-farm QA; bounty is downstream from both.

Setup surface#

Configuration: bounty.enabled · min/max-amount · tax-percent · expiration · forced-combat · compass

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Create a low-value bounty with a test Vault balance.
  2. Check anonymous/list/info displays and target glow/prefix.
  3. Test expiry, immunity, duplicate target and min/max amount rules.
  4. Claim with direct killer and assistant; verify weighted split and broadcast once.
Commands & operator flow daily use
/bounty create <player> [amount] [anonymous] · /bounty list · /bounty info <player> · /bounty compass <player> · /bounty remove <id>

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Invalid amounts do not change balances.
  2. A bounty target cannot be claimed twice for one kill.
  3. Forced combat/PvP enable does not bypass an explicitly protected staff/test account.

Rewards, Points, Assists & Stats#

Kill/death/combatlog rewards, PvP points, Vault/ShopGUI/ZShop providers, streaks, permission groups, assist rewards and persistent stats share one event pipeline.

Never use reward output as the first validation of damage attribution; inspect the recap/evidence record first.

Setup surface#

Configuration: rewards · assist-rewards · point-economy · stattrak · data-groups

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable message-only or point rewards first.
  2. Add item rewards with inventory-full handling.
  3. Configure Vault/ShopGUI/ZShop only after provider failure is tested.
  4. Add killstreak, permission groups, assist minimum damage and bounty share.
Commands & operator flow daily use
/combat stats · /combat points · /combat assist · /combat resetstats <player>

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. One kill produces each configured reward exactly once.
  2. Assists do not replace or duplicate killer payout.
  3. Debt prevention and unavailable economy providers fail safely.
  4. Kills, deaths, combatlogs, KD, streaks, assists and points survive restart.

Ranking, Ranked Seasons & Reputation#

Top queries, ranking displays, ELO/MMR seasons, tiers, reputation scores and LuckPerms contexts define competitive identity.

Disable a mode instead of deleting its id when you need to preserve ratings.

Setup surface#

Configuration: ranking · ranked-pvp · reputation · data-groups

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Create a test season and configure placement/K-factor/tier thresholds.
  2. Play placement and normal matches; inspect player and top results.
  3. Configure ranking signs, holograms, tablist and refresh interval.
  4. Test reputation changes from fair kills, combatlogs, assists, farm suspicion, bounties and cleanup.
Commands & operator flow daily use
/combat ranking · /combat season start <id> <duration> · /combat season end · /combat season top · /combat reputation <player>

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. A disabled/deleted mode does not silently erase rating history.
  2. Season end freezes or archives records as configured.
  3. Ranking output remains correct after storage reconnect.
  4. Reputation tier and LuckPerms context agree with the stored score.

Head Trophies, SellHead & DeathBack#

Combat head drops, PDC/value validation, sellhead economy payout and persisted death return are independent reward/recovery features.

Treat trophy PDC/value validation as an anti-duplication boundary, not just a display setting.

Setup surface#

Configuration: head-trophies · head-trophies.sellhead · deathback

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Configure player-killer/combat requirements and drop chance.
  2. Kill a test player and inspect trophy name, lore and PDC.
  3. Test valid trophy, ordinary head, renamed head and duplicate item with /sellhead.
  4. Configure death location/spawnpoint/random return and test one-time /deathback.
Commands & operator flow daily use
/sellhead · /deathback · /combat trophies

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Only valid trophy metadata pays Vault currency.
  2. DeathBack expires/clears once and respects disabled worlds.
  3. Inventory-full, world-change and restart paths are recoverable.

Fight Recaps, Timeline & Evidence#

Recaps capture inventories, armor, potion/apple/totem use, damage sources, assistants, duration, location and analytics; evidence converts risky fights into staff reports.

Keep evidence and replay directories in backups and restrict external/webhook actions.

Setup surface#

Configuration: kill-recap · combat-evidence · evidence retention/export-dir

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable recap retention/list size and run a short controlled fight.
  2. Open the recap GUI and inspect timeline, source, assistants, DPS, burst and health left.
  3. Export evidence with combatlog, timeline and source attachments.
  4. Test retention, delete/cleanup, export directory permissions and restart.
Commands & operator flow daily use
/combat recap <player|id> [gui] · /combat recap list [player] [gui] · /combat recap <id> export · /combat evidence <player|id> gui · /combat evidence list [filter] gui

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Recap, evidence and replay ids point to the same fight.
  2. Risk flags are explainable and not based on missing data.
  3. Staff can review without granting normal players evidence/delete permissions.

Anti-Kill-Farm & Fair Fight#

Repeated kills, same-IP/team/claim/faction relations, proximity abuse, one-sided damage and cleanup detection protect rewards, stats and bounties.

Enable anti-farm before economy rewards; otherwise suspicious events may already be stored as valid.

Setup surface#

Configuration: anti-kill-farm · fair-fight · relation hooks

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Set victim kill limits, repeat windows and suspicion thresholds.
  2. Test same IP and same team/claim/faction with disposable accounts.
  3. Test rapid repeat kills, proximity, short fights and one-sided damage.
  4. Verify farmed kills block the intended reward/stat/bounty layer.
Commands & operator flow daily use
/combat antifarm <player> · /combat cleanup <player>

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Fair kills are not blocked by a missing optional relation hook.
  2. Cleanup detects third-party kills and applies the configured warning/resistance/action.
  3. Staff report includes enough evidence to explain the decision.

Visual Replay & Combat Heatmap#

Visual replay records movement, equipment, inventory, projectiles, blocks, explosions, CPS, review markers and terrain snapshots; heatmap aggregates combat activity over time.

Use conservative limits on production; replay is an observability module with real CPU, memory and disk cost.

Setup surface#

Configuration: visual-replay · combat-heatmap · binary/GZIP recording storage

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Set participant/event/duration limits and replay cooldown.
  2. Record a short fight and review movement, equipment, inventory, projectiles and block deltas.
  3. Test client-side or temporary-world playback and stop cleanup.
  4. Enable heatmap bucket/retention/sample rate and verify two region buckets.
Commands & operator flow daily use
/combat recap <player|id> replay · /combat recap replay <id> · /combat recap recordings · /combat heatmap

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Playback never changes the live world.
  2. Replay finalization handles terrain timeout and per-tick block budget.
  3. Binary files are retained/cleaned as configured and heatmap storage does not grow without limit.

Admin GUI & In-Game Editing#

The admin GUI edits settings, languages, restrictions, rewards, bounty, ranking, knockback, old PvP, UI, evidence, saved drops and network sync.

The GUI is a config editor; keep versioned backups so changes can be reviewed and rolled back.

Setup surface#

Configuration: menus/admin.yml · menus/settings.yml · menus/restrictions.yml · menus/rewards.yml · menus/evidence.yml · menus/saved-drops.yml

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Back up config and menu files before the first edit.
  2. Open one editor, change one value and save.
  3. Reload only when the setting supports runtime reload; restart for lifecycle/storage changes.
  4. Test saved value as normal and bypass accounts.
  5. Check invalid material, sound, slot and YAML warnings before the next change.
Commands & operator flow daily use
/combat reload · /combat oldpvp · /combat knockback · /combat debug

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. GUI output and YAML value agree after reconnect.
  2. A broken menu item does not block unrelated admin menus.
  3. Permission-gated editors cannot be opened by normal players.

Storage & Network Combat Locks#

SQLite/YAML migration, MySQL/MariaDB persistence, auto-save and network combat locks keep state consistent across restarts and backend servers.

All backends must share the same schema/config contract; never reuse a server id.

Setup surface#

Configuration: storage · network-sync · network-sync.combat-locks

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Back up files and record plugin/server/Java versions.
  2. Use SQLite for single-server testing; migrate to MySQL/MariaDB only after local writes work.
  3. Run a kill, recap, evidence and reward write, restart and verify records.
  4. For networks, set a unique server id, heartbeat/stale timeout and only required lock events.
Commands & operator flow daily use
/combat reload · /combat debug · /combat status

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Database reconnect does not duplicate or lose a session.
  2. A backend shutdown clears stale locks after the configured window.
  3. Proxy transfer does not create duplicate tags or reward claims.

Addons, Integrations & Developer API#

Soft hooks connect economy, WorldGuard, Citizens, ViaVersion, LuckPerms, relation plugins, shop providers, NexaTeams, EventPractice and other Nexa modules.

Document every integration as required, optional or fallback; do not promise native support without testing the exact provider version.

Setup surface#

Configuration: addons.yml · hooks · network-sync.yml

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Enable only required addon records and install the provider before restart.
  2. Inspect startup hook diagnostics and test provider-present behavior.
  3. Remove/disable the provider and test the documented fallback.
  4. For API consumers, obtain the NexaCombat service, handle unavailable startup/shutdown and unregister listeners.
Commands & operator flow daily use
/combat debug · /combat region [player] · /combat status

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Missing optional plugins never prevent NexaCombat from enabling.
  2. API consumers handle nullable services and plugin disable safely.
  3. Player/world operations run on the correct server scheduler.

Production Verification & Module Rollout#

A staged rollout prevents false attribution, duplicate rewards, unrecoverable punishment and replay/storage problems from reaching live players.

A clean enable message is not production readiness; recovery and duplicate-event tests are the release gate.

Setup surface#

Configuration: config.yml · addons.yml · network-sync.yml · storage/evidence/replay directories

Apply changes in staging first, then reload/restart according to the setting lifecycle.

Setup checklist#

  1. Stage state: tag, attribution, UI and storage.
  2. Stage safety: restrictions, safezones, PvP toggle, newbie and loot protection.
  3. Stage consequences: combatlog, corpses, saved drops, trophies, deathback, bounties and rewards.
  4. Stage intelligence: recaps, evidence, anti-farm, fair-fight, ranking, reputation, replay and heatmap.
  5. Stage integrations: network locks, addons, API consumers and optional hooks.
Commands & operator flow daily use
/combat status · /combat debug · /combat reload

Give command access through the smallest matching permission and verify the output as a normal player, staff account and bypass account where applicable.

Verification & failure cases QA matrix
  1. Normal, protected, tagged, disconnected and multi-attacker accounts all behave correctly.
  2. One kill creates one recap/evidence/reward result.
  3. Replay cannot modify the live world and network locks recover after backend shutdown.
  4. Rollback points exist for config, database, evidence and replay directories.

Webhooks & Combat Analytics Setup#

Deliver combatlog, bounty, anti-farm, cleanup and killstreak events through a retrying, rate-limited webhook queue while keeping heatmap and recap analytics available to staff.

Use a private test endpoint first. Never paste webhook secrets into chat, screenshots or public configuration examples.

Webhook rollout#

  1. Enable webhooks and set URL, timeout, rate limit and maximum queue.
  2. Enable one event template at a time: combatlog, bounty, anti-farm, cleanup or killstreak.
  3. Trigger a disposable test event and confirm the payload arrives once.
  4. Stop the endpoint or force a failure and verify retry/backoff/queue limits.

Analytics rollout#

  1. Configure combat-heatmap bucket size, retention, sample rate and save interval.
  2. Configure recap scoring weights and GUI visibility.
  3. Run fights in two regions and compare heatmap buckets.
  4. Keep analytics retention aligned with storage and privacy policy.
Safe configuration config.yml
webhooks:
enabled: false
timeout-seconds: 8
rate-limit: 2s
max-queue: 100
retry:
enabled: true
combat-heatmap:
enabled: true
retention: 30d
Failure and privacy checks production
  • Queue overflow must drop or reject according to the configured policy, never freeze the combat thread.
  • Retries must not duplicate a payout or punishment event.
  • Remove player-sensitive fields that the receiving endpoint does not need.
  • Review status counters after endpoint recovery and plugin restart.

Operational Reference#

Configure NexaCombat in layers: tag state, restrictions, punishment, rewards and evidence.

Start with combat tagging and UI only. Add combatlog punishment, loot handling and economy rewards after a controlled PvP test.

Combat session workflow#

  1. Enable the desired worlds/regions and configure the tag duration.
  2. Fight with two test accounts and confirm the UI shows opponent, remaining time and bypass state.
  3. Attempt blocked actions such as teleport, command, pearl or inventory use to verify restrictions.
  4. Log out one account and confirm the selected combatlog punishment, drops/corpse/grave behavior and audit entry.
  5. Use /combat status, /combat recap and /combat evidence after the match.

Admin control workflow#

  1. Use /forcetag <player> or /forceuntag <player> only for recovery.
  2. Open /combat ui, worlds, region and knockback to review active rules.
  3. Use /combat antifarm and assist to inspect suspicious reward patterns.
  4. Keep bypass nodes for staff/test accounts and document who can bypass loot, safezone and tag rules.

Competitive modules#

Bounties, ranking/ELO, reputation, trophies, killstreaks and fight history should share one verified damage attribution policy. Test assists, team relations, duel/practice hooks and kill-farm prevention together so one event is not rewarded twice.

/bounty /combat profile /combat reputation /combat heatmap /combat cleanup

Evidence and support#

For a report, capture the combat recap id, evidence export, world/region, player relation, active profile and first console error. Do not change punishment settings while a disputed combat session is still active.

Common Setups#

Ready-to-follow scenarios reduce support tickets and make the product easier to configure.

Tune durations, limits, prices and permissions with the YAML files above.

Lifesteal Setup#

Use stricter cooldowns, staff visibility, abuse protection and clear player feedback for high-conflict gameplay.

Survival SMP Setup#

Use conservative defaults, SQLite or simple file storage, readable messages and relaxed limits for community servers.

Practice PvP Setup#

Use stricter cooldowns, staff visibility, abuse protection and clear player feedback for high-conflict gameplay.

Donut-like Setup#

Use stricter cooldowns, staff visibility, abuse protection and clear player feedback for high-conflict gameplay.

BoxPvP Setup#

Use stricter cooldowns, staff visibility, abuse protection and clear player feedback for high-conflict gameplay.

Troubleshooting#

Start with console logs, config diffs, plugin version and reproduction steps.

The first error in console is usually more useful than repeated follow-up errors.
Players are not getting combat tagged issue

Confirm the damage event is not cancelled by spawn protection, WorldGuard, claims or another PvP plugin. Test outside safezones with two non-op players and check combat module toggles.

Combatlog punishment does not trigger issue

Check the punishment mode, quit listener, bypass permissions and whether the player is still tagged at disconnect time. Test with a real disconnect, not only /kick.

WorldGuard safezones do not work issue

Verify the exact WorldGuard region name, region priority and hook toggle. Also confirm your safezone action is enabled for entry, exit or damage as expected.

Rewards are not paid issue

Confirm Vault/economy provider is loaded, reward rules match the kill context and anti-farm did not block the kill. Check console for transaction failures.

Anti-farm blocks normal kills issue

Review same-player, same-IP, cooldown and alt-detection limits. Increase thresholds if normal repeated fights are being blocked.

Corpse or NPC does not spawn issue

Confirm Citizens is installed when NPC/corpse features are enabled, then check disabled worlds, cleanup timers and skin/pathfinder console warnings.

Old PvP settings do not apply issue

Check server version compatibility, module toggles and whether another combat plugin modifies attack cooldown, knockback or shield behavior later in the event chain.

FAQ#

Short answers for common buyer and staff questions.

Does NexaCombat support Folia?#

No Folia claim is made for this product page. Run it on the server target listed in Overview.

Does it support old Minecraft versions?#

This page targets Paper 1.21 with Java 21. Legacy 1.8 support is not part of this docs page.

Does it require MySQL?#

Use YAML for small tests, SQLite for simple single-server storage, and MySQL/MariaDB for production networks or busy PvP servers.

Can I disable modules?#

This product has a small runtime surface; use the listed YAML files and commands rather than a module system.

Can I edit all messages?#

Yes. Edit messages.yml and reload or restart according to the setting changed.

Does it support PlaceholderAPI?#

Yes. The documented identifier and examples are listed in the Placeholders section.

Changelog#

Product release notes grouped by version. Major public changes are written for buyers and server owners, not as raw commit logs.

v1.0.0#

Latest documented update: 2026-05-05.

Added
  • implement core NexaCombat framework including modules, hooks, UI managers, and comprehensive test suite
  • Added minecraft-plugins.md.
  • Added documentation/Features content.
  • Added implementation.md.
  • Added build, dependency or obfuscation setup.
Changed
  • initialize NexaCombat project with core combat modules, UI management, event system, and integration hooks
  • Updated build, dependency or obfuscation setup.
  • Updated NexaCombat.java.

Support#

Send enough information to reproduce the issue.

Join Discorddiscord.gg/fANhQcyA7XInclude logs, config snippets and exact steps. Screenshots alone are not enough for config or database issues.

Before asking for support#

  • Test on the latest available plugin version.
  • Check server version and Java version.
  • Temporarily remove unrelated plugins when debugging conflicts.
  • Attach changed YAML files when config is involved.
Plugin: NexaCombat
Plugin version:
Server version:
Java version:
Server software:
Database type:
Installed hooks:
Error log:
Steps to reproduce:
Expected behavior:
Screenshots/video: