{"id":122787,"date":"2026-06-07T08:18:15","date_gmt":"2026-06-07T05:18:15","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/"},"modified":"2026-06-07T08:18:15","modified_gmt":"2026-06-07T05:18:15","slug":"playernotes","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/","title":{"rendered":"PlayerNotes"},"content":{"rendered":"<p>PlayerNotes is a simple staff tool for Minecraft servers that lets moderators record and check notes on players. Notes help staff keep track of warnings, behavior, and context over time, even when players are offline. The plugin includes commands to add, list, view, remove, and clear notes, along with full permission control. It supports both flat file storage for small servers and MySQL for bigger setups. Messages can be customized, MiniMessage formatting is supported, and PlaceholderAPI can show note info in chat or menus. Everything runs async to keep the server smooth, and the layout is clean so staff can use it without confusion.<\/p>\n<p>![Example](https:\/\/cdn.modrinth.com\/data\/cached_images\/be054af52b8940372a4bf6bc0424f75897bde90f.png)<\/p>\n<p>## Commands<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>**Main Command:**<br \/>\n`\/note`<br \/>\n**Aliases:** `\/notes`, `\/pnote`, `\/playernotes`<\/p>\n<p>### Subcommands<br \/>\n`\/note add <player> <note>`<br \/>\nAdd a note to a player<\/p>\n<p>`\/note remove <player> <id>`<br \/>\n Remove a note by ID<\/p>\n<p>`\/note clear <player>`<br \/>\nClear all notes for a player<\/p>\n<p>`\/note list <player> [page]`<br \/>\nShow notes for a player<\/p>\n<p>`\/note info <player> <id>`<br \/>\nShow full info for one note<\/p>\n<\/details>\n<p>## Permissions<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>| Permission | What it does | Default |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| `playernotes.add` | Add notes | op |<br \/>\n| `playernotes.remove` | Remove notes | op |<br \/>\n| `playernotes.clear` | Clear notes | op |<br \/>\n| `playernotes.list` | View notes | op |<br \/>\n| `playernotes.info` | View note info | op |<br \/>\n| `playernotes.reload` | Reload config | op |<\/p>\n<\/details>\n<p>## PlaceholderAPI<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>**Soft dependency**<\/p>\n<p>### Placeholders<br \/>\n| Placeholder | Meaning |<br \/>\n|&#8212;|&#8212;|<br \/>\n| `%playernotes_count%` | Total notes for player |<br \/>\n| `%playernotes_has_notes%` | true or false |<br \/>\n| `%playernotes_latest_text%` | Latest note text |<br \/>\n| `%playernotes_latest_actor%` | Who wrote latest note |<br \/>\n| `%playernotes_latest_date%` | When latest note was added |<br \/>\n| `%playernotes_latest_id%` | Latest note ID |<br \/>\n| `%playernotes_oldest_text%` | Oldest note text |<br \/>\n| `%playernotes_oldest_actor%` | Who wrote oldest note |<br \/>\n| `%playernotes_oldest_date%` | When oldest note was added |<br \/>\n| `%playernotes_note_<id>_text%` | Text of a note by ID |<br \/>\n| `%playernotes_note_<id>_actor%` | Actor of that note |<\/p>\n<\/details>\n<p>## Message System<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>### MiniMessage Support<br \/>\n&#8211; Colors (names and hex)<br \/>\n&#8211; Gradients<br \/>\n&#8211; Rainbow text<br \/>\n&#8211; Bold, italic, underline, strike, obfuscated<br \/>\n&#8211; Hover and click events<\/p>\n<p>### Message placeholders<br \/>\n| Placeholder | Meaning |<br \/>\n|&#8212;|&#8212;|<br \/>\n| `{prefix}` | Plugin prefix |<br \/>\n| `{player}` | Target player |<br \/>\n| `{actor}` | Staff name |<br \/>\n| `{note}` | Note text |<br \/>\n| `{id}` | Note ID |<br \/>\n| `{timestamp}` | When note was made |<br \/>\n| `{page}` | Page number |<br \/>\n| `{total_pages}` | Number of pages |<br \/>\n| `{count}` | Total notes |<br \/>\n| `{notes}` | Formatted notes list |<\/p>\n<\/details>\n<p>## Storage Options<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>### Flat File<br \/>\n&#8211; YAML<br \/>\n&#8211; Folder per UUID<br \/>\n&#8211; Good for small servers<\/p>\n<p>### MySQL<br \/>\n&#8211; Works across network<br \/>\n&#8211; Uses HikariCP<br \/>\n&#8211; Async<\/p>\n<\/details>\n<p>## Files<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>### config.yml<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>&#8220;`yaml<br \/>\n# PlayerNotes Configuration<\/p>\n<p># Storage configuration<br \/>\nstorage:<br \/>\n  # Type of storage: &#8220;mysql&#8221; or &#8220;flatfile&#8221;<br \/>\n  type: flatfile<\/p>\n<p>  # MySQL settings (only used if type is mysql)<br \/>\n  mysql:<br \/>\n    host: localhost<br \/>\n    port: 3306<br \/>\n    database: minecraft<br \/>\n    username: root<br \/>\n    password: password<br \/>\n    # Optional connection parameters<br \/>\n    params: &#8220;?useSSL=false&#038;autoReconnect=true&#8221;<\/p>\n<p>  # Flat file settings (only used if type is flatfile)<br \/>\n  flatfile:<br \/>\n    # Folder name under the plugin data folder<br \/>\n    folder: playerdata<\/p>\n<p># Display settings<br \/>\ndisplay:<br \/>\n  # Number of notes per page in \/note list<br \/>\n  page-size: 10<\/p>\n<p>  # Date format for displaying timestamps<br \/>\n  # Available formats: ISO (2024-01-15T14:30:00), LOCAL (01\/15\/2024 02:30 PM), SIMPLE (2024-01-15 14:30)<br \/>\n  date-format: SIMPLE<\/p>\n<p># Validation settings<br \/>\nvalidation:<br \/>\n  # Maximum length for note text<br \/>\n  max-text-length: 512<\/p>\n<p>  # Strip color codes from note text<br \/>\n  strip-colors: true<\/p>\n<p># Performance settings<br \/>\nperformance:<br \/>\n  # Enable simple caching for recent note lists<br \/>\n  enable-cache: true<\/p>\n<p>  # Cache time-to-live in seconds<br \/>\n  cache-ttl: 60<\/p>\n<p>  # Maximum number of players to cache<br \/>\n  cache-size: 50<\/p>\n<p>&#8220;`<\/p>\n<\/details>\n<p>### messages.yml<\/p>\n<details>\n<summary>Spoiler<\/summary>\n<p>&#8220;`yaml<br \/>\n# PlayerNotes Messages Configuration<br \/>\n# All messages support MiniMessage formatting: https:\/\/docs.advntr.dev\/minimessage\/format.html<br \/>\n# Placeholders:<br \/>\n# {player} &#8211; Target player name<br \/>\n# {uuid} &#8211; Target player UUID<br \/>\n# {actor} &#8211; The person executing the action<br \/>\n# {id} &#8211; Note ID<br \/>\n# {count} &#8211; Number of notes<br \/>\n# {page} &#8211; Current page number<br \/>\n# {total_pages} &#8211; Total number of pages<br \/>\n# {timestamp} &#8211; Formatted timestamp<br \/>\n# {text} &#8211; Note text<br \/>\n# {max_length} &#8211; Maximum text length<\/p>\n<p># General messages<br \/>\nno-permission: &#8220;<red>You don&#8217;t have permission to use this command.&#8221;<br \/>\nplayer-not-found: &#8220;<red>Player &#8216;<yellow>{player}<\/yellow>&#8216; not found.&#8221;<br \/>\nplayer-never-joined: &#8220;<red>Player &#8216;<yellow>{player}<\/yellow>&#8216; has never joined this server.&#8221;<br \/>\ninvalid-number: &#8220;<red>Invalid number provided.&#8221;<br \/>\nstorage-error: &#8220;<red>Failed to perform operation. Please try again later.&#8221;<\/p>\n<p># Add command messages<br \/>\nadd:<br \/>\n  usage: &#8220;<red>Usage: \/note add <player> <text>&#8221;<br \/>\n  text-empty: &#8220;<red>Note text cannot be empty.&#8221;<br \/>\n  text-too-long: &#8220;<red>Note text is too long. Maximum length is <yellow>{max_length}<\/yellow> characters.&#8221;<br \/>\n  success: &#8220;<green>Note added to <yellow>{player}<\/yellow>.&#8221;<\/p>\n<p># List command messages<br \/>\nlist:<br \/>\n  usage: &#8220;<red>Usage: \/note list <player> [page]&#8221;<br \/>\n  invalid-page: &#8220;<red>Invalid page number.&#8221;<br \/>\n  no-self-permission: &#8220;<red>You don&#8217;t have permission to view your own notes.&#8221;<br \/>\n  empty: &#8220;<yellow>{player}<\/yellow> <gray>has no notes.&#8221;<br \/>\n  header: &#8220;<gold><bold>=== Notes for {player} ===&#8221;<br \/>\n  uuid-line: &#8220;<gray>UUID: <white>{uuid}&#8221;<br \/>\n  total-line: &#8220;<gray>Total Notes: <white>{count} <gray>| <gray>Page: <white>{page}\/{total_pages}&#8221;<br \/>\n  entry: &#8220;<yellow>[#{id}] <gray>{timestamp} <white>{actor}<gray>: <white>{text}&#8221;<br \/>\n  next-page: &#8220;<gray>Use <yellow>\/note list {player} {page}<\/yellow> <gray>for the next page.&#8221;<\/p>\n<p># Remove command messages<br \/>\nremove:<br \/>\n  usage: &#8220;<red>Usage: \/note remove <player> <id>&#8221;<br \/>\n  invalid-id: &#8220;<red>Invalid note ID.&#8221;<br \/>\n  success: &#8220;<green>Note <yellow>#{id}<\/yellow> removed from <yellow>{player}<\/yellow>.&#8221;<br \/>\n  not-found: &#8220;<red>Note <yellow>#{id}<\/yellow> does not exist for <yellow>{player}<\/yellow>.&#8221;<\/p>\n<p># Clear command messages<br \/>\nclear:<br \/>\n  usage: &#8220;<red>Usage: \/note clear <player> confirm&#8221;<br \/>\n  confirm-prompt: &#8220;<red>Are you sure you want to clear all notes for <yellow>{player}<\/yellow>?&#8221;<br \/>\n  confirm-instruction: &#8220;<red>Use <yellow>\/note clear {player} confirm<\/yellow> to proceed.&#8221;<br \/>\n  success: &#8220;<green>Cleared <yellow>{count}<\/yellow> note(s) from <yellow>{player}<\/yellow>.&#8221;<br \/>\n  empty: &#8220;<yellow>{player}<\/yellow> <gray>has no notes to clear.&#8221;<\/p>\n<p># Info command messages<br \/>\ninfo:<br \/>\n  usage: &#8220;<red>Usage: \/note info <player>&#8221;<br \/>\n  no-self-permission: &#8220;<red>You don&#8217;t have permission to view your own notes.&#8221;<br \/>\n  header: &#8220;<gold><bold>=== Note Info for {player} ===&#8221;<br \/>\n  uuid-line: &#8220;<gray>UUID: <white>{uuid}&#8221;<br \/>\n  total-line: &#8220;<gray>Total Notes: <white>{count}&#8221;<br \/>\n  latest-header: &#8220;<gray>Latest Note:&#8221;<br \/>\n  latest-entry: &#8220;<yellow>[#{id}] <gray>{timestamp} <white>{actor}<gray>: <white>{text}&#8221;<br \/>\n  view-all: &#8220;<gray>Use <yellow>\/note list {player}<\/yellow> to view all notes.&#8221;<\/p>\n<p># Reload command messages<br \/>\nreload-success: &#8220;<green>Plugin configuration and messages reloaded successfully!&#8221;<\/p>\n<p># Help command messages<br \/>\nhelp:<br \/>\n  header: &#8220;<gold><bold>=== PlayerNotes Commands ===&#8221;<br \/>\n  entry: &#8220;<yellow>\/note {usage} <gray>&#8211; <white>{description}&#8221;<br \/>\n  unknown-subcommand: &#8220;<red>Unknown subcommand. Use <yellow>\/note<\/yellow> for a list of commands.&#8221;<br \/>\n&#8220;`<\/p>\n<\/details>\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>Easily allow staff to add notes to players! Cross server support (MySQL)<\/p>\n","protected":false},"featured_media":122788,"template":"","meta":{"_minecraft_slug":"playernotes","_minecraft_project_id":"km9E2s7v","_minecraft_author":"aarushbhutra25","_minecraft_license":"MIT","_minecraft_downloads":37,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"playernotes.zip","_minecraft_size_bytes":830101,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-15T21:45:55.929546Z","_minecraft_date_created":"2025-11-05T07:40:56.002003Z","_minecraft_date_modified":"2025-11-05T07:03:35.993332Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/playernotes","_minecraft_icon_attachment_id":122788,"_minecraft_imported_at":"2026-06-07T05:18:16+00:00","_minecraft_import_hash":"0446d51527de8f648067d6232d1b3861","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[126,127,867,92],"mod_loader":[132],"minecraft_version":[40,38,78,79,80,81,82],"class_list":["post-122787","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-management","mod_category-paper","mod_category-social","mod_category-utility","mod_loader-paper","minecraft_version-1-21-10","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PlayerNotes - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PlayerNotes - Minecraft\" \/>\n<meta property=\"og:description\" content=\"Easily allow staff to add notes to players! Cross server support (MySQL)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/\",\"name\":\"PlayerNotes - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp\",\"datePublished\":\"2026-06-07T05:18:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playernotes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PlayerNotes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PlayerNotes - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/","og_locale":"en_US","og_type":"article","og_title":"PlayerNotes - Minecraft","og_description":"Easily allow staff to add notes to players! Cross server support (MySQL)","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/","name":"PlayerNotes - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp","datePublished":"2026-06-07T05:18:15+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playernotes-icon-1d41c8784a8066ae313af101bd5c6d5941b421ef_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playernotes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"PlayerNotes"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/122787","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/122788"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=122787"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=122787"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=122787"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=122787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}