Integrations
Everything Alpha-system connects to outside of itself — other servers, Discord, webhooks, metrics, and Vault.
Network sync (MySQL)
Set database.type: mysql and point every server in your network at the same database to unlock:
- Staff on any connected server see ban/mute/warn/jail/chat-filter alerts from every other server
/maintenance server <name>and/maintenance networkbecome usable
network:
broadcast-scope: global # global = every server sees alerts | local = only the server it happened on
poll-interval-seconds: 3
overrides:
ban: global
mute: global
warn: global
jail: global
chat-filter: global
overrides lets you set a different scope per punishment type than the default — e.g. keep warns local-only but broadcast bans network-wide.
How it actually works
There's no direct server-to-server connection — every server independently polls a shared events table in the database every poll-interval-seconds. When a server publishes an event (a punishment, a maintenance toggle), it writes one row; every other server picks it up on its next poll and reacts locally. This is why /maintenance server/network need MySQL specifically — sqlite and h2 are both single-process, single-server files with no way for a second server to see writes from the first.
Discord webhook
discord:
webhook-url: ""
username: "Alpha-system"
avatar-url: ""
events:
ban: true
mute: true
warn: true
jail: true
color: "16750592"
title: "{type} — {player}"
description: "**Reason:** {reason}\n**By:** {punisher}\n**Duration:** {duration}"
Leave webhook-url empty to disable entirely. Fires a Discord embed for each punishment type independently toggled under discord.events. See Placeholders → Discord webhook for the exact template placeholders.
Reports webhook
reports:
webhook-url: ""
cooldown-seconds: 60
Fired every time a player runs /report. Unlike the Discord webhook above, this is not a Discord embed — it's plain JSON, so either a Discord bot or a website's own backend can consume it directly:
{
"id": 42,
"reporter": "Notch",
"reported": "Herobrine",
"reason": "griefing spawn",
"server": "survival",
"timestamp": 1737072000000
}
Every report is stored in the database regardless of whether a webhook is configured — the webhook is purely an optional real-time notification on top.
Chat deletion
The [x] button shown before each chat message (staff with alphasystem.chat.delete only) behaves differently depending on whether the message was cryptographically signed:
Signed messages
Deleted with Minecraft's own real delete packet. Nothing else on anyone's screen is touched — this only works on servers with secure chat enabled (online-mode: true, or a proxy performing the Mojang handshake on the network's behalf).
Unsigned messages
Offline-mode servers have no vanilla way to erase a single arbitrary chat line — Minecraft only supports deleting signed messages. Alpha-system simulates it instead, with two possible strategies depending on what's installed:
| PacketEvents installed? | Behavior |
|---|---|
| Yes recommended | Rebuilds each viewer's chat window from their own actually-received packets. Because replay is sourced from real per-viewer packet history, private messages can never leak between players and other plugins' broadcasts survive the rebuild perfectly. |
| No | Falls back to replaying only Alpha-system's own tracked messages (normal chat, /sc, /mc, announcements, private messages — still fully safe, private messages still never leak). Anything sent by another plugin during that exact window won't survive the redraw, since Alpha-system never saw it in the first place. |
Either way, deletion floods blank lines to push old content off-screen first (chat.delete-button.fallback-clear-lines), then replays everything else in order minus the deleted line.
bStats
bstats:
enabled: true
plugin-id: 0
Anonymous usage metrics (player count, server version, online mode — no personal data, nothing tied to individual players). plugin-id defaults to 0, which keeps metrics off on purpose: register the plugin at bstats.org/what-is-my-plugin-id first and put the real id here. A guessed id could silently send this server's data to whatever project already owns that number.
Update checker
update-checker:
enabled: true
repo: "alpha-m19/alphacore-plugin"
notify-ops-on-join: true
Polls the configured GitHub repo's /releases/latest every 6 hours (plus once on startup), compares the release tag against the running plugin version, and logs a console warning if a newer one exists. With notify-ops-on-join enabled, ops also get a one-line ping the next time they join while an update is pending.
Fails completely silently on any network error or non-200 response — a private or unreachable repo just means the check never fires, nothing else about the plugin is affected.
Vault economy
No separate economy plugin needed — Alpha-system registers itself as the Vault Economy provider the moment Vault is detected on startup. Any plugin that reads/writes balances through the standard Vault API (shops, job rewards, etc.) transparently reads and writes Alpha-system's own balances. See Commands → Economy for the player-facing side.
