- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
HuskSync
外文名 | HuskSync |
作者 | WiIIiam278 |
最新版本 | 3.6.6 |
源地址 | https://builtbybit.com/resources/husksync-cross-server-data-syncing.34956/ |
此插件同时需要 Redis 和 MySQL[或]Mongo[或]PostgreSQL,如果服务器无法部署或不会使用这些软件,请选择其他插件
HuskSync是一个跨服务器玩家数据同步系统,使您的用户的数据跨多个代理服务器的全面同步。
功能
- 无缝同步 利用优化的Redis缓存,当玩家改变服务器同步玩家数据超快的无缝体验。
- 完成玩家同步 同步库存,末影宝箱,健康,饥饿,效果,进度,统计数据,锁定的地图和其他。
- 备份,恢复 出错了吗?将玩家恢复到之前的数据状态。在游戏中恢复和管理数据快照!
- 导入现有数据 导入您的 MySQLPlayerDataBridge 数据,或从您现有的世界数据!不需要服务器重置!
- 与Plan联动 通过您的 Plan 网页面板上的 HuskSync 分析与您的社区保持联系。
- 扩展API和开源 需要更多?使用开发者接口扩展插件。或者,通过我们的代码赏金系统提交pull请求!
指南
安装
Fabric支持目前处于测试阶段,还没有准备好投入使用。可以在Discord上获取Fabric构建,或者您可以自行编译。
需求
- MySQL数据库(v8.0+) 或MariaDB, PostgreSQL或MongoDB数据库
- Redis数据库(v5.0+) -参见常见问题解答了解更多细节。
- 任意数量的Spigot服务器,通过BungeeCord或基于速度的代理连接(Minecraft v1.17.1+,运行Java 17+)
- 或Fabric服务器网络,通过Fabric代理连接(Minecraft v1.20.1,运行Java 17+)
安装指南
- 安装jar
- 将插件jar文件分别放在每个Spigot/Fabric服务器的/plugins/或/mods/目录下。
- 不需要将HuskSync作为代理插件安装。
- Spigot用户: 您可以额外安装ProtocolLib或packetevents,以更好地处理锁定用户。
- Fabric用户: 确保安装了最新的Fabric API mod jar !
- 重启服务器
- 启动,然后停止每个服务器,让HuskSync生成配置文件。
- HuskSync将在控制台中抛出一个错误并禁用插件,因为它无法连接到数据库。您还没有设置凭据,所以这是正常的。
- 输入Mysql和Redis数据库凭据
- 找到每个服务器上的新配置文件(对于Spigot是~/plugins/HuskSync/config.yml,对于Fabric是~/config/husksync/config.yml)
- 在
database
部分的credentials
下,输入(MySQL/MariaDB/MongoDB/PostgreSQL)数据库的凭据。不应更改connection_pool
属性。 - 在
redis
部分的凭据下,输入Redis数据库的凭据。如果您的Redis服务器没有密码,请将密码保留为空。 - 除非您希望在您的网络中有多个服务器集群,每个服务器集群都有单独的用户数据,否则您不应该更改
cluster_id
的值。
- 在 server.yml 中设置服务器名称文件
- 导航到每个服务器上的服务器名称文件(对于Spigot是~/plugins/HuskSync/server.yml,对于Fabric是~/config/husksync/server.yml)
- 将此文件中服务器的名称设置为代理配置中定义的该服务器的ID(例如,如果这是您使用/server hub访问的“hub”服务器,请在这里输入“hub”)。
- 重新启动每个服务器
- 如果你的MySQL和Redis证书是正确的,同步应该在你再次启动服务器时开始。
配置文件
目录结构
- plugins/HuskSync/
- config.yml: 主要配置
- server.yml: 服务器ID配置
- messages-xx-xx.yml: 语言文件,MineDown格式(见 翻译)
数据恢复
HuskSync 提供备份和自动轮换用户数据的选项。如果出现问题,您可以从以前的用户数据快照中恢复用户。
快照
每当保存数据时,HuskSync 都会创建用户数据的“快照”。
每个用户数据快照都有:
- 唯一 ID
- 时间戳(创建时间)
- 安全原因(创建它的原因)
- 一个标志,指示快照是否已被固定(防止其被旋转)
- 已保存数据的地图
默认情况下,如果用户的当前快照距离上次创建快照的时间少于4小时,HuskSync将自动替换数据库中的用户当前快照。这可以在config.yml中更改。通过修改synchronization
下的snapshot_backup_frequency
设置来修改。将其设置为“0”将在每次保存数据时保存一个新的快照。
HuskSync 将为每个用户保留最近的 16 个数据快照(包括其当前数据)。此后,当设置新的用户快照时,将自动删除最旧的快照。您可以通过更改设置来更改要保留的快照数量max_user_data_snapshots
(最少 1 个)。
固定用户数据快照不会被替换/轮换,只能在游戏中手动删除。
查看用户数据
需要查询用户的快照列表,使用/userdata list [username]
。它们最近的快照将从数据库中列出,从最新到最旧。您可以单击按钮来浏览它们的页面。
在号码被固定后,快照上标有星号。将鼠标悬停在其上以查看更多信息。
然后,您可以在聊天中单击列表中的项目以查看每个快照的概述。或者,使用/userdata view [username]
查看用户最近的数据快照。
管理用户数据
您可以使用“管理”按钮来管理用户数据。这些按钮只有在您拥有userdata
命令管理权限时才会出现。
- 点击“Delete”删除用户数据
- 点击“还原”恢复用户数据。如果用户在线,他们的项目和统计数据将被更新,否则他们的数据将在下次登录时设置为此快照。
- 点击“Pin”,锁定用户数据。将在数据查看器和列表中出现一个指示器,标记快照被固定。
保存原因
数据保存原因,用🚩标记,表示数据保存的原因。
- disconnect 表示当玩家与服务器断开连接时保存的数据(更换服务器或退出)
- world save 表示世界保存时保存的数据。这可以在配置中关闭。通过在同步下将save_on_world_save设置为false。
- server shutdown表示服务器关机时保存的数据
- inventory command 表示通过/inventory命令编辑库存内容保存数据
- enderchest command 通过/enderchest命令编辑末影箱内容保存数据
- backup restore 表示通过从以前的版本恢复来保存数据
- api 表示通过调用HuskSync api保存数据
- mpdb migration 表明数据是从MySQLPlayerDataBridge导入保存的
- legacy migration 表明数据是从遗留版本(v1)导入的
- convert from v2 表示从HuskSync v2.0版本的数据格式自动转换
- unknown 未知的保存原因。
从旧版迁移
需要
- MySQL数据库与HuskSync v1.4.x数据
- 不支持从SQLite迁移,从HuskSync v2.x需要MySQL数据库,不支持SQLite。很抱歉给您带来不便。
- 如果您运行的是v1.3.x或更早版本,请先按照更新说明更新到1.4。
迁移流程
- 从所有服务器卸载 HuskSync v1.x
- 关闭所有服务器和代理
- 从服务端的
~/plugins/
目录中删除HuskSync jar - 从代理服务端的
~/plugins/
目录删除HuskSync jar. HuskSync v3.x 不再需要代理服务端插件 - 删除(或移走)HuskSync配置目录 (
~/plugins/HuskSync/
). HuskSync v3.x 使用新的 config.yml, messages-xx-xx.yml 和 server.yml
- 在所有游戏服务端安装HuskSync v3.x
- HuskSync v3.x不需要安装在代理服务端
- 根据安装教程安装
- 配置迁移器
- 您的服务器重新启动并正确配置为运行HuskSync v3.x,确保无人在线。
- 使用游戏服务端的控制台输入:
husksync migrate help legacy
- 仔细阅读迁移配置说明。在大多数情况下,您不需要更改设置,但如果您确实需要调整它们,请使用
husksync migrate set legacy <setting> <value>
。 - 将从使用控制台中设置指定的数据库迁移到 config.yml 中配置的数据库。如果要从多个集群迁移,请确保在与迁移器对应的正确服务器上运行迁移器。
- 启用迁移器
- 运行
husksync migrate start legacy
开始迁移过程。这可能需要一些时间,具体取决于要迁移的数据量。
- 运行
- 确认迁移完成
- 当迁移完成时,HuskSync将在控制台中通知。通过登录并使用
/userdata list <username>
命令来验证迁移是否正常,以查看是否使用遗留迁移saveCause导入了数据。 - 如果需要,可以删除数据库中的旧表。要小心确保你删除的是正确的。默认情况下,新表名是
husksync_users
和husksync_user_data
,旧表名是husksync_players
和husksync_data
,但是您可能已经更改了这些表名。
- 当迁移完成时,HuskSync将在控制台中通知。通过登录并使用
从MPDB迁移
本指南将指导您如何从 MySQLPlayerDataBridge (MPDB) 迁移到HuskSync v3.x。
请注意,由于MPDB的变化,HuskSync只支持从MySQLPlayerDataBridge <= v4.9.2迁移。对新版本的支持将在将来添加。
需要
- 仍安装MPDB的服务器
迁移流程
- 安装HuskSync v3在所有Spigot服务器上安装
- 下载,然后在所有服务器上安装HuskSync。不要卸载MySQLPlayerDataBridge。
- 按照安装教程进行操作。
- 完成后再次启动服务器。
- 配置迁移器
- 您的服务器重新启动并正确配置为运行HuskSync v3.x,确保无人在线。
- 使用Spigot服务器上的控制台输入
husksync migrate help mpdb
。如果MPDB迁移器不可用,请确保仍然安装了MySQLPlayerDataBridge。 - 请根据实际情况调整迁移设置
husksync migrate set mpdb <setting> <value>
。 - 注意,将从使用控制台中设置指定的数据库迁移到 config.yml 中配置的数据库。
- 启动迁移程序
- 执行命令
husksync migrate start mpdb
,开始迁移。这可能需要一些时间,具体取决于要迁移的数据量。
- 执行命令
- 卸载MySQLPlayerDataBridge
- 当数据迁移完成时,HuskSync将在控制台中显示消息。
- 停止所有的游戏服务端,并从每个服务器中删除MySQLPlayerDataBridge jar。
- 再次启动游戏服务端。
- 确保迁移成功
- 通过登录并使用
/userdata list <username>
命令来验证迁移是否成功,以查看是否使用mpdb_migration为保存原因导入了数据。 - 如果需要,可以删除数据库中的旧表。一定要确保你删除的是正确的。
- 通过登录并使用
翻译
HuskSync支持许多社区来源的插件语言环境翻译成不同的语言。默认语言为 en-gb(英语) 。使用MineDown格式化消息文件。
您可以通过更改插件配置中的language
来更改要使用的预设语言。您必须将其更改为受支持的语言代码之一。您可以通过查看locale资源文件夹来查看支持的语言列表。
提交语言
- 您可以通过提交包含默认语言环境翻译成您的语言的yaml文件的拉取请求来贡献语言环境。这里有一些建议:
- 不要转换翻译键本身(例如
synchronization_complete
) - 您的Pull Request应该是针对locale文件夹中的文件
- 不要翻译MineDown Markdown语法本身或命令及其参数
- 每个区域设置应该在一行上,并且应该删除标题。
- 为您的语言和方言使用正确的ISO 639-1语言环境代码
- 如果可以的话,您可以自己将您的名字添加到
AboutMenu
翻译人员名单中,否则这可以为您完成 - 感谢您有兴趣让HuskSync在世界各地更容易访问!
- 不要转换翻译键本身(例如
常见问题
- 哪些数据可以同步?
- HuskSync支持同步各种不同的数据元素,每个元素都可以切换到您的喜好。请查看同步功能页面的完整列表。
- 是否支持Mod项目?
- 在Fabric上,Mod项目通常应该像你期望的那样与HuskSync同步。请注意,在每个服务器上存储额外数据与项目NBT分开的mod可能无法按预期工作。Mod开发者-查看自定义数据API,了解如何让你的Mod的数据同步!
- 在Spigot上,如果您在Arclight或类似的平台上运行HuskSync,请注意我们将无法为您提供支持,但据报告,使用HuskSync v3.x+可以正确保存和同步。
- 请注意,我们不能保证兼容所有-测试彻底!
- 是否支持MMOItems / SlimeFun / ItemsAdder物品?
- 这些自定义的物品Spigot插件应该像预期的那样工作,只要它们以标准的方式向物品NBT注入数据。
- 请注意,我们不能保证兼容所有-测试彻底!
- 需要Redis吗?什么是Redis?
- 是的!HuskSync需要Redis来运行(原因如下)。
- Redis是一个内存数据库服务器,用于大规模缓存数据和通过网络发送消息。你有一个Redis服务器的方式类似于你有一个MySQL数据库服务器。如果你使用的是Minecraft托管服务商,你需要联系他们的支持并询问他们是否提供Redis。
- 插件如何同步数据?
- HuskSync利用MySQL和Redis进行最佳的数据同步。您可以选择使用两种同步模式中的一种,用于在服务器之间同步数据(DELAY或LOCKSTEP)。
- 当用户更换服务器时,数据除了保存到MySQL之外,还会通过Redis服务器缓存一个临时过期键。当更换服务器时,接收服务器检测key并从Redis设置用户数据。当玩家重新加入网络时,系统从MySQL数据库中获取最后保存的数据快照。
- 这种方法能够显著提高同步性能和可靠性。还使用了一些其他技术来优化此过程,例如使用Snappy压缩序列化的用户数据json。
- 为什么HuskSync不同步玩家经济/支持Vault?
- 这是一个非常常见的请求,但是HuskSync不支持这个是有原因的。
- Vault是一个插件,它为开发人员提供了一个通用的API来做两件事:
- 开发人员可以实现Vault来创建经济插件
- 开发者可以针对Vault修改和检查经济平衡,而无需编写代码来连接到单个经济插件
- 从本质上讲,Vault是有益的,因为它允许开发人员编写更少的代码。开发者只需要在需要处理玩家经济平衡时编写针对Vault API的代码。
- 然而,Vault本身并不是一个经济插件。执行经济插件的开发者负责编写执行代码和数据库系统,以创建玩家经济账户和更新余额。通过扩展,这也意味着经济插件开发人员有责任以一种允许数据跨服务器同步的方式实现Vault的API;Vault本身不包含这样做的API。
- 然而,大多数经济插件不支持这样做,因为跨服务器支持不是(历史上也不是)优先考虑的。 MySQLPlayerDataBridge 允许你解决这个问题并同步Vault钱包-但正如上面详细介绍的那样,因为Vault本身不是一个经济插件,所以它的工作方式是 MySQLPlayerDataBridge 必须提供并持续维护一个定制的洗衣清单,包括实现Vault的经济插件和其他针对Vault的插件的手动或个人挂钩和调整。
- 在HuskSync中实现类似的系统将大大增加代码库的大小,延长更新时间,并降低整个系统的稳定性。更好的解决方案是使用一个经济插件,它以跨服务器工作的方式实现Vault。
- 事实上,有一些经济插件——比如 XConomy 和 RedisEconomy ——就能做到这一点,这是我推荐的解决方案。需要从一个不兼容的经济插件移动? Vault 提供了在 Economy 插件之间转移余额的方法(
/vault-convert
)。 - 这比 MySQLPlayerDataBridge 更好吗?
- 对于这个问题,我无法给出一个公平的答案!我能说的是,你的考虑当然会有所不同。
- 由 HuskSync 的同步方法提供的性能改进将取决于你的网络环境和规模经济,你的玩家数量。在功能方面, HuskSync 确实有更强大的回滚和快照备份/管理功能,如果这是你正在寻找的东西。