Frostyh Plugins

Plugins / Standoff

Standoff Coming soon

Combat tag with a boss bar, safe zones, new-player protection, potion bans and logout punishment.

Get Standoff

Coming soon Not on sale yet. This page gets a buy button the day it is.

Try it live

Standoff runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.

Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)

In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go standoff to land at its booth, or right-click the compass and pick it. The world resets every night.

Overview

Standoff

Stop combat logging, spawn running and new players getting farmed, in one small plugin

The three arguments every PvP-enabled server has: people running to spawn mid-fight, people logging out at half a heart, and brand new players getting farmed at the gate. Standoff settles all three, in one small plugin with no region plugin required.

Tagged: the boss bar names your opponent and counts down.

Latest version
1.2.0
Server
Paper or Purpur, Java 21
BuiltByBit
coming soon
What changed in 1.2.0
  • No flying in combat: a tagged player in survival or adventure loses flight (/fly, double jump) until the tag ends, and gets it back afterwards if they had it before. Creative and spectator are never touched. Switch: combat.disable-flight (on by default).
  • No elytra in combat, optional: combat.disable-elytra stops gliding while tagged. Off by default, because elytra and mace fights are fights too.
  • Both switches are also in the Combat screen of the /standoff panel. standoff.bypass keeps flight and elytra.
  • PlaceholderAPI support (optional): %standoff_tagged%, %standoff_seconds%, %standoff_opponent%, %standoff_protected%, %standoff_protection_minutes%, %standoff_in_safezone%, %standoff_zone% and %standoff_fighting%, for scoreboards, tab lists and holograms.
  • The new settings and messages work without touching your config.yml. Flight blocking is on for existing servers too after this update; set combat.disable-flight: false to keep the old behaviour.

Features

Why server owners pick it

What makes it different

Works with

What you get: combat tagging

No teleporting out of a fight while the tag lasts.

Safe zones

Create a safe zone where you stand: name, radius, height.

New-player protection

Potion bans

Ban any potion effect by name. Drinking and throwing are both blocked, base potions and custom ones alike, with a message rather than a silent cancel.

The staff panel

The staff panel: combat tag, new-player protection, safe zones, who is fighting.

FAQ

Which servers does it run on?

Paper or Purpur 1.21.11, with Java 21.

Do I need other plugins?

No. Safe zones work without a region plugin.

Is there DRM or a licence key?

No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.

How long does setup take?

Drop the jar into /plugins and restart. The setup guide above has 4 short steps.

Can I try it before I buy?

Yes. This page has a test server with the plugin installed.

Where do I get help?

In the active support Discord, in the discussion tab on this page, or in the documentation.

Can tagged players fly away?

No. Flight is blocked while tagged (combat.disable-flight), and elytra can be blocked too (combat.disable-elytra).

Updates

Released on September 16, 2026 and updated 5 times since. The latest version is v1.3.0 (October 16, 2026). Every update is free, new Minecraft versions included.

Also by Frostyh

If this plugin helps your server, a short review on this page would mean a lot. Thank you!

Installation

Requirements

Server software
Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
Minecraft version
plugin.yml api-version 1.21; built against Paper API 1.21.11
Java
21 or newer
Required plugins
none
Optional plugins
PlaceholderAPI

Steps

  1. Download Standoff.jar from BuiltByBit. There is no licence key to enter.
  2. Stop the server and put the jar into the plugins folder.
  3. Start the server. The plugin creates plugins/Standoff/config.yml with the defaults shown under Configuration.
  4. Edit config.yml to suit your server.
  5. Apply the changes with /standoff reload (Reload the config), or restart the server.

Setup guide

  1. Drop Standoff.jar into /plugins and restart.
  2. Stand in the middle of spawn and run /standoff zone create spawn 40.
  3. Set combat.seconds to taste (15 for a fast server, 30 for a serious one).
  4. Decide what logging out costs: on-logout: kill, or a ban command in logout-commands.

Lifesteal and hardcore: longer tag, kill on logout, no teleports, and a small spawn zone so the gate is not a farm.

SMP: 15 second tag, generous new-player protection, one safe zone at spawn and one at the shop.

KitPvP and FFA: short tag, no safe zone in the arena, bypass for staff in spectator.

Commands

From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.

CommandAliasesUsageDescriptionPermission
/standoff/sto/standoff zone|tag|untag|newbie|reloadStandoff admin.not set
/combat/ct/combatYour combat state.not set
/pvpnone/pvpDrop your new player protection.not set

Subcommands in detail

/combat                              Your combat state and protection time.
/pvp                                 Drop your new-player protection.
/standoff zone create <id> <radius> [height]   Make a safe zone here.
/standoff zone delete <id>           Remove one.
/standoff zone list                  List them.
/standoff zone here                  Which zone you are standing in.
/standoff tag <player>               Put somebody in combat.
/standoff untag <player>             Take them out of it.
/standoff newbie <player>            Give or remove new-player protection.
/standoff reload                     Reload the config.

Permissions

From plugin.yml.

NodeDefaultDescriptionChildren
standoff.adminoperatorsManage zones and combat state.none
standoff.bypassnobody until grantedNever tagged, never blocked, keeps flight and elytra in a fight.none

Placeholders

Registered with PlaceholderAPI under the identifier standoff (StandoffPlaceholders.java). PlaceholderAPI must be installed for these to work.

PlaceholderReturns
%standoff_tagged%yes or no
%standoff_seconds%seconds of combat left, 0 when not tagged
%standoff_opponent%who they are fighting, empty when not tagged
%standoff_protected%yes or no: new player protection
%standoff_protection_minutes%minutes of protection left
%standoff_in_safezone%yes or no
%standoff_zone%the safe zone they stand in, empty outside one
%standoff_fighting%how many players are in combat right now

Configuration reference

The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Standoff/ on first start.

config.yml

Top-level keys:

KeyDefaultComment above it
menutruebare /standoff opens the staff panel instead of printing the help
combatsection, 14 keysnone
newbiesection, 3 keysnone
banned-potions[] (empty list)e.g. [strength, invisibility] - blocks drinking and throwing them
themesection, 11 keysEvery message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#e0533d>Open</#e0533d>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and...
messagessection, 113 keysnone
review-remindertrueOne thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
plugins/Standoff/config.yml
# Standoff - combat tagging, safe zones and new-player protection.

menu: true                  # bare /standoff opens the staff panel instead of printing the help

combat:
  seconds: 15               # how long a hit keeps both sides in combat
  boss-bar: true
  boss-bar-colour: RED      # PINK, BLUE, RED, GREEN, YELLOW, PURPLE, WHITE
  action-bar: false
  block-teleport: true      # no /home, /spawn or warps while tagged
  block-plugin-teleport: true
  # No flying while tagged (/fly, double jump). Flight that was allowed before comes back when the tag ends.
  # Creative and spectator are never touched.
  disable-flight: true
  # No elytra gliding while tagged. Off by default, because elytra and mace fights are a fight too.
  disable-elytra: false
  clear-on-kill: true      # killing your opponent ends your own tag
  on-logout: kill           # kill, or none
  announce-logout: true
  logout-commands: []       # e.g. ["ban {player} 1h combat log"]
  commands-are-whitelist: false   # true = only the listed commands are allowed while tagged
  blocked-commands: [spawn, home, homes, tp, tpa, tpahere, warp, back, hub, lobby, shop, enderchest, ec]

newbie:
  enabled: true
  minutes: 30               # protection for a brand new player
  drop-on-attack: true      # attacking someone ends your own protection

banned-potions: []          # e.g. [strength, invisibility] - blocks drinking and throwing them

# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#e0533d>Open</#e0533d>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
  accent: "#e0533d"     # your colour: headings and anything the player is meant to click
  accent2: "#eea094"    # a lighter accent, for a second level of emphasis
  title: "#f4f7ff"      # screen titles
  text: "#c2ccdd"       # ordinary prose
  muted: "#6b7a94"      # hints, separators, anything the eye should skip
  value: "#ffffff"      # the numbers and names the player opened the screen to read
  good: "#57e08a"
  warn: "#ffc857"
  bad: "#ff6b6b"
  small-caps: false     # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
  # Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
  # client's own textures, so there is nothing to install and no resource pack: it needs a
  # 1.21.9 or newer client, and older ones simply see the buttons as words.
  item-icons: true

messages:
  prefix: "<accent><bold>Combat</bold></accent> <muted>»</muted> "
  no-permission: "<bad>You cannot do that.</bad>"
  players-only: "<text>Players only.</text>"
  unknown-player: "<bad>Unknown player: </bad><value>{name}</value>"
  reloaded: "<value>Config reloaded.</value>"
  someone: "someone"
  help: "<text>/standoff zone create|delete|list|here · tag <player> · untag <player> · newbie <player> · reload</text>"

  combat-start: "<bad>You are in combat with </bad><value>{player}</value><bad> for {seconds}s.</bad>"
  combat-end: "<good>You are out of combat.</good>"
  combat-bar: "<bad>In combat with {player} · {seconds}s</bad>"
  combat-actionbar: "<bad>Combat: {seconds}s</bad>"
  combat-status-on: "<text>In combat for another </text><value>{seconds}s</value><text>.</text>"
  combat-status-off: "<text>You are not in combat.</text>"
  combat-no-teleport: "<bad>You cannot teleport for another {seconds}s.</bad>"
  combat-no-command: "<bad>You cannot use that command for another {seconds}s.</bad>"
  combat-no-flight: "<bad>You cannot fly while you are in combat.</bad>"
  combat-no-elytra: "<bad>You cannot glide while you are in combat.</bad>"
  combat-logged: "<bad>{player} logged out in combat.</bad>"
  opponent-logged: "<text>{player} logged out on you.</text>"

  zone-no-pvp: "<bad>No PvP in a safe zone.</bad>"
  zone-locked-out: "<bad>You cannot enter a safe zone for another {seconds}s.</bad>"
  zone-help: "<text>/standoff zone create <id> <radius> [height] · delete <id> · list · here</text>"
  zone-created: "<text>Safe zone </text><value>{zone}</value><text> created with radius {radius}.</text>"
  zone-deleted: "<text>Safe zone </text><value>{zone}</value><text> deleted.</text>"
  zone-unknown: "<bad>No safe zone called </bad><value>{zone}</value>"
  zone-list: "<text>Safe zones: </text><value>{list}</value>"
  zone-here: "<text>You are in safe zone </text><value>{zone}</value><text>.</text>"
  zone-here-none: "<text>You are not in a safe zone.</text>"

  newbie-granted: "<good>You are protected from PvP for {minutes} minutes.</good> <text>/pvp to drop it.</text>"
  newbie-protected: "<bad>{player} is a new player and is protected for another {minutes} minute(s).</bad>"
  newbie-you-are-protected: "<bad>You cannot attack while you are protected. /pvp to drop it.</bad>"
  newbie-dropped: "<text>Your new player protection is gone. Good luck.</text>"
  newbie-status: "<text>New player protection: </text><value>{minutes} minute(s)</value>"
  newbie-none: "<text>You are not protected.</text>"
  newbie-removed: "<text>Protection of </text><value>{player}</value><text> removed.</text>"
  newbie-given: "<text>{player} is protected again.</text>"

  # The staff panel. Every line here is a screen title, a button label or a tooltip.
  # "on" and "off" stay in quotes: YAML reads a bare on or off as true or false.
  "on": "<good>on</good>"
  "off": "<bad>off</bad>"
  # What the PlaceholderAPI placeholders such as %standoff_tagged% print. Quoted for the same reason.
  "yes": "yes"
  "no": "no"
  menu-title: "<value>Standoff</value>"
  menu-close: "<white><icon:close></white><text>Close</text>"
  menu-back: "<white><icon:back></white><text>Back</text>"
  menu-back-tip: "<text>Back to the first screen.</text>"
  menu-empty: "<text>Fill the field in first.</text>"
  menu-home-combat: "<text>Combat tag: </text><value>{seconds}s</value><text>, boss bar {bar}</text>"
  menu-home-newbie: "<text>New player protection: </text>{state}<text>, {minutes} minutes</text>"
  menu-home-zones: "<text>Safe zones: </text><value>{count}</value>"
  menu-home-fighting: "<text>Fighting right now: </text><value>{count}</value>"
  menu-combat: "<white><icon:combat></white><accent>Combat</accent>"
  menu-combat-tip: "<text>Tag length, boss bar, blocked commands and logout punishment.</text>"
  menu-combat-title: "<value>Combat</value>"
  menu-combat-intro: "<text>A hit keeps both sides in combat for </text><value>{seconds}s</value><text>.</text>"
  menu-newbie: "<white><icon:shield></white><accent>New players</accent>"
  menu-newbie-tip: "<text>How long a fresh player is safe from PvP.</text>"
  menu-newbie-title: "<value>New players</value>"
  menu-newbie-intro: "<text>A new player is protected for </text><value>{minutes} minutes</value><text>.</text>"
  menu-zones: "<white><icon:shield></white><accent>Safe zones</accent>"
  menu-zones-tip: "<text>Create a zone where you stand, or delete one.</text>"
  menu-zones-title: "<value>Safe zones</value>"
  menu-zones-empty: "<text>No safe zones yet.</text>"
  menu-zone-line: "<text> - </text><value>{zone}</value>"
  menu-zone-field: "<text>Name of the new zone</text>"
  menu-zone-radius: "<text>Radius in blocks</text>"
  menu-zone-height: "<text>Height, 0 for the whole column</text>"
  menu-zone-create: "<white><icon:yes></white><good>Create it where I stand</good>"
  menu-zone-create-tip: "<text>Uses the name and the numbers above.</text>"
  menu-zone-delete: "<white><icon:delete></white><bad>Delete {zone}</bad>"
  menu-zone-delete-tip: "<text>Remove the safe zone {zone}.</text>"
  menu-fighting: "<white><icon:combat></white><accent>Fighting now</accent>"
  menu-fighting-tip: "<text>Everyone with a live combat tag.</text>"
  menu-fighting-title: "<value>Fighting now</value>"
  menu-fighting-line: "<text> - </text><value>{player}</value><text>, {seconds}s left</text>"
  menu-fighting-empty: "<text>Nobody is in combat.</text>"
  menu-untag: "<white><icon:delete></white><value>Untag {player}</value>"
  menu-untag-tip: "<text>End the combat tag of {player}.</text>"
  menu-reload: "<white><icon:reload></white><text>Reload config</text>"
  menu-reload-tip: "<text>Read config.yml and zones.yml again.</text>"

  switch-on: "<white><icon:yes></white><good><bold>ON</bold></good>  <value>{title}</value>"
  switch-off: "<white><icon:no></white><bad><bold>OFF</bold></bad> <text>{title}</text>"
  step-up: "<value>{title} +{by}</value> <muted>({value})</muted>"
  step-down: "<value>{title} -{by}</value> <muted>({value})</muted>"
  step-tip: "<text>Click to change the number.</text>"
  field-seconds: "Seconds"
  field-minutes: "Minutes"
  switch-boss-bar: "Boss bar"
  switch-boss-bar-tip: "<text>Show a red bar with the countdown while tagged.</text>"
  switch-action-bar: "Action bar"
  switch-action-bar-tip: "<text>Show the countdown above the hotbar as well.</text>"
  switch-block-teleport: "Block teleports"
  switch-block-teleport-tip: "<text>No /home, /spawn or warps while tagged.</text>"
  switch-block-plugin-teleport: "Block plugin teleports"
  switch-block-plugin-teleport-tip: "<text>Also stop teleports other plugins start.</text>"
  switch-disable-flight: "No flying in combat"
  switch-disable-flight-tip: "<text>Takes flight away while tagged and gives it back after.</text>"
  switch-disable-elytra: "No elytra in combat"
  switch-disable-elytra-tip: "<text>Stops gliding while tagged.</text>"
  switch-clear-on-kill: "Clear on kill"
  switch-clear-on-kill-tip: "<text>Killing your opponent ends your own tag.</text>"
  switch-announce-logout: "Announce combat log"
  switch-announce-logout-tip: "<text>Tell the server when somebody logs out in combat.</text>"
  switch-command-whitelist: "Command list is a whitelist"
  switch-command-whitelist-tip: "<text>On: only the listed commands work while tagged.</text>"
  switch-logout-kill: "<good>■</good> <value>Logout: kill</value>"
  switch-logout-none: "<muted>■</muted> <text>Logout: nothing</text>"
  switch-logout-tip: "<text>What happens to somebody who logs out in combat.</text>"
  switch-newbie-enabled: "Protection on"
  switch-newbie-enabled-tip: "<text>New players cannot be hit until it runs out.</text>"
  switch-newbie-drop: "Attacking drops it"
  switch-newbie-drop-tip: "<text>Hitting someone ends your own protection.</text>"

  potion-banned: "<bad>That potion is banned on this server.</bad>"
  tagged: "<text>{player} is now in combat.</text>"
  untagged: "<text>{player} is out of combat.</text>"

# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: true

Config guide

The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.

combat:
  seconds: 15
  boss-bar: true
  boss-bar-colour: RED
  block-teleport: true
  clear-on-kill: true
  on-logout: kill            kill, or none
  logout-commands: []        e.g. ["ban {player} 1h combat log"]
  commands-are-whitelist: false
  blocked-commands: [spawn, home, tp, warp, back, hub, ...]
newbie:
  enabled: true
  minutes: 30
  drop-on-attack: true
banned-potions: []           e.g. [strength, invisibility]

FAQ

Which servers and versions does it run on?

It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.

Does it need other plugins?

No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present.

How do I apply config changes?

Edit plugins/Standoff/config.yml and run /standoff reload (reload the config). A restart works too.

Does it run on Folia, or for Bedrock players?

Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.

What licence do I get?

The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.