This plugin is
actively maintained, for bugs, suggestions, and if you want a plugin compatibility(as long it has an API), please contact me on my discord:
Menace Development
Requires Java 21 or newer
✨ Features
⚔️ Combat Tagging – Tags players in PvP and prevents abuse.
Logger NPCs – Spawns a custom NPC with the player's inventory if they log out. (Does not spawn in no pvp regions)
Smart Combat Logging – Combat Loggers die and Logged players die if their NPC is killed, with full kill broadcast.
️Combat Fog Effect – Optional bossbar fog to add PvP intensity.
Bossbar & Actionbar Alerts – Keep players informed of their combat status.
Fully Configurable – Toggle every feature. Set your own messages, block/whitelist items, blocks, commands, and more.
️WorldGuard Region Support – Only enforce combat and logger npcs where PvP is allowed.
️FactionsUUID Integration – Prevent friendly fire against teammate loggers.
PlayerLootbags Hook – Allows safe pickup of lootbags even with combat pickup restrictions.
Developer API - CombatTagPro includes a clean and easy-to-use API for developers who want to integrate compatibility into their own plugins.
⚙️ Config
Code (YAML):
# COMBAT SETTINGS combat_timer: 30
use-actionbar: true
use-bossbar: true
bossbar-color: "RED" combat-fog-effect: true
# Requires use-bossbar: true to work block-commands: true
allowed-commands: - spawn
- home
block-inventories: true
block-player-inventory-change: true
block-player-drops: true
item-drop-whitelist: # Leave as [] if you do not want whitelist, item-drop-whitelist: [] - PAPER
- BONE
block-pickup-items: true
whitelist-lootbag-pickup: true
# This is a PlayerLootbags feature, whitelists pickup for custom lootbags item-pickup-whitelist: # Leave as [] if you do not want whitelist, item-pickup-whitelist: [] - GOLD_NUGGET
- ARROW
block-interact-blocks: true
blocks-interact-whitelist: # Leave as [] if you do not want whitelist, blocks-interact-whitelist: [] - LEVER
- STONE_BUTTON
- OAK_DOOR
block-place-blocks: true
# Leave as [] if you do not want whitelist, blocks-place-whitelist: [] blocks-place-whitelist: - OBSIDIAN
- STONE
block-break-blocks: true
# Leave as [] if you do not want whitelist, blocks-break-whitelist: [] blocks-break-whitelist: - DIRT
- COBWEB
# COMBAT MESSAGES combat-tag-message: "&cYou have been tagged, do not attempt to logout!" combat-untag-message: "&aYou are no longer in combat." bossbar-message: "&c&lIn Combat - {combat_seconds}s" actionbar-message: "&c⚔ You are in combat! {combat_seconds}s" combat-log-broadcast-killer: "&c{victim} &7combat logged and was &cslain &7by &6{killer}&7!" combat-log-broadcast-nokiller: "&c{victim} &7combat logged and was &cslain&7!"
# LOGGER MESSAGES logger-death-broadcast-message: "&c{killer} &7has killed the logger of &e{victim}&7!" logger-friendlyfire-message: "&cYou can't attack your teammate's logger!"
# COMMAND MESSAGES command-no-permission: "&cYou don't have permission to do this." command-usage-main: "&cUsage: /combattagpro <reload|untag>" command-usage-untag: "&cUsage: /combattagpro untag <player>" command-player-not-found: "&cPlayer not found." command-reload-success: "&aCombatTagPro configs reloaded." command-untag-success: "&a{player} has been untagged." command-unknown-subcommand: "&cUnknown subcommand. Use /combattagpro <reload|untag>"
/** * Check if the CombatTagPro plugin is available and enabled. */ publicstaticboolean isAvailable
(){ return Bukkit.
getPluginManager().
getPlugin("CombatTagPro")!=null&& Bukkit.
getPluginManager().
getPlugin("CombatTagPro").
isEnabled(); }
/** * Check if a player is currently in combat. */ publicstaticboolean isInCombat
(Player player
){ return CombatTagManager.
isTagged(player
); }
/** * Force tag a player manually (e.g., for custom PvP systems). */ publicstaticvoid tagPlayer
(Player attacker, Player victim
){ CombatTagManager.
tag(attacker, victim
); }
/** * Force untag a player manually (e.g., upon duel end or teleport). */ publicstaticvoid untagPlayer
(Player player
){ CombatTagManager.
untag(player
); }
/** * Get the last damager of a player (used for kill attribution). * Returns null if not available. */ publicstatic Player getLastDamager
(Player victim
){ UUID damagerUUID
= CombatTagManager.
getLastDamager(victim
); return(damagerUUID
!=null)? Bukkit.
getPlayer(damagerUUID
):null; } }