Minecraft anticheat guide
Syncing Anticheat Punishments With Ban Plugins
Why anticheat punishments and ban plugin records drift apart, which questions to answer before syncing them, and how to test the sync in staging first.
Why do anticheat punishments and ban records drift apart?
An anticheat punishment and a ban plugin record are separate facts that describe the same player. One may be written when a check fires. The other may be written when staff confirm a ban. If nothing links them, a player can be banned in one system and still join through the other.
Syncing means choosing one source of truth, then building a path that updates the rest. The path can be automatic or manual. Either way, it has to be tested.
What should a sync guarantee?
Keep the question narrow before you pick a method. Sync can mean three different goals, and each goal needs a different design. A banned player should not be able to rejoin. An appeal should reverse both records. Staff should see one history for each player. Choose one goal first, then test it.
Confirm that the ban plugin is the system that enforces joins on your network. A record that nothing reads does not stop anyone.
Write the goal as one sentence in your runbook. Reviewers can then tell whether a sync failure breaks the goal or only an optional convenience.
What do I need to know about my tools?
Answer these questions for your exact versions before you touch a configuration file. The table lists the question, why it matters, and where to find the answer.
We have not verified any integration between a specific anticheat and a specific ban plugin. Check each vendor's documentation for supported links.
| Question | Why it matters | Where to find the answer |
|---|---|---|
| Which system writes the record first? | Decides the source of truth | Anticheat and ban plugin documentation |
| Can the ban plugin read anticheat punishments? | Without a supported link, sync is manual | Each plugin's integration list |
| Are records keyed by player UUID or by name? | Names can change, UUIDs are stable | Plugin storage documentation |
| What happens on a reversal? | Appeals must clear both records | Staff procedure, tested in staging |
| Who can edit records in each system? | Shared edits create conflicting history | Permission documentation for both tools |
How do I test a sync in staging?
Use a staging network with the same plugin versions as production. Use a test account you control, and record every result with a timestamp and the software versions.
Test the reversal path as carefully as the ban path. Most sync problems show up when an appeal clears one side and not the other.
Run the same test after every plugin update on either side. A sync that passed last month can fail after a storage change, and a single passing run does not prove the next version still works.
What if no supported link exists?
Use a short manual procedure. Staff add the ban in the ban system only after a reviewed case, and the case ID goes into both records. Manual sync is slower, but it is easier to audit than an automatic sync nobody can explain.
Use the same case fields in every record. The example below shows placeholders only. It is not a file format used by any plugin.
Keep a comparison between the two systems on a regular schedule, even when a sync exists. A mismatch that persists through one review cycle is a signal to investigate, not a number to wave through.
case_id: <CASE-ID>
player_uuid: <PLAYER-UUID>
source: anticheat-alert
reviewed_by: <STAFF-NAME>
review_date: <YYYY-MM-DD>
reversal: noneWhat we have not verified
We have not tested any sync between an anticheat and a ban plugin. This article names no command, configuration key, or integration as working. Treat every claim about a specific plugin as unverified until you test it on your own version.
Results can differ by server software, proxy setup, and the order in which plugins load. Test the full join path, not only the database row.
FAQ
Can I copy anticheat bans into the ban plugin by hand?
Yes, if each copy carries a case ID and a reviewer name. Copies without a case ID make later appeals hard to trace.
Why does a banned player still join sometimes?
Common causes include a ban written to a name instead of a UUID, a record that was never created, or a second proxy that reads a different database. Check each in turn.
Should I sync temporary kicks?
Usually not. A kick is a short action that can come from lag or a configuration problem. Sync only reviewed bans.
Does syncing replace staff review?
No. Syncing moves a decision between systems. The decision still needs evidence and a named reviewer.
How do we know the two systems still match?
Compare a sample of player records from each system on a schedule. Investigate any mismatch that survives one review cycle, rather than assuming the sync will catch up on its own.