Skip to content

events.yml

Capture events: KOTHs, Citadels (a zone to hold inside a claimed Citadel with its restrictions), Kill the King, Conquest, DTC, Last Break, Slide, their schedules and rewards, and the zone holograms.

How it plays: read the guide

Every example on this page is taken from the shipped events.yml. Changes apply with /hcf reload. Event ids are shared by every kind — KOTH, Citadel, Kill the King, Conquest, DTC, Last Break, Slide, Totem — and must be unique across the file. Any event with land may name its server team in a claim key: /events delete releases that team's land with the event. It may also say disable-abilities: never, during-event or always: when partner items are refused on its land, overriding disabled-in.event-territory in abilities.yml (absent: that setting decides).

Every event can be set up in game

/events create, claim, setzone, delzone, setblock and delete write into the sections below for you, whatever the kind of event — the only commands in the plugin that ever rewrite a configuration file. See the guide.

The shipped events are examples

Their zones sit at made-up coordinates and none has a schedule: they run only when staff start them (/events start <id>). Move them onto your map, then give them times.

General settings

events.yml
enabled: true

# How often the server samples who is standing in a running zone. 1 second is
# the natural value: capture countdowns are displayed in seconds, so sampling
# less often would make the announced time drift from what players see.
# Raise it only if you have a measured reason to.
tick-seconds: 1

# Time zone the "schedule" times below are read in.
# "system" follows the host clock. Prefer naming a zone explicitly (for example
# "Europe/Paris") so moving the server to another host does not silently shift
# every event by a few hours.
time-zone: "system"

# Broadcast when a zone becomes contested. Announced only when the state
# changes, never every tick, so a long brawl produces one message and not one
# per second.
announce-contests: true

# Whether a player with no team freezes a capture by standing in the zone.
#   true  - they are everybody's enemy and block the capture (usual HCF reading)
#   false - teams can capture around them
# A teamless player can never HOLD a zone either way: capturing is a team act.
teamless-players-contest: true
Key As shipped What it does
enabled true Every event
tick-seconds 1 How often the zones are sampled; 1 matches the countdowns
time-zone system The zone schedule times are read in. Write yours: "Europe/Paris"
announce-contests true Say when a zone becomes contested, once per change
teamless-players-contest true Whether a player with no team freezes a capture

Weekly schedule

Which event starts at what time on which day, every week — see the guide. /schedule add|remove write the days for you.

events.yml
# The weekly schedule: which event starts at what time on which day, every week -
# listed for everybody with /schedule, and started by the plugin itself exactly
# as /events start would. It sits alongside each event's own "schedule" (daily
# times), which /schedule lists too.
#
# Each day holds "HH:mm <event id>" entries, read in time-zone above. Staff edit
# it in game with /schedule add <day> <HH:mm> <event> and
# /schedule remove <day> <HH:mm> [event], which write here.
#
# A start refused - the event already running, another one of its kind running,
# too few players for Kill the King - is reported in the console and skipped.
# Nothing is caught up: a time that passes while the server is down is missed.
weekly-schedule:
  enabled: true
  # Minutes before every start - weekly or daily - to announce it. [] for none.
  announce-before-minutes: [15, 5, 1]
  # /schedule as a window rather than a list in the chat: one item per day of the
  # week ahead. /schedule chat asks for the list either way, and the console
  # always gets it.
  # An event still running when a planned one starts (the 14:00 KOTH not over at
  # 15:00): replace - it is stopped, with no winner, and the planned one starts;
  # skip - it goes on and the planned one is not started; both - both run.
  # Kill the King is never started by the schedule: staff start it (its time is
  # shown in /schedule and announced).
  overlap: replace

  menu:
    enabled: true
    today-material: CLOCK
    day-material: PAPER
    empty-material: GRAY_DYE
    # The colour each event is written in, in the window and in /schedule chat:
    # by kind, or by an event's id (an id wins over its kind). Colour codes (&6)
    # or a hex colour (&#ffaa00).
    colors:
      koth: "&6"
      citadel: "&5"
      ktk: "&c"
      conquest: "&b"
      dtc: "&9"
      lastbreak: "&4"
      slide: "&a"
      totem: "&e"
      minitotem: "&3"

  # Shipped empty: the example events are not on your map yet. For instance:
  #   friday: ["20:00 koth"]
  #   saturday: ["18:00 conquest", "21:00 citadel"]
  days:
    monday: []
    tuesday: []
    wednesday: []
    thursday: []
    friday: []
    saturday: []
    sunday: []
Key As shipped What it does
enabled true Whether the plugin starts the weekly starts; /schedule lists them either way
announce-before-minutes [15, 5, 1] Minutes before every start, weekly or daily, to announce it
overlap replace An event still running when a planned one starts: replace stops it (no winner) for the planned one, skip keeps it and skips the planned one, both runs them together. Kill the King is never started by the schedule
days.<day> [] "HH:mm <event id>" entries, read in time-zone. A day is monday...sunday, or its first three letters
menu.enabled true /schedule opens a window, one item per day of the week ahead; false prints the list in the chat, as /schedule chat always does
menu.today-material · day-material · empty-material CLOCK · PAPER · GRAY_DYE The item standing for today, for a day with events, and for a day with none
menu.colors one per kind The colour each event is written in, window and chat alike: by kind (koth, citadel, ktk, conquest, dtc, lastbreak, slide, totem, minitotem) or by an event's id, which wins

Event signs

events.yml
# A won event leaves a sign, as a kill does: the event, who won it and when. To
# the winner of Kill the King, or to every online member of the winning team. Its
# four lines are in the language file (events.capture-sign); written on the sign by
# the plugin when placed, and never editable.
capture-signs:
  enabled: true
  material: OAK_SIGN
  date-format: "dd/MM/yyyy HH:mm"
Key As shipped What it does
enabled true A won event leaves a sign to its winner — the King's killer or King, or every online member of the winning team
material OAK_SIGN Any standing or hanging sign
date-format dd/MM/yyyy HH:mm How %date% is written

Zone holograms

events.yml
# A hologram above each capture zone - KOTH, Citadel, every Conquest zone - for as
# long as the zone is configured: while its event runs, the time left and who
# holds it; otherwise, when it runs next. Texts in lang/en.yml (events.hologram).
# Drawn by the hologram module, so holograms.yml must be enabled too.
zone-holograms:
  enabled: true
  # Blocks above the top of the zone.
  height: 3.0
Key As shipped What it does
enabled true A hologram above every KOTH, Citadel, Conquest, DTC, Last Break and Slide zone. holograms.yml must be enabled too
height 3.0 Blocks above the top of the zone (or the core, for DTC and Last Break)

Setup commands

What the setup commands do by default — see the guide.

events.yml
# The staff setup commands - the same for every kind of event:
#   /events create <type> <id>   a new event where you stand
#   /events info <id>            what it has, what it lacks, the command for each
#   /events claim <id>           its territory, with the claiming wand
#   /events setzone <id> [zone]  its zone (a Conquest's named zone), with the wand
#   /events setblock <id>        a DTC's core, a Totem's column: the block looked at
#   /events delete <id>          the event, and its territory with it
# (docs/gameplay/events.md). They write into THIS file - the only commands in the
# plugin that ever do (docs/getting-started/upgrading.md), and only the one
# section of the one event they touch.
#
# A new event is copied from this file's example of its kind, as the plugin
# ships it (hard-coded: the jar's copy, never yours), moved to where you stand,
# with no schedule. Its territory belongs to a server team named after it (its
# "claim" key), a combat zone.
#
# Any event with land may also carry "disable-abilities: never", "during-event"
# or "always": when partner items are refused on its territory, whatever
# abilities.yml says (disabled-in.event-territory) for events that say nothing.
setup:
  # /events create claims the new event's territory at once: its zones and
  # claim-margin blocks around them. false leaves it to /events claim.
  auto-claim: true
  claim-margin: 10
  # /events setblock looks this many blocks along where the player is looking.
  target-distance: 10
  # A zone is part of its event's territory: drawn past its edge, the territory
  # grows to hold it and claim-margin blocks around it (land another team holds
  # stays theirs). false only warns, as /events claim is then yours to use.
  zone-claims-land: true
  # /events setzone hands over the claiming wand: left-click one corner,
  # right-click the other, sneak + left-click to write the zone. It runs from the
  # lower of the two clicked blocks to this many blocks above the higher one.
  zone-height: 10
Key As shipped What it does
auto-claim true /events create claims the new event's territory at once; false leaves it to /events claim
claim-margin 10 Blocks of territory /events create claims around the new event's zones, and /events setzone around a zone drawn past the territory's edge
zone-claims-land true A zone drawn past its event's territory makes the territory grow to hold it; false only warns
target-distance 10 How far /events setblock looks along where the player is looking
zone-height 10 A zone drawn with the wand rises this many blocks above the higher clicked block

A new event is a copy of the plugin's own example of its kind — the jar's, never your file's: that stays hard-coded. Every event with land has a claim key naming its server team; /events create and /events claim write it.

KOTH

Under events:, one entry per KOTH.

events.yml — the shipped KOTH
koth:
  display-name: "{primary}KOTH"

  # The zone is the cuboid between the two corners, bounds included. Write the
  # corners in whichever order you walked them - they are normalised on load.
  world: world
  corner-1:
    x: 100
    y: 60
    z: 100
  corner-2:
    x: 115
    y: 90
    z: 115

  # Seconds of uninterrupted holding needed to win.
  capture-seconds: 600

  # What LOSING the zone does to the countdown:
  #   RESET - back to full. The classic, brutal behaviour: pushed off at
  #           nine minutes means starting over.
  #   PAUSE - freezes where it is and resumes for whoever holds next.
  # This changes how a KOTH plays more than any other single value here.
  #
  # Being contested is NOT losing the zone. An enemy standing in it freezes the
  # countdown and costs the holder nothing; the progress is only wiped (under
  # RESET) when the zone actually empties or another team takes sole control.
  # Otherwise one player touching the zone for a single tick would erase nine
  # minutes of work.
  contest-policy: RESET

  # While the zone is contested - another team in it with the holder:
  #   pause    - the countdown freezes until one team holds it alone again.
  #   continue - the team that held it keeps counting down as long as it is
  #              still in the zone: a challenger has to push it out.
  when-contested: pause

  # Hard stop for an event nobody manages to win. 0 = runs until someone does.
  # Must be at least capture-seconds, or the event could never be won; a
  # smaller value is refused on load and treated as 0.
  max-duration-seconds: 0

  # Remaining-time marks to broadcast, in seconds. Each fires once per attempt
  # and they are announced again after a RESET, so a fresh attempt gets its own
  # warnings. A mark at or above capture-seconds is ignored - it would fire the
  # instant the event opens.
  announce-at-seconds: [300, 120, 60, 30, 10]

  # Local times of day at which this event opens by itself, read in time-zone
  # above. Leave the list empty for an event only staff can open with
  # /events start <id>.
  #
  # Shipped empty: the zone above is an example, and an event that opens by
  # itself on a fresh server would announce a KOTH on land nobody has built.
  # Move the zone to your map, then give it its times, for instance:
  #   schedule: ["18:00", "21:00"]
  schedule: []

  # Console commands run on capture. Placeholders: %team%, %event%.
  # Rewards are team-scoped, matching the fact that a capture is credited to a
  # team - there is no %player% here on purpose.
  # The capture itself is always counted through the team module, which owns
  # the points-per-capture scale and the cap (see teams.yml, "koth").
  reward-commands: []
Key As shipped What it does
display-name &6KOTH Its name in messages
world, corner-1, corner-2 an example The zone to hold: the box between the corners, bounds included, in any order
capture-seconds 600 Seconds of holding alone needed to win
contest-policy RESET What losing the zone does: RESET back to full, PAUSE frozen for the next holder
when-contested pause While another team stands in the zone with the holder: pause freezes the countdown; continue lets the holder keep counting down as long as it is still in the zone
max-duration-seconds 0 A hard stop with no winner; 0 runs until someone wins. At least capture-seconds
announce-at-seconds [300, 120, 60, 30, 10] Remaining-time marks to broadcast
schedule [] Local times it opens by itself, e.g. ["18:00", "21:00"]
reward-commands [] Console commands for the winner, with %team% and %event%

Citadel

Under citadels:: a KOTH — every key above works the same — plus the Citadel's claim and what it refuses.

events.yml — the shipped Citadel
citadel:
  display-name: "{primary}Citadel"

  # The zone to hold, inside the Citadel.
  world: world
  corner-1:
    x: -200
    y: 60
    z: -200
  corner-2:
    x: -185
    y: 90
    z: -185
  capture-seconds: 1800
  contest-policy: RESET
  when-contested: pause
  max-duration-seconds: 0
  announce-at-seconds: [900, 600, 300, 60, 30, 10]
  # No schedule: staff open it with /events start citadel until you decide
  # when it should run.
  schedule: []
  reward-commands: []

  # The server team whose land is the Citadel.
  claim: Citadel

  # What the Citadel's land refuses.
  restrictions:
    # Throwing an ender pearl from inside.
    ender-pearls: true
    # Using a partner item (abilities.yml) inside.
    partner-items: true
    # Eating a chorus fruit - or any food that teleports - inside.
    chorus-fruit: true
    # Taking off with elytra inside; a player gliding in lands.
    elytra: true
    # Launching with a Riptide trident inside.
    riptide: true

The two keys only a Citadel has:

events.yml
# The server team whose land is the Citadel.
claim: Citadel

# What the Citadel's land refuses.
restrictions:
  # Throwing an ender pearl from inside.
  ender-pearls: true
  # Using a partner item (abilities.yml) inside.
  partner-items: true
  # Eating a chorus fruit - or any food that teleports - inside.
  chorus-fruit: true
  # Taking off with elytra inside; a player gliding in lands.
  elytra: true
  # Launching with a Riptide trident inside.
  riptide: true
Key As shipped What it does
claim Citadel The server team whose land is the Citadel — /events claim citadel makes it and hands over the wand
restrictions.ender-pearls true No ender pearl thrown from inside
restrictions.partner-items true No partner item (abilities.yml) used inside; class abilities still work
restrictions.chorus-fruit true No chorus fruit, or any food that teleports, eaten inside
restrictions.elytra true No take-off with elytra; a player gliding in lands
restrictions.riptide true No Riptide trident charged inside

The restrictions hold on the Citadel's land at all times, whether the event runs or not.

Kill the King

Under kill-the-king:. The arena is the warzone of world, set in claims.yml.

events.yml — the shipped Kill the King
ktk:
  display-name: "{error}Kill the King"
  world: world

  # How long the King must survive.
  duration-seconds: 1800

  # Eligible players needed online (survival or adventure mode, not exempt).
  # Below that the event is called off - a King alone on the server would win
  # by waiting.
  minimum-players: 2

  # How often the King's position and health (as a percentage) go to chat, in
  # seconds. 0 turns it off. The position is on the scoreboard all along -
  # %king_location_line% in ui.yml, redrawn with the board (every 20 ticks) -
  # and a waypoint for Lunar Client players.
  announce-interval-seconds: 60

  # Remaining-time marks to broadcast, in seconds.
  announce-at-seconds: [900, 300, 60, 10]

  # A Wither and damage for a King outside the warzone - off as shipped: the
  # King is kept in by a wall (reign.wall below), and a Wither could be abused.
  # The count starts over each time the King comes back in.
  outside-penalty:
    enabled: false
    # Seconds outside before anything happens: a King knocked over the border
    # by a hit is not punished for it.
    grace-seconds: 3
    # Plain damage per second outside, after the grace (2.0 = one heart).
    damage-per-second: 1.0
    # Wither level once the grace is over (1 = Wither I), one level more every
    # wither-step-seconds, up to wither-max-level.
    wither-start-level: 1
    wither-step-seconds: 10
    wither-max-level: 5

  # The King's kit. Materials and enchantments use the server's names
  # (minecraft:protection, or just protection). A name the server does not
  # know is reported at load and left out; the rest of the kit stands.
  # Enchantment levels may exceed the vanilla maximum.
  kit:
    helmet:
      material: DIAMOND_HELMET
      name: "{primary}Crown of the King"
      enchantments: {protection: 4, unbreaking: 3}
    chestplate:
      material: DIAMOND_CHESTPLATE
      enchantments: {protection: 4, unbreaking: 3}
    leggings:
      material: DIAMOND_LEGGINGS
      enchantments: {protection: 4, unbreaking: 3}
    boots:
      material: DIAMOND_BOOTS
      enchantments: {protection: 4, feather_falling: 4, unbreaking: 3}
    items:
      - material: DIAMOND_SWORD
        enchantments: {sharpness: 5, unbreaking: 3}
      - material: GOLDEN_APPLE
        amount: 16
      - material: ENDER_PEARL
        amount: 16
    # Effects for the length of the reign, as levels (1 = Speed I).
    effects:
      speed: 2
      resistance: 1

  # Local times of day at which it starts by itself (time-zone above). Empty:
  # only staff start it, with /events start ktk.
  schedule: []

  # How it is fought:
  #   team - the King's team defends them against every other player. The
  #          winner's team scores points.per-king-win (teams.yml).
  #   solo - everybody against the King, their own teammates and allies
  #          included, and the King may strike anybody back. No team scores:
  #          the reward commands below are the winner's own reward.
  # Either way nobody helps the King: no Bard buff, no partner item, no potion
  # thrown by somebody else, no beacon. The kit, and what they drink or eat
  # themselves, is all they fight with.
  mode: team

  # What the crown asks of the King, and what dying with it costs. The King's
  # own items are put aside at the crowning and come back at the respawn, whatever
  # is set here.
  reign:
    # The King cannot take off the kit's armour: no click, drag or key swap on an
    # armour slot, no right-click swap with a piece in hand.
    lock-armour: true
    # true: the kit falls at the King's death, as loot for the killer
    # (loot-protection, pvp.yml). false: it vanishes with the reign. What the
    # King picked up during the reign falls either way.
    drop-kit: false
    # The King's death takes DTR from their team, as any death would.
    death-costs-dtr: false
    # The King's death deathbans them, as any death would.
    deathban: false
    # A King who logs out ends the event with no winner and is banned for this
    # long, in seconds (2 hours). 0: no ban.
    quit-ban-seconds: 7200
    # A player idle this long - no move, look, chat, command or click - is never
    # drawn as King. 0 draws anybody online.
    afk-seconds: 300
    # The King cannot leave the warzone - walking, a pearl, a teleport - and sees
    # its edge as a wall when near it, as a player in combat sees spawn's.
    wall:
      enabled: true
      material: RED_STAINED_GLASS
      radius-blocks: 15

  # Console commands run for the winner - the killer, or the King.
  # Placeholders: %player%, %event%. For a solo King, the prize, for instance:
  #   reward-commands: ["crate key give %player% king 1", "eco give %player% 1000"]
  reward-commands: []
Key As shipped What it does
display-name, world &4Kill the King, world Its name, and the world whose warzone is the arena
duration-seconds 1800 How long the King must survive
minimum-players 2 Eligible players needed online; below, the event is called off
announce-interval-seconds 60 How often the King's position and health go to chat; 0 never. The position is on the scoreboard all along
announce-at-seconds [900, 300, 60, 10] Remaining-time marks to broadcast
schedule, reward-commands [] As for a KOTH; rewards get %player% (the King or the killer) and %event%
mode team team: the King's team defends them, the winner's team scores. solo: everybody against the King, teammates included, and the reward commands are the whole prize — no team scores

Leaving the warzone — a Wither and damage, off as shipped: the King cannot leave the warzone at all (reign.wall below), and a Wither could be abused.

events.yml
# A Wither and damage for a King outside the warzone - off as shipped: the
# King is kept in by a wall (reign.wall below), and a Wither could be abused.
# The count starts over each time the King comes back in.
outside-penalty:
  enabled: false
  # Seconds outside before anything happens: a King knocked over the border
  # by a hit is not punished for it.
  grace-seconds: 3
  # Plain damage per second outside, after the grace (2.0 = one heart).
  damage-per-second: 1.0
  # Wither level once the grace is over (1 = Wither I), one level more every
  # wither-step-seconds, up to wither-max-level.
  wither-start-level: 1
  wither-step-seconds: 10
  wither-max-level: 5
Key As shipped What it does
enabled false Whether being outside costs the King anything. Missing from a file written before, it is off: add enabled: true to keep the Wither
grace-seconds 3 Seconds outside before anything happens
damage-per-second 1.0 Damage each second outside after the grace; 2.0 is a heart
wither-start-level 1 Wither level once the grace is over
wither-step-seconds 10 One level more every this many seconds
wither-max-level 5 The highest level

The King's kit:

events.yml
# The King's kit. Materials and enchantments use the server's names
# (minecraft:protection, or just protection). A name the server does not
# know is reported at load and left out; the rest of the kit stands.
# Enchantment levels may exceed the vanilla maximum.
kit:
  helmet:
    material: DIAMOND_HELMET
    name: "{primary}Crown of the King"
    enchantments: {protection: 4, unbreaking: 3}
  chestplate:
    material: DIAMOND_CHESTPLATE
    enchantments: {protection: 4, unbreaking: 3}
  leggings:
    material: DIAMOND_LEGGINGS
    enchantments: {protection: 4, unbreaking: 3}
  boots:
    material: DIAMOND_BOOTS
    enchantments: {protection: 4, feather_falling: 4, unbreaking: 3}
  items:
    - material: DIAMOND_SWORD
      enchantments: {sharpness: 5, unbreaking: 3}
    - material: GOLDEN_APPLE
      amount: 16
    - material: ENDER_PEARL
      amount: 16
  # Effects for the length of the reign, as levels (1 = Speed I).
  effects:
    speed: 2
    resistance: 1

helmet, chestplate, leggings, boots and each of items take a material, and optionally a name, an amount and enchantments (levels may exceed vanilla). effects gives effects for the reign, as levels. An unknown name is reported and left out.

The reign — what the crown asks, and what dying with it costs:

events.yml
# What the crown asks of the King, and what dying with it costs. The King's
# own items are put aside at the crowning and come back at the respawn, whatever
# is set here.
reign:
  # The King cannot take off the kit's armour: no click, drag or key swap on an
  # armour slot, no right-click swap with a piece in hand.
  lock-armour: true
  # true: the kit falls at the King's death, as loot for the killer
  # (loot-protection, pvp.yml). false: it vanishes with the reign. What the
  # King picked up during the reign falls either way.
  drop-kit: false
  # The King's death takes DTR from their team, as any death would.
  death-costs-dtr: false
  # The King's death deathbans them, as any death would.
  deathban: false
  # A King who logs out ends the event with no winner and is banned for this
  # long, in seconds (2 hours). 0: no ban.
  quit-ban-seconds: 7200
  # A player idle this long - no move, look, chat, command or click - is never
  # drawn as King. 0 draws anybody online.
  afk-seconds: 300
  # The King cannot leave the warzone - walking, a pearl, a teleport - and sees
  # its edge as a wall when near it, as a player in combat sees spawn's.
  wall:
    enabled: true
    material: RED_STAINED_GLASS
    radius-blocks: 15
Key As shipped What it does
lock-armour true The King cannot take off their armour
drop-kit false true: the kit falls at the King's death, loot for the killer; false: it vanishes
death-costs-dtr false The King's death takes DTR from their team
deathban false The King's death deathbans them
quit-ban-seconds 7200 A King who logs out ends the event with no winner and is banned this long — 2 hours; 0 for no ban. Never shortens a ban already running
afk-seconds 300 A player idle this long — no move, look, chat, command or click — is never drawn as King; 0 draws anybody
wall.enabled · material · radius-blocks true · RED_STAINED_GLASS · 15 The King sees the warzone's edge as a wall within that many blocks, all round. Leaving is refused either way: walking, a pearl, a teleport

Existing servers: without a reign section, these values apply — copy it from the jar to change them.

Conquest

Under conquest:.

events.yml — the shipped Conquest
conquest:
  display-name: "{primary}Conquest"
  world: world

  # Seconds a team must hold a zone alone to score from it.
  capture-seconds: 30
  # What one capture of one zone is worth.
  points-per-capture: 1
  # The target: the first team to reach it wins.
  points-to-win: 250
  # Points a team loses when one of its members dies.
  death-penalty: 20

  # What losing a zone does to its countdown: RESET or PAUSE, as for a KOTH.
  contest-policy: RESET
  when-contested: pause

  # Hard stop with no winner, in seconds. 0 = runs until somebody wins.
  max-duration-seconds: 0

  # Local times at which it opens by itself; empty for staff only.
  schedule: []

  # Console commands run for the winner. Placeholders: %team%, %event%.
  reward-commands: []

  zones:
    red:
      display-name: "{error}Red"
      corner-1: {x: 300, y: 60, z: 300}
      corner-2: {x: 306, y: 70, z: 306}
    blue:
      display-name: "{primary}Blue"
      corner-1: {x: 340, y: 60, z: 300}
      corner-2: {x: 346, y: 70, z: 306}
    green:
      display-name: "{success}Green"
      corner-1: {x: 300, y: 60, z: 340}
      corner-2: {x: 306, y: 70, z: 346}
    yellow:
      display-name: "{warning}Yellow"
      corner-1: {x: 340, y: 60, z: 340}
      corner-2: {x: 346, y: 70, z: 346}
Key As shipped What it does
display-name, world &6Conquest, world Its name and world
capture-seconds 30 Seconds a team must hold a zone alone to score
points-per-capture 1 Points one capture is worth
points-to-win 250 The target
death-penalty 20 Points a team loses when one of its members dies
contest-policy, when-contested, max-duration-seconds, schedule RESET, pause, 0, [] As for a KOTH, zone by zone
reward-commands [] For the winner, with %team% and %event%
zones four examples Each with a display-name and two corners
events.yml — its zones
zones:
  red:
    display-name: "{error}Red"
    corner-1: {x: 300, y: 60, z: 300}
    corner-2: {x: 306, y: 70, z: 306}
  blue:
    display-name: "{primary}Blue"
    corner-1: {x: 340, y: 60, z: 300}
    corner-2: {x: 346, y: 70, z: 306}
  green:
    display-name: "{success}Green"
    corner-1: {x: 300, y: 60, z: 340}
    corner-2: {x: 306, y: 70, z: 346}
  yellow:
    display-name: "{warning}Yellow"
    corner-1: {x: 340, y: 60, z: 340}
    corner-2: {x: 346, y: 70, z: 346}

DTC (Destroy The Core)

Under dtc:, one entry per DTC. DTC and Last Break share one run slot — only one of the two runs at a time, whatever their ids: starting one while the other runs is refused.

events.yml — the shipped DTC
dtc:
  display-name: "{primary}DTC"
  world: world
  corner-1: {x: 400, y: 60, z: 400}
  corner-2: {x: 420, y: 80, z: 420}
  # "material" is what the core is while the event runs; "idle-material" what it
  # stands as between runs - bedrock, as a Totem's column does.
  core: {x: 410, y: 65, z: 410, material: END_STONE, idle-material: BEDROCK}
  counter: SHARED
  breaks: 150
  break-cooldown-seconds: 1
  announce-at: [125, 100, 75, 50, 25, 10]
  max-duration-seconds: 0
  schedule: []
  reward-commands: []
Key As shipped What it does
display-name, world, corner-1, corner-2 an example Its name and zone, as for a KOTH
core.x, core.y, core.z 410, 65, 410 The core's block — must be inside the zone
core.material END_STONE The block it is while the event runs, and reappears as after every break; must be a real, solid, non-air block with no gravity
core.idle-material BEDROCK What it stands as between runs, the way a Totem's column does
counter SHARED SHARED — the core has breaks common health, most breaks of its own wins a tie by whoever reached that count first. PER_TEAM — each team has its own count to breaks, first there wins at once
breaks 150 The core's common health (SHARED), or each team's target (PER_TEAM)
break-cooldown-seconds 1 Delay between two breaks of the SAME team; 0 for none. Another team is never blocked by it
announce-at [125, 100, 75, 50, 25, 10] Remaining-count marks to broadcast — remaining common health (SHARED), or remaining-to-target per team (PER_TEAM)
max-duration-seconds, schedule, reward-commands 0, [], [] As for a KOTH; rewards get %team% and %event%

Last Break

Under last-break: — the same engine as DTC, with no counter: it is always common health, and whichever team lands the break that empties it wins.

events.yml — the shipped Last Break
last-break:
  display-name: "{error}Last Break"
  world: world
  corner-1: {x: 450, y: 60, z: 400}
  corner-2: {x: 470, y: 80, z: 420}
  core: {x: 460, y: 65, z: 410, material: END_STONE, idle-material: BEDROCK}
  breaks: 150
  break-cooldown-seconds: 1
  announce-at: [125, 100, 75, 50, 25, 10, 5, 3, 2, 1]
  max-duration-seconds: 0
  schedule: []
  reward-commands: []

Every key is as for DTC, minus counter — and it shares DTC's one run slot (above).

Slide

Under slide:, one entry per Slide.

events.yml — the shipped Slide
slide:
  display-name: "{success}Slide"
  world: world
  corner-1: {x: 500, y: 60, z: 500}
  corner-2: {x: 515, y: 75, z: 515}
  points-per-player: 1
  interval-seconds: 1
  death-penalty: 10
  announce-deaths: true
  points-to-win: 500
  announce-at: [100, 250, 400, 450]
  max-duration-seconds: 0
  schedule: []
  reward-commands: []
Key As shipped What it does
display-name, world, corner-1, corner-2 an example Its name and zone
points-per-player 1 Points ONE team member standing in the zone brings their team, per interval — cumulative
interval-seconds 1 How often points are awarded
death-penalty 10 Points a team loses when a member dies, anywhere, while the Slide runs; never below zero
announce-deaths true Whether a death's point loss is broadcast; the points are always lost either way
points-to-win 500 The target
announce-at [100, 250, 400, 450] Points marks to broadcast, once per team
max-duration-seconds, schedule, reward-commands 0, [], [] As for a KOTH; rewards get %team% and %event%

Totem and Mini Totem

Under totem:, one entry per Totem — a Mini Totem is only a shorter one. How it plays: Totem

events.yml — the shipped Totem
totem:
  display-name: "{warning}Totem"
  world: world
  corner-1: {x: 600, y: 60, z: 600}
  corner-2: {x: 620, y: 80, z: 620}
  base: {x: 610, y: 64, z: 610}
  height: 5
  material: QUARTZ_BLOCK
  broken-material: BEDROCK
  idle-material: BEDROCK
  # The items a block may be broken with; an empty list allows anything.
  tools: [WOODEN_SWORD, STONE_SWORD, COPPER_SWORD, IRON_SWORD, GOLDEN_SWORD, DIAMOND_SWORD, NETHERITE_SWORD]
  # false: a block is mined the whole way with the sword, taking the time the
  # game gives it (a few seconds for quartz). true: one hit breaks it at once.
  instant-break: false
  # RESET or RESET_AND_START - see above.
  rival-break: RESET
  # Announce every block broken; the start, a reset and the win are always announced.
  announce-breaks: true
  max-duration-seconds: 0
  schedule: []
  # Placeholders: %team%, %event%.
  reward-commands: []
Key As shipped What it does
display-name, world, corner-1, corner-2 an example Its name and zone; the column must stand inside it
base an example The column's lowest block — set in game with /events setblock <id>
height 5 (3 for the Mini Totem) How many blocks the column is, 1 to 64
material QUARTZ_BLOCK The column during a run: what is broken
broken-material BEDROCK A block once a team has broken it
idle-material BEDROCK The column between runs
tools every sword What a block may be broken with; an empty list allows anything
instant-break false false: each block is mined the whole way with the sword, in the time the game gives it. true: one hit breaks it at once
rival-break RESET A block broken by another team: RESET starts the totem over and counts for nobody; RESET_AND_START also makes it the other team's first
announce-breaks true Announce every block broken; the start, a reset and the win are always announced
max-duration-seconds, schedule, reward-commands 0, [], [] As for a KOTH; rewards get %team% and %event%

What stays in code: one Totem runs at a time; creative, spectator and teamless players never break it; the column is always protected from explosions and pistons.

The whole shipped file

View it on GitHub.

events.yml
# ---------------------------------------------------------------------------
# HCFCore - Capture events (KOTH, Citadel and variants)
# ---------------------------------------------------------------------------
# Events with a zone to hold, a win condition, a timer and a reward.
#
# Events are DATA, not code. Adding a KOTH variant means adding a block under
# "events:" below - never a recompile. A Citadel ("citadels:") is a KOTH with a
# much longer hold, fought inside a claimed Citadel that refuses pearls, partner
# items and the other ways out.
#
# Changes take effect on /hcf reload.
#
# Lines "# --8<-- [start:...]" and "# --8<-- [end:...]" mark the parts the online
# documentation quotes from this file. They are comments and change nothing.
# ---------------------------------------------------------------------------

enabled: true

# How often the server samples who is standing in a running zone. 1 second is
# the natural value: capture countdowns are displayed in seconds, so sampling
# less often would make the announced time drift from what players see.
# Raise it only if you have a measured reason to.
tick-seconds: 1

# Time zone the "schedule" times below are read in.
# "system" follows the host clock. Prefer naming a zone explicitly (for example
# "Europe/Paris") so moving the server to another host does not silently shift
# every event by a few hours.
time-zone: "system"

# Broadcast when a zone becomes contested. Announced only when the state
# changes, never every tick, so a long brawl produces one message and not one
# per second.
announce-contests: true

# Whether a player with no team freezes a capture by standing in the zone.
#   true  - they are everybody's enemy and block the capture (usual HCF reading)
#   false - teams can capture around them
# A teamless player can never HOLD a zone either way: capturing is a team act.
teamless-players-contest: true

# Two teams that are ALLIED still contest each other: capture is strictly per
# team, for Conquest and KTK as well.

# A hologram above each capture zone - KOTH, Citadel, every Conquest zone - for as
# long as the zone is configured: while its event runs, the time left and who
# holds it; otherwise, when it runs next. Texts in lang/en.yml (events.hologram).
# Drawn by the hologram module, so holograms.yml must be enabled too.
zone-holograms:
  enabled: true
  # Blocks above the top of the zone.
  height: 3.0

# The staff setup commands - the same for every kind of event:
#   /events create <type> <id>   a new event where you stand
#   /events info <id>            what it has, what it lacks, the command for each
#   /events claim <id>           its territory, with the claiming wand
#   /events setzone <id> [zone]  its zone (a Conquest's named zone), with the wand
#   /events setblock <id>        a DTC's core, a Totem's column: the block looked at
#   /events delete <id>          the event, and its territory with it
# (docs/gameplay/events.md). They write into THIS file - the only commands in the
# plugin that ever do (docs/getting-started/upgrading.md), and only the one
# section of the one event they touch.
#
# A new event is copied from this file's example of its kind, as the plugin
# ships it (hard-coded: the jar's copy, never yours), moved to where you stand,
# with no schedule. Its territory belongs to a server team named after it (its
# "claim" key), a combat zone.
#
# Any event with land may also carry "disable-abilities: never", "during-event"
# or "always": when partner items are refused on its territory, whatever
# abilities.yml says (disabled-in.event-territory) for events that say nothing.
setup:
  # /events create claims the new event's territory at once: its zones and
  # claim-margin blocks around them. false leaves it to /events claim.
  auto-claim: true
  claim-margin: 10
  # /events setblock looks this many blocks along where the player is looking.
  target-distance: 10
  # A zone is part of its event's territory: drawn past its edge, the territory
  # grows to hold it and claim-margin blocks around it (land another team holds
  # stays theirs). false only warns, as /events claim is then yours to use.
  zone-claims-land: true
  # /events setzone hands over the claiming wand: left-click one corner,
  # right-click the other, sneak + left-click to write the zone. It runs from the
  # lower of the two clicked blocks to this many blocks above the higher one.
  zone-height: 10

# A won event leaves a sign, as a kill does: the event, who won it and when. To
# the winner of Kill the King, or to every online member of the winning team. Its
# four lines are in the language file (events.capture-sign); written on the sign by
# the plugin when placed, and never editable.
capture-signs:
  enabled: true
  material: OAK_SIGN
  date-format: "dd/MM/yyyy HH:mm"

# The weekly schedule: which event starts at what time on which day, every week -
# listed for everybody with /schedule, and started by the plugin itself exactly
# as /events start would. It sits alongside each event's own "schedule" (daily
# times), which /schedule lists too.
#
# Each day holds "HH:mm <event id>" entries, read in time-zone above. Staff edit
# it in game with /schedule add <day> <HH:mm> <event> and
# /schedule remove <day> <HH:mm> [event], which write here.
#
# A start refused - the event already running, another one of its kind running,
# too few players for Kill the King - is reported in the console and skipped.
# Nothing is caught up: a time that passes while the server is down is missed.
weekly-schedule:
  enabled: true
  # Minutes before every start - weekly or daily - to announce it. [] for none.
  announce-before-minutes: [15, 5, 1]
  # /schedule as a window rather than a list in the chat: one item per day of the
  # week ahead. /schedule chat asks for the list either way, and the console
  # always gets it.
  # An event still running when a planned one starts (the 14:00 KOTH not over at
  # 15:00): replace - it is stopped, with no winner, and the planned one starts;
  # skip - it goes on and the planned one is not started; both - both run.
  # Kill the King is never started by the schedule: staff start it (its time is
  # shown in /schedule and announced).
  overlap: replace

  menu:
    enabled: true
    today-material: CLOCK
    day-material: PAPER
    empty-material: GRAY_DYE
    # The colour each event is written in, in the window and in /schedule chat:
    # by kind, or by an event's id (an id wins over its kind). Colour codes (&6)
    # or a hex colour (&#ffaa00).
    colors:
      koth: "&6"
      citadel: "&5"
      ktk: "&c"
      conquest: "&b"
      dtc: "&9"
      lastbreak: "&4"
      slide: "&a"
      totem: "&e"
      minitotem: "&3"

  # Shipped empty: the example events are not on your map yet. For instance:
  #   friday: ["20:00 koth"]
  #   saturday: ["18:00 conquest", "21:00 citadel"]
  days:
    monday: []
    tuesday: []
    wednesday: []
    thursday: []
    friday: []
    saturday: []
    sunday: []

events:

  # ------------------------------------------------------------------
  # A classic KOTH: hold the zone for 10 uninterrupted minutes.
  # ------------------------------------------------------------------
  koth:
    display-name: "{primary}KOTH"

    # The zone is the cuboid between the two corners, bounds included. Write the
    # corners in whichever order you walked them - they are normalised on load.
    world: world
    corner-1:
      x: 100
      y: 60
      z: 100
    corner-2:
      x: 115
      y: 90
      z: 115

    # Seconds of uninterrupted holding needed to win.
    capture-seconds: 600

    # What LOSING the zone does to the countdown:
    #   RESET - back to full. The classic, brutal behaviour: pushed off at
    #           nine minutes means starting over.
    #   PAUSE - freezes where it is and resumes for whoever holds next.
    # This changes how a KOTH plays more than any other single value here.
    #
    # Being contested is NOT losing the zone. An enemy standing in it freezes the
    # countdown and costs the holder nothing; the progress is only wiped (under
    # RESET) when the zone actually empties or another team takes sole control.
    # Otherwise one player touching the zone for a single tick would erase nine
    # minutes of work.
    contest-policy: RESET

    # While the zone is contested - another team in it with the holder:
    #   pause    - the countdown freezes until one team holds it alone again.
    #   continue - the team that held it keeps counting down as long as it is
    #              still in the zone: a challenger has to push it out.
    when-contested: pause

    # Hard stop for an event nobody manages to win. 0 = runs until someone does.
    # Must be at least capture-seconds, or the event could never be won; a
    # smaller value is refused on load and treated as 0.
    max-duration-seconds: 0

    # Remaining-time marks to broadcast, in seconds. Each fires once per attempt
    # and they are announced again after a RESET, so a fresh attempt gets its own
    # warnings. A mark at or above capture-seconds is ignored - it would fire the
    # instant the event opens.
    announce-at-seconds: [300, 120, 60, 30, 10]

    # Local times of day at which this event opens by itself, read in time-zone
    # above. Leave the list empty for an event only staff can open with
    # /events start <id>.
    #
    # Shipped empty: the zone above is an example, and an event that opens by
    # itself on a fresh server would announce a KOTH on land nobody has built.
    # Move the zone to your map, then give it its times, for instance:
    #   schedule: ["18:00", "21:00"]
    schedule: []

    # Console commands run on capture. Placeholders: %team%, %event%.
    # Rewards are team-scoped, matching the fact that a capture is credited to a
    # team - there is no %player% here on purpose.
    # The capture itself is always counted through the team module, which owns
    # the points-per-capture scale and the cap (see teams.yml, "koth").
    reward-commands: []

# ---------------------------------------------------------------------------
# Citadel
# ---------------------------------------------------------------------------
# A KOTH with a much longer hold, fought inside a Citadel: a large area where the
# fight is decided by teams and classes, and where nobody gets away by throwing an
# item. So a Citadel has TWO zones:
#
#   - the zone to hold: the corners below, exactly as for a KOTH (capture time,
#     contest policy, schedule, rewards - all read the same way);
#   - the Citadel itself: server land, claimed around the zone for a server team
#     whose name is "claim" below - its territory, drawn with the claiming wand:
#         /events claim citadel
#     which makes the server team if it does not exist yet. Being server land,
#     nobody builds there, and /team map shows it.
#
# On the Citadel's land, AT ALL TIMES - whether the event runs or not - the
# restrictions below refuse what is switched on. Class abilities are not partner
# items and keep working: a Bard's buffs, an Archer's tag, a Rogue's backstab.
#
# Ids are shared with every other event (/events start <id>). The console warns
# when a Citadel starts without its claim, or with its zone outside it.
# ---------------------------------------------------------------------------

citadels:

  citadel:
    display-name: "{primary}Citadel"

    # The zone to hold, inside the Citadel.
    world: world
    corner-1:
      x: -200
      y: 60
      z: -200
    corner-2:
      x: -185
      y: 90
      z: -185
    capture-seconds: 1800
    contest-policy: RESET
    when-contested: pause
    max-duration-seconds: 0
    announce-at-seconds: [900, 600, 300, 60, 30, 10]
    # No schedule: staff open it with /events start citadel until you decide
    # when it should run.
    schedule: []
    reward-commands: []

    # The server team whose land is the Citadel.
    claim: Citadel

    # What the Citadel's land refuses.
    restrictions:
      # Throwing an ender pearl from inside.
      ender-pearls: true
      # Using a partner item (abilities.yml) inside.
      partner-items: true
      # Eating a chorus fruit - or any food that teleports - inside.
      chorus-fruit: true
      # Taking off with elytra inside; a player gliding in lands.
      elytra: true
      # Launching with a Riptide trident inside.
      riptide: true

# ---------------------------------------------------------------------------
# Kill the King
# ---------------------------------------------------------------------------
# A random online player is drawn as King, stripped of their items (they are kept
# safe and given back at the end), equipped with the kit below and sent to a
# random spot in the warzone. The King's position is on every scoreboard
# (%king_location_line% in ui.yml), a waypoint for Lunar Client players, and in
# chat every announce-interval-seconds with the King's health. The King wins if still alive when the time runs
# out; otherwise whoever kills the King wins - unless that player is on the
# King's team. Any other death (withered, fall, lava...) or a logout ends the event with
# no winner.
#
# THE EVENT ZONE IS THE WARZONE of "world", as set in claims.yml (warzone.worlds).
# There is no zone to draw here: a world without a warzone cannot run this event.
# The King is sent to the surface, so the world must not have a bedrock ceiling
# (not the Nether).
#
# While King, a player:
#   - cannot enter a safe zone (spawn) by any means - walking, pearls, commands,
#     portals - and a safe zone counts as outside the warzone anyway;
#   - cannot mount anything, drop items, open containers or use item frames,
#     armour stands and the like: the kit stays with the King, and what drops
#     at their death is the kit;
#   - keeps what they pick up. Only the kit is taken back at the end.
#
# Ids are shared with the capture events above (/events start <id>), so they
# must differ from them. Players with hcfcore.events.king.exempt are never drawn.
# ---------------------------------------------------------------------------

kill-the-king:

  ktk:
    display-name: "{error}Kill the King"
    world: world

    # How long the King must survive.
    duration-seconds: 1800

    # Eligible players needed online (survival or adventure mode, not exempt).
    # Below that the event is called off - a King alone on the server would win
    # by waiting.
    minimum-players: 2

    # How often the King's position and health (as a percentage) go to chat, in
    # seconds. 0 turns it off. The position is on the scoreboard all along -
    # %king_location_line% in ui.yml, redrawn with the board (every 20 ticks) -
    # and a waypoint for Lunar Client players.
    announce-interval-seconds: 60

    # Remaining-time marks to broadcast, in seconds.
    announce-at-seconds: [900, 300, 60, 10]

    # A Wither and damage for a King outside the warzone - off as shipped: the
    # King is kept in by a wall (reign.wall below), and a Wither could be abused.
    # The count starts over each time the King comes back in.
    outside-penalty:
      enabled: false
      # Seconds outside before anything happens: a King knocked over the border
      # by a hit is not punished for it.
      grace-seconds: 3
      # Plain damage per second outside, after the grace (2.0 = one heart).
      damage-per-second: 1.0
      # Wither level once the grace is over (1 = Wither I), one level more every
      # wither-step-seconds, up to wither-max-level.
      wither-start-level: 1
      wither-step-seconds: 10
      wither-max-level: 5

    # The King's kit. Materials and enchantments use the server's names
    # (minecraft:protection, or just protection). A name the server does not
    # know is reported at load and left out; the rest of the kit stands.
    # Enchantment levels may exceed the vanilla maximum.
    kit:
      helmet:
        material: DIAMOND_HELMET
        name: "{primary}Crown of the King"
        enchantments: {protection: 4, unbreaking: 3}
      chestplate:
        material: DIAMOND_CHESTPLATE
        enchantments: {protection: 4, unbreaking: 3}
      leggings:
        material: DIAMOND_LEGGINGS
        enchantments: {protection: 4, unbreaking: 3}
      boots:
        material: DIAMOND_BOOTS
        enchantments: {protection: 4, feather_falling: 4, unbreaking: 3}
      items:
        - material: DIAMOND_SWORD
          enchantments: {sharpness: 5, unbreaking: 3}
        - material: GOLDEN_APPLE
          amount: 16
        - material: ENDER_PEARL
          amount: 16
      # Effects for the length of the reign, as levels (1 = Speed I).
      effects:
        speed: 2
        resistance: 1

    # Local times of day at which it starts by itself (time-zone above). Empty:
    # only staff start it, with /events start ktk.
    schedule: []

    # How it is fought:
    #   team - the King's team defends them against every other player. The
    #          winner's team scores points.per-king-win (teams.yml).
    #   solo - everybody against the King, their own teammates and allies
    #          included, and the King may strike anybody back. No team scores:
    #          the reward commands below are the winner's own reward.
    # Either way nobody helps the King: no Bard buff, no partner item, no potion
    # thrown by somebody else, no beacon. The kit, and what they drink or eat
    # themselves, is all they fight with.
    mode: team

    # What the crown asks of the King, and what dying with it costs. The King's
    # own items are put aside at the crowning and come back at the respawn, whatever
    # is set here.
    reign:
      # The King cannot take off the kit's armour: no click, drag or key swap on an
      # armour slot, no right-click swap with a piece in hand.
      lock-armour: true
      # true: the kit falls at the King's death, as loot for the killer
      # (loot-protection, pvp.yml). false: it vanishes with the reign. What the
      # King picked up during the reign falls either way.
      drop-kit: false
      # The King's death takes DTR from their team, as any death would.
      death-costs-dtr: false
      # The King's death deathbans them, as any death would.
      deathban: false
      # A King who logs out ends the event with no winner and is banned for this
      # long, in seconds (2 hours). 0: no ban.
      quit-ban-seconds: 7200
      # A player idle this long - no move, look, chat, command or click - is never
      # drawn as King. 0 draws anybody online.
      afk-seconds: 300
      # The King cannot leave the warzone - walking, a pearl, a teleport - and sees
      # its edge as a wall when near it, as a player in combat sees spawn's.
      wall:
        enabled: true
        material: RED_STAINED_GLASS
        radius-blocks: 15

    # Console commands run for the winner - the killer, or the King.
    # Placeholders: %player%, %event%. For a solo King, the prize, for instance:
    #   reward-commands: ["crate key give %player% king 1", "eco give %player% 1000"]
    reward-commands: []

# ---------------------------------------------------------------------------
# Conquest
# ---------------------------------------------------------------------------
# The classic HCF Conquest. Several zones are
# captured AT THE SAME TIME, each the way a KOTH is - held alone by one team,
# frozen while contested, reset or paused when lost - but on a short timer. A
# capture ends nothing: it gives the holding team points and the zone's countdown
# starts again, so a team keeps scoring from a zone as long as it holds it. The
# first team to points-to-win wins, and its rewards run.
#
# A death of any member of a team, anywhere, while a Conquest runs costs that
# team death-penalty points (never below zero). Players with no team never hold
# a zone, and contest one as teamless-players-contest above says.
#
# One Conquest runs at a time. Ids are shared with the capture events and Kill
# the King (/events start <id>). Nothing is kept across a restart: a restart
# ends the Conquest, as it ends a KOTH.
#
# The example below has no schedule: staff open it with /events start conquest.
# The numbers are common HCF values, not rules - move the zones to your map and
# tune them.
# ---------------------------------------------------------------------------

conquest:

  conquest:
    display-name: "{primary}Conquest"
    world: world

    # Seconds a team must hold a zone alone to score from it.
    capture-seconds: 30
    # What one capture of one zone is worth.
    points-per-capture: 1
    # The target: the first team to reach it wins.
    points-to-win: 250
    # Points a team loses when one of its members dies.
    death-penalty: 20

    # What losing a zone does to its countdown: RESET or PAUSE, as for a KOTH.
    contest-policy: RESET
    when-contested: pause

    # Hard stop with no winner, in seconds. 0 = runs until somebody wins.
    max-duration-seconds: 0

    # Local times at which it opens by itself; empty for staff only.
    schedule: []

    # Console commands run for the winner. Placeholders: %team%, %event%.
    reward-commands: []

    zones:
      red:
        display-name: "{error}Red"
        corner-1: {x: 300, y: 60, z: 300}
        corner-2: {x: 306, y: 70, z: 306}
      blue:
        display-name: "{primary}Blue"
        corner-1: {x: 340, y: 60, z: 300}
        corner-2: {x: 346, y: 70, z: 306}
      green:
        display-name: "{success}Green"
        corner-1: {x: 300, y: 60, z: 340}
        corner-2: {x: 306, y: 70, z: 346}
      yellow:
        display-name: "{warning}Yellow"
        corner-1: {x: 340, y: 60, z: 340}
        corner-2: {x: 346, y: 70, z: 346}

# ---------------------------------------------------------------------------
# DTC (Destroy The Core) and Last Break
# ---------------------------------------------------------------------------
# One engine, two sections. A block core stands inside a zone; teams break it
# over and over - each team waits break-cooldown-seconds between its OWN breaks,
# never blocked by another team's. The core is PERMANENT: it reappears one tick
# after every break, stays after the run ends - as its idle-material, bedrock,
# the way a Totem's column does - and is protected from explosions and pistons at
# all times, running or not.
#
# DTC ("counter"):
#   SHARED   - the core has "breaks" common health. When it reaches zero, the
#              team with the most breaks of its OWN wins; a tie goes to whoever
#              reached that count first.
#   PER_TEAM - each team has its own count to "breaks"; the first to get there
#              wins at once, whatever the others have.
# Last Break has no "counter": it is always common health, and whichever team
# lands the break that empties it wins - even with fewer breaks than another.
#
# Creative, spectator and teamless players never break the core (hardcoded).
# Staff set them up with /events create|claim|setzone|setblock|delete - see
# docs/gameplay/events.md - which write into this file.
# ---------------------------------------------------------------------------

dtc:
  dtc:
    display-name: "{primary}DTC"
    world: world
    corner-1: {x: 400, y: 60, z: 400}
    corner-2: {x: 420, y: 80, z: 420}
    # "material" is what the core is while the event runs; "idle-material" what it
    # stands as between runs - bedrock, as a Totem's column does.
    core: {x: 410, y: 65, z: 410, material: END_STONE, idle-material: BEDROCK}
    counter: SHARED
    breaks: 150
    break-cooldown-seconds: 1
    announce-at: [125, 100, 75, 50, 25, 10]
    max-duration-seconds: 0
    schedule: []
    reward-commands: []

last-break:
  last-break:
    display-name: "{error}Last Break"
    world: world
    corner-1: {x: 450, y: 60, z: 400}
    corner-2: {x: 470, y: 80, z: 420}
    core: {x: 460, y: 65, z: 410, material: END_STONE, idle-material: BEDROCK}
    breaks: 150
    break-cooldown-seconds: 1
    announce-at: [125, 100, 75, 50, 25, 10, 5, 3, 2, 1]
    max-duration-seconds: 0
    schedule: []
    reward-commands: []

# ---------------------------------------------------------------------------
# Slide
# ---------------------------------------------------------------------------
# A zone where every team member present scores points-per-player for their
# team, every interval-seconds - cumulative, so three members score three times
# as fast. A death of any member, ANYWHERE on the server while the Slide runs,
# costs the team death-penalty points (never below zero; announce-deaths only
# mutes the broadcast, the points are always lost). The first team to
# points-to-win wins; several teams crossing it on the same tick hand it to
# whichever is highest, and an exact tie changes nothing. The top 3 teams are
# shown live on the scoreboard.
#
# Creative, spectator and teamless players never score (hardcoded).
# ---------------------------------------------------------------------------

slide:
  slide:
    display-name: "{success}Slide"
    world: world
    corner-1: {x: 500, y: 60, z: 500}
    corner-2: {x: 515, y: 75, z: 515}
    points-per-player: 1
    interval-seconds: 1
    death-penalty: 10
    announce-deaths: true
    points-to-win: 500
    announce-at: [100, 250, 400, 450]
    max-duration-seconds: 0
    schedule: []
    reward-commands: []

# ---------------------------------------------------------------------------
# Totem and Mini Totem
# ---------------------------------------------------------------------------
# A column of blocks standing on "base", height blocks high. Between runs it is
# idle-material (bedrock); a run turns it to material (quartz). Each block a
# team breaks - with one of the tools listed, every sword by default - becomes
# broken-material (bedrock again) and stays so. The first team to break the
# whole column wins. A block broken by ANY OTHER team starts the totem over,
# every block whole again (rival-break: RESET); with RESET_AND_START that break
# is then the other team's first. A Mini Totem is only a shorter column.
#
# Set one up in game: /events create totem <id> (or minitotem), then look at the
# block the column stands on and type /events setblock <id> - the column is
# built there, of bedrock. /events setzone <id> moves its zone.
#
# Creative, spectator and teamless players never break it (hardcoded). The
# column cannot be blown up or pushed by a piston, run or not. One Totem runs at
# a time.
# ---------------------------------------------------------------------------

totem:
  totem:
    display-name: "{warning}Totem"
    world: world
    corner-1: {x: 600, y: 60, z: 600}
    corner-2: {x: 620, y: 80, z: 620}
    base: {x: 610, y: 64, z: 610}
    height: 5
    material: QUARTZ_BLOCK
    broken-material: BEDROCK
    idle-material: BEDROCK
    # The items a block may be broken with; an empty list allows anything.
    tools: [WOODEN_SWORD, STONE_SWORD, COPPER_SWORD, IRON_SWORD, GOLDEN_SWORD, DIAMOND_SWORD, NETHERITE_SWORD]
    # false: a block is mined the whole way with the sword, taking the time the
    # game gives it (a few seconds for quartz). true: one hit breaks it at once.
    instant-break: false
    # RESET or RESET_AND_START - see above.
    rival-break: RESET
    # Announce every block broken; the start, a reset and the win are always announced.
    announce-breaks: true
    max-duration-seconds: 0
    schedule: []
    # Placeholders: %team%, %event%.
    reward-commands: []

  mini-totem:
    display-name: "{warning}Mini Totem"
    world: world
    corner-1: {x: 650, y: 60, z: 600}
    corner-2: {x: 670, y: 80, z: 620}
    base: {x: 660, y: 64, z: 610}
    height: 3
    material: QUARTZ_BLOCK
    broken-material: BEDROCK
    idle-material: BEDROCK
    tools: [WOODEN_SWORD, STONE_SWORD, COPPER_SWORD, IRON_SWORD, GOLDEN_SWORD, DIAMOND_SWORD, NETHERITE_SWORD]
    instant-break: false
    rival-break: RESET
    announce-breaks: true
    max-duration-seconds: 0
    schedule: []
    reward-commands: []