Report System
ReportSystem: One of your must haves for tracking reports in-game on Discord. Track all reports easily whilst keeping a easy ReportSystem for your members to use.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
Report System
Report System
ReportSystem is a structured reporting framework designed to bridge the gap between players and the staff team. ReportSystem has a simple GUI, Discord webhook integration, and persistent database tracking. ReportSystem makes a simple reporting process all without cluttering your server.
ReportSystem also includes a suspicious player tracking system, giving staff a dedicated space to flag players based on same IP's or fast rejoining. Combined with user management tools, punishment history records (ReportSystem punishments. Not any third party punishment plugins), and per-player reports. This means it provides staff with the best possible context you can get from a in game simple report (another reporting system for proofs is recommended, this plugin is mostly for in game active staff.)
Made for 1.17-26.1.2 | Tested versions: 1.19.2, 1.21.8, 1.21.11, 26.1.2.
Key Features
- Full GUI report submission with reason selection and extra fields (and options for custom fields) - Full report management. Open, high/low prioritys, and closed states. - Live Discord webhook embeds - Suspicious player tracking system separate from the report queue. Marks same IP and fast rejoining as suspicious (Shared Local IP's such as 192 or 127 are not saved) - Player report and punishment history viewers - Staff tools like the report detail GUI with close reason categorization - Timeout and block system for users who abuse /report - Chat input capture for extra detail or note entry - MySQL and SQLite storage with async database - Configurable colors, titles, webhook appearance, and confirmation messages - Sound and visual feedback throughout all GUI interactions
Permissions
``` /report | reportsystem.report /reports | reportsystem.reports /suspicious | reportsystem.suspicious /rsreload | reportsystem.reload reportsystem.bypass (cooldown bypass if applicable) ```
Commands
| Command | Description | |----------|-------------| | /report | Opens the report form GUI | | /reports | Opens the staff report management GUI | | /suspicious | Opens the suspicious tracking GUI | | /rsreload | Reloads plugin config |
config.yml
```
Timezone for report timestamps.
Use full zone IDs: America/New_York, America/Chicago, America/Denver,
America/Los_Angeles, Europe/London, Europe/Paris, Asia/Tokyo, UTC, etc.
timezone: America/New_York
Cross-server sync
Share reports across multiple servers. All servers must point to the same MySQL instance.
sync:
Display name of THIS server shown in cross-server notifications (e.g. "NA", "EU", "US-East").
server-name: "Server-1"
Database backend.
sqlite local file (default, no sharing)
mysql shared database (required for cross-server reports)
database: type: sqlite mysql: host: localhost port: 3306 database: reportsystem username: root password: ""
Number of connections in the pool (raise for many concurrent moderators)
pool-size: 5
Redis pub/sub - live notifications to online staff when a report is filed
or updated on ANY server in the network.
Only useful when database.type is mysql so all servers share the same data.
redis: enabled: false host: localhost port: 6379 password: ""
Channel name - must be identical on every server in the network.
channel: reportsystem-sync
Server IP tagging.
When enabled, the IP of THIS server is silently attached to every report so
staff can see which physical server the report originated from.
Useful for networks running multiple servers against a shared MySQL database.
server-ip: enabled: false
Leave blank to auto-detect. Set this if auto-detection returns the wrong IP
(e.g. a container private IP instead of the public address).
ip-override: ""
Map raw IPs to friendly display names shown in the report detail GUI and
in Discord embeds. If an IP is not listed here the raw IP is shown instead.
Add as many entries as you have servers.
server-names: "192.168.1.100": "Survival" "192.168.1.101": "Creative" "192.168.1.102": "Skyblock"
Whether to include the origin server as a field in Discord webhook embeds.
show-in-discord: true
Label used for the field in the report detail GUI and Discord embed.
label: "Origin Server"
Use & for color codes.
confirmation-message: "&aYour report has been submitted!"
Discord webhook integration.
A message is posted to this webhook every time a report is submitted.
The message is automatically edited whenever the report is updated or closed.
discord-webhook: enabled: false url: ""
Embed colors (hex, e.g. #FF4444)
White (#FFFFFF) is the default — it looks clean and neutral in Discord.
color-open: "#FFFFFF" color-closed: "#44BB44" color-priority: "#FFAA00" color-low-priority: "#AAAAAA"
Embed title — use {id} for the report ID
title: "Report #{id}"
Footer text (leave blank to hide)
footer: "ReportSystem"
Show an ISO-8601 timestamp in the embed footer
show-timestamp: true
Show the reported player's Minecraft head as a thumbnail in the embed
thumbnail-enabled: true
Toggle individual embed fields on or off
fields: show-reported-player: true show-reporter: true show-reason: true show-discord: true show-server: false show-notes: true show-status: true show-priority: true show-server-ip: true
Custom display labels for each field
labels: reported-player: "Reported Player" reporter: "Reporter" reason: "Reason" discord: "Discord Contact" server: "Server" notes: "Notes" status: "Status" priority: "Priority" server-ip: "Origin Server"
Automatic priority assignment based on LuckPerms groups.
Disabled by default. Enable and set group names to activate.
high-priority-groups: players in these groups will have their reports auto-marked as High Priority.
low-priority-groups: players in these groups will have their reports auto-marked as Low Priority.
If a player is in both, high priority takes precedence.
auto-priority: enabled: false high-priority-groups: - "vip" - "premium" low-priority-groups: - "new" - "trial"
Reasons players can select when submitting a report.
Use & for color codes. These also appear as filter options in /reports.
reasons: - "&cCheating / Hacking" - "&6Harassment / Toxicity" - "&eGriefing" - "&bSpamming" - "&dInappropriate Name / Skin" - "&aRule Breaking" - "&fExploiting Bugs"
Server selector shown in the report form.
Set enabled: true to allow reporters to specify which server the incident occurred on.
server-selector: enabled: false options: option-1: display: "&aSurvival" option-2: display: "&bCreative" option-3: display: "&cSkyblock"
Suspicious player detection settings.
suspicious: fast-rejoin: enabled: true
Flag a player if they rejoin this many times...
times: 4
...within this many seconds.
seconds: 60 same-ip: enabled: true
Sounds played on various GUI actions.
Use Minecraft sound names (e.g. UI_BUTTON_CLICK, ENTITY_PLAYER_LEVELUP).
You can use any valid MC sound key. Set to '' to disable a sound.
sounds:
Played when clicking a standard button
button-click: UI_BUTTON_CLICK
Played when cycling through options (reason slider, sort mode, etc.)
cycle: ITEM_BOOK_PAGE_TURN
Played when a report is successfully submitted
submit: ENTITY_PLAYER_LEVELUP
Played when cancelling or going back
cancel: BLOCK_NOTE_BLOCK_BASS
Played when toggling priority
priority: BLOCK_ANVIL_USE
Played when deleting a report or dismissing a suspicious player
delete: ENTITY_ITEM_BREAK
Played when opening a GUI via command
open: BLOCK_CHEST_OPEN ```
Setting Up Cross Server ReportSystem
1. Shared MySQL Database
Every server must point to the same MySQL instance. In each server's config.yml: ``` sync: server-name: "US-East" # unique name per server | shows in notifications
database: type: mysql # change from sqlite to mysql mysql: host: 192.168.1.50 # your MySQL server IP port: 3306 database: reportsystem username: root password: "yourpassword" pool-size: 5 ```
2.Redis (Live Staff Notifications)
Without Redis, staff only see reports when they manually open /reports. With Redis, staff get instant chat notifications when a report is filed or updated on any server.
``` sync: redis: enabled: true host: 192.168.1.50 # your Redis server IP port: 6379 password: "" # leave blank if no auth channel: reportsystem-sync # must be IDENTICAL on every server ```
3. Server IP Tagging (Optional)
Shows which server a report came from in the GUI and Discord embeds:
``` server-ip: enabled: true server-names: "192.168.1.100": "Survival" "192.168.1.101": "Creative" "192.168.1.102": "Skyblock" show-in-discord: true label: "Origin Server" ```
4. Per-Server Config Summary
| Setting | Server 1 | Server 2 | Server 3 | |---------|----------|----------|----------| | server-name | "Survival" | "Creative" | "Skyblock" | | database.mysql.host | same IP | same IP | same IP | | redis.enabled | true | true | true | | redis.channel | reportsystem-sync | reportsystem-sync | reportsystem-sync |