justCombat v1.1.2

A highly optimized combat system with Folia, Paper, and Spigot support
[1] There's a combat-log NPC now. If someone logs out in the middle of a fight, instead of just dropping dead on the spot the plugin leaves a stand-in where they were standing, wearing their gear with their name floating above its head. Kill it before the timer runs out and the logger loses their stuff and dies the next time they log in. Nobody kills it in time and they got away clean. Log back in while it's still alive and you get put straight back into combat, so relogging isn't a free escape. It doesn't need Citizens or anything else, it's a normal mob under the hood (a zombie by default, swap it with npc.entity_type), and it cleans itself up if the server crashes mid-fight. Off by default, flip npc.enabled to true to use it.

[2] The NPC plays nice with keepInventory. If the world it dies in has the keepInventory gamerule on, the logger keeps their items and XP, nothing drops off the NPC and nothing gets wiped when they come back, the same as a normal death there. That's npc.respect_keep_inventory, on by default. There's also npc.disabled_worlds if you'd rather the NPC (and any logout punishment) just never happen in certain worlds, which is separate from your combat-tag world list.

[3] 1v1 mode got fixed. There was a nasty bug where the person you hit first couldn't hit you back, you were basically protected, and people were abusing it to deal free damage. Both fighters can hit each other reliably now, both ways, every time. On top of that, a player who's locked in a 1v1 can't peel off to swing at someone else, which was the thing that let the lock desync and cause that protection bug in the first place.

[4] You can turn 1v1 off per world. Drop a world into combat.exclusive_combat.disabled_worlds and the lock won't apply there. Combat still works, it just isn't locked to two people. Handy if you only want duels in an arena world and a free-for-all everywhere else.

[5] Teammates can jump into a 1v1 to help now. Clans were using the lock the wrong way, getting immunity from everyone else while also not being able to help a member who was getting jumped. Turn on combat.exclusive_combat.allow_team_intervention and anyone on the same team as a fighter can step in, so a 1v1 can't hand out immunity from the fighters' own allies. It reads JustTeams directly, so your teams just work, and it falls back to vanilla /team if you're ever running without JustTeams. The two original fighters still always hit each other, this only adds the teammate help on top.

[6] You can't camp a safe zone and poke people outside it anymore. WorldGuard only checks where the person getting hit is standing, so players were sitting inside spawn and hitting people out in the open with zero risk. Now the hit gets stopped if either player is in a safe zone. That's combat.block_safezone_pvp, and justcombat.bypass.safezone for staff who should ignore it.

[7] Elytra is blocked in combat. No more popping an elytra and gliding off to dodge a fight. While you're tagged you can't start a glide, and if you get hit while you're already in the air you drop out of it. Since you can't glide, you can't rocket-boost away either. restrictions.elytra.enabled to toggle it, justcombat.bypass.elytra for anyone who should keep their wings.

[8] Golden apple cooldowns actually work now. If you ever tested this as an OP and saw no cooldown, here's why: the bypass permission was handed to OPs by default, so every admin testing it skipped the cooldown and figured it was broken. It's off by default now. Give justcombat.bypass.gapple to whoever you actually want to skip the wait, and everyone else gets the cooldown like they should.

[9] Your message edits show up now. Things like the kill streak counter and the streak-ended broadcast were being read from an old copied en_US.yml that never updated itself, so anything you changed or any newly added message got ignored. English reads straight from messages.yml now, so what you write is what players see.

[10] The console isn't getting spammed anymore. It used to print a debug line every single time anything hit a mob, which buried the rest of your log. That only fires for real player-versus-player fights now, and only when you've actually turned debug on. Fresh installs ship with debug off.

[11] The plugin no longer needs WorldGuard to start. WorldGuard was meant to be optional, but the plugin would actually refuse to enable without it. That's sorted, the WorldGuard side only loads when WorldGuard is installed. No WorldGuard just means no safe zones, everything else runs like normal.

[12] Servers stopped freezing on startup. The plugin was downloading the MySQL and MariaDB database drivers (and protobuf) on every single boot, even on servers that only use SQLite, and if your host had a slow connection to the download server the whole startup would just hang. Only SQLite and H2 download now. MySQL and MariaDB still work if their driver is on the server, and if it isn't, the plugin quietly falls back to SQLite instead of throwing errors at you.

[13] Runs on Paper 1.21.11 and the new 26.1.x, plus Folia and Spigot, same as always. It's built so the one jar works on both the Java 21 that 1.21.11 uses and the Java 25 that 26.1 needs, so there's no separate build to worry about.

[14] Kill streaks come with a bounty now. If a player is on a streak and gets killed, whoever ended it can be rewarded. You set the minimum streak it kicks in at and the commands that run for the killer, so money, items, a broadcast, whatever you want. It's off by default under killstreak.bounty, and the placeholders are %killer%, %victim% and %streak%.

[15] Assists are tracked now. If you damaged someone and somebody else finished them off, you get credit for the assist, a message and optional reward commands of your own. You decide how long ago your hit has to have landed to still count, ten seconds by default, and whether assists pay out commands. The killer doesn't get counted as their own assister, and offline players are skipped. Off by default under the new assists section. The reward placeholders are %assister%, %victim% and %killer%.

[16] Elytra can be taken off completely in combat now, not just blocked. The old behavior stopped you gliding, but some people were jump-spamming to sneak a glide in. Turn on restrictions.elytra.unequip and the moment you're tagged, or the moment you try to glide, the elytra comes off your chest and into your inventory, or drops at your feet if your inventory is full. The plain glide block is still there and still the default, this is just the stricter option on top.
[1] Plugin doesn't crash on servers without WorldGuard anymore. WorldGuard is optional, but the safezone code needed it just to start up, so without it the whole plugin shut itself down. That part only loads when WorldGuard is actually installed now. No WorldGuard just means no safezone handling, everything else runs fine.

[2] Server stopped freezing on startup. It was downloading the MySQL and MariaDB database drivers on every boot even though most servers run SQLite, and on a slow connection that hung the whole startup. Only SQLite and H2 load now. MySQL and MariaDB still work if their driver is there, otherwise it quietly uses SQLite.

[3] No more wall of red "DataSource is not initialized" errors. Those were left over from the plugin shutting down in the middle of starting up. It stops cleanly now.

[4] Elytra is blocked in combat. No gliding or firework-boosting away to escape a fight, and you get dropped out of glide if you're hit mid air. Turn it off with restrictions.elytra.enabled, bypass with justcombat.bypass.elytra.

[5] The combat-log NPC respects keepInventory now. If you log out in a keepInventory world you keep your items and XP, nothing drops and nothing gets wiped on reconnect. You can also turn the NPC off per world with npc.disabled_worlds.

[6] The jar is about half the size now, roughly 4.5MB down from 9.6MB. It was bundling netty and a couple of other things the server already has. (Older but forgot to mention)

[7] Works on Paper 1.21.11 and 26.1.2, plus Folia and Spigot.
[1] You can't stand inside a safezone and hit players outside it anymore. It used to only check where the victim was, not the attacker.

[2] Golden and notch apple cooldowns work now. The bypass permission was set to OP by default, so admins never saw a cooldown and figured it was broken. It's off by default now, so give it to staff manually if you want them exempt.

[3] Safezone barrier blocks don't get stuck on your screen after a fight ends anymore.

[4] Killstreak messages like your streak counter and "streak ended" weren't showing right. They were reading from an old language file that never updated. Fixed now.

[5] Console doesn't get spammed with a debug line every time something hits a mob. That only logs for real player fights now, and only when debug is on.

[6] Combat log NPC now works. Log out in the middle of a fight and it leaves a killable copy of you with your gear, instead of just killing you on the spot. It's off by default.

[7] Essentials can't take over /pvp and /combat anymore.

[8] You can hide the extra command names and keep just /combat if you want it cleaner.

[9] Flight bypass and the apple bypass are separate permissions now. Your config updates itself on the first start and keeps anything you changed.

[10] Works on Paper 1.21.11, 26.1.x, Folia and Spigot.
### CRITICAL FIXES

[1] Big one: blocked commands actually stay blocked now. /fly, /pvp, /home and the rest aren't slipping through anymore, and yes, that includes the sneaky /minecraft:fly, /cmi:fly, /f style variants people were using
[2] OPs no longer bypass combat command restrictions just for being OP. If you want staff to be exempt, you need to give them justcombat.bypass.commands directly. Sorry, this was a footgun
[3] You can't toggle /pvp while in combat anymore, even if some other plugin tries to handle it before us
[4] Those DataSource is not initialized or has been closed walls of red on shutdown? Gone. Stats now finish saving before the pool gets closed
[5] If your console was getting absolutely hammered with debug lines on every mob hit, that's because performance.debug defaulted to true. New installs default to false now. Set it to false in your existing config if you haven't already
[6] Boss bar timer was only ticking once a second and looked stuck. It refreshes 4x per second now, much smoother
[7] streak_ended and a few other broadcasts were silently disappearing when the prefix string was missing. Fixed
[8] Broadcasts (like killstreak announcements) ignored language files and always pulled from messages.yml. They respect the active language now
[9] your_streak was defined in messages.yml but never actually sent to the killer. It is now
[10] Damage debug stopped firing on every arrow that hits a skeleton. Only player-vs-player combat triggers it now

### IMPROVEMENTS

[11] /pvp and /justcombat get force-registered via Bukkit's CommandMap so Essentials (and similar) can't steal them anymore
[12] Added /combat as an alias for /justcombat


### NEW FEATURES

[13] Flight gets cut the second you enter combat. Creative and Spectator are skipped. Switch off with combat.disable_fly_on_combat: false or grant justcombat.bypass.fly to whoever should keep their wings
[14] Riptide tridents finally have a cooldown. The old trident cooldown only fired on actual throws, so anyone in water or rain could spam riptide and dodge it. New section: advanced_pvp.trident.riptide.cooldown
[15] Same idea for melee trident hits. Some people were just bonking with the spear instead of throwing it to bypass the cooldown. New section: advanced_pvp.trident.lunge.cooldown


### CONFIG

[16] Added combat.disable_fly_on_combat (default true)
[17] Added advanced_pvp.trident.riptide.cooldown (10s by default)
[18] Added advanced_pvp.trident.lunge.cooldown (2s by default)
[19] Added visual.boss_bar.update_interval_ticks (default 5)
[20] performance.debug now defaults to false for new installs. Your existing config isn't touched
[21] Configs migrate automatically on first start. Anything you've customised stays the way you set it


### PERMISSIONS

[22] Added justcombat.bypass.fly (default false)
[23] justcombat.bypass.trident.cooldown covers throw, riptide, and lunge now (one perm, all three)

### COMPATIBILITY

[24] Tested on Paper 1.21.11, Paper 26.1.2, Folia, and Spigot.


### FOR SERVER ADMINS

If your staff used to bypass combat restrictions just by being OP, you need to hand them justcombat.bypass.commands from your perms plugin now. That's the main thing that might bite you on upgrade.

Console too noisy after upgrading? performance.debug: false in your existing config.

Don't like that flight gets killed on combat? combat.disable_fly_on_combat: false, or just give the relevant rank justcombat.bypass.fly.
[0] FIXED: Ender pearl cooldown activating but player not teleporting on Paper 1.21+. Pearl item was consumed and the throw was cancelled server-side but the item was never refunded. Also improved interact event handling to reliably block pearl usage when on cooldown
[1] FIXED: Golden apple and enchanted golden apple cooldowns not working on Paper 1.21+.. Hotbar cooldown overlay also now appears after eating
[2] FIXED: Editing the prefix or any message in en_US.yml had no effect in-game even after a full restart. Language files are now always read first regardless of whether multi-language is enabled in config
[3] FIXED: OP players automatically bypassed all combat restrictions (pearls, safe zones, commands, healing).
[1] Added PvP toggle status placeholders for scoreboard display (pvp_status, pvp_enabled, pvp_enabled_boolean)
[2] Fixed console spam from debug logging triggering on all player interactions instead of only ender pearl usage
[1] Fixed command blocking while in combat not working when other plugins cancel commands first
[2] Small improvements & fixes
[1] Added per-player toggle system with unified /jc toggle command (fast crystal, totem particles, explosion particles, explosion sounds, chainmail kit)
[2] Implemented invisibility chat hide feature to block/filter messages from invisible players
[3] Fixed empty action bar spam by sending empty message only once when clearing
[4] Added proper PacketEvents-based packet interception for totem and explosion effects
[5] Fixed fast crystal toggle double-toggle sync bug by centralizing state management
[6] Added configurable chainmail kit on respawn with toggle support
EULA: Free EULA
1,399 Views
146 Downloads
Nov 30, 2025 Published
Jun 29, 2026 Updated
Not yet rated
4.5 MB File size
Open source
  1. Yes
DRM-free
  1. Yes
Unobfuscated
  1. Yes
AI use in marketing
No
AI product disclosure
AI was used for configuration polishing, documentation, update logs, and limited development assistance to simulate real-world server environments and help identify bugs under high load.
Type
  1. Gameplay
  1. World
  1. Core
Game mode
  1. Survival
  1. Lifesteal
  1. KitPVP
Supported software
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
Supported languages
  1. English
Creator
Owner
Recommended for you
A modern, high-performance, and network-ready punishment system.
5.00 star(s) 1 ratings
34 purchases
A survival/kit duel plugin.
5.00 star(s) 1 ratings
31 purchases
RPG Skill Tree Plugin with Custom Enchant Skills
Not yet rated
0 purchases
4.50 star(s) 3 ratings
6 purchases
Host all type of events your way - modular arenas, GUI setup, cross-server ready.
Not yet rated
1 purchase
1,399 Views
146 Downloads
Nov 30, 2025 Published
Jun 29, 2026 Updated
Not yet rated
4.5 MB File size
Open source
  1. Yes
DRM-free
  1. Yes
Unobfuscated
  1. Yes
AI use in marketing
No
AI product disclosure
AI was used for configuration polishing, documentation, update logs, and limited development assistance to simulate real-world server environments and help identify bugs under high load.
Type
  1. Gameplay
  1. World
  1. Core
Game mode
  1. Survival
  1. Lifesteal
  1. KitPVP
Supported software
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
Supported languages
  1. English
Creator
Owner
Recommended for you
A modern, high-performance, and network-ready punishment system.
5.00 star(s) 1 ratings
34 purchases
A survival/kit duel plugin.
5.00 star(s) 1 ratings
31 purchases
RPG Skill Tree Plugin with Custom Enchant Skills
Not yet rated
0 purchases
4.50 star(s) 3 ratings
6 purchases
Host all type of events your way - modular arenas, GUI setup, cross-server ready.
Not yet rated
1 purchase
Top