Configuration wiki

What each option in config.yml and the files next to it does. Everything lives in plugins/GuardAC/; changes apply with /guard reload. New options are merged into your config automatically on updates and your own values stay untouched.

Options are written as a dotted path. ai.api-key means the api-key line inside the ai: section, not a line you paste as it is. In the file it looks like this:

ai:
  api-key: "gac_xxxxxxxxxxxxxxxx"

Essentials

This is where setup starts.

ai.api-key: "PASTE-YOUR-GUARDAC-KEY"

The key from your dashboard. Paste it in and the plugin works.

ai.server: "https://guardac.net"

The GuardAC cloud address. No need to touch it.

ai.enabled: true

Master switch for the detection. false: the plugin stays loaded but checks nobody and spends no requests.

ai.only-alert: false

true: staff get alerts, nobody is punished automatically. false: the punishment ladder from punishments.yml is live.

true is handy when you first want to see how the alerts look on your server and tune the punishment ladder to your own rules.

locale: "en"

Language of every plugin message: en, ru, kk, vi or tr (English, Russian, Kazakh, Vietnamese, Turkish). Your own language: copy messages/messages_en.yml to messages_<code>.yml, translate it and put the code here.

server-name: ""

This server's name. It shows up in your dashboard, in staff alerts and in cross-server messages. Give each server its own name (e.g. survival or bedwars-1). Empty = srv-<port>.

Alerts

What your staff sees and how.

alerts.min-hit-confidence: 85

A check only counts for staff when the model is at least this confident. 85 is the tuned default: lower it and staff see more alerts, raise it and only the clearest moments come through.

alerts.min-hits: 3

One message per N counted hits: x3, then x6, x9, x12 and on without a cap. A counted hit is a check above the min-hit-confidence bar, and only one counts every 2 seconds so a single movement cannot count twice. After a quiet minute the series drops one step: x9 becomes x6. Another quiet minute drops it further, down to nothing. Each step is exactly one violation level (x3 = VL1, x6 = VL2), and a decaying series never takes a level back.

alerts.print-to-console: true

Also print alerts to the server console.

alerts.sound.type: "BLOCK_NOTE_BLOCK_PLING"

The alert sound for staff. Any Bukkit sound name works. Next to it: alerts.sound.enabled turns the sound off entirely, volume: 0.8 sets loudness, pitch: 1.5 sets the tone.

Punishments & animations

punishments.yml

A separate file with the punishment ladder by violation level (VL): VL1 only alerts staff, VL2 kicks with an animation, VL3, VL5 and VL7 ban for 30 days, VL10 bans permanently. Available actions: [alert], [log], [kick] reason, [ban] 30d reason (bans through your ban system: LiteBans, AdvancedBan or vanilla), [broadcast] text, [wait] 2s, [animation], [reset] and any console commands of your own.

vl-decay.enabled: true

Old violations slowly burn off: the punishment ladder counts what a player does now, not what happened half a year ago.

vl-decay.interval-seconds: 3600

How often violations are written off: once an hour vl-decay.amount: 1 level is removed. Smaller values are risky: the VL from a kick burns off before the player ever reaches a ban. vl-decay.skip-in-combat: true stops levels from melting away mid-fight.

animations.enabled: true

Master switch for the show before a punishment. false: the punishment lands silently and instantly.

animations.auto-on-ban: true

Play a random animation before every level that actually punishes (a ban, a kick or any console command), even when that level has no [animation] line. Levels with only [alert] and [log] stay silent.

Types: pig (a flight on a pig), explode (a ring of fire), particles (a pillar of particles), lightning (lightning strikes), vortex (a whirl), meteor (a meteor from the sky), cage (a shrinking cage), endrod (the cheater flies up impaled on an End rod that shatters at the end). Pick a specific one with an [animation] endrod line in punishments.yml.

animations.duration-ticks: 100

Length of the show in ticks (20 = 1 second). Every type runs for exactly this long, so a ban never lands instantly.

animations.particle: FLAME

The particle for the particles animation and its density in animations.particle-count: 30 per tick. The other types draw with their own particles.

animations.sound: true

Sound effects during the show. false: the animation plays silently.

animations.kill-sound: true

The sped-up wither death sound at the very end of every show. false: the show stays, that last sound goes.

animations.types.<type>.enabled: true

A switch for each animation on its own: pig, explode, particles, lightning, vortex, meteor, cage, endrod. Set it to false and the type is never picked again. If a line in punishments.yml asks for it, another enabled type plays instead.

animations.types.<type>.particles: true

The particles of one single animation. false: the movement and the sounds stay, every particle goes, the closing burst included.

animations.types.<type>.sound: true

The sounds of one single animation. The general animations.sound switch mutes all of them at once.

animations.fallback-ban-time: "30d"

Only used by /guard punish: if the level that fired has no ban command of its own, this ban is issued after the show with the reason from animations.fallback-ban-reason. Empty = permanent.

Smart mechanics

fingerprint.enabled: true

The plugin remembers how a player normally moves the mouse and tells staff when the style shifts sharply mid-session: a cheat got toggled, or someone else is on the account. Never bans by itself.

combat-suppression.enabled: false

Carefully weaken a suspect right in combat instead of an instant ban. Everything recovers on its own; off by default.

combat-reset.enabled: true

Forget a player's combat state after a while without a fight: the analysis is about combat, not about walking around. There is no reason to turn it off.

worldguard.enabled: false

Skip players inside WorldGuard regions, an arena with unusual rules for example. The list goes into worldguard.disabled-regions as world:region lines.

menu.click-commands: []

What runs when staff click a player in /guard menu. Placeholders <admin> and <target>. An empty list means spectator mode plus a teleport to the player.

Network & cross-server

web-commands.enabled: true

Bans issued from the web dashboard: the server picks the command up within a minute. Disable if you only moderate in-game.

web-commands.ban-bridge: "auto"

Which system issues bans: auto: LiteBans if installed, otherwise AdvancedBan, otherwise the built-in ban list. You can force vanilla, litebans, advancedban or command, and the last one runs your own web-commands.ban-command, tempban-command and unban-command templates with the placeholders {player} {reason} {minutes} {duration}.

cross-server.enabled: false

Shared alerts between your servers on one key: a detection on one is shown to staff on all. No proxy needed.

reputation.enabled: true

Global reputation: if a player was caught on other GuardAC servers, you'll know when they join.

reputation.check-on-join: true

Warn staff when a player with detections elsewhere joins, but only from reputation.alert-threshold: 1 detection up. reputation.report: true sends your own confirmed detections back to the network.

geyser.exempt-bedrock: true

Skip phone/console players (Bedrock via Geyser): their aim works differently.

auto-update.enabled: true

The plugin downloads new versions from the official releases by itself and swaps the file in on server restart. auto-update.notify-staff: true tells online staff that an update has been downloaded.

The other files

A few more files sit next to config.yml in plugins/GuardAC/.

hologram.yml

The hit feed above a suspect's head: how many recent hits to show (max-hits: 5), the height above the player, the line spacing and the colors by percentage. Only staff with the guardac.alerts permission see the feed, and each of them can hide it for themselves with /guard avg.

monitor.yml

Colors and percentage thresholds for /guard monitor and the /guard prob HUD bar.

messages/messages_en.yml

Every text the plugin says. It ships with en, ru, kk, vi and tr. Edit the file that matches your locale. New lines are appended on update and your edits are never overwritten.

config-version: 43

A housekeeping field in config.yml: the plugin uses it to work out which new options to append to your config on update. Leave it alone.

Still have questions?

Open a ticket in your dashboard, we answer right there.

Support