Player Report | 1.21 | GUI for /reports icon

Player Report | 1.21 | GUI for /reports -----

A modern, fully in-game player reporting system designed for server moderation teams.



[​IMG]

A modern in-game player reporting system designed for server moderation teams.

Players can easily report rule violations while moderators receive powerful tools to review, filter and process reports directly in-game using intuitive GUIs.

Version 4.0.0 is a complete rewrite, introducing a modern report workflow, improved moderation tools, database support, Discord integration and much more.

Almost every feature, message and visual can be configured in the config!


[​IMG]


[​IMG]

» Modern in-game reporting system
» Easy player reporting via /report
» Optional reason GUI and confirmation system
» Advanced moderation GUI for staff
» Assign moderators as report handlers
» Filter and sort reports directly in-game
» Teleport to reported players or saved locations
» Reward players for valid reports
» Supports online & offline reward claiming
» Discord webhook integration for reports and updates
» PlaceholderAPI support for statistics and integrations
» Storage support for YAML or MySQL
» Search reports by player, ID, reason or handler
» Notification system for staff members
» Automatic cleanup for old reports
» Highly configurable messages, GUIs and behavior
» Lightweight and optimized for performance
» Supports Folia

PlayerReport was built to help staff manage reports quickly and efficiently - directly in game.

Quick, how? » Reports can be reviewed and updated instantly.
Efficiently, how? » Lightweight design with optimized storage.
Effectively, how? » Clear moderation workflow with optional rewards.


[​IMG]

[​IMG]

Reports are displayed inside a fully configurable GUI.

Staff members can:
• review reports
• change report status
• assign handlers
• teleport to involved players (reporting and reported player)
• remove reports

Filtering and sorting options help moderators handle large amounts of reports efficiently.


[​IMG]

Players can optionally receive rewards when their reports are confirmed.

Rewards support:
• command rewards
• item rewards
• offline reward storage
• reward claiming via /reports claim

Due to the support of command rewards, this feature is compatible with other plugins, such as giving out vote keys as rewards or basically any other command!

This allows servers to encourage players to help maintain a fair environment.


[​IMG]
Command Permission Description
Code (Text):
/report <player> <reason>
Code (Text):
playerreport.report
Create a report for a player.
Code (Text):
/reports
Code (Text):
playerreport.admin
Open the moderation GUI to view and manage reports.
Code (Text):
/reports help
Code (Text):
playerreport.admin
Shows all available PlayerReport commands.
Code (Text):
/reports search user <player>
Code (Text):
playerreport.admin
Search reports created by or against a specific player.
Code (Text):
/reports search id <reportId>
Code (Text):
playerreport.admin
Find a report by its unique ID.
Code (Text):
/reports search reason <text>
Code (Text):
playerreport.admin
Search reports containing a specific reason.
Code (Text):
/reports search handler <player>
Code (Text):
playerreport.admin
Show reports assigned to a specific moderator.
Code (Text):
/reports sethandler <reportId> <player|none>
Code (Text):
playerreport.admin.handler.set
Assign or remove a moderator as the handler of a report.
Code (Text):
/reports clear
Code (Text):
playerreport.admin.clear
Clear outdated or deleted reports.
Code (Text):
/reports claim
Code (Text):
playerreport.claim
Claim rewards for confirmed reports.
Code (Text):
/reports on
Code (Text):
playerreport.admin.notify.toggle
Enable report notifications.
Code (Text):
/reports off
Code (Text):
playerreport.admin.notify.toggle
Disable report notifications.
Code (Text):
/reports reload
Code (Text):
playerreport.reload
Reload the plugin configuration files.


[​IMG]
Permission Description
Code (Text):
playerreport.*
Grants access to all PlayerReport permissions.
Code (Text):
playerreport.report
Allows players to create reports using /report.
Code (Text):
playerreport.bypass.cooldown
Bypasses the report cooldown.
Code (Text):
playerreport.immune
Prevents a player from being reported.
Code (Text):
playerreport.admin
Allows access to the moderation GUI (/reports).
Code (Text):
playerreport.admin.handler.set
Allows assigning or removing report handlers.
Code (Text):
playerreport.admin.clear
Allows clearing outdated reports using /reports clear.
Code (Text):
playerreport.admin.notify.toggle
Allows toggling report notifications using /reports on/off.
Code (Text):
playerreport.reload
Allows reloading the plugin configuration with /reports reload.
Code (Text):
playerreport.update.notify
Receive notifications when a plugin update is available.
Code (Text):
playerreport.claim
Allows players to claim rewards for successful reports.


[​IMG]
Code (Text):

# =========================================================
# PlayerReport - config.yml
# Built for Paper 1.21.x (api-version: 1.20)
#
# Color codes:
# Use & for normal Minecraft colors (example: &a, &c, &7)
# HEX colors in lang.yml are supported via &#RRGGBB or #RRGGBB
# =========================================================


# =========================================================
# Reporting
# Settings for creating reports
# =========================================================
reporting:

  # If true, the reported player must currently be online
  # to be reported.
  requireOnlineTarget: false

  # Maximum number of open reports a single reporter
  # can have at the same time.
  maxOpenReportsPerReporter: 5

  # Cooldown in seconds between creating reports.
  cooldownSeconds: 10

  # Defines how report reasons are handled.
  # Available modes:
  # - FREETEXT   = players type any reason
  # - PREDEFINED = players must use one of the predefined reasons
  # - BOTH       = both systems are allowed
  reasonMode: FREETEXT

  # List of predefined reasons used when PREDEFINED or BOTH is enabled.
  predefinedReasons:
    - "Cheating"
    - "Bug abuse"
    - "Harassment"

  # GUI for selecting predefined report reasons.
  reasonGui:

    # Enables the reason selection GUI.
    enabled: false

    # If true, players may still enter a reason directly by command,
    # even when the reason GUI is enabled.
    allowCommandReason: true

    # Inventory title of the reason selection GUI.
    title: "&cSelect a reason for &f%target%"

    # Inventory size of the reason selection GUI.
    # Should be a valid chest size (9, 18, 27, 36, 45, 54).
    size: 27

    filler:
      # If true, empty GUI slots are filled with the filler item.
      enabled: true

      # Material used for filler slots.
      material: GRAY_STAINED_GLASS_PANE

    reasonItem:
      # Material used for each selectable reason.
      material: PAPER

      # Display name of a reason item.
      name: "&a%reason%"

      # Lore shown on each reason item.
      lore:
        - "&7Report &f%target% &7for: &b%reason%"
        - ""
        - "&eClick to continue"

    # Confirmation GUI shown before the report is submitted.
    confirm:

      # Title of the confirmation GUI.
      title: "&cReport &f%target% &cfor &b%reason%&c?"

      filler:
        # Material used for empty slots in the confirmation GUI.
        material: GRAY_STAINED_GLASS_PANE

      yes:
        # Material of the confirmation button.
        material: LIME_WOOL

        # Display name of the confirmation button.
        name: "&aYes"

      no:
        # Material of the cancel button.
        material: RED_WOOL

        # Display name of the cancel button.
        name: "&cNo"


# =========================================================
# Claims
# Settings for claim / handler behavior
# =========================================================
claims:

  # If true, a report will automatically be claimed by the
  # moderator when its status changes to IN_PROGRESS.
  autoClaimOnInProgress: true


# =========================================================
# Timestamps
# Formatting for displayed date and time values
# =========================================================
timestamps:

  # Timezone used for report timestamps.
  timezone: "Europe/Berlin"

  # Date format pattern.
  dateFormat: "dd.MM.yyyy"

  # Time format pattern.
  timeFormat: "HH:mm:ss"

  # Final display format.
  # Available placeholders: {date}, {time}
  displayFormat: "{date} {time}"


# =========================================================
# Messages
# General message display settings
# =========================================================
messages:
  headerFooter:

    # Enables optional header/footer formatting in messages.
    enabled: false


# =========================================================
# Notifications
# Staff notification settings
# =========================================================
notifications:

  # If true, notification toggle states are stored persistently.
  persist: true

  toggleCommand:
    # Enables the /reports on and /reports off commands.
    enabled: true


# =========================================================
# Delete / Retention
# Controls how deleted reports are handled
# =========================================================
delete:

  # Delete mode:
  # - TAG   = report is marked as deleted
  # - PURGE = report is permanently removed
  mode: TAG

  # Retention period for deleted reports.
  # 0 usually means no retention-based cleanup.
  retention: 0


# =========================================================
# Updates
# Update notification settings
# =========================================================
updates:

  # If true, players with the proper permission are notified
  # on join when an update is available.
  notifyOnJoin: true


# =========================================================
# PlaceholderAPI
# Placeholder expansion settings
# =========================================================
placeholderapi:

  # Enables PlaceholderAPI support if PlaceholderAPI is installed.
  enabled: true


# =========================================================
# Storage
# Storage backend for reports and pending rewards
#
# Supported types:
# - YAML  = local file storage
# - MYSQL = MySQL / MariaDB database
# =========================================================
storage:
  reports:
    # Storage type used for reports.
    type: YAML

  pendingRewards:
    # Storage type used for pending rewards.
    type: YAML

  mysql:
    # MySQL server host.
    host: "127.0.0.1"

    # MySQL server port.
    port: 3306

    # Database name.
    database: "playerreport"

    # Database username.
    username: "root"

    # Database password.
    password: ""

    # Optional JDBC parameters appended to the connection URL.
    params: "useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"


# =========================================================
# Rewards
# Reward system for reporters
# Rewards themselves are defined in rewards.yml
# =========================================================
rewards:

  # Enables the reward system.
  enabled: false

  # If true:
  # when a report is set to CLOSED, rewards are automatically
  # added to the reporter.
  #
  # If a report is marked as FALSE, it will be deleted
  # to prevent rewards.
  simpleReportHandling: false


# =========================================================
# Discord Webhook
# Sends report events to Discord
# =========================================================
discord:
  webhook:

    # Enables Discord webhook integration.
    enabled: false

    # Discord webhook URL.
    url: ""

    events:
      # Send a webhook when a new report is created.
      onReportCreated: true

      # Send a webhook when a report status changes.
      onStatusChanged: true

      # Send a webhook when a handler changes.
      onHandlerChanged: true

    # Custom webhook username shown in Discord.
    username: "PlayerReport"

    # Optional avatar URL for the webhook.
    avatarUrl: ""

    # If true, webhook messages are sent as embeds.
    useEmbeds: true

    # Optional mention text, for example:
    # "@everyone" or "<@&roleId>"
    mention: ""


# =========================================================
# Reports GUI
# Main moderation GUI
# =========================================================
GUI:

  # Title of the reports GUI.
  # Placeholders:
  # %filter%, %sort%, %page%, %pages%
  Name: '&cReports &7(%filter% &8|&7 %sort% &8|&7 %page%/%pages%&7)'

  # Inventory size of the reports GUI.
  Size: 54

  Filter-Item:

    # Slot of the filter item in the GUI.
    Slot: 49

    OPEN:
      # Material shown when the OPEN filter is active/selectable.
      Material: GREEN_TERRACOTTA

      # Display name of the OPEN filter item.
      Name: '&a Open Reports'

      # Lore of the OPEN filter item.
      Lore:
        - '&7Shows open & in-progress reports'
        - ''
        - '&eClick to switch filter'

    CLOSED:
      # Material shown when the CLOSED filter is active/selectable.
      Material: RED_TERRACOTTA

      # Display name of the CLOSED filter item.
      Name: '&c Closed Reports'

      # Lore of the CLOSED filter item.
      Lore:
        - '&7Shows closed reports'
        - ''
        - '&eClick to switch filter'

    DELETED:
      # Material shown when the DELETED filter is active/selectable.
      Material: BROWN_TERRACOTTA

      # Display name of the DELETED filter item.
      Name: '&6 Deleted Reports'

      # Lore of the DELETED filter item.
      Lore:
        - '&7Shows deleted reports'
        - ''
        - '&eClick to switch filter'

  Sort-Item:

    # Slot of the sort item in the GUI.
    Slot: 45

    # Material of the sort item.
    Material: COMPARATOR

    # Display name of the sort item.
    Name: '&bSort: &f%sort%'

    # Lore of the sort item.
    Lore:
      - '&7Filter: &f%filter%'
      - ''
      - '&7Modes:'
      - '&f- NEWEST / OLDEST'
      - '&f- STATUS_OPEN_FIRST / STATUS_IN_PROGRESS_FIRST (only in OPEN tab)'
      - ''
      - '&eClick to change sorting'

  Navigation:
    Prev:
      # Slot of the previous-page button.
      Slot: 48

      # Material of the previous-page button.
      Material: ARROW

      # Display name of the previous-page button.
      Name: '&a← Previous page'

      # Lore of the previous-page button.
      Lore:
        - '&7Click to go back'

    Next:
      # Slot of the next-page button.
      Slot: 50

      # Material of the next-page button.
      Material: ARROW

      # Display name of the next-page button.
      Name: '&aNext page →'

      # Lore of the next-page button.
      Lore:
        - '&7Click to go forward'

  # Always shown in the very last slot (bottom-right).
  # Toggles whether the GUI should only show reports
  # where the current viewer is the handler.
  My-Handler-Only:
    # Material of the toggle item.
    Material: NAME_TAG

    # Display name of the toggle item.
    Name: '&bOnly my handled reports: &f%state%'

    # Lore of the toggle item.
    Lore:
      - '&7Click to toggle'
      - '&7When enabled, you will only'
      - '&7see reports where you are'
      - '&7the handler.'

  Default-Item:
    # Material used for report entries in the GUI.
    Material: PAPER

    # Display name of a report entry.
    # Placeholders include report-related values like %id%, %reported%, etc.
    Name: '&a %reported% &7(#%id%)'

    # Lore of a report entry.
    Lore:
      - ''
      - ' &eCreated: &7%created%'
      - ' &eStatus: &7%status%'
      - ' &eHandler: &7%handler%'
      - ''
      - ' &eReporter: &b%reporter%'
      - ' &eReported: &c%reported%'
      - ''
      - ' &eReason: &b%reason%'
      - ''
      - '&aLeft-Click &7→ Open report'
      - '&eMiddle-Click &7→ Change Status'
      - '&cRight-Click &7→ Remove'

    Player-Commands:
      # Commands triggered for the different click types.
      # Leave empty brackets [] to disable.
      LEFT: []
      MIDDLE: []
      RIGHT: []


# =========================================================
# GUI Defaults
# Default filter and sorting for the reports GUI
# =========================================================
gui:

  # Default filter when opening the reports GUI.
  # Available: OPEN, CLOSED, DELETED
  defaultFilter: OPEN

  # Default sorting mode when opening the reports GUI.
  # Available:
  # - NEWEST
  # - OLDEST
  # - STATUS_OPEN_FIRST
  # - STATUS_IN_PROGRESS_FIRST
  defaultSort: NEWEST
 
Code (Text):

prefix: "&8[&bPlayerReport&8]&r "

header: "&8&m------------------------"
footer: "&8&m------------------------"

only-in-game: "{prefix}&cThis command can only be used in-game."
no-permission: "{prefix}&cYou don’t have permission."
usage-report: "{prefix}&7Usage: &f/report <name> <reason>"
missing-reason: "{prefix}&cPlease provide a reason."
player-not-found: "{prefix}&cPlayer not found: &f{target}"
target-must-be-online: "{prefix}&cThis player must be online to be reported: &f{target}"
report-self-not-allowed: "{prefix}&cYou cannot report yourself."
report-target-immune: "{prefix}&cThis player cannot be reported: &f{target}"

report-cooldown: "{prefix}&cPlease wait &f{seconds}&c seconds before creating another report."
target-cooldown: "{prefix}&cThis player was reported recently. Please wait &f{seconds}&c seconds before reporting &f{target}&c again."
report-limit-reached: "{prefix}&cYou reached the limit. Max &f{limit} &cactive reports."
report-saved: "{prefix}&aReport saved."
report-failed: "{prefix}&cCould not create report."
report-select-reason: "{prefix}&7Select a reason for reporting &f{target}&7."
report-reason-not-allowed: "{prefix}&cFree-text reasons are disabled. Please pick one of the predefined reasons."
report-command-reason-disabled: "{prefix}&cReporting via command is disabled. Please use the GUI to report &f{target}&c."
admin-notify: "{prefix}&c{reporter} &7reported &c{target}&7: &f{reason}"

reports-search-usage: "{prefix}&7Usage: &f/reports search user <name>&7 | &f/reports search id <id>&7 | &f/reports search reason <reason>&7 | &f/reports search handler <name>"
reports-notify-on: "{prefix}&aNotifications enabled."
reports-notify-off: "{prefix}&cNotifications disabled."
reports-toggle-disabled: "{prefix}&cToggle command disabled in config."
reports-clear-failed: "{prefix}&cCould not clear reports."
reports-cleared: "{prefix}&aCleared &f{amount}&a reports."

usage-sethandler: "{prefix}&7Usage: &f/reports sethandler <id> <player|none>"
report-not-found: "{prefix}&cReport not found: &f{id}"
report-not-found-generic: "{prefix}&cReport not found."
handler-set: "{prefix}&aHandler for report &f#{id} &aset to &f{handler}&a."
handler-cleared: "{prefix}&eHandler for report &f#{id} &ecleared."
reload-success: "{prefix}&aReloaded config.yml and lang.yml."
reload-failed: "{prefix}&cReload failed. Check console."

rewards-disabled: "{prefix}&cRewards are disabled."
rewards-nothing: "{prefix}&7You have no rewards to claim."
rewards-claimed: "{prefix}&aClaimed &f{amount}&a rewards."
rewards-claim-in-progress: "{prefix}&ePlease wait, your previous reward claim is still being processed."
rewards-load-failed: "{prefix}&cCould not load your pending rewards right now."
rewards-claim-partial-restored: "{prefix}&cAn error occurred while giving your rewards. Remaining rewards were restored."
reward-granted: "{prefix}&aReward has been stored for the reporter."
reward-not-granted: "{prefix}&eNo reward stored (already granted or missing reporter/reward config)."
reward-skipped: "{prefix}&7No reward will be given."
rewards-available: "{prefix}&aYou have &f{amount}&a reward(s) available! Use &f/reports claim&a to collect them."

report-marked-false: "{prefix}&eReport marked as false and deleted."
update-available: "{prefix}&eUpdate available: &f{current} &7-> &a{latest}
{prefix}&7Spigot: &b{url}"

reports-gui-delete-failed: "{prefix}&cReport could not be deleted."
reports-gui-status-update-failed: "{prefix}&cReport status could not be updated."
location-player-offline: "{prefix}&cLocation: N/A (player offline)"
location-not-available: "{prefix}&cLocation: N/A"
teleported: "{prefix}&aTeleported."

gui:
  shared:
    filler-name: " "

  report-reason:
    title: "&cSelect a reason for &f{target}"
    reason-item:
      name: "&a{reason}"
      lore:
        - "&7Report &f{target} &7for: &b{reason}"
        - ""
        - "&eClick to continue"

  report-confirm:
    title: "&cReport &f{target} &cfor &b{reason}&c?"
    yes:
      name: "&aYes"
    no:
      name: "&cNo"

  reward-decision:
    title: "&bGive reward? &7(# {id})"
    yes: "&aYes, give reward"
    no: "&cNo, don't give reward"

  reports:
    shared:
      back:
        name: "&cBack"
      state-on: "&aON"
      state-off: "&cOFF"
      not-available: "N/A"
      location: "&7Location: &f{location}"
      filter:
        open: "OPEN"
        closed: "CLOSED"
        deleted: "DELETED"
      sort:
        newest: "NEWEST"
        oldest: "OLDEST"
        status-open-first: "STATUS_OPEN_FIRST"
        status-in-progress-first: "STATUS_IN_PROGRESS_FIRST"
      status:
        open: "OPEN"
        in-progress: "IN_PROGRESS"
        closed: "CLOSED"
        deleted: "DELETED"

    list:
      title: "&cReports &7(%filter% &8|&7 %sort% &8|&7 %page%/%pages%&7)"
      only-my-handler:
        name: "&bOnly my handled reports: &f{state}"
        lore:
          - "&7Click to toggle"
          - "&7When enabled, you will only"
          - "&7see reports where you are"
          - "&7the handler."
      filter:
        open:
          name: "&a Open Reports"
          lore:
            - "&7Shows open & in-progress reports"
            - ""
            - "&eClick to switch filter"
        closed:
          name: "&c Closed Reports"
          lore:
            - "&7Shows closed reports"
            - ""
            - "&eClick to switch filter"
        deleted:
          name: "&6 Deleted Reports"
          lore:
            - "&7Shows deleted reports"
            - ""
            - "&eClick to switch filter"
      sort:
        name: "&bSort: &f{sort}"
        lore:
          - "&7Filter: &f{filter}"
          - ""
          - "&7Modes:"
          - "&f- NEWEST / OLDEST"
          - "&f- STATUS_OPEN_FIRST / STATUS_IN_PROGRESS_FIRST (only in OPEN tab)"
          - ""
          - "&eClick to change sorting"
      navigation:
        prev:
          name: "&a← Previous page"
          lore:
            - "&7Click to go back"
        next:
          name: "&aNext page →"
          lore:
            - "&7Click to go forward"
      search:
        user: "User: {value}"
        id: "ID: {value}"
        reason: "Reason: {value}"
        handler: "Handler: {value}"
      entry:
        name: "&a %reported% &7(#%id%)"
        lore:
          - ""
          - " &eCreated: &7%created%"
          - " &eStatus: &7{status_display}"
          - " &eHandler: &7%handler%"
          - ""
          - " &eReporter: &b%reporter%"
          - " &eReported: &c%reported%"
          - ""
          - " &eReason: &b%reason%"
          - ""
          - "&aLeft-Click &7→ Open report"
          - "&eMiddle-Click &7→ Change Status"
          - "&cRight-Click &7→ Remove"

    confirm-delete:
      title: "&cRemove report?"
      confirm:
        name: "&aConfirm"
      cancel:
        name: "&cCancel"
      info:
        name: "&7Target: &f{target}"

    details:
      title: "&cReport #{id}"
      teleport-click: "&7Click to teleport"
      teleport-reporter-current:
        name: "&aTeleport: reporter (current)"
      teleport-reporter-snapshot:
        name: "&aTeleport: reporter (at report)"
      teleport-target-current:
        name: "&eTeleport: reported (current)"
      teleport-target-snapshot:
        name: "&eTeleport: reported (at report)"
      status:
        name: "&bSet status"
        lore-created: "&7Created: &f{created}"
        lore-current: "&7Current: &f{status}"
        lore-handler: "&7Handler: &f{handler}"
        lore-click: "&7Click to choose"
      back:
        lore: "&7Return to /reports"

    status-select:
      title: "&bSet status #{id}"
      open:
        name: "&aOPEN"
        lore-1: "&7Set status to &aOPEN"
        lore-2: "&7(Handler will be cleared)"
      in-progress:
        name: "&eIN_PROGRESS"
        lore-1: "&7Set status to &eIN_PROGRESS"
      closed:
        name: "&cCLOSED"
        lore-1: "&7Set status to &cCLOSED"
      back:
        lore: "&7Return to details"

discord:
  report-created:
    title: "New report #{id}"
    description: "**Reporter:** {reporter}\n**Reported:** {target}\n**Reason:** {reason}\n**Status:** {status}"
  status-changed:
    title: "Report #{id} status changed"
    description: "**Actor:** {actor}\n**Reported:** {target}\n**From:** {old_status}\n**To:** {new_status}\n**Handler:** {handler}"
  handler-changed:
    title: "Report #{id} handler updated"
    description: "**Actor:** {actor}\n**Reported:** {target}\n**Handler:** {handler}\n**Status:** {status}"
 



Placeholder Description
Code (Text):
%playerreport_reports_total%
Total number of reports stored on the server.
Code (Text):
%playerreport_reports_open%
Total number of currently open reports.
Code (Text):
%playerreport_reports_in_progress%
Total number of reports currently being handled.
Code (Text):
%playerreport_reports_closed%
Total number of closed reports.
Code (Text):
%playerreport_reports_deleted%
Total number of deleted reports.
Code (Text):
%playerreport_reports_created%
Number of reports created by the player.
Code (Text):
%playerreport_reports_against%
Number of reports made against the player.
Code (Text):
%playerreport_reports_handled%
Number of reports handled by the player (as moderator).
Code (Text):
%playerreport_reports_open_for_player%
Number of open reports created by the player.
Code (Text):
%playerreport_reports_handled_open%
Number of open reports currently assigned to the player as handler.


[​IMG]

Please DO NOT leave bad reviews for issues.
If you encounter problems, please contact me via the PM, the discussion tab or the Discord server.

Thank you!
Resource Information
Author:
----------
Total Downloads: 87,802
First Release: Apr 25, 2016
Last Update: Mar 12, 2026
Category: ---------------
All-Time Rating:
108 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings