ReportSystem Documentation

Professional report and moderation system for your Minecraft server

ReportSystem is a comprehensive player reporting and moderation plugin developed for Minecraft servers. Inspired by CS:GO's Overwatch system, it offers community-based review system, automatic replay recordings, and advanced punishment management features.

Tip

This documentation is constantly updated. Follow our Discord server for the latest information.

Features

All features offered by ReportSystem

🎯
Advanced Report System
GUI-based easy reporting, category system, priority levels, and cooldown management
👁️
Overwatch Review
CS:GO style community-based report review, XP/level system, and automatic punishment
🎬
Replay Recording
Automatic 45-second recordings, nearby player tracking, block/inventory recording
🌐
Network Support
BungeeCord/Velocity fully compatible, cross-server reporting and replay viewing
Punishment Integration
Full integration with LiteBans, AdvancedBan, BanManager
🗃️
Multiple Database
MySQL and SQLite support, automatic table creation
⚔️
Advanced Punishment System
Ban, Mute, Kick, Warn + Animated Ban. Apply punishments directly from GUI
💬
Discord Webhook
Reports and punishments auto-notified to Discord. Rich embeds, buttons and multi-language
🔔
Multi Notifications
Toast, Title, ActionBar, sound effects and chat notifications

Requirements

Requirement Minimum Recommended Note
Server Software Paper 1.21 Paper 1.21.x Only 1.21.x supported
Java Version Java 21 Java 21 Java 21 required for MC 1.21+
PacketEvents 2.11.2+ Latest version Required
Punishment Plugin - LiteBans Optional
Important

The plugin will not work without PacketEvents. The replay system depends on PacketEvents.

Version Compatibility

MC VersionStatusNote
1.21.x✅ Full SupportSupported version
1.20.x and below❌ Not SupportedAPI incompatibility

Quick Installation (Standalone)

PacketEvents Installation

Download PacketEvents and put it in the plugins folder.

Download from SpigotMC →

ReportSystem Installation

Put ReportSystem-Spigot.jar file in the plugins folder.

First Start

Start the server. Configuration files will be created automatically.

License Activation

Enter your license key in config.yml and restart the server.

config.yml
license:
  license-key: "KB-XXXX-XXXX-XXXX"
Successful Installation

You should see [ReportSystem] Plugin enabled successfully! message in console.

BungeeCord/Velocity Setup

Install ReportSystem-BungeeCord.jar on proxy server

Install ReportSystem-Spigot.jar on all backend servers

Use the same MySQL database on all servers

Set bungeecord.enabled: true on each server

config.yml (Each Server)
bungeecord:
  enabled: true
  display-name: "Survival"  # Server name
database:
  type: mysql
  mysql:
    host: "localhost"
    port: 3306
    database: "reportsystem"
    username: "root"
    password: "password"
Important

In network mode SQLite cannot be used. All servers must connect to the same MySQL database.

Velocity Setup

If you use a modern proxy, you can use the Velocity module.

Install ReportSystem-Velocity.jar on Velocity proxy

Install ReportSystem-Spigot.jar on all backend servers

Use the same MySQL database on all servers

Note

Velocity module provides punishment synchronization and report notifications. GUI, replay and Overwatch systems run on Spigot side.

Database Settings

SQLite vs MySQL

FeatureSQLiteMySQL
SetupAutomaticManual database creation
Network Support❌ No✅ Yes
PerformanceGood for small serversRecommended for high traffic
BackupFile copymysqldump
MySQL Connection Pool (config.yml)
database:
  type: mysql
  mysql:
    host: "localhost"
    port: 3306
    database: "reportsystem"
    username: "root"
    password: "strong_password"
    pool:
      maximum-pool-size: 10
      minimum-idle: 2
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000

General Settings

general.debug Default: false

Enables debug mode. Detailed logs are written to console. Use for troubleshooting.

general.language Default: "en"

Language file to use. Available: tr (Turkish), en (English)

general.date-format Default: "dd/MM/yyyy HH:mm:ss"

Date format. Uses Java SimpleDateFormat format.

general.check-updates Default: true

Checks for new version on server startup.

telemetry.enabled Default: true

Collects anonymous usage statistics (player count, report count, TPS). You can disable anytime.

Report Settings

reports.require-online Default: true

true = only online players can be reported. false = offline players can also be reported.

reports.cooldown Default: 60 (seconds)

Time a player must wait between two reports. 0 = disabled.

Can be bypassed with reportsystem.cooldown.bypass permission.

reports.global-rate-limit Default: 5

Maximum reports per minute. For spam protection. -1 = unlimited.

reports.max-reports-per-player Default: 3

How many times a player can report the same person. -1 = unlimited.

reports.auto-close-days Default: 30

How many days until open reports are automatically closed. -1 = disabled.

reports.categories List

Report categories. Shown as options in GUI.

categories:
  - "Cheating"
  - "Harassment"
  - "Spam"
  - "Griefing"
  - "Bug Abuse"
  - "Other"
reports.min-reason-length / max-reason-length Default: 10 / 100

Minimum and maximum character length of report reason.

Replay Settings

replay.enabled Default: true

Enable/disable replay system.

replay.auto-record Default: true

Automatically starts recording when report is created.

replay.recording-duration Default: 45 (seconds)

Duration of each replay recording. Longer durations mean more data.

replay.auto-delete-days Default: 7

How many days until replay recordings are deleted.

  • 7 = Recordings older than 7 days are deleted
  • 30 = Keep for 30 days
  • -1 = Never delete (warning: disk may fill up!)
replay.quality.tps Default: 20

Recording quality. 20 = Full quality, 10 = Half quality (less data)

replay.quality.nearby-radius Default: 50

Distance at which nearby players will be recorded (blocks).

replay.max-recordings Default: 3

Maximum concurrent recordings. Each recording uses ~3-4 ms/tick CPU.

replay.max-file-size Default: 5 (MB)

Maximum replay file size. -1 = unlimited.

Disk Usage

An average 45-second recording takes 50-200 KB. 100 reports per day ≈ 10-20 MB/day.

Overwatch Settings

overwatch.enabled Default: true

Enable/disable Overwatch system.

overwatch.min-reviewers Default: 3

Minimum number of reviews required before a decision is made on a report.

overwatch.consensus-threshold Default: 70.0

Percentage of "Guilty" votes required for automatic punishment. 70% = If 2 out of 3 vote guilty, punishment is applied.

overwatch.auto-ban-duration-days Default: 30

Automatic ban duration when consensus is reached (days).

overwatch.npc.hologram-update-interval Default: 30

NPC hologram statistics update frequency (seconds).

overwatch.queue.auto-add-reports Default: false

true = new reports auto-added to queue. false = only via /overwatch addqueue.

overwatch.queue.max-queue-size Default: 100

Maximum reports in queue. -1 = unlimited.

overwatch.reviewer.allow-skip Default: true

If set to false, reviewers can only choose Guilty or Innocent, Skip button is disabled.

overwatch.reviewer.review-cooldown Default: 10 (seconds)

Wait time between two reviews. 0 = disabled.

Reward Settings

XP Settings

SettingDefaultDescription
overwatch.xp.guilty-innocent-xp15XP for Guilty/Innocent vote
overwatch.xp.skip-xp5XP for Skip vote
overwatch.xp.bronze-xp0XP required for Bronze rank
overwatch.xp.silver-xp500XP required for Silver rank
overwatch.xp.gold-xp1000XP required for Gold rank
overwatch.xp.diamond-xp2500XP required for Diamond rank
overwatch.xp.xp-per-level100XP required per level

Reward Commands

config.yml
overwatch:
  rewards:
    enabled: true

    # Her inceleme sonrası
    on-review-complete:
      - "give %player% diamond 1"
      - "eco give %player% 100"

    # Sadece Suçlu/Masum oyları için
    on-guilty-innocent:
      - "give %player% emerald 1"

    # Seviye atlama ödülü
    on-level-up:
      - "broadcast &e%player% &7Overwatch seviye &e%level% &7oldu!"
      - "give %player% diamond 5"

    # Rütbe atlama ödülleri
    on-rank-up:
      bronze:
        - "broadcast &c%player% &lBRONZE &7rütbesine ulaştı!"
      silver:
        - "give %player% iron_ingot 32"
      gold:
        - "give %player% gold_ingot 32"
      diamond:
        - "give %player% diamond 64"
Placeholders

%player% Player | %verdict% Verdict | %xp% XP | %level% Level | %rank% Rank

Player Commands

CommandDescriptionPermission
/report <player> Report a player (opens GUI) reportsystem.report
/reports View your own reports reportsystem.view

Aliases: /rapor, /raporla, /reportplayer

/reports aliases: /raporlar, /reportlist, /raporlistesi

Staff Commands

Staff actions (accept, reject, delete, punish) are done via GUI instead of commands:

Open report list GUI with /reports

Click on the report you want to review

From detail screen: Accept, Reject, Watch Replay or Teleport to Player

Note

Staff with reportsystem.staff permission see pending report count on join.

Overwatch Commands

CommandDescriptionPermission
/overwatchOpen Overwatch main menureportsystem.overwatch
/overwatch statsView your statisticsreportsystem.overwatch
/overwatch leaderboardView leaderboardreportsystem.overwatch
/overwatch npc create <name>Create Overwatch NPCreportsystem.overwatch.admin
/overwatch npc delete <id>Delete specified NPCreportsystem.overwatch.admin
/overwatch npc listList all NPCsreportsystem.overwatch.admin
/overwatch npc skin <npc> <player>Change NPC skinreportsystem.overwatch.admin
/overwatch npc look <npc>Make NPC look at youreportsystem.overwatch.admin
/overwatch npc move <npc>Move NPC to your locationreportsystem.overwatch.admin
/overwatch npc name <npc> <name>Rename NPCreportsystem.overwatch.admin
/overwatch npc select <npc>Select NPC for quick editingreportsystem.overwatch.admin
/overwatch addqueue <id> [priority]Add report to queuereportsystem.overwatch.admin

Aliases: /ow, /overwatchsystem

Admin Commands

CommandDescriptionPermission
/reportsystem reloadReload configurationreportsystem.admin
/reportsystem statsView system statisticsreportsystem.admin
/reportsystem infoView plugin informationreportsystem.admin
/reportsystem debug <true|false>Enable/disable debug modereportsystem.admin
/reportsystem langCheck language settingsreportsystem.admin
/reportsystem testnotifTest toast notificationreportsystem.admin
/reportsystem checkadvCheck advancement statusreportsystem.admin

Aliases: /rs, /rsystem, /raporsistem

Basic Permissions

PermissionDescriptionDefault
reportsystem.reportPermission to create reportsEveryone
reportsystem.viewView own reportsEveryone
reportsystem.cooldown.bypassBypass cooldownOP
reportsystem.exemptCannot be reportedOP

Moderator Permissions

PermissionDescription
reportsystem.staffMarked as staff (receive join notifications)
reportsystem.view.allView all reports
reportsystem.notifyReceive new report notifications
reportsystem.manageAccept/reject reports
reportsystem.punishGive punishments (ban, mute, kick, warn)
reportsystem.overwatchUse Overwatch system

LuckPerms Example

Console Commands
/lp creategroup moderator
/lp group moderator permission set reportsystem.view.all true
/lp group moderator permission set reportsystem.notify true
/lp group moderator permission set reportsystem.manage true
/lp group moderator permission set reportsystem.overwatch true

Admin Permissions

PermissionDescription
reportsystem.*All permissions (wildcard)
reportsystem.adminAdmin commands (reload, stats)
reportsystem.deletePermission to delete reports
reportsystem.overwatch.adminOverwatch admin (NPC, queue)

Replay System

How It Works?

When a player is reported, the system records the last 45 seconds

Recording is compressed and saved to database

When staff reviews the report, replay is played as NPC

Viewer can see all movements

Recorded Data (53+ Action Types)

Player Actions:

  • Position, direction and movement (every tick)
  • Health, absorption (golden hearts) and damage
  • Equipment and inventory changes
  • Animations (arm swing, damage)
  • Pose changes (sneaking, sprinting, swimming)
  • Knockback/velocity, death and teleportation
  • Chat messages and potion effects

World Actions:

  • Block break/place, falling blocks
  • Explosions, fire, redstone, note blocks
  • Sign editing, decorations (painting, item frame)
  • Weather changes and sound effects

Gameplay Actions:

  • Item usage (bow, shield, food), fishing
  • Crafting, brewing, enchanting
  • Vehicle riding (horse, boat), portal usage
  • Projectiles (arrow, snowball), animal breeding
  • Nearby players (as NPCs)

Replay Controls

ItemFunction
⏸️ PausePause/resume replay
⏪ RewindGo back 5 seconds
⏩ Fast ForwardGo forward 5 seconds
🔴 StopEnd replay
🔍 SettingsReplay settings and info
🎯 TeleportTeleport to nearby NPC players
🏃 SpeedChange playback speed (0.25x - 4x)
Important

While watching replay, other players cannot see you and you cannot interact with the world.

Overwatch System

What is it?

Overwatch is a community-based report review system inspired by CS:GO. Trusted players review reports and vote. When enough "Guilty" votes are received, consensus is reached and admins make the final decision.

Review Process

Player right-clicks Overwatch NPC

System assigns a random report from queue

Reviewer watches the replay

Makes decision: Guilty, Innocent or Skip

Earns XP and rank progresses

Rank System

RankRequired XPColor
🥉 Bronze0 XPBronze
🥈 Silver500 XPSilver
🥇 Gold1000 XPGold
💎 Diamond2500 XPDiamond

NPC System

Creating NPC

/overwatch npc create Overwatch-1

Creates an Overwatch NPC where you are looking.

NPC Features

  • Real player appearance NPC (PacketEvents based)
  • Customizable skin (any player's skin)
  • Shows hologram statistics
  • Opens Overwatch menu when right-clicked
  • Automatically restored on server restart
  • Cannot be broken or interacted with

NPC Management

/overwatch npc list             # List all NPCs
/overwatch npc delete <id>      # Delete specified NPC
/overwatch npc skin <npc> <player>  # Change NPC skin
/overwatch npc look <npc>       # Make NPC look at you
/overwatch npc move <npc>       # Move NPC to your location
/overwatch npc name <npc> <name>  # Rename NPC
/overwatch npc select <npc>     # Select NPC for quick editing

Punishment System

You can apply punishments directly from the GUI during report review.

Punishment Types

TypeDescriptionDuration
BanBans player from serverTemporary or permanent
MuteMutes player chatTemporary or permanent
KickKicks player from serverInstant
WarnGives warning (with counter)Instant

Quick Duration Selection

config.yml
punishments:
  durations:
    - "5m"        # 5 minutes
    - "30m"       # 30 minutes
    - "1h"        # 1 hour
    - "1d"        # 1 day
    - "7d"        # 7 days
    - "30d"       # 30 days
    - "permanent" # Permanent

Animated Ban ⚡

Ban cheating players with a visual spectacle. Other players can also witness this moment.

Player is frozen in place

Anvil drops from the sky

Lightning strikes

Custom death message is shown and ban is applied

Note

Target player must be online for animated ban.

Notification System

When a new report is created, multiple notifications are sent to staff. All notification types can be toggled independently.

TypeDescriptionConfig
ToastAchievement-style popup in top right cornerAutomatic
TitleLarge title in center of screenreports.notifications.title-enabled
Action BarScrolling text above hotbarreports.notifications.actionbar-enabled
SoundNotification sound (customizable)reports.notifications.sound-enabled
ChatDetailed report informationreports.notifications.notify-staff

When a staff member joins the server, the pending report count is automatically shown.

Discord Webhook

Reports, punishments and report closures are automatically notified to your Discord channel.

Setup

Choose a channel in your Discord server

Channel Settings → Integrations → Create Webhook

Copy webhook URL and paste it in config.yml

config.yml
discord-webhook:
  enabled: true
  url: "https://discord.com/api/webhooks/123456789/abcdefghijklmnop"
  avatar-url: "https://i.imgur.com/4M34hi2.png"
  add-buttons: true
  include-server-name: true

  events:
    new-report: true      # New report
    report-closed: true   # Report accepted/rejected
    punishment: true      # When punishment applied

Features

🎨
Rich Embeds
Colored embed messages — different colors for each event type
🔘
Interactive Buttons
Access report details with clickable buttons
🌍
Multi-language
Messages are sent in Turkish or English based on plugin language setting

Anti-Cheat Integration

ReportSystem integrates with anti-cheat plugins to automatically create recordings + reports + Overwatch queue entries when cheating is detected. Cheaters are automatically recorded without the need for manual /report commands.

Smart Scoring System

Each anti-cheat flag accumulates a suspicion score. Recording starts when the score reaches the threshold. A single flag does not start recording — this filters false positives. Score decays by 50% every 60 seconds.

🛡️
Polar Anti-Cheat
4 signals monitored: Detection, Cloud ML, Mitigation, Punishment. Detects advanced cheats like KillAura and Aim Assist using machine learning.
🔥
Vulcan Anti-Cheat
Packet-based detection. 35+ check types supported: KillAura, Flight, Speed, Scaffold and more. Flag and Punishment events are monitored.
👁️
Grim AntiCheat
Free and open source. One of the best for movement, reach and scaffold detection. Works with prediction-based physics simulation. FlagEvent and CommandExecuteEvent are monitored.

How Does It Work?

1. Anti-cheat flags a player as suspicious

2. Each flag accumulates suspicion score (KillAura: +0.40, Flight: +0.15, Cloud ML: +0.50)

3. When score exceeds threshold, automatic 30-second recording starts

4. Report is created, added to Overwatch queue, and Discord webhook notification is sent

Configuration

Polar Anti-Cheat

polar:
  enabled: false
  suspicion-threshold: 1.0    # Suspicion threshold (0.5=sensitive, 1.0=balanced, 1.5=conservative)
  cooldown-seconds: 300       # Cooldown per player
  max-auto-recordings: 5      # Max concurrent recordings
  recording-duration: 30      # Recording duration (seconds)
  add-to-overwatch: true      # Add to Overwatch queue

Vulcan Anti-Cheat

vulcan:
  enabled: false
  suspicion-threshold: 1.0
  cooldown-seconds: 300
  max-auto-recordings: 5
  recording-duration: 30
  add-to-overwatch: true

Grim AntiCheat

grim:
  enabled: false
  suspicion-threshold: 1.0
  cooldown-seconds: 300
  max-auto-recordings: 5
  recording-duration: 30
  add-to-overwatch: true
Important

Polar: PolarLoader plugin must be installed.
Vulcan: Vulcan plugin must be installed and settings.enable-api: true must be set in its config.yml.
Grim: GrimAC plugin must be installed (free, open source).
All integrations are optional — if the anti-cheat is not installed, the plugin continues to work normally.

Scoring Table

Check Type Score Description
Cloud Combat Behavior+0.50ML-based KillAura/Aimbot detection (Polar only)
Auto Clicker+0.45Auto-click detection
KillAura+0.40Combat hack detection
Scaffold+0.35Automatic block placement
Reach+0.30Extended reach hack
Flight+0.15Flight hack (mitigated by setback)
Speed+0.10Speed hack
Movement+0.05Movement anomaly (low score — may be temporary lag)

Punishment Plugins

ReportSystem works fully compatible with the following punishment plugins:

LiteBans
Recommended punishment plugin. Full integration.
AdvancedBan
Full integration support.
🔧
Internal System
Works with its own punishment system without external plugins.
Auto Detection

In BungeeCord/Velocity proxy mode, plugin automatically detects installed punishment plugin. In standalone mode, internal punishment system is used.

PlaceholderAPI

ReportSystem fully integrates with PlaceholderAPI. You can use the following placeholders in scoreboards, tab, holograms and other plugins.

Requirement

PlaceholderAPI plugin must be installed on your server. It is detected automatically.

Report Placeholders

Placeholder Description
%reportsystem_reports% Total reports filed against the player
%reportsystem_trust_level% Account trust level (Excellent, Good, Moderate, Poor, Critical)
%reportsystem_trust_points% Violation points (decays over time)

Overwatch Placeholders

Placeholder Description
%reportsystem_overwatch_rank% Overwatch rank (BRONZE, SILVER, GOLD, DIAMOND)
%reportsystem_overwatch_level% Overwatch level
%reportsystem_overwatch_xp% Total XP
%reportsystem_overwatch_reviews% Total review count
%reportsystem_overwatch_accuracy% Accuracy rate (after 50+ reviews)

Usage Example

# Scoreboard example (TAB, Featherboard etc.)
Reports: %reportsystem_reports%
Trust Level: %reportsystem_trust_level%
OW Rank: %reportsystem_overwatch_rank%
OW Level: %reportsystem_overwatch_level%

Frequently Asked Questions

Does it work without PacketEvents?

No. Replay system depends on PacketEvents. Plugin will not start.

How much space do replay recordings take?

Average 45-second recording is 50-200 KB. 100 reports per day ≈ 10-20 MB.

When are replay recordings deleted?

According to replay.auto-delete-days setting. Default is 7 days.

Can two people watch the same replay?

Yes. Each viewer sees their own NPCs, they don't affect each other.

Does Overwatch NPC disappear on server restart?

No. NPCs are saved to database and automatically recreated.

Do arrows/potions in replay affect real players?

No. Replay projectiles are harmless and ineffective.

Troubleshooting

Plugin not starting
  1. Check if PacketEvents is installed
  2. Check Java version (minimum Java 21)
  3. Check console logs
Replay not playing
  1. Check replay.auto-record: true
  2. Replay may have expired (auto-delete-days)
  3. Enable debug mode with /rs debug
Database connection error
  1. Check MySQL credentials
  2. Make sure database exists
  3. Check firewall settings

Performance Settings

performance.async-database Default: true

Runs database operations asynchronously. Zero TPS impact. Do not disable.

performance.cache.enabled Default: true

Caches reports in memory. Cache is used when opening GUIs.

performance.cache.max-size / expiry Default: 100 / 10 minutes

Maximum number of reports to keep in memory and cache expiration time.

Performance Tips
  • replay.max-recordings: 3 — Limit concurrent recordings
  • nearby-player-tracking.interval-ticks: 3 — Keep default balance
  • nearby-player-tracking.movement-threshold: 0.05 — 40-60% less data
  • performance.async-database: true — Keep async database enabled

Support

💬
Discord Server
24/7 community support and instant help
Join Discord
🐛
Bug Report
Found a bug? Report it in #bug-report channel on Discord.
Thank You

Thank you for choosing ReportSystem!