A modern, cross-server player data synchronisation system
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
William 105f65c93a
v3.0: New modular, more compatible data format, new API, better UX (#160)
* Start work on v3

* More work on task scheduling

* Add comment to notification display slot

* Synchronise branches

* Use new HuskHomes-style task system

* Bump to 2.3

* Remove HuskSyncInitializationException.java

* Optimise database for MariaDB

* Update libraries, move some around

* Tweak command registration

* Remove dummyhusksync

* Fixup core synchronisation logic to use new task system

* Implement new event dispatch subsystem

* Remove last remaining future calls

* Remove `Event#fire()`

* Refactor startup process

* New command subsystem, more initialization improvements, locale fixes

* Update docs, tweak command perms

* Reduce task number during data setting

* add todo

* Start work on data format / serialization refactor

* More work on Bukkit impl

* More serialization work

* Fixes to serialization, data preview system

* Start legacy conversion skeleton

* Handle setting empty inventories

* Start on-the-fly legacy conversion work

* Add advancement conversion

* Rewrite advancement get / apply logic

* Start work on locked map persistence

* More map persistence work

* More work on map serialization

* Move around persistence logic

* Add testing suite

* Fix item synchronisation

* Finalize more reliable locked map persistence

* Remove deprecated method call

* remove sync feature enum

* Fix held item slot syncing

* Make data types modular and API-extensible

* Remove some excessive debugging, minor refactor

* Fixup date formatting, improve menu UIs

* Finish up legacy data converting

* Null safety in item stack serializaiton

* Fix relocation of nbtapi, update dumping docs

* Add v1/MPDB Migrators back in

* Fix pinning/unpinning data not working

* Consumer instead of Function for editing data

* Show file size in DataSnapshotOverview

* Fix getIdentifier always returning empty

* Re-add items and inventory GUI commands

* Improve config file, fixup data restoration

* Add min time between backups (more useful backups!)

* More work on backups

* Fixup backup rotation frequency

* Remove stdout debug print in `#getEventPriority`

* Improve sync complete locale logic, fix synchronization spelling

* Remove `static` on exception

* Use dedicated thread for Redis, properly unsubscribe

* Refactor `player` package -> `user`

* `PlayerDataHolder` -> `UserDataHolder`

* Make `StatisticsMap` public, but `@ApiStatus.Internal`

* Suppress unused warnings on `Data`

* Add option to disable Plan hook

* Decompress legacy data before converting

* Decompress bytes in fromBytes

* Check permission node before serving TAB suggestions

* Actually convert legacy item stack data

* Fix syntax errors

* Minor method refactor in items command

* Fixup case-sensitive parsing in HuskSync command

* Start API work

* More work on API, fix potion effects

* Fix cross-server, config formatting for auto-pinned issue

* Fix confusion with UserData command, update docs images

* Update commands docs

* More docs updating

* Fix sync feature enabled/disabled checking logic

* Fix `#isCustom()`

* Enable persistent_data syncing by default

* docs: update Sync-Features config snippet

* docs: correct typo in Sync Features

* More API work

* bukkit: slightly optimized schedulers

* More API work, various refactorings

* docs: Start new API docs

* bump dependencies

* Add some basic unit tests

* docs: Correct typos

* More docs work, annotate DB methods as `@Blocking`

* Encapsulate `RedisMessage`, minor optimisations

* api: Simplify `#getCurrentData`

* api: Simplify `editCurrentData`, using `ThrowingConsumers` for better error handling

* docs: More Data Snapshot API documenting

* docs: add TOC to Data Snapshot API page

* bukkit: Make data types extend BukkitData

* Move where custom data is stored, finish up Custom Data API docs

* Optimise imports

* Fix `data_manager_advancements_preview_remaining` locale

* Fix advancement and playtime previews

* Fix potion effect deserialization

* Make snapshot_backup_frequency default to 4, more error handling/logging

* docs: Add ToC to Custom Data API

* docs: Minor legacy API tweaks

* Remove some unneeded catch logic

* Suppress a few warnings

* Fix Effect constructor being supplied in wrong order
1 year ago
.github Add workflow files, test reporting, maven publishing, docs, bump version 2 years ago
.scripts MPDBConverter over jitpack 2 years ago
bukkit v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
common v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
docs v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
gradle/wrapper gradle: Update to Gradle 8.0.2, bump shadow to 8.1.0 2 years ago
images v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
plugin v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
test v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
.gitignore v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
HEADER license: Relicense under Apache-2.0 1 year ago
LICENSE v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
README.md v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
build.gradle v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
gradle.properties v3.0: New modular, more compatible data format, new API, better UX (#160) 1 year ago
gradlew gradle: Update to Gradle 8.0.2, bump shadow to 8.1.0 2 years ago
gradlew.bat gradle: Update to Gradle 8.0.2, bump shadow to 8.1.0 2 years ago
jitpack.yml MPDBConverter over jitpack 2 years ago
settings.gradle Merge API module into bukkit for simplicity 2 years ago

README.md

HuskSync
Spigot Setup Docs Issues


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 MySQL to optimally cache data while players change servers.

Features

Seamless synchronization — Utilises optimised Redis caching when players change server to sync player data super quickly for a seamless experience.

Complete player synchronization — Sync inventories, Ender Chests, health, hunger, effects, advancements, statistics, locked maps & more—no data left behind!

Backup, restore & rotate — Something gone wrong? Restore players back to a previous data state. Rotate and manage data snapshots in-game!

Import existing data — Import your MySQLPlayerDataBridge data—or from your existing world data! No server reset needed!

Works great with Plan — Stay in touch with your community through HuskSync analytics on your Plan web panel.

Extensible API & open-source — Need more? Extend the plugin with the Developer API. Or, submit a pull request through our code bounty system!

Ready? It's syncing time!

Setup

Requires a MySQL (v8.0+) database, a Redis (v5.0+) server and any number of Spigot-based 1.16.5+ Minecraft servers, running Java 16+.

  1. Place the plugin jar file in the /plugins/ directory of each Spigot server. You do not need to install HuskSync as a proxy plugin.
  2. Start, then stop every server to let HuskSync generate the config file.
  3. Navigate to the HuskSync config file on each server (~/plugins/HuskSync/config.yml) and fill in both the MySQL and Redis database credentials.
  4. Start every server again and synchronization will begin.

Development

To build HuskSync, simply run the following in the root of the repository:

./gradlew clean build

License

HuskSync is licensed under the Apache 2.0 license.

Contributions to the project are welcome—feel free to open a pull request with new features, improvements and/or fixes!

Support

Due to its complexity, official 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 Craftaro and have provided proof of purchase. Please join our Discord server if you have done so and need help!

Translations

Translations 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.

  • Docs — Read the plugin documentation!
  • Spigot — View the Spigot resource page (Also: Polymart, Craftaro)
  • Issues — File a bug report or feature request
  • Discord — Get help, ask questions (Purchase required)
  • bStats — View plugin metrics

© William278, 2023. Licensed under the Apache-2.0 License.