Content generated with AI — it may contain mistakes.

Combat

Protection

The PvP switch, newbie protection, respawn protection and loot protection: who can be hit, for how long, and who may pick up the drops.

Refused hits

The PvP switch, newbie protection and respawn protection each add a rule to one check that runs on every hit between two players, whichever provider decides the tag. A refused hit does nothing, and covers:

  • melee and projectiles;
  • splash potions with a harmful effect (the refused player is left out of the splash);
  • lingering clouds with a harmful effect;
  • fishing rods hooking a player.

The attacker is told why, at most once every 1.5 seconds, when the module's notify-attacker is on. Other plugins ask the same check through Combat.canAttack, see API.

PvP switch

The pvp-toggle module adds /pvp, which lets players switch their own PvP off. A player with PvP off can neither hit players nor be hit by them. The state is saved with the player record.

CommandWhat it does
/pvp, /pvp toggleSwitches it.
/pvp on, /pvp offSets it.
/pvp statusSays whether it is on.

/pvp needs exyliacombat.pvptoggle, which everybody holds by default, or the node written in permission. A rank's wait between two switches comes from exyliacombat.pvpcooldown.<n> (seconds, the lowest a player holds wins); without one, cooldown applies.

Server-wide PvP

/combatadmin pvp global off switches PvP off for the whole server: nobody can hurt another player, whatever their own switch says, and every player is told. /combatadmin pvp global on turns it back on. The state is written to global-pvp, so it survives a restart. It needs exyliacombat.admin.pvp and the pvp-toggle module.

modules/pvp-toggle/config.yml:

KeyDefaultWhat it does
global-pvptrueServer-wide PvP. false: no player can hurt another. Switched in game with /combatadmin pvp global.
command-labels[pvp, togglepvp]The command's names: the first is the command, the rest aliases. Read at startup. Empty: no command; staff and other plugins still switch PvP.
permissionemptyPermission needed to switch. Empty: exyliacombat.pvptoggle, which everybody holds by default.
cooldown30sTime between two switches. 0s: no wait. exyliacombat.pvpcooldown.<n> gives a rank <n> seconds instead.
block-while-taggedtrueRefuses the switch while the player is tagged.
default-statetruePvP state of a player who joins for the first time.
forced-on-worlds[]Worlds where PvP is always on, whatever players chose.
forced-off-worlds[]Worlds where PvP is always off: nobody fights there.
notify-attackertrueTells a player whose hit was refused why.
commands-on-enable, commands-on-disable[]Commands run when a player switches PvP on or off, with %player_name%. Prefixes console: (default), player:, player-proxy: or console-proxy:.

Text in lang/<language>/modules/pvp-toggle/messages.yml: state-on and state-off (%state% in every other line), enabled, disabled, already-enabled, already-disabled, status, cooldown, tagged, no-permission, forced-world, attacker-disabled, defender-disabled, admin-set, and for the server-wide switch global-off (to a player whose hit was refused), global-enabled and global-disabled (sent to everyone) and global-already.

With newbie protection on, /pvp on from a protected player first asks them to drop their protection.

Newbie protection

With the newbie-protection module, players who join for the first time cannot hit players nor be hit by them for a while. They can drop it themselves with /newbie disable, after a confirmation; it cannot be given back except by staff.

CommandWhat it does
/newbie, also /protectionShows the protection left.
/newbie disableAsks to drop it: DROP IT or KEEP IT.

Who counts as new is new-players: FIRST_JOIN (never joined this server) or FIRST_PLAYED_AFTER (first join on or after first-played-after). A player who already has a record is never given it again, so switching the module on later does not protect everyone who already played.

modules/newbie-protection/config.yml:

KeyDefaultWhat it does
duration30mHow long a new player is protected.
modePLAYTIMEPLAYTIME: the time only runs while the player is online. REAL_TIME: it runs from the first join.
new-playersFIRST_JOINFIRST_JOIN or FIRST_PLAYED_AFTER.
first-played-afteremptyFor FIRST_PLAYED_AFTER: a date (2026-10-21) or date and time (2026-10-21T18:00), in the server's time zone.
command-labels[newbie, protection]The command's names. Read at startup. Empty: no command.
drop-with-pvp-commandtrue/pvp on (or /pvp) asks a protected player to drop their protection, as /newbie disable does.
displayBOSS_BARHow the time left is shown: BOSS_BAR, ACTION_BAR or NONE.
boss-bar-colour, boss-bar-overlayGREEN, PROGRESSThe boss bar's look.
remind-on-jointrueTells a protected player how long they have left each time they join.
disabled-worlds[]Worlds where the protection does not apply. The time still runs there.
pvp-zonesBLOCK_ENTRYWhat happens when a protected player walks or teleports from a no-PvP area into a PvP area, see below.
blocked-actions[ENDER_PEARL]What a protected player cannot do: ITEM_PICKUP, ITEM_DROP, ENDER_PEARL, ELYTRA.
blocked-commands[]Commands a protected player cannot run, matched by label: /warp blocks /warp pvp.
notify-attackertrueTells a player whose hit was refused why.
commands-on-start[]Commands run when a player is given protection, with %player_name%.
commands-on-end[]Commands run when it runs out or is dropped.

PvP areas

pvp-zones keeps protected players out of the places where others fight. A no-PvP area is whatever the safe-zone sources in config.yml say denies PvP; with none of them available, nobody is held back.

ValueWhat happens
ALLOWNothing: protected players walk in like anyone else.
BLOCK_ENTRYWalking in puts them back where they were and a teleport in is cancelled, until the protection ends or they drop it. They are told zone-blocked, at most once every 1.5 seconds.
DROP_ON_ENTRYThe first try is refused with zone-warning; a second try within 10 seconds drops the protection (dropped) and lets them in.

It does not apply in disabled-worlds.

Staff give and take it with /combatadmin newbie give <player> [time] and /combatadmin newbie remove <player>, or from the admin panel. A time is written 30m, 1h30m or 2d; left out, it is duration. Text lives in lang/<language>/modules/newbie-protection/messages.yml, including zone-blocked and zone-warning for PvP areas.

Respawn protection

The respawn-protection module is off by default. For a few seconds after respawning, other players cannot hit the player, with a boss bar that drains.

modules/respawn-protection/config.yml:

KeyDefaultWhat it does
duration5sHow long it lasts. 0s turns it off.
cancel-on-attacktruetrue: hitting another player ends the protection. false: a protected player cannot hit anyone.
only-after-pvp-deathfalseOnly after a death caused by another player.
notify-attackertrueTells the attacker why their hit did nothing.
boss-bar.enabled, colour, overlaytrue, GREEN, PROGRESSThe boss bar.
disabled-worlds[]Worlds where nobody is protected after respawning.

Text in lang/<language>/modules/respawn-protection/messages.yml: started, ended, cancelled, attacker-protected, defender-protected and boss-bar.

Both protections answer Combat.isProtected, so other plugins can tell a shielded player apart.

Loot protection

The loot-protection module is off by default. After a PvP kill, the victim's drops can only be picked up by the killer for a while, and others who try are told whose they are. It covers the drops of a PvP death, the items of a DROP_INVENTORY logout (reserved for the opponent) and the gear dropped when somebody kills a logout NPC (reserved for that killer). Protected items do not merge with other stacks.

modules/loot-protection/config.yml:

KeyDefaultWhat it does
duration30sHow long the drops stay reserved. 0s turns it off.
share-with-clantrueMembers of the killer's clan may pick them up too, through ExyliaLib's clan support.
share-with-alliesfalseMembers of clans allied with the killer's may pick them up too.
glowtrueProtected items glow for everybody.
timertrueProtected items show whose they are and the time left above them.
block-other-pickupstrueMobs and hoppers cannot take protected items either.
disabled-worlds[]Worlds where drops are never protected.
MessageDefault
protected-for-killer%prefix% {success}The loot is yours for {info}%time% ⌚{success}.
pickup-deniedThis loot belongs to {highlight}%owner%{error} for {info}%time% ⌚, at most once every 1.5s
item-label{highlight}%owner% {letters_black}» {info}%time% ⌚, above the item

Something missing on this page? Tell us on Discord