Official Documentation
Overview
AevorinReports is a modern, robust reporting system designed for Minecraft servers that require structured moderation workflows. It enables players to submit reports easily while providing staff with powerful tools to review, manage, and resolve reports efficiently. The plugin is optimized for performance, supports multiple GUI styles, integrates with Discord, and scales seamlessly across single servers and networks.
Region Restriction
AevorinReports is designed to be used globally; however, please note that the plugin is restricted and will not function on servers located within Israel. This is enforced via automated IP/timezone verification.
#FreePalestine
1. Core Features
- Interactive Admin GUI – Review, manage, and update reports using a clean, click-based interface
- Player Report History – Players can view their submitted reports and statuses using
/reports - Multiple GUI Types – Supports both Book GUI and Container (Chest) GUI styles
- Real-Time Staff Alerts – Instantly notify staff members when a report is submitted
- Clear Status Workflow – Reports transition through Pending → Resolved / Rejected
- Custom Report Reasons – Allows players to provide custom reasons via chat input
- MiniMessage Support – Fully customizable messages with gradients, hover events, and formatting
- Discord Integration – Dedicated Discord bot with embeds and real-time notifications
- Database Support – SQLite (local) and MySQL (network-wide synchronization)
- Optimized Performance – Asynchronous processing and intelligent caching
- Full Localization Support – Built-in multi-language system with support for custom language packs
- PlaceholderAPI Support – Provides report statistic placeholders documented on the PlaceholderAPI wiki
- bStats & FastStats Integration – Anonymous usage statistics and advanced telemetry for development insights
2. Commands
2.1 Player Commands
| Command | Description | Permission |
|---|---|---|
/report <player> [reason] |
Submit a report against a player | aevorinreports.report |
/reports |
View your submitted reports and their status | aevorinreports.report |
Notes:
- If no reason is provided with
/report, a GUI will open - Custom reasons can be entered via chat
2.2 Staff Commands
| Command | Description | Permission |
|---|---|---|
/reports |
Open the Admin Report Management GUI | aevorinreports.manage |
/viewreport <id> |
View detailed report information | aevorinreports.manage |
/setreportstatus <id> to <status> |
Update report status | aevorinreports.manage |
/ar reload |
Reload the plugin configuration | aevorinreports.reload |
2.3 Discord Bot Commands
| Command | Description |
|---|---|
/reports |
List all active pending reports |
/lookup <id> |
View full details of a specific report |
/resolve <id> |
Mark a report as Resolved |
/reject <id> |
Mark a report as Rejected |
/pending <id> |
Mark a report as Pending |
/help |
View the bot help menu |
3. Permissions
3.1 Basic Permissions
| Permission | Description | Default |
|---|---|---|
aevorinreports.report |
Allows players to submit reports | true |
aevorinreports.manage |
Allows staff to manage reports and access Admin GUI | op |
aevorinreports.notify |
Receive notifications when a report is submitted | op |
aevorinreports.reload |
Reload the configuration | op |
3.2 Wildcard Permissions
| Permission | Description |
|---|---|
aevorinreports.* |
Grants all AevorinReports permissions |
4. Report Workflow
- A player submits a report using
/report - Staff members receive instant notifications
- Report is marked as Pending
- Staff review the report via the Admin GUI
- Report is marked as Resolved or Rejected
All actions are logged and synchronized across servers when using MySQL.
5. Configuration (config.yml)
This section documents every available option in config.yml, explaining its purpose and recommended usage.
Config Version System
# Please Do not change the config version
config-version: 5
The config-version field is used by AevorinReports to automatically manage and migrate your configuration when the plugin is updated to a newer version that requires changes to config.yml.
How It Works
- When the plugin loads, it reads the
config-versionvalue from your existingconfig.yml. - It compares that value against the version bundled inside the current plugin
.jar. - If they match: No migration is needed. The plugin proceeds normally.
- If the bundled version is higher: The plugin automatically:
- Creates a backup of your existing file as
config.yml.old. - Migrates all your existing settings (server name, database credentials, Discord token, etc.) into the new structure.
- Writes a fresh
config.ymlwith all new required fields, preserving your data.
- Creates a backup of your existing file as
[!CAUTION] Never manually edit the
config-versionfield. Changing it will cause the plugin to skip or repeat migrations, which can corrupt your configuration. If you need to reset the config, simply deleteconfig.ymland restart the server.
[!TIP] Your old config is always safely backed up as
config.yml.oldbefore any migration runs. If something goes wrong, you can restore your settings from that file.
5.0 Language Settings
language: "en_US"
- Sets the active language file loaded from the
plugins/AevorinReports/lang/folder. - The value must match a
.ymlfilename inside that folder (without the extension). - Built-in languages (automatically extracted on first startup):
en_US– English (default)it_IT– Italiansk_SK– Slovakpl_PL– Polishzh_CN– Simplified Chinese
- Custom language files: You can create your own
.ymlfile inside thelang/folder.- Custom files are never overwritten by plugin updates.
- Any keys missing in a custom file will automatically fall back to
en_USvalues, so the plugin will never break due to untranslated strings. - A console warning will list any missing keys to help you keep translations up to date.
5.1 Server Configuration
server-name: "survival"
- server-name: Identifies the server in multi-server setups.
- Must be unique when multiple servers share the same database.
- Displayed in Discord embeds and network-wide logs.
- Cloned servers: Before starting a cloned server instance for the first time, delete the copied aevorin_server_token.dat file from its root directory so that a new, unique server identity token can be generated.
5.2 Database Configuration
database:
type: "file" # mysql or file
Database Types
- file: Uses local SQLite storage (recommended for single servers).
- mysql: Enables cross-server synchronization for networks.
MySQL Settings
mysql:
host: "localhost"
port: 3306
database: "aevorin_reports"
username: "root"
password: "password"
- Used only when
typeis set tomysql. - All servers must share the same credentials for synchronization.
File Storage
file:
path: "database/reports.db"
- Location of the SQLite database file.
Connection Pool (Advanced)
pool:
minimum-idle: 5
maximum-pool-size: 10
connection-timeout: 30000
- Optimizes database performance.
- Recommended to leave defaults unless tuning is required.
5.3 Report Settings
reports:
allow-self-reporting: false
- Prevents players from reporting themselves when disabled.
GUI Configuration
gui:
type: "book" # book or container
- book: Classic book-style interface.
- container: Modern chest-style GUI.
Limits & Cooldowns
cooldown: 300
max-active-reports: 3
- cooldown: Time (seconds) between report submissions.
- max-active-reports: Maximum unresolved reports per player.
Custom Reasons
allow-custom-reasons: true
custom-reason-min-length: 10
custom-reason-max-length: 100
- Allows players to submit custom reasons via chat.
- Length limits prevent spam and abuse.
Report Categories
categories:
- "Hacking/Cheating"
- "Harassment/Bullying"
- "Spam/Advertisement"
- Displayed in the report GUI.
- Categories are fully customizable.
5.4 Notification Settings
notifications:
new-report: true
status-change: true
sound: "BLOCK_NOTE_BLOCK_PLING"
- new-report: Notify staff when a report is created.
- status-change: Notify staff when report status changes.
- sound: Sound played for staff alerts (empty string disables).
Chat Prefix
The chat prefix, which appears before most plugin messages, is configured within the language files to allow for localized branding.
# Found in lang/en_US.yml
messages:
prefix: "&8[&bAevorinReports&8]&r "
5.5 Update Checker
update-checker:
check-interval: 60
notify-on-join: true
- Automatically checks for new plugin versions.
- Notifies authorized players on join.
5.6 Debug Settings
debug:
enabled: false
log-queries: false
- enabled: Enables detailed debug logging.
- log-queries: Logs database queries (not recommended for production).
5.7 Message Customization
messages:
report-created: "&aYour report has been submitted successfully!"
- Fully customizable messages.
- Supports color codes (
&) and placeholders. - MiniMessage is supported where applicable.
- PlaceholderAPI placeholders can be used in supported GUI text, including container GUI titles, item names, and lore.
- See the official AevorinReports PlaceholderAPI placeholder list.
5.8 Discord Integration
discord:
enabled: false
Network Mode (Multi-Server)
network-mode:
enabled: false # set to true on ONE server only in a network
poll-interval: 10 # how often to sync reports from the database (seconds)
- enabled: If
true, this server will poll the database for reports from all servers. - poll-interval: The frequency of database checks. Recommended: 5-10.
Core Settings
bot-token: "YOUR_BOT_TOKEN_HERE"
channel-id: "YOUR_CHANNEL_ID_HERE"
log-channel-id: "YOUR_LOG_CHANNEL_ID_HERE"
- Sends reports and status updates directly to Discord.
Staff Permissions
staff-role-id: ""
- Optional role restriction for Discord moderation commands.
Bot Appearance
bot-settings:
status: "ONLINE"
activity:
type: "WATCHING"
message: "Reports | %online_players% players online"
Discord Notifications
notifications:
title: "New Report (#%id%)"
color: "#ff5555"
footer: "AevorinReports • %date%"
- Fully customizable embed formatting.
6. Discord Features
- Report submission notifications
- Status update alerts
- Embedded messages with player avatars
- Server and report metadata displayed
7. GUI Preview
8. Technical Features
- Async database operations
- Thread-safe report handling
- Efficient caching system
- Modular and extendable architecture
- Safe reload handling
9. Dependencies
Optional
- MySQL – Network-wide report synchronization
- Discord API (JDA) – Discord bot integration
Notes:
- These optional dependencies are built in the plugin itself and can be enabled from config.yml
10. Installation Guide
- Download AevorinReports from the Modrinth page
- Place the
.jarfile into the/plugins/directory - Restart the server to generate configuration files
- Configure
config.ymland database settings - (Optional) Configure Discord integration
- Reload or restart the server
11. Analytics & Telemetry
FastStats & bStats
FastStats
AevorinReports also uses FastStats for advanced, real-time plugin analytics. The following custom metrics are tracked to help guide future development:
| Metric | Description |
|---|---|
pending_reports |
Number of currently pending reports on the server |
total_reports |
Total reports ever created on the server |
gui_provider |
Which GUI type the server uses (book or container) |
db_backend |
Which database backend is in use (file or mysql) |
configured_categories |
How many report categories the server has set up |
discord_integration |
Whether the Discord bot is enabled (true/false) |
All telemetry is anonymous — no player data, usernames, IPs, or personally identifiable information is ever collected.
12. License
AevorinReports is licensed under the MIT License.
You are free to use, modify, distribute, and sublicense this software, provided that the original copyright and license notice are included in all copies.
Credits
Developed by Aevorin Studios
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 | ||||
| 8h ago | 1 |
### New Features & Improvements
- Language File Safety:** Plugin updates now safely merge your custom translations with new default language keys. A timestamped
.bakbackup is automatically created during migration, completely preventing the loss of custom language strings when the plugin updates.
### Bug Fixes
- Database Shutdown Errors:** Fixed a recurring
HikariDataSource has been closederror during server shutdown. This was caused by metrics systems attempting to query statistics after the database connection pool had already gracefully closed. - Cross-Server Notifications:** Fixed an issue where cross-server report notifications would display the reporter and reported player names as "Unknown". Player names are now correctly cached in the database alongside their UUIDs to ensure notifications always show accurate information.
### New Features & Improvements
- Reload Sub-Commands:**
/ar reloadand/aevorinreports reloadnow require a sub-argument specifying what to reload:<all|config|lang>. all— reloads both configuration and language files.config— reloads configuration only.lang— reloads language files only.- Invalid or missing arguments display a usage hint. Tab completion suggests
reload, thenall,config, andlang. - Russian (ru_RU) Language Support:** Added full Russian translation across all GUI, chat, and Discord sections.
- Persist
lastUpdatedByField:** Addedlast_updated_bycolumn to SQLite/MySQL DDL,ensureTableSchemamigration,updateReportSQL, and all SELECT mappings. - MySQL Schema Completeness:**
CREATE TABLEnow includes all columns (created_at,updated_at,evidence_data,coordinates,world,last_updated_by), previously relying entirely on ALTER TABLE fallback. - Timestamps in GUI:**
createdAt,updatedAt, andlastUpdatedByare now displayed inReportManageGUIchest lore and book pages. - Discord Embed Footer:**
sendLogUpdateembed now includes a footer with timestamp and acreatedAtfield. - Report History Tracking:**
report_historytable is now actively used — status changes are recorded viainsertHistory(). - New PAPI Placeholders:** Added
%reports_last_submitted_date%and%reports_last_against_date%. - Updated Placeholders.md:** Added documentation for the new date placeholders.
### Bug Fixes
- SetReportStatusCommand Timestamp:** Fixed stale
updatedAttimestamp —updatedAtis now set tonow()before saving.
### Localization
- Added new keys
created_at,updated_at,last_updated_by(book + container lore) and Discordstatus-updatefooter to all 9 language files:en_US,ru_RU,de_DE,it_IT,nl_NL,pl_PL,sk_SK,vi_VN,zh_CN. - Added
usage-reload,reload-all-success,reload-config-success, andreload-lang-successto all language files. - Bumped
config-versionto 4 in all language files.
### Database
- Added
getLastReportDateByReporter,getLastReportDateAgainst, andinsertHistorydatabase methods.
### Special Thanks
- A huge thanks to [1wairesd](https://github.com/1wairesd) for contributing to this release!
### New Features & Improvements
- Language Optimization:** Only language files explicitly configured in
config.ymlare loaded into memory, significantly reducing startup time and memory footprint. - Cross-Server Notifications:** Added real-time cross-server report notifications by periodically polling the shared database, allowing staff on any server to be alerted of new reports.
- Discord Localization:** Added a
discordsection to all language files (config-version 3), bringing localized Discord commands, report details, notifications, help text, and status messages. German and English translations are currently included. - FastStats Upgrade:** Upgraded FastStats dependency to version 0.29.0 and migrated to the new
BukkitContextAPI. - Discord Integrations:** Routed slash command replies, embeds, and command descriptions through
LanguageManager. Report status changes now record the latest updater and automatically synchronize Discord log updates.
### Bug Fixes
- Offline Player Resolution:** Added
reporter_nameandreported_namecaching columns to the database schema. This fixes the issue where players who had never joined the staff member's server would show up as "Unknown" in GUIs and Discord. - Thread Safety:** Improved report handling responsiveness by moving heavy database work off the main thread.
- Discord Shutdown:** Gracefully await JDA shutdown on plugin disable to completely avoid "zip file closed" exceptions and memory leaks after
/reload. - General Fixes:** Clearer handling of unavailable players and missing translations.
### Performance
- Active Reports Limit:** Now uses a single
COUNTquery for the active reports limit instead of loading all player reports into memory. - Async Saves:** Save reports asynchronously and apply cooldowns immediately to prevent spam while the
INSERTquery is in flight. - Async GUIs:** Run GUI click SQL queries asynchronously and reopen inventories back on the main thread (Folia-safe via
SchedulerUtils, guarded byisOnline). - Tab Complete Caching:** Cache offline player names for tab-complete with a 5-minute TTL and async refresh, completely avoiding iterating through
getOfflinePlayers()per tab completion. - Placeholder Caching:** Added a 30-second TTL cache to PlaceholderAPI expansion responses to reduce database load.
- Database Indexing:** Added SQL indexes on
reporter_uuid,reported_uuid,status,server_name+status, andupdated_atto drastically improve report search and retrieval speed.
### Special Thanks
- A huge thanks to [1wairesd](https://github.com/1wairesd) for contributing to this release!
### Improvements & Bug Fixes
- Added support for reporting offline players who have played on the server before.
/report <player>now resolves targets through BukkitOfflinePlayer, allowing reports against cached offline players while still rejecting unknown players.- Added
reports.allow-offline-player-reportingtoconfig.yml, defaulting totrue, so servers can disable offline-player reporting if desired. - Report creation now stores the resolved offline player's UUID and keeps custom-reason and GUI report flows working with offline targets.
- Report command tab completion now includes cached offline players in addition to online players when offline-player reporting is enabled.
- PlaceholderAPI placeholders are now parsed in built-in GUI text, including book GUI text and container GUI titles, item names, and lore.
- This allows placeholders such as
%reports_total_pending%to display live values in configured GUI text. - Cleaned up Java imports in the language manager for improved readability.
### Language Support
- Added **German** language support.
- Added **Dutch** language support.
- Added **Vietnamese** language support.
### Contributors
Special thanks to **Qracky** & **Karven** for the Dutch & Vietnamese language translations.
We are looking for translators to add even more language support to AevorinReports! Join our [Discord server](https://discord.gg/SV2dXt5SwF) and open a ticket if you'd like to help!
### Improvements & Bug Fixes
- Localized status placeholders now use language-file values instead of raw enum names.
- Affected
{status}placeholders now display values such ascommon.status.pendinginstead ofPENDING. - Applies to report details, status-change messages, hover text, current-status lore, and empty status-list messages.
- Fixed
/reports <status>ignoringreports.gui.type: container. - Commands such as
/reports REJECTEDnow open the configured container GUI directly instead of opening a book first. - Updated the Shadow build plugin to fix ASM relocation failures during
shadowJaron newer Gradle/JDK environments.
### Contributors
Special thanks to **feijiwang** A.K.A **nice** for reporting these issues to us.
### New Features
- Player-Specific Placeholder Lookup**: Added support for looking up report statistics for specific players by name.
- All player-based placeholders now support a
_<playername>suffix to query any player's statistics. - Works with both online and offline players (if they have played before).
- Full list of supported player-specific placeholders**:
%reports_submitted%- Total reports submitted by the player viewing the placeholder.%reports_pending_submitted%- Pending reports submitted by the player viewing the placeholder.%reports_resolved_submitted%- Resolved reports submitted by the player viewing the placeholder.%reports_valid_submitted%- Valid reports submitted by the player viewing the placeholder. Currently counts resolved reports.%reports_rejected_submitted%- Rejected reports submitted by the player viewing the placeholder.%reports_against%- Total reports made against the player viewing the placeholder.%reports_pending_against%- Pending reports made against the player viewing the placeholder.%reports_resolved_against%- Resolved reports made against the player viewing the placeholder.%reports_rejected_against%- Rejected reports made against the player viewing the placeholder.%reports_submitted_by_<player>%- Total reports submitted by the specified player.%reports_pending_submitted_by_<player>%- Pending reports submitted by the specified player.%reports_resolved_submitted_by_<player>%- Resolved reports submitted by the specified player.%reports_valid_submitted_by_<player>%- Valid reports submitted by the specified player. Currently counts resolved reports.%reports_rejected_submitted_by_<player>%- Rejected reports submitted by the specified player.%reports_against_<player>%- Total reports made against the specified player.%reports_pending_against_<player>%- Pending reports made against the specified player.%reports_resolved_against_<player>%- Resolved reports made against the specified player.%reports_rejected_against_<player>%- Rejected reports made against the specified player.- Server-wide statistics placeholders**:
%reports_total%- Total number of reports in the entire network.%reports_total_pending%- Total pending reports on the network.%reports_total_resolved%- Total resolved reports on the network.%reports_total_rejected%- Total rejected reports on the network.- Specific-server statistics placeholders**:
%reports_total_on_<server>%- Total reports created on a specific server.%reports_total_pending_on_<server>%- Total pending reports on a specific server.%reports_total_resolved_on_<server>%- Total resolved reports on a specific server.%reports_total_rejected_on_<server>%- Total rejected reports on a specific server.- Specific-server placeholders only return server-specific counts when the plugin is using MySQL with multiple servers connected to the same database.
### Improvements & Bug Fixes
- PlaceholderAPI expansion now gracefully handles offline players by checking player cache.
- Simplified the placeholders for better understanding.
- Discord channel ID settings now validate numeric IDs before sending notifications, preventing console spam when a Discord URL is configured by mistake.
### Contributors
Special thanks to **feijiwang** A.K.A **nice** for the **Simplified Chinese** translation and **GraviTrace** for the **Polish** translation!
We are looking for translators to add even more language support to AevorinReports! Join our [Discord server](https://discord.gg/SV2dXt5SwF) and open a ticket if you'd like to help!
> [!NOTE]
> This is a **Beta** version. While it has been tested, this release introduces new external integrations (PlaceholderAPI) that may behave differently across various server setups. Please test thoroughly before deploying to production environments.
### New Features
- PlaceholderAPI Integration**: Added full PlaceholderAPI support for player report statistics.
- Player Submitted Reports**:
%aevorinreports_reports_submitted%/%aevorinreports_submitted%- Total reports submitted by the player.%aevorinreports_reports_submitted_pending%/%aevorinreports_submitted_pending%- Pending reports submitted by the player.%aevorinreports_reports_submitted_resolved%/%aevorinreports_submitted_resolved%- Resolved reports submitted by the player.%aevorinreports_reports_submitted_valid%/%aevorinreports_submitted_valid%- Valid (resolved) reports submitted by the player.%aevorinreports_reports_submitted_rejected%/%aevorinreports_submitted_rejected%- Rejected reports submitted by the player.- Reports Against Player**:
%aevorinreports_reports_received%/%aevorinreports_received%- Total reports received against the player.%aevorinreports_reports_received_pending%/%aevorinreports_received_pending%- Pending reports against the player.%aevorinreports_reports_received_resolved%/%aevorinreports_received_resolved%- Resolved reports against the player.%aevorinreports_reports_received_rejected%/%aevorinreports_received_rejected%- Rejected reports against the player.- Server-Wide Statistics**:
%aevorinreports_total_reports%- Total number of reports in the system.%aevorinreports_pending_reports%/%aevorinreports_total_pending%- Total pending reports on the server.%aevorinreports_resolved_reports%/%aevorinreports_total_resolved%- Total resolved reports on the server.%aevorinreports_rejected_reports%/%aevorinreports_total_rejected%- Total rejected reports on the server.- Official Language Support**: Added official support for **Polish (pl_PL)**.
### Contributors
Special thanks to **GraviTrace** for the **Polish** translation!
We are looking for translators to add even more language support to AevorinReports! Join our [Discord server](https://discord.gg/SV2dXt5SwF) and open a ticket if you'd like to help!
### New Features
- Standardized Messaging System**:
- Replaced hardcoded messages with localized strings via
LanguageManager. - Fully localized command usage strings (
/report,/viewreport,/setreportstatus) for all supported languages. - Added localized feedback for the
/ar reloadcommand. - Custom Reason Support in GUIs**:
- Added "Custom Reason" option to the **Book GUI**.
- Added "Custom Reason" (Writable Book) icon to the **Container GUI** for players to submit their own reasons in chat.
- Enhanced Visual Aesthetics**:
- Implemented high-fidelity **MiniMessage gradients** for report titles, details, and notifications.
- Simplified GUI design by removing bold text for a cleaner, modern look.
- Redesigned the container separator for better visual structure.
- Improved Global Prefix**: The plugin prefix now supports MiniMessage gradients and is consistently applied across all messages using the
{prefix}placeholder.
### Improvements & Bug Fixes
- Hybrid Message Parsing**: Implemented a robust "Hybrid Parser" for messages that contain both MiniMessage tags and legacy color codes (e.g., gradients combined with
&f). This resolves a criticalParsingExceptionwhere MiniMessage would crash when encountering legacy formatting symbols like§. - FastStats Reliability**: Fixed a
NullPointerException(NPE) that occurred during FastStats initialization if the database connection failed or was slow to respond. - Streamlined Initialization**: Simplified console output during startup by removing verbose database connection logs and retry spam. Initialization failures are now reported as a single, clear sentence before the plugin disables itself.
- GUI Pagination Fix**: Resolved a critical indexing error in the
Reason SelectorGUI that prevented "Next Page" from working when reasons spanned multiple pages. - Robust Reason Selection**: Implemented
PersistentDataContainer(PDC) to identify report reasons in the GUI. This makes reason selection immune to translation changes and fixes a bug where non-English reasons would fail to submit. - Smart Message Parsing**: Enhanced
MessageUtilswith a heuristic to detect legacy color codes versus MiniMessage tags. This fixes a rendering bug where command usage strings like<player>were being incorrectly parsed as broken MiniMessage. - Dynamic Prefix Replacement**: Re-engineered the
LanguageManagerto replace{prefix}_before_ MiniMessage parsing, preventing crashes when the prefix contains non-legacy characters. - Robust Category Handling**: Switched to
PersistentDataContainerfor identifying report categories in GUIs, ensuring stability across all localized versions. - Unified Feedback**: Standardized status update notifications so that using the
/setreportstatuscommand and the GUI management buttons provide the same detailed feedback. - Improved Input Validation**:
- Validated report categories and custom reasons directly in the
/reportcommand. - Fixed length validation for custom reasons to correctly use localized error messages.
- Language Cleanup**: Removed redundant and unused keys from language files (
status-update-success,description-too-short, etc.) to reduce clutter and improve maintainability.
### New Features
- Full Localization Support**: Implemented a comprehensive language system.
- New
lang/folder for storing language packs (e.g.,en_US.yml). - Active language selection via
languagesetting inconfig.yml. - Added default
en_US.ymlwith all GUI and message strings. - Localized GUIs**: Refactored all user interfaces to be fully translatable.
ReportManageGUI: Localized all labels and status buttons.CategoryContainerGUI: Localized navigation and indicators.ReportReasonContainerGUI: Localized the entire reason selection flow.BookGUI: Localized the classic book-based reporting and management views.- Localized Commands**: All command feedback and staff notifications are now localized via the language pack.
- Dynamic Navigation**: Added "Back" buttons to all container-based GUIs.
- New "Back to Categories" button in the category view for easier navigation between report groups.
- New "Back to Category" button in the individual report management view, allowing staff to return quickly to the filtered list.
- Back buttons use localized display names and lore, including dynamic status placeholders.
- Official Language Support**: Expanded the built-in language library.
- Added official support for **Italian (it_IT)** and **Slovak (sk_SK)**.
- Integrated FastStats Telemetry**: Added advanced server metrics and automated error tracking via FastStats.
- Live Metrics**: We now track pending reports, preferred GUI types, and database backends to help improve future updates.
- Automated Error Tracking**: Plugin exceptions are now automatically transmitted with context to our developers, allowing us to fix bugs before you even report them.
- Improved Telemetry Coexistence**: FastStats now runs alongside bStats, providing a more comprehensive overview of plugin usage and health.
### Improvements & Bug Fixes
- Book GUI Smart Pagination**: Fixed a bug where the text in the Book GUI would overflow and get cut off at the bottom of the page. The plugin now intelligently flows content onto a new page only when necessary.
- Language Extraction Fix**: Fixed an issue where bundled language files (
it_IT.yml,sk_SK.yml) would not extract to thelang/folder unless explicitly set as the active language. Now all supported languages extract automatically on startup. - Improved Language Management**:
- Custom Language Support**: Custom language files will never be overwritten during plugin updates.
- Smart Fallback System**: Missing keys in custom language files automatically fall back to
en_USdefaults. - Missing Key Warnings**: Console warnings are displayed when custom language files have missing fields.
- Automatic Internal Updates**: Supported languages are auto-updated when the plugin jar is updated.
- GUI Interaction Fix**: Fixed a bug where both admins and players could accidentally take items out of the container-based GUIs.
- Security & Privacy**:
- Fixed a missing permission check in the Book GUI that allowed non-admin players to see "Click to change status" options.
- Management buttons are now context-aware and only shown to players with the correct permissions.
- Build Process Optimization**: Fixed a critical issue where the Gradle build process was corrupting
\nnewline characters in language files. - Enhanced GUI Stability**: Re-engineered the internal GUI identification system using
InventoryHolder. - Refined Config Logic**: Updated internal configuration handling to support advanced telemetry metrics.
- Enhanced Error Handling**: Improved the
ExceptionHandlerto provide better context for remote debugging. - Code Refactoring**: Centralized GUI opening logic and standardized the use of
DARK_OAK_DOORas the universal "Back" icon.
### Contributors
Special thanks to **clessidra** for the **Italian** translation and **FarmCraft** for the **Slovak** translation!
We are looking for translators to add even more language support to AevorinReports! Join our [Discord server](https://discord.gg/SV2dXt5SwF) and open a ticket if you'd like to help!
### New Features
- Integrated FastStats Telemetry**: Added advanced server metrics and automated error tracking via FastStats.
- Live Metrics**: We now track pending reports, preferred GUI types, and database backends to help improve future updates.
- Automated Error Tracking**: Plugin exceptions are now automatically transmitted with context to our developers, allowing us to fix bugs before you even report them.
- Improved Telemetry Coexistence**: FastStats now runs alongside bStats, providing a more comprehensive overview of plugin usage and health.
### Improvements & Bug Fixes
- Refined Config Logic**: Updated internal configuration handling to support advanced telemetry metrics.
- Enhanced Error Handling**: Improved the
ExceptionHandlerto provide better context for remote debugging.
> [!NOTE]
> This is a **Beta** version. While it is more stable than previous Alpha releases, the entire codebase has been extensively revised to support localization. As a result, **unexpected bugs may still appear**. It is recommended to test this version before deploying to critical production environments.
### New Features
- Dynamic Navigation**: Added "Back" buttons to all container-based GUIs.
- New "Back to Categories" button in the category view for easier navigation between report groups.
- New "Back to Category" button in the individual report management view, allowing staff to return quickly to the filtered list.
- Back buttons use localized display names and lore, including dynamic status placeholders (e.g., "Go back to PENDING Reports").
- Official Language Support**: Expanded the built-in language library.
- Added official support for **Italian (it_IT)** and **Slovak (sk_SK)**.
- Improved Language Management**:
- Custom Language Support**: The plugin now intelligently handles user-created language files.
- If you create a custom language configuration (any
.ymlfile in thelang/folder not named after a supported internal language), the plugin will **not** modify or overwrite it during updates. - Smart Fallback System**: If a custom language file is missing specific keys required for the GUIs or messages, the plugin will now automatically use the default
en_USvalues as a fallback. - Missing Key Warnings**: A warning will be displayed in the console if your custom configuration is missing fields, helping you identify what needs to be added.
- Automatic Internal Updates**: Supported languages (
en_US,it_IT,sk_SK) are automatically updated when the plugin jar is updated.
### Improvements & Bug Fixes
- GUI Interaction Fix**: Fixed a bug where both admins and players could accidentally take items (like report books or action icons) out of the container-based GUIs and place them in their own inventory.
- Build Process Optimization**: Fixed a critical issue where the Gradle build process was corrupting
\nnewline characters in language files, which previously broke book-based GUIs. - Security & Privacy**:
- Fixed a missing permission check in the Book GUI that allowed non-admin players to see "Click to change status" options when viewing their own reports.
- Improved management button visibility: Navigation and management buttons are now context-aware and only show up for players with the correct permissions.
- Code Refactoring**:
- Centralized GUI opening logic in
CategoryContainerGUIfor better maintainability. - Standardized the use of
DARK_OAK_DOORas the universal "Back" icon across all menu systems.
### Contributors
Special thanks to **clessidra** for the **Italian** translation and **FarmCraft** for the **Slovak** translation!
We are looking for translators to add even more language support to AevorinReports in the future! If you are interested in contributing, the only requirement is that the language must be natively supported by Minecraft.
Join our [Discord server](https://discord.gg/SV2dXt5SwF) and open a ticket if you'd like to help with translations!
> [!WARNING]
> This is an **Alpha** version and is **not stable**. It is **not** recommended to install this on your Minecraft server unless you are a developer or a tester.
### New Features
- Full Localization Support**: Implemented a comprehensive language system.
- New
lang/folder for storing language packs (e.g.,en_US.yml). - Active language selection via
languagesetting inconfig.yml. - Added default
en_US.ymlwith all GUI and message strings. - Localized GUIs**: Refactored all user interfaces to be fully translatable.
ReportManageGUI: Localized all labels and status buttons.CategoryContainerGUI: Localized navigation and indicators.ReportReasonContainerGUI: Localized the entire reason selection flow.BookGUI: Localized the classic book-based reporting and management views.- Localized Commands**: All command feedback and staff notifications are now localized via the language pack.
### Improvements & Bug Fixes
- Enhanced Reload System**: The
/ar reloadcommand now hot-reloads language files without restarting the server. - Improved Code Robustness**: Resolved several "incompatible types" and potential null pointer issues in GUI rendering logic.
> **Developer's Note**: While this is a relatively small update focused on stability and internal improvements, we are already hard at work on a major upcoming update centered around **localization and language support**. Stay tuned!
### New Features
- Update Channel Selection**: Added an option in
config.ymlto choose the update notification channel. all: Notifies about ALL updates (alpha, beta, and stable releases).release: Only notifies about stable releases.beta: Notifies about beta releases.alpha: Notifies about alpha releases.
### Bug Fixes & Stability
- Improved Discord Robustness**: Resolved a "Guild does not have a self member" error by implementing explicit member caching and chunking policies.
- Enhanced Discord Logging**: Added detailed error reporting for Discord message failures, including channel and guild identification to aid troubleshooting.
- Safety Checks**: Implemented verification steps to ensure the bot's identity is fully loaded before attempting to send report notifications or log updates.
- Fixed Update Checker**: Resolved a bug in the update checker that caused incorrect behaviour when fetching or comparing version information.
- Fixed Discord Module Crash**: Resolved a bug in the Discord integration where a malformed
GUILD_CREATEpayload triggered aParsingExceptionin JDA.
### Configuration
- Config Migration**: Incremented
config-versionto3to support new update checker settings and improvements.
### Contributors
Special thanks to **clessidra** for their help in identifying and testing various **Discord-related bugs**.
### Bug Fixes & Stability
- Improved Discord Robustness**: Resolved a "Guild does not have a self member" error by implementing explicit member caching and chunking policies.
- Enhanced Discord Logging**: Added detailed error reporting for Discord message failures, including channel and guild identification to aid troubleshooting.
- Safety Checks**: Implemented verification steps to ensure the bot's identity is fully loaded before attempting to send report notifications or log updates.
### Contributors
Special thanks to **clessidra** for identifying the Discord "self member" issue.
### Bug Fixes
- Fixed Update Checker**: Resolved a bug in the update checker that caused incorrect behaviour when fetching or comparing version information.
- Fixed Discord Module Crash**: Resolved a bug in the Discord integration where a malformed
GUILD_CREATEpayload (forum channels with anullavailable_tagsfield) triggered aParsingExceptionin JDA, flooding the console with errors and causing the guild to become unavailable, effectively disabling the Discord module entirely.
### Contributors
Special thanks to **clessidra** for helping test and identify the Discord module crash.
### New Features
- Update Channel Selection**: Added an option in
config.ymlto choose betweenalpha,beta, andreleaseupdate channels. - Release channel: Only notifies about stable releases.
- Beta channel: Notifies about beta and stable releases.
- Alpha channel: Notifies about all updates (alpha, beta, and stable).
### Configuration
- Config Migration**: Incremented
config-versionto2to support new update checker settings.
### Bug Fixes & Optimization
- Fixed "Nag Author" Warnings**: Removed all usage of
System.out.printlnandprintStackTracein favor of the official plugin logger. This ensures compliance with modern server software (Paper/Spigot) and cleans up console output. - Improved Database Logging**: Structured log messages for server renames, table schema updates, and database connectivity issues.
- Code Audit**: Audited the entire codebase to ensure all component logs follow a standardized logging format.
### Configuration & Persistence
- Next-Gen Configuration Update System**: Re-engineered the entire configuration engine to support automated, comment-preserving updates. When a new plugin version (detected via
config-version) requires configuration changes, the system now: - Creates a safe backup of your existing settings as
config.yml.old. - Seamlessly migrates all user data into the updated structure while perfectly preserving all custom comments, layout, and section headers.
- Fixed Critical Config Crashing**: Added resilient type-handling to prevent the plugin from shutting down when invalid data types (like numbers in string fields) are encountered in
config.yml. - Improved YAML Aesthetics**: Standardized string quoting and formatting to ensure professional, valid YAML output across all platforms.
### Bug Fixes & Improvements
- Fixed Report Cooldown**: Resolved an issue where the report cooldown was not being enforced. Players must now wait the configured time between reports.
- Fixed Active Report Limit**: Implemented the
max-active-reportscheck to prevent players from exceeding the configured limit of pending reports. - Corrected Config Keys**: Fixed a bug where some configuration settings (like
cooldownandmax-active-reports) were not being read correctly fromconfig.yml. - Improved Discord Error Handling**:
- Added simplified, readable error messages for Discord bot initialization failures.
- Added explicit database availability checks to prevent crashes if the database is disconnected.
- Stack traces are now hidden by default and can be enabled via
debug.enabledinconfig.yml.
### Security & Permissions
- New Bypass Permissions**:
aevorinreports.bypass.cooldown: Allows specified players/ranks to bypass the reporting cooldown.aevorinreports.bypass.limit: Allows specified players/ranks to bypass the active report limit.
### Discord Network Mode
- Network Mode for Multi-Server Setups**: Added a new
network-modeconfiguration option for Discord integration. - Only ONE server in your network should enable
discord.network-mode.enabled: true - This designated server will poll the database for new reports from ALL servers in the network via a reliable ID-based system.
- Configurable poll interval (default: 10 seconds).
- Perfect for networks where you want centralized Discord notifications without running the bot on every server.
- Improved Reliability**: Switched to ID-based tracking to ensure no reports are duplicated or missed, even across server restarts.
- Duplication Fix**: Resolved issues where reports on the bot-server could be sent twice.
### General & Security
- Region Restriction**: Added a restriction to prevent the plugin from running on servers located in Israel (via IP geolocation and server timezone checks) with a #FreePalestine message.
- Improved Database Logs**: Simplified database connection error messages to be cleaner and more readable.
- Configuration Cleanup**: Removed unused security and encryption sections for a leaner setup.
### General
- Discord Integration**: Added a robust Discord integration with a dedicated bot.
- Improved Database Logs**: Simplified database connection error messages to be cleaner and more readable (no more giant stack traces).
- Configuration Cleanup**: Removed the unused "Security" section and encryption key logic for a leaner
config.yml. - Folia Compatibility**: Ensured all new features, including the Discord bot's background tasks, are fully compatible with Folia servers.
### Discord Integration Features
- Dynamic Bot Presence**: Configure the bot's status (Online, Idle, etc.) and activity (Watching, Playing, etc.) with support for the
%online_players%placeholder. - Real-time Notifications**: Receive beautifully formatted embeds for new reports in your Discord channel.
- Slash Commands**:
/reports: List all active pending reports./lookup <id>: View detailed information about a specific report./resolve <id>,/reject <id>,/pending <id>: Manage report statuses directly from Discord./help: Detailed help menu for the bot.- Smart Formatting**: The "Server" field in Discord embeds automatically hides itself if you are only running a single server, matching the in-game behavior.
- Customizable Aesthetics**: Independent color settings for report alerts and lookup results in
config.yml.
- Changed the Book Gui's Reason to be like this: "Reason: Hover to See"**
- Fixed a bug where the Book Gui's Status colours were always red instead of their own independent colour**
- Added Folia Server Software Support**
- Made the config.yml cleaner**
- Removed Velocity Support for a better system**
- Added an System for Network Servers**: All servers should run the plugin (proxy excluded) and connect to the same database to share and manage reports across the entire network.
All notable changes to this project will be documented in this file.
## [1.0.3] - 2025-10-23
### New Features
- Enhanced Report Command**: Added
/report <player> <reason>for direct reporting. - Custom Reasons in GUI**: Added a "Custom Reason" option to the Book GUI. Selecting this closes the GUI and prompts the player to enter a reason in chat.
- Container GUI**: The Container GUI interface is now fully functional.
- bStats Support**: Added bStats integration for anonymous plugin metrics.
- Player Report History**: Recent update allows regular players to view their own submitted reports via
/reports. - MiniMessage Support**: Added support for MiniMessage formatting (e.g.,
<red>,<gradient>) in configuration and messages. - Update Checker**: Implemented an update checker using the Modrinth API.
### Changes & Improvements
- Command Renaming**: Renamed
/shiftreport <id> <status>to/setreportstatus <id> to <status>for better clarity. - Smart Permissions**: The
/viewreportcommand now allows players to view their own reports without needing admin permissions. - GUI Experience**:
- Improved Book GUI readability (Fixed invisible Report IDs).
- Status change actions now close the inventory for a smoother workflow.
- "Your Reports" view added for non-staff players.
- Console Output**: Cleaned up console logs by removing emojis that were causing display issues on some terminals.
- Notifications**: Updated staff notifications and success messages to use modern MiniMessage formatting and allow full customization in
config.yml. - Codebase Optimization**: Comprehensive cleanup of imports, command registration, and error handling logic.
### Removed
- Legacy Command**: Removed
/report-category <player> <reason>as it has been replaced by the streamlined/reportcommand.
- Improved Book GUI functionalities for smoother user experience
- Container GUI is now fully functional
- Accidentally removed "Custom Reason" from GUIs; will be restored ASAP
- Overall stability rating: 8/10
- Renamed the command "/shiftreport <id> <status>" to "/setreportstatus <id> to <status>".
- The
/viewreportand/setreportstatuscommands are now visible to administrators with the appropriate permissions. - Removed unnecessary files and performed a comprehensive codebase cleanup.
- Introduced an UpdateChecker feature (currently experimental and requires further optimization).
- Considering a migration to CommandAPI for improved command management in future releases.
- Added /report <player> <reason> command.
- Book GUI: Added "Custom reason" option. Selecting it closes the GUI and prompts the player in chat to enter a custom reason; submitting the message files the report automatically.
- Implemented update checker using the Modrinth API.
- Removed: "/report-category <player> <reason>" command; replaced by "/report <player> <reason>".
- Ongoing: Refactoring/cleanup of codebase and command execution pipeline.
Notes on stability:
- Existing features remain stable and unchanged.
- New features appear stable in testing, but minor issues may still occur while we continue refining the command execution changes.
- Overall stability rating: 9/10.
- Added support for Minecraft versions 1.18 to 1.21.8
- Fixed database vulnerabilities
- Synchronized report system between Velocity and Paper servers using the database
### GUI Enhancements
Redesigned The Book GUI for improved usability.
Fixed an issue with the Container GUI where the /report command was not functioning.
### New Features
Added a fully customizable report reason category for greater admin control.
Implemented an automatic plugin version update checker.
### Optimizations & Fixes
Improved overall plugin stability and performance.
Resolved various database-related issues for better reliability.