\n \u003Ca href=\"https://github.com/WiIIiam278/HuskSync/actions/workflows/ci_master.yml\">\n \u003Cimg src=\"https://img.shields.io/github/actions/workflow/status/WiIIiam278/HuskSync/ci_master.yml?branch=master&logo=github\"/>\n \u003C/a>\n \u003Ca href=\"https://repo.william278.net/#/releases/net/william278/husksync/\">\n \u003Cimg src=\"https://repo.william278.net/api/badge/latest/releases/net/william278/husksync/husksync-common?color=00fb9a&name=Maven&prefix=v\" />\n \u003C/a>\n \u003Ca href=\"https://discord.gg/tVYhJfyDWG\">\n \u003Cimg src=\"https://img.shields.io/discord/818135932103557162.svg?label=&logo=discord&logoColor=fff&color=7389D8&labelColor=6A7EC2\" />\n \u003C/a> \n \u003Cbr/>\n \u003Cb>\n \u003Ca href=\"https://www.spigotmc.org/resources/husksync.97144/\">Spigot\u003C/a>\n \u003C/b> —\n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/husksync/setup\">Setup\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/husksync/\">Docs\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"https://github.com/WiIIiam278/HuskSync/issues\">Issues\u003C/a>\n \u003C/b>\n\u003C/p>\n\u003Cbr/>\n\n**HuskSync** is a modern, cross-server player data synchronization system that enables the comprehensive synchronization of your user's data across multiple proxied servers. It does this by making use of Redis and a MySQL/Mongo/PostgreSQL to optimally cache data while players change servers.\n\n## Features\n**⭐ Seamless synchronization** — Utilises optimised Redis caching when players change server to sync player data super quickly for a seamless experience.\n\n**⭐ Complete player synchronization** — Sync inventories, Ender Chests, health, hunger, effects, advancements, statistics, locked maps & [more](https://william278.net/docs/husksync/sync-features)—no data left behind!\n\n**⭐ Backup, restore & rotate** — Something gone wrong? Restore players back to a previous data state. Rotate and manage data snapshots in-game!\n\n**⭐ Import existing data** — Import your MySQLPlayerDataBridge data—or from your existing world data! No server reset needed!\n\n**⭐ Works great with Plan** — Stay in touch with your community through HuskSync analytics on your Plan web panel.\n\n**⭐ Extensible API & open-source** — Need more? Extend the plugin with the Developer API. Or, submit a pull request through our code bounty system!\n\n**Ready?** [It's syncing time!](https://william278.net/docs/husksync/setup)\n\n## Compatibility\nHuskSync supports the following [compatible versions](https://william278.net/docs/husksync/compatibility) of Minecraft. Since v3.7, you must download the correct version of HuskSync for your server:\n\n| Minecraft | Latest HuskSync | Java Version | Platforms | Support Status |\n|:---------------:|:---------------:|:------------:|:--------------|:-----------------------------|\n| 1.21.4 | _latest_ | 21 | Paper, Fabric | ✅ **Active Release** |\n| 1.21.3 | 3.7.1 | 21 | Paper, Fabric | 🗃️ Archived (December 2024) |\n| 1.21.1 | _latest_ | 21 | Paper, Fabric | ✅ **November 2025** (LTS) |\n| 1.20.6 | 3.6.8 | 17 | Paper | 🗃️ Archived (October 2024) |\n| 1.20.4 | 3.6.8 | 17 | Paper | 🗃️ Archived (July 2024) |\n| 1.20.1 | _latest_ | 17 | Paper, Fabric | ✅ **November 2025** (LTS) |\n| 1.17.1 - 1.19.4 | 3.6.8 | 17 | Paper | 🗃️ Archived |\n| 1.16.5 | 3.2.1 | 16 | Paper | 🗃️ Archived |\n\nHuskSync is primarily developed against the latest release. Old Minecraft versions are allocated a support channel based on popularity, mod support, etc:\n\n* Long Term Support (LTS) – Supported for up to 12-18 months\n* Non-Long Term Support (Non-LTS) – Supported for 3-6 months\n\nVerify your purchase on Discord and [Download HuskSync](https://william278.net/project/husksync/download) for your server.\n\n## Setup\nRequires a [MySQL/MariaDB/Mongo/PostgreSQL database](https://william278.net/docs/husksync/database), a [Redis (v5.0+) server]((https://william278.net/docs/husksync/redis)) and a network of [compatible Spigot or Fabric Minecraft servers](https://william278.net/docs/husksync/compatibility).\n\n1. Place the plugin jar file in the `/plugins` or `/mods` directory of each Spigot/Fabric server. You do not need to install HuskSync as a proxy plugin.\n2. Start, then stop every server to let HuskSync generate the config file.\n3. Navigate to the HuskSync config file on each server and fill in both your database and Redis server credentials.\n4. Start every server again and synchronization will begin.\n\n## Development\nTo build HuskSync, simply run the following in the root of the repository (building requires Java 21). Builds will be output in `/target`:\n\n```bash\n./gradlew clean build\n```\n\n### License\nHuskSync is licensed under the Apache 2.0 license.\n\n- [License](https://github.com/WiIIiam278/HuskSync/blob/master/LICENSE)\n\nContributions to the project are welcome—feel free to open a pull request with new features, improvements and/or fixes!\n\n### Support\nDue to its complexity, official binaries and customer support for HuskSync is provided through a paid model. This means that support is only available to users who have purchased a license to the plugin from Spigot, Polymart, or BuiltByBit and have provided proof of purchase. Please join our Discord server if you have done so and need help!\n\n### Translations\nTranslations of the plugin locales are welcome to help make the plugin more accessible. Please submit a pull request with your translations as a `.yml` file.\n\n- [Locales Directory](https://github.com/WiIIiam278/HuskSync/tree/master/common/src/main/resources/locales)\n- [English Locales](https://github.com/WiIIiam278/HuskSync/tree/master/common/src/main/resources/locales/en-gb.yml)\n\n## Links\n- [Docs](https://william278.net/docs/husksync/) — Read the plugin documentation!\n- [Spigot](https://www.spigotmc.org/resources/husksync.97144/) — View the Spigot resource page (Also: [Polymart](https://polymart.org/resource/husksync.1634), [Craftaro](https://craftaro.com/marketplace/product/husksync.758), [BuiltByBit](https://builtbybit.com/resources/husksync.34956/))\n- [Issues](https://github.com/WiIIiam278/HuskSync/issues) — File a bug report or feature request\n- [Discord](https://discord.gg/tVYhJfyDWG) — Get help, ask questions (Purchase required)\n- [bStats](https://bstats.org/plugin/bukkit/HuskSync%20-%20Bukkit/13140) — View plugin metrics\n\n---\n© [William278](https://william278.net/), 2025. Licensed under the Apache-2.0 License.\n",[21,24,27,30],{"id":22,"url":23},"spigot","https://www.spigotmc.org/resources/husksync.97144/",{"id":25,"url":26},"polymart","https://polymart.org/resource/husksync.1634",{"id":28,"url":29},"builtbybit","https://builtbybit.com/resources/husksync.34956/",{"id":31,"url":32},"bstats","https://bstats.org/plugin/bukkit/HuskSync%20-%20Bukkit/13140",[34],"William278",[22,36,37],"paper","fabric",11.99,"901578725487955978",false,[42,98,126,144],{"order":43,"name":44,"children":45},0,"Setup",[46,61,82,87],{"order":43,"url":47,"title":44,"icon":48,"children":49},"setup","fa6-solid:book",[50,55],{"order":43,"url":51,"title":52,"icon":53,"children":54},"mpdb-migration","MPDB Migration","carbon:migrate",[],{"order":56,"url":57,"title":58,"icon":59,"children":60},1,"legacy-migration","Legacy Migration","material-symbols:upgrade-rounded",[],{"order":56,"url":62,"title":63,"icon":64,"children":65},"config-file","Config","fa6-solid:file-code",[66,71,76],{"order":43,"url":67,"title":68,"icon":69,"children":70},"database","Database","fa6-solid:database",[],{"order":56,"url":72,"title":73,"icon":74,"children":75},"redis","Redis","devicon-plain:redis",[],{"order":77,"url":78,"title":79,"icon":80,"children":81},2,"translations","Locales","material-symbols:translate",[],{"order":77,"url":83,"title":84,"icon":85,"children":86},"compatibility","Compatibility","material-symbols:warning-outline-rounded",[],{"order":88,"url":89,"title":90,"icon":91,"children":92},3,"faqs","FAQs","fa6-solid:question",[93],{"order":43,"url":94,"title":95,"icon":96,"children":97},"troubleshooting","Troubleshooting","material-symbols:troubleshoot",[],{"order":56,"name":99,"children":100},"Features",[101,106,121],{"order":43,"url":102,"title":103,"icon":104,"children":105},"commands","Commands","octicon:command-palette-16",[],{"order":56,"url":107,"title":108,"icon":109,"children":110},"sync-features","Sync Features","mdi:sync",[111,116],{"order":43,"url":112,"title":113,"icon":114,"children":115},"sync-modes","Sync Modes","mdi:cog-sync",[],{"order":56,"url":117,"title":118,"icon":119,"children":120},"data-rotation","Data Rotation","icon-park-outline:rotate",[],{"order":77,"url":122,"title":123,"icon":124,"children":125},"plan-hook","Player Analytics Hook","material-symbols:analytics-outline",[],{"order":77,"name":127,"children":128},"Guides",[129,134,139],{"order":43,"url":130,"title":131,"icon":132,"children":133},"dumping-userdata","Dumping UserData","fa6-solid:file-arrow-down",[],{"order":56,"url":135,"title":136,"icon":137,"children":138},"keep-inventory","Keep Inventory","material-symbols:inventory-2-outline",[],{"order":77,"url":140,"title":141,"icon":142,"children":143},"event-priorities","Event Priorities","ic:round-low-priority",[],{"order":88,"name":145,"children":146},"Developers",[147,167,171],{"order":43,"url":148,"title":149,"icon":150,"children":151},"api","API v3","mdi:api",[152,157,162],{"order":43,"url":153,"title":154,"icon":155,"children":156},"data-snapshot-api","Data Snapshot API","carbon:ibm-cloud-vpc-block-storage-snapshots",[],{"order":56,"url":158,"title":159,"icon":160,"children":161},"custom-data-api","Custom Data API","material-symbols:inbox-customize",[],{"order":77,"url":163,"title":164,"icon":165,"children":166},"api-events","API Events","mingcute:lightning-line",[],{"order":56,"url":168,"title":169,"icon":150,"children":170},"api-v2","API v2 (legacy)",[],{"order":77,"url":18,"title":172,"icon":173,"children":174},"Source Code","fa6-solid:code",[],{"SVG":176,"PNG":177,"PNG_TRANSPARENT":178,"SVG_TRANSPARENT":179},"husksync.svg","husksync.png","husksync-transparent.png","husksync-transparent.svg",[],[],{"downloadCount":183,"averageRating":184,"numberOfRatings":185,"interactions":186,"onlinePlayers":187,"onlineServers":188},3402,4.1576921206254225,52,255,2409,817,{"data":190,"body":191},{},{"type":192,"children":193},"root",[194,202,222,229,245,251,258,284,290,349,355,371,377,395,401],{"type":195,"tag":196,"props":197,"children":198},"element","p",{},[199],{"type":200,"value":201},"text","This guide will walk you through how to migrate from MySQLPlayerDataBridge (MPDB) to HuskSync v3.x.",{"type":195,"tag":203,"props":204,"children":207},"notice",{"title":205,"type":206},"Warning:","warning",[208],{"type":195,"tag":196,"props":209,"children":210},{},[211,213,220],{"type":200,"value":212},"Please note that due to MPDB changes, HuskSync only supports migrating from MySQLPlayerDataBridge ",{"type":195,"tag":214,"props":215,"children":217},"code",{"className":216},[],[218],{"type":200,"value":219},"\u003C= v4.9.2",{"type":200,"value":221},". Support for newer versions will be added in the future.",{"type":195,"tag":223,"props":224,"children":226},"h2",{"id":225},"requirements",[227],{"type":200,"value":228},"Requirements",{"type":195,"tag":230,"props":231,"children":232},"ul",{},[233],{"type":195,"tag":234,"props":235,"children":236},"li",{},[237,239],{"type":200,"value":238},"Spigot servers with MySQLPlayerDataBridge ",{"type":195,"tag":240,"props":241,"children":242},"em",{},[243],{"type":200,"value":244},"still installed",{"type":195,"tag":223,"props":246,"children":248},{"id":247},"migration-instructions",[249],{"type":200,"value":250},"Migration Instructions",{"type":195,"tag":252,"props":253,"children":255},"h3",{"id":254},"_1-install-husksync-v3x-on-all-spigot-servers",[256],{"type":200,"value":257},"1. Install HuskSync v3.x on all Spigot servers",{"type":195,"tag":230,"props":259,"children":260},{},[261,266,279],{"type":195,"tag":234,"props":262,"children":263},{},[264],{"type":200,"value":265},"Download, then install HuskSync on all your servers. Don't uninstall MySQLPlayerDataBridge yet.",{"type":195,"tag":234,"props":267,"children":268},{},[269,271,277],{"type":200,"value":270},"Follow the setup instructions ",{"type":195,"tag":272,"props":273,"children":274},"a",{"href":47},[275],{"type":200,"value":276},"here",{"type":200,"value":278},".",{"type":195,"tag":234,"props":280,"children":281},{},[282],{"type":200,"value":283},"Start your servers again when done.",{"type":195,"tag":252,"props":285,"children":287},{"id":286},"_2-configure-the-migrator",[288],{"type":200,"value":289},"2. Configure the migrator",{"type":195,"tag":230,"props":291,"children":292},{},[293,298,311,323],{"type":195,"tag":234,"props":294,"children":295},{},[296],{"type":200,"value":297},"With your servers back on and correctly configured to run HuskSync v3.x, ensure nobody is online.",{"type":195,"tag":234,"props":299,"children":300},{},[301,303,309],{"type":200,"value":302},"Use the console on one of your Spigot servers to enter: ",{"type":195,"tag":214,"props":304,"children":306},{"className":305},[],[307],{"type":200,"value":308},"husksync migrate help mpdb",{"type":200,"value":310},". If the MPDB migrator is not available, ensure MySQLPlayerDataBridge is still installed.",{"type":195,"tag":234,"props":312,"children":313},{},[314,316,322],{"type":200,"value":315},"Adjust the migration setting as needed using the following command: ",{"type":195,"tag":214,"props":317,"children":319},{"className":318},[],[320],{"type":200,"value":321},"husksync migrate set mpdb \u003Csetting> \u003Cvalue>",{"type":200,"value":278},{"type":195,"tag":234,"props":324,"children":325},{},[326,328,333,335,340,342,348],{"type":200,"value":327},"Note that migration will be carried out ",{"type":195,"tag":240,"props":329,"children":330},{},[331],{"type":200,"value":332},"from",{"type":200,"value":334}," the database you specify with the settings in console ",{"type":195,"tag":240,"props":336,"children":337},{},[338],{"type":200,"value":339},"to",{"type":200,"value":341}," the database configured in ",{"type":195,"tag":214,"props":343,"children":345},{"className":344},[],[346],{"type":200,"value":347},"config.yml",{"type":200,"value":278},{"type":195,"tag":252,"props":350,"children":352},{"id":351},"_3-start-the-migrator",[353],{"type":200,"value":354},"3. Start the migrator",{"type":195,"tag":230,"props":356,"children":357},{},[358],{"type":195,"tag":234,"props":359,"children":360},{},[361,363,369],{"type":200,"value":362},"Run ",{"type":195,"tag":214,"props":364,"children":366},{"className":365},[],[367],{"type":200,"value":368},"husksync migrate start mpdb",{"type":200,"value":370}," to begin the migration process. This may take some time, depending on the amount of data you're migrating.",{"type":195,"tag":252,"props":372,"children":374},{"id":373},"_4-uninstall-mysqlplayerdatabridge",[375],{"type":200,"value":376},"4. Uninstall MySQLPlayerDataBridge",{"type":195,"tag":230,"props":378,"children":379},{},[380,385,390],{"type":195,"tag":234,"props":381,"children":382},{},[383],{"type":200,"value":384},"HuskSync will display a message in console when data migration is complete.",{"type":195,"tag":234,"props":386,"children":387},{},[388],{"type":200,"value":389},"Stop all your Spigot servers and remove the MySQLPlayerDataBridge jar from each of them.",{"type":195,"tag":234,"props":391,"children":392},{},[393],{"type":200,"value":394},"Start your Spigot servers again.",{"type":195,"tag":252,"props":396,"children":398},{"id":397},"_5-ensure-the-migration-was-successful",[399],{"type":200,"value":400},"5. Ensure the migration was successful",{"type":195,"tag":230,"props":402,"children":403},{},[404,425],{"type":195,"tag":234,"props":405,"children":406},{},[407,409,415,417,423],{"type":200,"value":408},"Verify that the migration was successful by logging in and using the ",{"type":195,"tag":214,"props":410,"children":412},{"className":411},[],[413],{"type":200,"value":414},"/userdata list \u003Cusername>",{"type":200,"value":416}," command to see if the data was imported with the ",{"type":195,"tag":214,"props":418,"children":420},{"className":419},[],[421],{"type":200,"value":422},"mpdb_migration",{"type":200,"value":424}," saveCause.",{"type":195,"tag":234,"props":426,"children":427},{},[428],{"type":200,"value":429},"You can delete the old tables in the database if you want. Be careful to make sure you delete the correct ones.",["Reactive",431],{"$snuxt-i18n-meta":432,"$sauth":-1,"$sxsrf":-1},{},["Set"],["ShallowReactive",435],{"$fnBbeE-K5RgegIGNVekmBdBstWwpqH2A9eAqMmEjIo20":-1,"user":436,"mdc-7mp02n-key":-1},["NuxtError",437],{"message":438,"statusCode":439,"statusMessage":440,"data":441},"[GET] \"https://api.william278.net/v1/users/@me\": 401 Unauthorized",401,"Unauthorized",{"error":442},"You must be logged in to perform this action.","/docs/husksync/mpdb-migration"]