Skip to content

resourcenodes.yml

Mountains: regions, weighted block palettes, refill times anchored to midnight, protection, and refill speed.

How it plays: read the guide

Every example on this page is taken from the shipped resourcenodes.yml. Changes apply with /hcf reload.

The shipped Mountains are examples

They are the land of server teams that do not exist yet — Glowstone and OreMountain — so they do nothing until you draw them (/resourcenode claim <id>), and they refill only when staff ask (/resourcenode refill <id>) until you give them interval-seconds or times.

General settings

resourcenodes.yml
enabled: true

# How often the refill schedule is examined, in seconds. Nothing counts down per
# second here, so this can be coarse - it only bounds how late a refill or a
# warning can be.
tick-seconds: 5

# Time zone the refill 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 refill.
time-zone: "system"

# How many block positions a refill examines per tick, shared between the refills
# running at once. A mountain is tens of thousands of blocks; setting them all in
# one tick would freeze the server, so the work is spread.
#   lower  - gentler, refills take longer to finish
#   higher - refills finish sooner, each tick costs more
blocks-per-tick: 4000

# Whether placing a block triggers a physics update on its neighbours.
# Off by default: a refill sets thousands of blocks at once and the Paper javadoc
# for Block#setType(Material, boolean) warns that doing that with physics is
# expensive. Turn it on only if a palette below contains blocks that need gravity
# or support to behave correctly (sand, gravel).
apply-physics: false

# Whether a refill leaves empty the blocks a player's body is in. A refill fills
# air, and a player mining in the region is standing in air: without this, one
# landing mid-fight fills the space around them and they suffocate in the
# resource. They can mine their way out of a full mountain either way; this
# decides whether a refill can kill somebody. Spectators are never counted.
skip-occupied-blocks: true
Key As shipped What it does
enabled true Every Mountain
tick-seconds 5 How often the refill schedule is examined
time-zone system The zone refill times are read in
blocks-per-tick 4000 Block positions examined per tick, shared by running refills
apply-physics false Physics updates on placed blocks — only for sand, gravel and the like
skip-occupied-blocks true A refill leaves empty the blocks a player's body is in

A Mountain

Under nodes:, one entry per Mountain. The Glowstone Mountain as shipped:

resourcenodes.yml — the Glowstone Mountain
glowstone-mountain:
  display-name: "{warning}Glowstone Mountain"

  # The Mountain is server land: the land of the server team named here, drawn
  # with the claiming wand. /resourcenode claim glowstone-mountain makes the team
  # (a combat zone) if it does not exist yet and hands you the wand. Its region
  # is that land between y-min and y-max, bounds included: keep it to the
  # mountain itself, every position inside is examined on each refill. Several
  # claims make one region, the box around them - keep them side by side. The
  # team's land above and below those heights is server land like any other.
  # A Mountain whose team holds no land neither refills nor protects anything.
  claim: Glowstone
  y-min: 40
  y-max: 80
  #
  # Or, with no claim, the box between two corners, bounds included, in any order:
  #   world: world_nether
  #   corner-1: {x: 40, y: 40, z: 40}
  #   corner-2: {x: 70, y: 80, z: 70}

  # What the refill puts back. Two shapes are accepted:
  #
  #   blocks: [GLOWSTONE, NETHERRACK]     <- a plain list, all equally likely
  #
  #   blocks:                             <- name: weight, for a mix
  #     GLOWSTONE: 1
  #     NETHERRACK: 4
  #
  # Weights are relative, not percentages: 1 beside 4 means one block in five is
  # glowstone. Nothing has to add up to 100.
  # Names are Minecraft block names; an unknown one is reported in the console at
  # startup and skipped, never guessed at.
  blocks:
    GLOWSTONE: 1
    NETHERRACK: 4

  # Which blocks a refill may overwrite.
  #   air    - refill what players mined out. This is what you normally want.
  #   blocks - extra block names the refill may also replace, for repairing a
  #            region players filled with something of their own.
  # A refill never touches anything else, so a region is repaired rather than
  # rebuilt from scratch.
  replace:
    air: true
    blocks: []

  # When it refills. The two sources are merged, and both may be used.
  #
  #   interval-seconds - every N seconds, ANCHORED TO LOCAL MIDNIGHT. 14400
  #                      means 00:00, 04:00, 08:00 ... every day, whatever the
  #                      server did in between: a restart cannot shift the hours
  #                      and players can learn them. If the interval does not
  #                      divide 24 hours evenly, the last window before midnight
  #                      is shorter than the others.
  #   times            - explicit local times of day.
  #
  # Leave both empty for a node only staff can refill with
  # /resourcenode refill <id>.
  #
  # Shipped at 0, staff only: a refill writes blocks into the world, and the
  # region above is an example - left scheduled, a fresh server would fill
  # that box of the Nether with glowstone every four hours. Move the region onto
  # your mountain, then set interval-seconds: 14400 (every four hours) or times.
  refill:
    interval-seconds: 0
    times: []

  # How long before a refill to warn the server, in seconds. This is what makes
  # a refill a rendez-vous rather than a surprise: teams need notice to travel.
  # A warning at or beyond the interval itself is ignored - it would be
  # permanently on screen.
  announce-before-seconds: [300, 60]

  # Whether the refill itself is broadcast.
  announce-refill: true

  # Whether the region is filled once when the server starts. Off by default: on
  # an established map the region already holds its blocks, and a fill on every
  # restart is a needless pass over tens of thousands of positions.
  fill-on-start: false

  protection:
    # No building inside the region: no towering over the mountain, no walling
    # it off, no lava buckets. The same goes for what no player places by hand:
    # pistons cannot push blocks in or pull the structure out, and liquids poured
    # outside cannot flow in. Liquid already inside the region keeps flowing.
    prevent-build: true

    # What may be mined inside the region:
    #   PALETTE_ONLY - only the blocks this node places (GLOWSTONE, NETHERRACK
    #                  above). The structure survives, so there is still a
    #                  mountain to refill next time.
    #   ANY          - anything. The region is then only non-buildable, and
    #                  players will eventually flatten it.
    break-policy: PALETTE_ONLY

    # Whether teams are refused claims overlapping the region. Leave this on:
    # a claimed mountain is a mountain one team owns. (A Mountain that is a
    # server team's land cannot be claimed over anyway.)
    prevent-claim: true

    # Whether explosions are stopped from breaking the region.
    #
    # Leave this on too. Without it break-policy above is decorative: a player
    # refused the netherrack blows it up instead, and after a few days there is
    # no mountain left for the refill to fill.
    prevent-explosions: true

The region, the box between two corners, bounds included, in any order:

resourcenodes.yml
# The Mountain is server land: the land of the server team named here, drawn
# with the claiming wand. /resourcenode claim glowstone-mountain makes the team
# (a combat zone) if it does not exist yet and hands you the wand. Its region
# is that land between y-min and y-max, bounds included: keep it to the
# mountain itself, every position inside is examined on each refill. Several
# claims make one region, the box around them - keep them side by side. The
# team's land above and below those heights is server land like any other.
# A Mountain whose team holds no land neither refills nor protects anything.
claim: Glowstone
y-min: 40
y-max: 80
#
# Or, with no claim, the box between two corners, bounds included, in any order:
#   world: world_nether
#   corner-1: {x: 40, y: 40, z: 40}
#   corner-2: {x: 70, y: 80, z: 70}

What it refills with, a weighted palette (or a plain list for equal weights):

resourcenodes.yml
# What the refill puts back. Two shapes are accepted:
#
#   blocks: [GLOWSTONE, NETHERRACK]     <- a plain list, all equally likely
#
#   blocks:                             <- name: weight, for a mix
#     GLOWSTONE: 1
#     NETHERRACK: 4
#
# Weights are relative, not percentages: 1 beside 4 means one block in five is
# glowstone. Nothing has to add up to 100.
# Names are Minecraft block names; an unknown one is reported in the console at
# startup and skipped, never guessed at.
blocks:
  GLOWSTONE: 1
  NETHERRACK: 4

What a refill may overwrite:

resourcenodes.yml
# Which blocks a refill may overwrite.
#   air    - refill what players mined out. This is what you normally want.
#   blocks - extra block names the refill may also replace, for repairing a
#            region players filled with something of their own.
# A refill never touches anything else, so a region is repaired rather than
# rebuilt from scratch.
replace:
  air: true
  blocks: []

When it refills, and the announcements:

resourcenodes.yml
# When it refills. The two sources are merged, and both may be used.
#
#   interval-seconds - every N seconds, ANCHORED TO LOCAL MIDNIGHT. 14400
#                      means 00:00, 04:00, 08:00 ... every day, whatever the
#                      server did in between: a restart cannot shift the hours
#                      and players can learn them. If the interval does not
#                      divide 24 hours evenly, the last window before midnight
#                      is shorter than the others.
#   times            - explicit local times of day.
#
# Leave both empty for a node only staff can refill with
# /resourcenode refill <id>.
#
# Shipped at 0, staff only: a refill writes blocks into the world, and the
# region above is an example - left scheduled, a fresh server would fill
# that box of the Nether with glowstone every four hours. Move the region onto
# your mountain, then set interval-seconds: 14400 (every four hours) or times.
refill:
  interval-seconds: 0
  times: []

# How long before a refill to warn the server, in seconds. This is what makes
# a refill a rendez-vous rather than a surprise: teams need notice to travel.
# A warning at or beyond the interval itself is ignored - it would be
# permanently on screen.
announce-before-seconds: [300, 60]

# Whether the refill itself is broadcast.
announce-refill: true

# Whether the region is filled once when the server starts. Off by default: on
# an established map the region already holds its blocks, and a fill on every
# restart is a needless pass over tens of thousands of positions.
fill-on-start: false

Its protection:

resourcenodes.yml
protection:
  # No building inside the region: no towering over the mountain, no walling
  # it off, no lava buckets. The same goes for what no player places by hand:
  # pistons cannot push blocks in or pull the structure out, and liquids poured
  # outside cannot flow in. Liquid already inside the region keeps flowing.
  prevent-build: true

  # What may be mined inside the region:
  #   PALETTE_ONLY - only the blocks this node places (GLOWSTONE, NETHERRACK
  #                  above). The structure survives, so there is still a
  #                  mountain to refill next time.
  #   ANY          - anything. The region is then only non-buildable, and
  #                  players will eventually flatten it.
  break-policy: PALETTE_ONLY

  # Whether teams are refused claims overlapping the region. Leave this on:
  # a claimed mountain is a mountain one team owns. (A Mountain that is a
  # server team's land cannot be claimed over anyway.)
  prevent-claim: true

  # Whether explosions are stopped from breaking the region.
  #
  # Leave this on too. Without it break-policy above is decorative: a player
  # refused the netherrack blows it up instead, and after a few days there is
  # no mountain left for the refill to fill.
  prevent-explosions: true
Key As shipped What it does
display-name an example Its name in messages
claim Glowstone, OreMountain The server team whose land the Mountain is, drawn with the claiming wand (/resourcenode claim <id>). Several claims make one region, the box around them
y-min, y-max 40–80, 30–60 The Mountain's heights within that land; above and below is server land like any other
world, corner-1, corner-2 — Instead of claim: the box between two corners
blocks glowstone 1, netherrack 4 Block name to weight; relative, not percentages
replace.air true Refill what was mined out
replace.blocks [] Extra blocks a refill may replace
refill.interval-seconds 0 Every N seconds, anchored to local midnight; 0 for none
refill.times [] Explicit local times
announce-before-seconds [300, 60] Warnings before a refill
announce-refill true Announce the refill once done
fill-on-start false Fill the region when the server starts
protection.prevent-build true No building inside, by hand, piston or liquid
protection.break-policy PALETTE_ONLY What can be mined: PALETTE_ONLY or ANY
protection.prevent-claim true No claim overlapping the region
protection.prevent-explosions true Explosions cannot break the region

A second Mountain, with another palette:

resourcenodes.yml — the Ore Mountain
ore-mountain:
  display-name: "{secondary}Ore Mountain"
  claim: OreMountain
  y-min: 30
  y-max: 60
  blocks:
    STONE: 12
    IRON_ORE: 4
    GOLD_ORE: 2
    DIAMOND_ORE: 1
    EMERALD_ORE: 1
  replace:
    air: true
    blocks: []
  refill:
    interval-seconds: 0
    times: []
  announce-before-seconds: [60]
  announce-refill: true
  fill-on-start: false
  protection:
    prevent-build: true
    break-policy: PALETTE_ONLY
    prevent-claim: true
    prevent-explosions: true

The whole shipped file

View it on GitHub.

resourcenodes.yml
# ---------------------------------------------------------------------------
# HCFCore - Resource nodes (Mountain, Glowstone Mountain, Ore Mountain)
# ---------------------------------------------------------------------------
# This is NOT a capture event. Nothing is held, nobody wins and nothing is
# rewarded: a region refills with configured blocks on a timer, the server says
# so, and several teams show up at once. The fight is the point - the plugin only
# provides the reason for it.
#
# Nodes are DATA, not code. A second mountain is a block of YAML under "nodes:".
#
# 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 refill schedule is examined, in seconds. Nothing counts down per
# second here, so this can be coarse - it only bounds how late a refill or a
# warning can be.
tick-seconds: 5

# Time zone the refill 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 refill.
time-zone: "system"

# How many block positions a refill examines per tick, shared between the refills
# running at once. A mountain is tens of thousands of blocks; setting them all in
# one tick would freeze the server, so the work is spread.
#   lower  - gentler, refills take longer to finish
#   higher - refills finish sooner, each tick costs more
blocks-per-tick: 4000

# Whether placing a block triggers a physics update on its neighbours.
# Off by default: a refill sets thousands of blocks at once and the Paper javadoc
# for Block#setType(Material, boolean) warns that doing that with physics is
# expensive. Turn it on only if a palette below contains blocks that need gravity
# or support to behave correctly (sand, gravel).
apply-physics: false

# Whether a refill leaves empty the blocks a player's body is in. A refill fills
# air, and a player mining in the region is standing in air: without this, one
# landing mid-fight fills the space around them and they suffocate in the
# resource. They can mine their way out of a full mountain either way; this
# decides whether a refill can kill somebody. Spectators are never counted.
skip-occupied-blocks: true

nodes:

  # ------------------------------------------------------------------
  # Glowstone Mountain: the classic. Glowstone is the bottleneck resource for
  # level II potions, so a refill reliably pulls every team onto the same rock.
  # ------------------------------------------------------------------
  glowstone-mountain:
    display-name: "{warning}Glowstone Mountain"

    # The Mountain is server land: the land of the server team named here, drawn
    # with the claiming wand. /resourcenode claim glowstone-mountain makes the team
    # (a combat zone) if it does not exist yet and hands you the wand. Its region
    # is that land between y-min and y-max, bounds included: keep it to the
    # mountain itself, every position inside is examined on each refill. Several
    # claims make one region, the box around them - keep them side by side. The
    # team's land above and below those heights is server land like any other.
    # A Mountain whose team holds no land neither refills nor protects anything.
    claim: Glowstone
    y-min: 40
    y-max: 80
    #
    # Or, with no claim, the box between two corners, bounds included, in any order:
    #   world: world_nether
    #   corner-1: {x: 40, y: 40, z: 40}
    #   corner-2: {x: 70, y: 80, z: 70}

    # What the refill puts back. Two shapes are accepted:
    #
    #   blocks: [GLOWSTONE, NETHERRACK]     <- a plain list, all equally likely
    #
    #   blocks:                             <- name: weight, for a mix
    #     GLOWSTONE: 1
    #     NETHERRACK: 4
    #
    # Weights are relative, not percentages: 1 beside 4 means one block in five is
    # glowstone. Nothing has to add up to 100.
    # Names are Minecraft block names; an unknown one is reported in the console at
    # startup and skipped, never guessed at.
    blocks:
      GLOWSTONE: 1
      NETHERRACK: 4

    # Which blocks a refill may overwrite.
    #   air    - refill what players mined out. This is what you normally want.
    #   blocks - extra block names the refill may also replace, for repairing a
    #            region players filled with something of their own.
    # A refill never touches anything else, so a region is repaired rather than
    # rebuilt from scratch.
    replace:
      air: true
      blocks: []

    # When it refills. The two sources are merged, and both may be used.
    #
    #   interval-seconds - every N seconds, ANCHORED TO LOCAL MIDNIGHT. 14400
    #                      means 00:00, 04:00, 08:00 ... every day, whatever the
    #                      server did in between: a restart cannot shift the hours
    #                      and players can learn them. If the interval does not
    #                      divide 24 hours evenly, the last window before midnight
    #                      is shorter than the others.
    #   times            - explicit local times of day.
    #
    # Leave both empty for a node only staff can refill with
    # /resourcenode refill <id>.
    #
    # Shipped at 0, staff only: a refill writes blocks into the world, and the
    # region above is an example - left scheduled, a fresh server would fill
    # that box of the Nether with glowstone every four hours. Move the region onto
    # your mountain, then set interval-seconds: 14400 (every four hours) or times.
    refill:
      interval-seconds: 0
      times: []

    # How long before a refill to warn the server, in seconds. This is what makes
    # a refill a rendez-vous rather than a surprise: teams need notice to travel.
    # A warning at or beyond the interval itself is ignored - it would be
    # permanently on screen.
    announce-before-seconds: [300, 60]

    # Whether the refill itself is broadcast.
    announce-refill: true

    # Whether the region is filled once when the server starts. Off by default: on
    # an established map the region already holds its blocks, and a fill on every
    # restart is a needless pass over tens of thousands of positions.
    fill-on-start: false

    protection:
      # No building inside the region: no towering over the mountain, no walling
      # it off, no lava buckets. The same goes for what no player places by hand:
      # pistons cannot push blocks in or pull the structure out, and liquids poured
      # outside cannot flow in. Liquid already inside the region keeps flowing.
      prevent-build: true

      # What may be mined inside the region:
      #   PALETTE_ONLY - only the blocks this node places (GLOWSTONE, NETHERRACK
      #                  above). The structure survives, so there is still a
      #                  mountain to refill next time.
      #   ANY          - anything. The region is then only non-buildable, and
      #                  players will eventually flatten it.
      break-policy: PALETTE_ONLY

      # Whether teams are refused claims overlapping the region. Leave this on:
      # a claimed mountain is a mountain one team owns. (A Mountain that is a
      # server team's land cannot be claimed over anyway.)
      prevent-claim: true

      # Whether explosions are stopped from breaking the region.
      #
      # Leave this on too. Without it break-policy above is decorative: a player
      # refused the netherrack blows it up instead, and after a few days there is
      # no mountain left for the refill to fill.
      prevent-explosions: true

  # ------------------------------------------------------------------
  # Ore Mountain: the same mechanic, a different palette. No code of its own -
  # which is the point of family B being data too.
  # Staff-only until you give it a schedule.
  # ------------------------------------------------------------------
  ore-mountain:
    display-name: "{secondary}Ore Mountain"
    claim: OreMountain
    y-min: 30
    y-max: 60
    blocks:
      STONE: 12
      IRON_ORE: 4
      GOLD_ORE: 2
      DIAMOND_ORE: 1
      EMERALD_ORE: 1
    replace:
      air: true
      blocks: []
    refill:
      interval-seconds: 0
      times: []
    announce-before-seconds: [60]
    announce-refill: true
    fill-on-start: false
    protection:
      prevent-build: true
      break-policy: PALETTE_ONLY
      prevent-claim: true
      prevent-explosions: true