SMP Combat
Minecraft Combat Tag, Combat Log, PvP Restriction, and Old Combat Mechanics Plugin for SMP, Survival, Paper, and Folia Servers
Overview
SMP Combat is a modern Minecraft combat plugin built for SMP servers, survival PvP servers, and DonutSMP-style servers that need real combat-state enforcement instead of a basic timer with no depth.
At core, SMP Combat does two important jobs in one resource.
First, it acts as a full combat tag plugin for Minecraft. When players fight, they are tagged, shown combat UI, restricted from using protected escape routes, and punished if they log out depending on your rules.
Second, it includes an optional legacy combat engine with multiple profiles. That means your server can keep modern combat, switch to a lighter old-combat feel, or move much closer to classic 1.8-style PvP behavior with restored mechanics like old knockback, disabled attack cooldown, sword blocking, old crit logic, fishing rod behavior, offhand disabling, and more.
If you are searching for a Minecraft combat plugin, combat tag plugin for Paper, combat log plugin for Folia, DonutSMP combat plugin, or an old combat mechanics plugin with real configurability, SMP Combat is designed for that exact use case.
Why SMP Combat
Why SMP Combat
Most combat plugins only solve one small part of the problem. They block a few commands, show a timer, and call it done. SMP Combat is built as a complete combat control system.
Combat can start from player hits and multiple player-caused combat sources. While tagged, the plugin can block commands, block flight, block inventory access, block elytra use, block ender pearls, stop region entry, stop block placement, and apply configurable punishments if the player leaves. UI can be shown through messages, action bar, boss bar, and scoreboard. PlaceholderAPI support exposes combat state to the rest of your server.
At same time, the legacy module gives you profile-based restoration of older PvP behavior. This is not a fake “old combat toggle.” It is a real module set with named profiles, allowing different mechanic combinations for different servers and styles.
That makes SMP Combat strong for survival PvP, economy SMP, hardcore survival, competitive PvP worlds, Donut-style gameplay, Paper networks, and Folia-ready server stacks.
Combat Tag System
SMP Combat includes a real combat timer system instead of a cosmetic warning. Players can be tagged when hit by another player or by configured player-caused damage sources. The combat session tracks timer state, last aggressor context, placeholder data, and punishment visibility.
The plugin currently supports configurable tagging from direct player combat, player projectiles, TNT, end crystals, respawn anchors, and fishing hooks. You can also ignore specific projectile types and ignored worlds, choose whether players can tag themselves through edge cases, untag on death, and release the attacker on victim death.
This gives you a proper Minecraft combat tag plugin for survival servers where players should not be able to instantly escape consequences after starting a fight.
Combat Restrictions While Tagged
SMP Combat is also a combat restriction plugin. The timer is not isolated from gameplay. It can actively control what players are allowed to do while in combat.
The most important restriction set for modern SMP servers is the elytra system. SMP Combat can block equipping elytra, block gliding, block firework boosting, stop gliding on tag, disable flight, and even unequip an already-worn elytra when combat begins. If the inventory is full, the elytra can be dropped on the player location instead. That is extremely useful for servers that want to stop instant aerial escape during PvP.
The plugin also supports command restrictions, inventory restrictions, block placement restrictions, pearl restrictions, and protected region entry control. That means SMP Combat is not only a combat tag plugin, but a full combat-state enforcement plugin for Minecraft.
Combat Log Punishment System
Combat logging should have consequences, and different servers need different punishment styles. SMP Combat includes a configurable combat log punishment system with multiple punishment modes and related controls.
You can punish players on quit, optionally on kick or on session expiry, choose how item drops behave, control experience handling, broadcast the punishment, whitelist kick reasons that should not punish, track punishment counters, define special punish-command tiers, and optionally enable head drops.
Available punishment behavior includes full inventory drop, percentage drop, health-based drop logic, direct kill-style punishment, and NPC-oriented handling modes. This gives your server flexibility whether you want lighter survival rules or harsher anti-combat-log enforcement.
For serious Minecraft combat log plugins, punishment depth matters. SMP Combat is designed to give that depth from configuration instead of hardcoding one philosophy.
Combat UI and Real-Time Feedback
Players should always know when they are in combat. SMP Combat includes a full combat UI layer with enter and leave messages, action bar support, boss bar support, scoreboard support, and PlaceholderAPI output.
This makes the plugin useful on minimalist servers and also on more styled DonutSMP-inspired servers that want combat to feel visible, polished, and immediate.
Action bar updates can run in real time, scoreboards can display timer, enemy, and combat profile information, and boss bar support can be enabled for servers that prefer stronger visual feedback.
Old Combat Mechanics and Legacy Combat Profiles
SMP Combat also includes an optional legacy combat engine with named profiles. By default, the plugin ships with modern, legacy-lite, and legacy-full profiles.
This gives you a clean progression:
modern keeps standard modern combat behavior.
legacy-lite restores selected mechanics like disabled attack cooldown, old knockback feel, fishing rod behavior, sweep suppression, offhand disabling, and disabled ender pearl cooldown.
legacy-full goes much further and enables broad restoration of older PvP mechanics such as old crits, old sharpness, old tool damage values, old knockback, projectile knockback, potion physics, bow boost, sword blocking, shield reduction tuning, old golden apples, old regeneration, old armour behavior, old brewing stand logic, old burn delay, disable crafting, chorus fruit behavior, packet-side sound remap, and particle suppression.
This profile-based model is what makes SMP Combat useful not only as a combat timer plugin, but also as an old combat mechanics plugin for Minecraft.
Easy Pearl & Wind Charges
Includes slowdown on wind charges while falling and also easy "magnet" style pearls to ease up wind charge pearls gameplay mechanics.
Hooks and Compatibility
SMP Combat is designed to fit into real server stacks.
It includes optional hooks for PlaceholderAPI, PacketEvents, Citizens, WorldGuard, Lands, Residence, Towny, SuperVanish, PremiumVanish, and VanishNoPacket. It also includes metadata fallback providers for vanish and NPC awareness.
This matters because real combat systems interact with protected regions, vanish plugins, NPC systems, combat placeholders, and optional packet-side behavior. SMP Combat is built to work in that environment.
Language Support
The plugin includes multilingual message support with configurable default-language handling. Current bundled language files include English, Spanish, German, Russian, and Portuguese, including locale variants.
That makes SMP Combat suitable for international SMP communities and also for owners who want a cleaner localization surface than most combat plugins provide.
Commands
Code:
/smpcombat
/smpcombat reload
/smpcombat status [player]
/smpcombat counter <player>
/smpcombat tag <player> [seconds]
/smpcombat untag <player>
/smpcombat untagall
/smpcombat legacy
/smpcombat profile get [player]
/smpcombat profile set <profile> [player]
/smpcombat profile clear [player]
/smpcombat debug <player>
Permissions
Code:
smpcombat.admin
smpcombat.reload
smpcombat.status
smpcombat.counter
smpcombat.tag
smpcombat.untag
smpcombat.untagall
smpcombat.debug
smpcombat.profile
smpcombat.profile.clear
smpcombat.bypass.all
smpcombat.bypass.tag
smpcombat.bypass.legacy
smpcombat.bypass
smpcombat.bypass.commands
smpcombat.bypass.elytra
smpcombat.bypass.punish
smpcombat.bypass.inventory
smpcombat.bypass.block-placement
smpcombat.bypass.flight
smpcombat.bypass.pearls
smpcombat.bypass.region-entry
smpcombat.border.debug
smpcombat.audit.view
PlaceholderAPI Placeholders
SMP Combat supports combat placeholders for real-time UI and integrations.
Code:
%smpcombat_in_combat%
%smpcombat_in_combat_formatted%
%smpcombat_remaining_seconds%
%smpcombat_remaining_millis%
%smpcombat_opponent%
%smpcombat_world%
%smpcombat_tag_source%
%smpcombat_timer_total_seconds%
%smpcombat_bar%
%smpcombat_opponent_health%
%smpcombat_profile%
%smpcombat_modeset%
%smpcombat_pearl_cooldown_seconds%
%smpcombat_pearl_cooldown_millis%
Installation
Drop the jar into your plugins folder, start the server once, configure the files below, then restart or reload. If you want PlaceholderAPI support, PacketEvents integration, NPC awareness, region protection hooks, or vanish-aware behavior, install the matching optional dependencies and enable them in configuration.
Configuration Files
Below are the current default configuration files shipped with SMP Combat.
Code:
name: SMPCombat
main: com.arkflame.smpcombat.SmpCombatPlugin
version: 0.1.0-SNAPSHOT
api-version: 1.13
folia-supported: true
softdepend:
- PlaceholderAPI
- PacketEvents
- Citizens
- WorldGuard
- ProtocolLib
- Lands
- Residence
- Towny
- SuperVanish
- PremiumVanish
- VanishNoPacket
commands:
smpcombat:
description: SMP Combat admin command
usage: /smpcombat <reload|status|tag|untag|untagall|debug|legacy|profile|counter>
permission: smpcombat.admin
permissions:
smpcombat.admin:
default: op
description: Master admin permission for SMP Combat
smpcombat.reload:
default: op
description: Allows reloading the plugin configuration
smpcombat.status:
default: op
description: Allows viewing combat status of players
smpcombat.counter:
default: op
description: Allows viewing combat logout counter
smpcombat.tag:
default: op
description: Allows manually tagging players
smpcombat.untag:
default: op
description: Allows manually untagging players
smpcombat.untagall:
default: op
description: Allows clearing all combat tags
smpcombat.debug:
default: op
description: Allows viewing debug information for players
smpcombat.profile:
default: op
description: Allows profile management
smpcombat.profile.clear:
default: op
description: Allows clearing profile override
smpcombat.bypass.all:
default: op
description: Bypass all combat restrictions
smpcombat.bypass.tag:
default: op
description: Bypass combat tagging
smpcombat.bypass.legacy:
default: op
description: Bypass legacy combat restrictions
smpcombat.bypass:
default: op
description: Base bypass permission
smpcombat.bypass.commands:
default: op
description: Bypass command restrictions while in combat
smpcombat.bypass.elytra:
default: op
description: Bypass elytra restrictions while in combat
smpcombat.bypass.punish:
default: op
description: Bypass punishment on combat logout
smpcombat.bypass.inventory:
default: op
description: Bypass inventory restrictions while in combat
smpcombat.bypass.block-placement:
default: op
description: Bypass block placement restrictions while in combat
smpcombat.bypass.flight:
default: op
description: Bypass flight restrictions while in combat
smpcombat.bypass.pearls:
default: op
description: Bypass pearl restrictions while in combat
smpcombat.bypass.region-entry:
default: op
description: Bypass protected region entry restrictions
smpcombat.border.debug:
default: op
description: Allows border debug information
smpcombat.audit.view:
default: op
description: Allows viewing audit logs
Code:
commands:
mode: BLACKLIST
allowed:
- smpcombat status
blocked:
- gamemode
- spawn
- tp
- tpa
- tpaccept
- home
- sethome
- warp
- back
- rtp
- fly
after-combat-delay-seconds: 0
bypass-permission: smpcombat.bypass.commands
Code:
default-language: en
combat:
tag-seconds: 20
projectile-tags: true
ignored-projectiles:
- EGG
- ENDER_PEARL
- SNOWBALL
ignored-worlds: []
tnt-tags: true
crystal-tags: true
respawn-anchor-tags: true
fishing-hook-tags: true
self-combat: false
untag-on-death: true
release-attacker-on-victim-death: true
permission-timers-enabled: false
permission-timer-permission-prefix: smpcombat.timer.
damage-cause-logging:
enabled: false
mode: WHITELIST
causes:
- LAVA
- CONTACT
- FIRE
- FIRE_TICK
bypass:
all: smpcombat.bypass.all
tag: smpcombat.bypass.tag
elytra:
enabled: true
block-equip: true
block-glide: true
block-firework-boost: true
force-stop-glide-on-tag: true
disable-on-damage: true
disable-flying: true
unequip-equipped-on-tag: true
drop-on-tag-when-inventory-full: true
bypass-permission: smpcombat.bypass.elytra
Code:
restrictions:
inventory:
mode: ALLOW_ALL
types:
- CHEST
- ENDER_CHEST
- BARREL
- SHULKER_BOX
block-placement:
enabled: false
mode: ABOVE
y-coordinate: 40
restricted-materials: []
pearls:
throw-disabled-during-combat: true
cooldown-enabled: false
throw-delay-seconds: 3
throw-damage-enabled: true
block-region-entry-during-combat: true
block-blacklisted-material-teleport-during-combat: true
blacklisted-teleport-materials:
- BARRIER
protected-region-entry:
enabled: true
restricted-region-radius: 10
blocked-regions:
- your_region
border:
mode: MESSAGE_ONLY
interval-ticks: 10
particle-enabled: false
block-enabled: false
Code:
punish:
on-quit: true
on-kick: false
on-expire: false
mode: DROP_ALL
drop-items: true
drop-experience: false
affect-experience: false
drop-percent: 100
players-health-percent-clamp: 20
broadcast: true
broadcast-key: combat.logout-broadcast
strict-external-handling: false
preserve-session-on-cancel: false
bypass-permission: smpcombat.bypass.punish
whitelisted-kick-reasons:
- kicked for inactivity
- timed out
- server is restarting
- proxy restart
punish-command-list: []
punishment-counter-enabled: true
special-punish-commands-enabled: false
special-punish-commands:
example01:
min: 2
max: 4
reset: false
command-list:
- tempban {player} 15s Logged out during combat
head-drop:
enabled: false
chance: 0.0
only-in-combat: true
display-name: "{PLAYER}'s Head"
lore:
- "Slain by {KILLER}"
- "Collected in battle"
Code:
effects:
death:
lightning:
after-every-death: false
in-combat: true
flare:
after-every-death: false
in-combat: false
power: 2
primary-color: "#a80022"
fade-color: "#0a0a0a"
particles-enabled: true
fight-effects:
enabled: false
list: []
Code:
ui:
enter-message-enabled: true
leave-message-enabled: true
actionbar-enabled: true
actionbar-interval-ticks: 5
actionbar-key: combat.actionbar
bossbar-enabled: false
bossbar-key: combat.bossbar
bossbar-color: RED
bossbar-style: SOLID
scoreboard-enabled: false
scoreboard-save-previous: true
scoreboard-title-key: combat.scoreboard.title
scoreboard-lines:
- "<red>Combat</red>"
- "<gray>Time:</gray> <white>%smpcombat_remaining_seconds%</white>"
- "<gray>Enemy:</gray> <white>%smpcombat_opponent%</white>"
- "<gray>Profile:</gray> <white>%smpcombat_profile%</white>"
audit:
enabled: false
tag-lifecycle: true
punishments: true
restrictions: false
Code:
hooks:
placeholderapi: true
packetevents: auto
strict-missing-dependency: false
region-providers:
- worldguard
- lands
- residence
- towny
- spawn-radius
vanish-providers:
- supervanish
- premiumvanish
- vanishnopacket
- metadata
npc-providers:
- citizens
- metadata
worldguard:
enabled: auto
blacklisted-enderpearl-regions: []
blacklisted-regions:
- your_region
prevent-entering-pvp-disabled-regions-during-combat: true
Code:
profiles:
default-profile: modern
world-profiles: ""
permission-profiles: ""
player-profiles: ""
definitions:
modern:
disable-attack-cooldown: false
attack-frequency: false
attack-range: false
old-sharpness: false
old-crits: false
old-tool-damage: false
old-knockback: false
projectile-knockback: false
fishing-rod-knockback: false
fishing-rod-velocity: false
potion-physics: false
bow-boost: false
sword-blocking: false
shield-damage-reduction: false
sweep-disabled: false
sweep-particles-disabled: false
attack-sounds-disabled: false
offhand-disabled: false
old-golden-apples: false
old-player-regen: false
old-armour-strength: false
old-armour-durability: false
old-brewing-stand: false
old-burn-delay: false
disable-enderpearl-cooldown: false
disable-crafting: false
chorus-fruit: false
packet-sound-remap: false
packet-particle-suppression: false
legacy-lite:
disable-attack-cooldown: true
attack-frequency: true
attack-range: false
old-sharpness: false
old-crits: false
old-tool-damage: false
old-knockback: true
projectile-knockback: true
fishing-rod-knockback: true
fishing-rod-velocity: true
potion-physics: false
bow-boost: false
sword-blocking: false
shield-damage-reduction: true
sweep-disabled: true
sweep-particles-disabled: true
attack-sounds-disabled: true
offhand-disabled: true
old-golden-apples: false
old-player-regen: false
old-armour-strength: false
old-armour-durability: false
old-brewing-stand: false
old-burn-delay: false
disable-enderpearl-cooldown: true
disable-crafting: false
chorus-fruit: false
packet-sound-remap: false
packet-particle-suppression: false
legacy-full:
disable-attack-cooldown: true
attack-frequency: true
attack-range: true
old-sharpness: true
old-crits: true
old-tool-damage: true
old-knockback: true
projectile-knockback: true
fishing-rod-knockback: true
fishing-rod-velocity: true
potion-physics: true
bow-boost: true
sword-blocking: true
shield-damage-reduction: true
sweep-disabled: true
sweep-particles-disabled: true
attack-sounds-disabled: true
offhand-disabled: true
old-golden-apples: true
old-player-regen: true
old-armour-strength: true
old-armour-durability: true
old-brewing-stand: true
old-burn-delay: true
disable-enderpearl-cooldown: true
disable-crafting: true
chorus-fruit: true
packet-sound-remap: true
packet-particle-suppression: true
Code:
legacy-combat:
enabled: false
strict-packetevents: false
attack-cooldown:
generic-attack-speed: 40.0
attack-frequency:
player-delay: 18
mob-delay: 16
attack-range:
min-range: 0.0
max-range: 3.0
min-creative-range: 0.0
max-creative-range: 4.0
hitbox-margin: 0.1
mob-factor: 1.0
old-tool-damage:
old-sharpness: true
damages:
GOLD_AXE: 4
WOOD_AXE: 4
STONE_AXE: 5
IRON_AXE: 6
DIAMOND_AXE: 7
NETHERITE_AXE: 8
GOLD_SWORD: 5
WOOD_SWORD: 5
STONE_SWORD: 6
IRON_SWORD: 7
DIAMOND_SWORD: 8
NETHERITE_SWORD: 9
TRIDENT: 8
MACE: 6
old-critical-hits:
multiplier: 1.5
allow-sprinting: true
old-player-knockback:
horizontal: 0.4
vertical: 0.4
projectile-knockback:
horizontal: 0.3
vertical: 0.3
fishing-rod-velocity:
horizontal: 0.4
vertical: 0.35
bow-boost:
horizontal: 0.5
vertical: 0.42
shield-damage-reduction:
general-amount: 1.0
general-percentage: 50.0
projectile-amount: 1.0
projectile-percentage: 50.0
sword-blocking:
paper-animation: true
restore-delay: 40
use-permission: false
old-player-regen:
interval-millis: 3990
amount: 1.0
exhaustion: 3.0
old-armour-durability:
reduction: 1
old-burn-delay:
fire-tick-delay: 20
old-golden-apples:
allow-notch: true
absorption-hearts: 8
regeneration-seconds: 30
regeneration-amplifier: 1
resistance-seconds: 0
resistance-amplifier: 0
Code:
enhancements:
schema-version: 1
ender-pearl:
enabled: true
velocity-multiplier: 1.0
magnet:
# Allows you to easily collide windcharges with enderpearls.
enabled: true
# Exact magnet radius in blocks. Fractional values are allowed.
# The cache scans ceil(radius), then final matching uses exact squared distance.
radius-blocks: 0.8
teleport-damage: 5.0
require-same-world: true
sound-aliases:
- ENTITY_WIND_CHARGE_WIND_BURST
- ENTITY_BREEZE_WIND_BURST
barrier-impact:
enabled: true
block-in-combat: true
block-out-of-combat: true
materials:
- BARRIER
scan-radius: 1
# Delayed correction ticks used after a blocked pearl hits/teleports.
# Folia can apply pearl movement after the early event cancellation path, so later retries keep the player at the old position.
rollback-delays-ticks:
- 1
- 3
- 6
- 10
wind-charge:
enabled: true
barrier-impact:
enabled: true
materials:
- BARRIER
scan-radius: 1
fall-slowdown:
# When throwing windcharge in mid air always slow you down.
enabled: true
min-fall-distance-blocks: 5.0
max-falling-velocity-y: -0.5
projectile-cache:
tick-period: 1
stale-after-ticks: 40
Code:
"combat.enter": "<red>You are now in combat.</red>"
"combat.leave": "<green>You are out of combat.</green>"
"combat.command-blocked": "<red>You cannot use commands while in combat.</red>"
"combat.elytra-blocked": "<red>You cannot use an elytra while in combat.</red>"
"combat.actionbar": "<red>In combat:</red> <white>%smpcombat_remaining_seconds%</white>"
"combat.bossbar": "<red>In Combat</red> <white>%smpcombat_bar%</white> %smpcombat_remaining_seconds%s"
"combat.scoreboard.title": "<red>Combat Timer</red>"
"combat.logout-broadcast": "<red>%player%</red> <gray>combat logged and dropped their items.</gray>"
"combat.status.in": "<red>In combat</red>"
"combat.status.out": "<green>Not in combat</green>"
"combat.inventory-blocked": "<red>You cannot open that inventory while in combat.</red>"
"combat.block-placement-blocked": "<red>You cannot place blocks while in combat.</red>"
"combat.flight-blocked": "<red>You cannot fly while in combat.</red>"
"combat.pearl-blocked": "<red>You cannot throw ender pearls while in combat.</red>"
"combat.pearl-region-blocked": "<red>You cannot throw ender pearls into that region while in combat.</red>"
"combat.pearl-material-blocked": "<red>You cannot throw ender pearls with that item while in combat.</red>"
"combat.region-blocked": "<red>You cannot enter that region while in combat.</red>"
"combat.pearl-delay-blocked": "<red>You cannot throw ender pearls yet.</red>"
"combat.profile-status": "<gray>Profile: %profile%</gray>"
"command.reloaded": "<green>SMP Combat reloaded.</green>"
"command.status.active": "<yellow>%player%</yellow> <gray>combat: %smpcombat_remaining_seconds% left.</gray>"
"command.status.inactive": "<yellow>%player%</yellow> <gray>is not in combat.</gray>"
"command.legacy": "<gray>Legacy combat module is %state%.</gray>"
"command.no-permission": "<red>You do not have permission to use this command.</red>"
"command.invalid-number": "<red>Invalid number provided.</red>"
"command.player-not-found": "<red>Player not found.</red>"
"command.tagged": "<green>Manually tagged %player%.</green>"
"command.untagged": "<green>Untagged %player%.</green>"
"command.untagall": "<green>Untagged %count% player(s).</green>"
"command.profile.unknown": "<red>Unknown profile: %profile%</red>"
"command.profile.set": "<green>Profile set to %profile%.</green>"
"command.profile.current": "<gray>Current profile: %profile%</gray>"
"command.profile.cleared": "<green>Profile cleared for %player%.</green>"
"command.profile.get": "<gray>Profile for %player%: %profile%</gray>"
"command.counter": "<gray>Combat logouts: %count%</gray>"
"command.debug.header": "<yellow>Debug info for %player%:</yellow>"
"command.debug.line": "<gray> tagged=%tagged% remaining=%remaining_seconds%s last_aggressor=%last_aggressor% cause=%tag_cause% world=%world%</gray>"
"debug.header": "<yellow>Debug info for %player%:</yellow>"
"debug.profile": "<gray> profile=%profile%</gray>"
"debug.opponent": "<gray> opponent=%opponent%</gray>"
"debug.opponent-health": "<gray> opponent_health=%opponent_health%</gray>"
"debug.pearl-cooldown": "<gray> pearl_cooldown=%pearl_cooldown%</gray>"
"debug.region-entry": "<gray> region_entry_blocked=%region_entry_blocked%</gray>"
"debug.tag-source": "<gray> tag_source=%tag_source%</gray>"
"debug.punish-count": "<gray> punish_count=%count%</gray>"
What Makes SMP Combat Valuable
SMP Combat is not a tiny utility for blocking one or two commands after PvP. It is a Minecraft combat system with real depth: combat tagging, combat logging punishment, combat-state restrictions, PlaceholderAPI support, real-time combat UI, optional old combat restoration, profile-based mechanic control, region-aware behavior, and production-oriented hook support.
If you want a combat tag plugin, combat log plugin, old combat mechanics plugin, or DonutSMP-style combat control plugin that is configurable enough for real server ownership instead of only basic default gameplay, SMP Combat is built for that role.
SMP Combat
Real combat state. Real punishment logic. Real old-combat profiles.
