Alpha-systemDocs v2.0.1
Alpha-systemReferenceConfiguration

Configuration

What lives in each configuration file, and what to tune in config.yml.

On this page

File layout

plugins/Alpha-system/
  lang/
    messages.yml # every regular player-facing message
    deathmessages.yml # death message pools, by killer/cause — see below
  menus/
    players/settings.yml, ignore.yml, payment-confirm.yml, warps.yml # player menus
    staff/inventory.yml, enderchest.yml, confirm.yml # /invsee, /invedit GUIs
  config.yml # main config — features, every subsystem's settings, permission remaps
  punishments.yml # ban/mute/warn/jail message templates + kick screens (config+text combined)
  economy.yml # currency settings + economy messages (config+text combined)
  announcements.yml # auto-broadcast message pool + interval
  maintenance-state.yml # runtime — on/off + whitelist, not a template you edit
  socialspy-state.yml # runtime — per-player explicit toggle overrides
  chat-preferences.yml # runtime — each player's /settings choices and ignore list
  admin-audit.log # runtime — inventory changes made by staff, if enabled
  alphasystem.db # sqlite database file (if database.type: sqlite)
Two different reload behaviors. config.yml layers the jar's bundled defaults underneath what's on disk, so a simple missing scalar key still falls back correctly. lang/messages.yml, punishments.yml, economy.yml, and announcements.yml have no such layering — every key you want to change must actually exist in the on-disk file. And nested sections in config.yml (like warn.escalation.rules) must be written out in full on disk too — a Bukkit quirk where getConfigurationSection() on a path that only exists in the bundled jar returns an empty section instead of falling back.

Features

A single top-level toggle map — set any entry to false to fully disable that subsystem (command included). Requires /as reload or a restart.

features:
  settings: true
  ignore: true
  paytoggle: true
  payconfirm: true
  chat: true
  flyspeed: true
  gamemode: true
  heal: true
  feed: true
  god: true
  fly: true
  kill: true
  ping: true
  vanish: true
  invsee: true
  invedit: true
  enderchest: true
  tphere: true
  skull: true
  punish: true
  warps: true
  announcements: true
  chat-filter: true
  economy: true
  time: true
  alts: true
  hat: true
  tpsbar: true
  nv: true
  back: true
  freeze: true
  crafting: true
  anvil: true
  weather: true
  fixitem: true
  death-messages: true

Chat

chat:
  format-normal: true       # false if another plugin (TAB, etc.) handles normal chat format

  delete-button:
    enabled: true
    icon: "&#FF0000[x] "
    hover: "&#808080ᴄʟɪᴄᴋ ᴛᴏ ᴅᴇʟᴇᴛᴇ ᴛʜɪꜱ ᴍᴇꜱꜱᴀɢᴇ"
    replacement: "&#8C826B<italic>ᴛʜɪꜱ ᴍᴇꜱꜱᴀɢᴇ ᴡᴀꜱ ᴅᴇʟᴇᴛᴇᴅ.</italic>"
    remembered-messages: 200
    fallback-clear-lines: 100

remembered-messages caps how many recent messages (across chat, /sc, /mc, announcements, and private messages) stay eligible for deletion. fallback-clear-lines only matters when PacketEvents isn't installed — see Integrations → Chat deletion for what it actually does.

Join and quit messages are no longer part of chat:. They have their own join-quit: section, covered on Server systems. Set join-quit.enabled: false if another plugin already formats them.

Chat filter

chat-filter:
  words:
    - "badword1"
    - "badword2"
  warn-reason: "Used a prohibited word in chat"
  staff-alert: "{prefix}&#FF0000{player} &#808080ᴜꜱᴇᴅ ᴀ ꜰɪʟᴛᴇʀᴇᴅ ᴡᴏʀᴅ ᴀɴᴅ ᴡᴀꜱ ᴀᴜᴛᴏ-ᴡᴀʀɴᴇᴅ&#555555. &#808080(&#C8A96E{server}&#808080)"

Case-insensitive substring match against the word list. A match deletes the message before it ever reaches chat, auto-issues a /warn (which can itself trigger warn escalation), and alerts staff holding permissions.chat-filter-alert — network-wide if database.type: mysql.

Database

database:
  type: sqlite   # sqlite | h2 | mysql
  sqlite-file: alphasystem.db
  h2-file: alphasystem_h2
  mysql:
    host: localhost
    port: 3306
    database: alphasystem
    username: root
    password: ""
    use-ssl: false
TypeWhen to use it
sqliteDefault. Zero-config, local file, single server.
h2Embedded, pure-Java, no native libraries — a SQLite alternative on hosts that block native code. Still single-server only.
mysqlRequired for cross-server punishment sync, network-wide maintenance mode, and shared alt-detection across a network. See Integrations → Network sync.

Economy

economy.yml holds both the settings and every economy message. Alpha-system registers as the Vault economy provider when Vault is installed, and works on its own without it.

starting-balance: 100.0
decimal-places: 2          # only used when short-format is false
currency:
  symbol: "$"
  name-singular: "dollar"
  name-plural: "dollars"
  short-format: true       # 1000 -> 1k, 1500000 -> 1.5m
format: "&#00FF12{amount}"
top-players-count: 5
transaction-history:
  enabled: true
  retention-days: 90       # 0 = keep forever
  page-size: 8
transaction-safety:
  maximum-transaction: 1000000000000.0
  maximum-balance: 1000000000000000.0
  pay-cooldown-millis: 750
SectionWhat it does
transaction-historyRecords /pay, staff balance changes, Vault deposits and withdrawals, and built-in charges, each with an id you can reverse with /moneyrollback. Old records are deleted after retention-days.
transaction-safetyRejects NaN, infinite and negative amounts, balance overflow, paying yourself, and rapid duplicate /pay requests. Balance changes and their audit entry are written together.
baltop-formatThe layout of /baltop: {header}, {lines}, and blank lines for spacing.

Payment confirmation and the ignore limits are in config.yml, and are covered on Player settings.

Other config.yml sections

These sections each have a full explanation on Server systems:

SectionControls
combatCombat tag, its blocked commands and logout penalty.
teleport-safetySafe teleport search distances.
warps, spawn, backWarmup length, style and message.
respawnRespawn priority, custom location and safety.
nameplatesMulti-line labels above players.
join-quit, vanishJoin and quit visibility and the vanish reminder.
admin-auditInventory audit log, console and Discord output.
ignore, paymentsIgnore and payment confirmation.
bossbarmsg, titlemsg, actionbarmsg, announcements.permanentDefaults for the broadcast commands.
timeanimate and animate-seconds make the sun or moon glide to the target time instead of snapping. 3 seconds by default.
weather.extra-lightningExtra lightning near random players during a storm. real: false makes it visual and sound only.
fixitemOptional cost for /fixhand and /fixall: cost-type is none, money or xp (levels).
client-brandClient brand alerts for staff.
panelThe approval panel connection. See Server approval.

Config validation

Alpha-system checks config.yml before it uses it. Broken YAML and invalid values, such as an unknown enum, an out-of-range number or a bad respawn entry, are rejected, and each problem is reported with its exact path. On /as reload a failed check leaves the running configuration unchanged, so a typo cannot take features offline. At startup it is stricter: if validation fails, the plugin lists every error and disables itself until the file is fixed.

When an update changes the shape of config.yml, the plugin migrates it, keeps a backup next to it, and says so in the console (Migrated config.yml from vN to vM; backup: …). Do not edit config-version by hand.

Jail

jail:
  world: ""
  x: 0.0
  y: 0.0
  z: 0.0
  yaw: 0.0
  pitch: 0.0
  notify-style: bossbar   # bossbar | actionbar | title | none

  bossbar:
    text: "&#FF9400ᴊᴀɪʟᴇᴅ &#808080— &#C8A96E{remaining} &#808080ʀᴇᴍᴀɪɴɪɴɢ"
    color: RED
  actionbar:
    text: "&#FF9400ʏᴏᴜ ᴀʀᴇ ᴊᴀɪʟᴇᴅ &#808080— &#C8A96E{remaining} &#808080ʀᴇᴍᴀɪɴɪɴɢ"
  title:
    title: "&#FF9400ᴊᴀɪʟᴇᴅ"
    subtitle: "&#808080{remaining} ʀᴇᴍᴀɪɴɪɴɢ"

Set the location with /setjail rather than editing coordinates by hand. Remember: no movement radius is enforced automatically — build a physical containment area around this point yourself.

Restart

restart:
  style: bossbar   # bossbar | actionbar | title
  duration-seconds: 60
  relaunch-process: true
  message: "&#FF0000ꜱᴇʀᴠᴇʀ ʀᴇꜱᴛᴀʀᴛɪɴɢ ɪɴ &#C8A96E{time}ꜱ"
  title: "&#FF0000ʀᴇꜱᴛᴀʀᴛɪɴɢ"
  subtitle: "&#808080{time} ꜱᴇᴄᴏɴᴅꜱ"
  kick-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ʀᴇꜱᴛᴀʀᴛɪɴɢ&#555555. &#808080ᴡᴇ'ʟʟ ʙᴇ ʀɪɢʜᴛ ʙᴀᴄᴋ!"

  storm-effect:
    enabled: true
    interval-ticks: 60
    strikes-per-player: 1
    chance: 0.5

relaunch-process: true reconstructs the original java launch command (same binary, JVM flags, jar/args) and spawns a fresh process before this one shuts down — so /restart actually restarts rather than just stopping. Set it to false on a hosting panel that already auto-restarts on stop (or that kills child processes, which would break this anyway).

The storm-effect is purely cosmetic — rain, fog particles around each player, and lightning flashes 20-45 blocks out and well above ground level (never on top of a player, never real damage). Tuned for a noticeable-but-not-annoying pace by default; raise chance and lower interval-ticks for something more intense, or set enabled: false for a plain silent countdown.

Maintenance

maintenance:
  kick-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ɴᴏᴡ ɪɴ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ&#555555. &#808080ᴡᴇ'ʟʟ ʙᴇ ʀɪɢʜᴛ ʙᴀᴄᴋ!"
  join-deny-message: "&#FF0000ꜱᴇʀᴠᴇʀ ɪꜱ ᴄᴜʀʀᴇɴᴛʟʏ ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ&#555555. &#808080ᴄʜᴇᴄᴋ ʙᴀᴄᴋ ꜱᴏᴏɴ&#555555!"
  motd: "&#FF0000ꜱᴇʀᴠᴇʀ ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ\n&#808080ᴡᴇ'ʟʟ ʙᴇ ʙᴀᴄᴋ ꜱʜᴏʀᴛʟʏ&#555555!"

These are templates only — the actual on/off state and bypass whitelist live in maintenance-state.yml, managed entirely through the /maintenance command. Leave motd blank to keep the normal server-list MOTD from server.properties even while maintenance is active.

Warps GUI

menus/players/warps.yml uses the same DeluxeMenus-style layout as every other Alpha-system menu. warp, locked_warp and per_warp are templates for the dynamic warp items.

menu_version: 2
menu_title: "&#FF9400ᴡᴀʀᴘꜱ"
size: 27
open_commands:
  - "[sound] BLOCK_CHEST_OPEN 1 1"

items:
  warp:
    material: COMPASS
    display_name: "&#C8A96E{warp}"
    lore:
      - "&#808080ᴛʏᴘᴇ&#555555: &#C8A96E{visibility}"
      - "&#808080ᴄʀᴇᴀᴛᴇᴅ ʙʏ&#555555: &#C8A96E{creator}"
    left_click_commands:
      - "[sound] UI_BUTTON_CLICK 1 1"
      - "[close]"
      - "[warp] {warp}"
  locked_warp:
    material: GRAY_DYE
    display_name: "&#808080{warp}"
  per_warp: {}   # override one warp by name; omitted options fall back to items.warp

Action types: [warp], [player] (run as the clicking player), [console], [message], [sound], [close]. {warp}, {visibility}, {creator} and {player} work in names and lore. Menus use 27 slots and no filler panes by default. An older warps file is converted on update and a .legacy-v1.yml copy is kept.

bStats & update checker

bstats:
  enabled: true
  plugin-id: 0   # 0 = disabled until you set a real id

update-checker:
  enabled: true
  repo: "alpha-m19/alphacore-plugin"
  notify-ops-on-join: true

Both covered in depth in Integrations — in short: bstats.plugin-id stays 0 (metrics off) until you register the plugin at bstats.org and put the real id here, since a guessed id could send this server's data to someone else's project by mistake.

Reload vs. restart

/as reload re-reads config.yml, lang/messages.yml, lang/deathmessages.yml, punishments.yml, economy.yml, announcements.yml and every file under menus/ from disk, after validating them. Reopen a menu to see layout changes. It does not reload compiled Java — anything changed by updating the plugin jar itself needs a full server restart.