Alpha-systemv1.0.0

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:

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.

Typical propagation delay is up to one poll interval (3 seconds by default) — not instant, but fast enough that staff on Server B see a ban made on Server A within a few seconds.

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 recommendedRebuilds 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.
NoFalls 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.