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.

33

Quick challenge

How far can you run before the mobs catch you?

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 |

ADS