mc.pvpers.us
Online
← The Frontier Suite

FrontierBorder

v2.3.1World

The world border grows itself from combined player-hours — one predictable expansion a night.

What it does

The overworld starts small and earns its growth from how much everyone played. Once a day, at a configured local hour, FrontierBorder reads yesterday’s AFK-aware playtime from FrontierTab, matches the combined hours against a tier table, clamps the result by current world size, and animates the border outward (the Nether follows at 1/8 scale, the End optionally).

The distinctive choices: expansion is *scheduled* — one nightly event everyone can watch, sized by the previous full day — rather than a silent trickle, and thresholds scale with the number of active players so five people playing an hour each is harder to clear than one person playing five.

It also carries two small server-wide policies: it sets the JVM’s default timezone from server-timezone before any other plugin loads (so every plugin’s "midnight" is your local midnight even on hosts that run Java in UTC), and it can cancel enderman block grief without touching mobGriefing.

Requires & integrates with

Required
Paper 26.2+, Java 25+, FrontierTab — source of playtime; the plugin refuses to load without it.
Optional
None. A Discord webhook URL can be set for expansion announcements.
Used by
FrontierTab (reads data.yml plus config for the Border: 1500 → 1750 header element) · FrontierStatsAPI (serves data.yml on /api/border)

Heads up: this plugin will not enable without FrontierTabinstalled. Everything else listed as optional is genuinely optional — the feature simply doesn't appear.

Commands

All commands also work from console.

CommandWhoWhat it does
/borderinfoEveryoneRadius / max, center, total expansions, paused state, and tonight’s preview (yesterday’s hours, active players, blocks earned) or period progress in continuous mode
/border infoAdminSame output as /borderinfo
/border expand <amount>AdminGrow the radius by <amount> blocks now (animated over expand-duration, clamped to max-radius); recorded as manual
/border set <radius>AdminSet the radius directly (instant), mirror to other dimensions, and reset the period counters so auto-expansion is re-armed
/border pauseAdminPause automatic expansion (playtime still accrues; flag persists across restarts)
/border resumeAdminResume automatic expansion
/border resetAdminZero the period playtime counter and re-arm expansion for this period
/border autopregen [on|off]AdminShow or toggle automatic ring pre-generation after expansions (writes auto-pregen back to config.yml)
/border pregenAdminPre-generate every chunk inside the current overworld border, with a broadcast progress bar every 10 s
/border cancelpregenAdminStop a running pre-generation

Permissions

Player features default to true, staff features to op. Every node follows frontier.<plugin>.<action>, so a LuckPerms setup is e.g. lp group default permission set frontier.shop.use true. Wildcards work: frontier.reputation.*.

NodeDefaultGrants
frontier.border.adminop/border and every subcommand
frontier.border.infotrue/borderinfo

Config reference

File

plugins/FrontierBorder/config.yml

To apply changes

Restart required — no reload command. Only auto-pregen is written live, by /border autopregen.

KeyDefaultWhat it controls
server-timezonesystemIANA zone id (e.g. America/New_York) applied to the whole JVM at load; system leaves the host default alone; unknown ids are logged and ignored
reset-modedailydaily or weekly — the period model used by continuous mode and /border reset
reset-hour0Hour (0–23, server-local) the period counter resets
week-reset-daySUNDAYDay the weekly reset fires; only used when reset-mode: weekly
expansion-modescheduledscheduled = one expansion per day at expansion-hour sized by yesterday’s playtime; continuous = top up toward the earned tier on every check
expansion-hour21Hour (0–23, server-local) the scheduled expansion fires (first check at or after this hour)
expansion-tiers5 tiers: 8h→500, 5h→400, 3h→300, 1.5h→200, 0.5h→100Combined player-hours → blocks; one entry per tier, fields hours, blocks; first match wins so list highest-hours first
world-size-caps3 caps: <4000→500, <7000→375, <10000→250Clamp on any single expansion by current radius; one entry per cap, fields below-radius, max-blocks; first match wins so list smallest radius first
check-interval-minutes10Scheduler period; also the precision of the expansion time
expand-duration60Seconds the border animates outward
announce-expansiontrueChat broadcast plus sound to everyone online on expansion
broadcast-soundENTITY_PLAYER_LEVELUPAny Bukkit Sound name; an invalid name is silent
discord-webhook-url""POSTs an embed on every automatic expansion; empty = off
auto-pregenfalseRing-pregenerate the new band after each automatic expansion (CPU-heavy; enable on the live server, not a test box)
prevent-enderman-grieftrueCancel enderman block pickup and placement without touching the mobGriefing gamerule
KeyDefaultWhat it controls
border.initial-radius1750Radius (not diameter) applied on first boot
border.max-radius10000Hard ceiling; expansion stops here
border.dimensions.nethertrueMirror the overworld border into the Nether at 1/8 scale
border.dimensions.endfalseMirror into the End at 1:1; false pushes the End border to the vanilla maximum (unbounded)
KeyDefaultWhat it controls
scaling.enabledtrueMultiply tier hour thresholds by activePlayers^exponent (a lone player is never scaled)
scaling.exponent1.15Population-scaling exponent
scaling.min-active-seconds0Period playtime needed to count as an "active" player (0 = any participation)

Good to know

  • +Scheduled mode reads *yesterday’s* playtime, so a fresh server’s first expansion happens the day after people first play; a zero-playtime day simply doesn’t expand.
  • +plugins/FrontierBorder/data.yml is the plugin’s public state (current-radius, total-expansions, paused, expansion-history with {date, from, to, player-hours, active-players, triggered-by}) — safe to read from other tools. The plugin re-applies the border every boot and syncs current-radius back if someone runs vanilla /worldborder set.
  • +/border set also zeroes the period counters. If you only want to correct the radius, use vanilla /worldborder set instead — that is picked up without touching the schedule.
  • +/border autopregen calls saveConfig(), which strips the comments from config.yml — hand-edit if you want to keep them.
  • +Both list keys are "first match wins": tiers highest-hours first, caps smallest-radius first, or you silently get the wrong number.

Looking for something specific? Search the whole suite.