mlus-asuka / PlayerSync

This is a Minecraft forge mod using Mysql backend to make player data synchronization between different servers.
GNU General Public License v3.0
5 stars 1 forks source link

1.20.1不能正常获取Curios数据 #15

Closed fulide closed 4 months ago

fulide commented 4 months ago

近期更新的(包括最新)的Curios更换了API的位置,不能正常获取到Curios数据了,表现为数据库中Curios表中的item始终为{} 精妙背包里的物品也不能正常保存 如果可以的话 能支持一下就太好了! 以及 为什么会在退出服务器时 好像有个自动删除Curios表中 item内容的操作?没有明白。

测试环境: 系统PVE Linux ZULU17 服务端mohist-1.20.1-621

mlus-asuka commented 4 months ago

5.7.2版本看上去没问题

fulide commented 4 months ago

重新构建了一份后测试还是不行 并且重新整改了一下测试环境 确保准确性 服务端: 非混合端 原生的minecraft server 1.20.1 + forge1.20.1-47.2.23

MOD列表(仅这4个): curios-forge-5.8.1+1.20.1 PlayerSync vc_gliders-forge-1.1.5【放到饰品栏的滑翔伞】 player-animation-lib-forge-1.0.2-rc1+1.20【👆它的前置】

Mysql版本:8.0.27 Mysql在另一台局域网下的windows小机上

config相关: 正确填写mysql相关 第一个测试服务端 Server_id = 169059824 第二个测试服务端Server_id = 169059821 其他不变

开服结果: 无报错 PlayerSync is ready!

Mysql那边 建库成功 建表成功

最终结果: 原版背包的物品有正确同步 依旧无法同步curios饰品栏中的物品 将饰品放入饰品栏后 查看数据库那边 curios表中curios_item内容为{} 进入第二个测试服也确实没有同步饰品

测试结束

mlus-asuka commented 4 months ago

https://github.com/mlus-asuka/PlayerSync/actions/runs/8723222876 本地测试没问题了。。

fulide commented 4 months ago

可以在Tags发布一个构建好的吗 难道是我构建出了问题 顺带问问你本地测试时用的curios版本是多少

mlus-asuka commented 4 months ago

image 点这里就能下载。用的是5.8.2版本

fulide commented 4 months ago

还是同样的结果。 太奇怪了。

mlus-asuka commented 4 months ago

https://github.com/mlus-asuka/PlayerSync/actions/runs/8765361287 已修复

fulide commented 4 months ago

GOOD

这次测试有成功同步了。 然后出现了新的BUG:可以无限复制饰品 复现方法:

在服务端01中 装备一个饰品 退出服务端01 进入服务端02 取下刚才装备的饰品到背包 退出服务端02 回到服务端01 饰品仍然在饰品栏 并且刚才取下来的饰品也还在背包

多次测试 100%触发 测试环境和上次一样没变

mlus-asuka commented 4 months ago

https://github.com/mlus-asuka/PlayerSync/actions/runs/8801279940 已修复

fulide commented 4 months ago

还是一样 我一步一步操作看了一下,似乎和数据库方面无关? 在进入和退出服务端的时候,都有正确的读取和更新数据库。

初步感觉 问题可能出在PlayerSync和服务端存档内的playerdata之间处理出了问题(猜的) 举个例子: 当我进入服务端01,装备饰品后,退出服务端01,数据库那边有正确更新内容。 此时进入服务端02,也有正确读取数据库的内容,饰品被同步。此时取下饰品(使饰品栏为空),退出服务端02,数据库那边也有正确更新,curiositem的内容确实变更为{}。 但此时回到服务端01后,饰品栏仍然有饰品。 要么curiositem内容为{}时,没能正确读取并反应,要么就是curiositem内容为{}时,服务端从存档文件夹里面的playerdata里面应用了curios饰品栏数据。

mlus-asuka commented 4 months ago

还是一样 我一步一步操作看了一下,似乎和数据库方面无关? 在进入和退出服务端的时候,都有正确的读取和更新数据库。

初步感觉 问题可能出在PlayerSync和服务端存档内的playerdata之间处理出了问题(猜的) 举个例子: 当我进入服务端01,装备饰品后,退出服务端01,数据库那边有正确更新内容。 此时进入服务端02,也有正确读取数据库的内容,饰品被同步。此时取下饰品(使饰品栏为空),退出服务端02,数据库那边也有正确更新,curiositem的内容确实变更为{}。 但此时回到服务端01后,饰品栏仍然有饰品。 要么curiositem内容为{}时,没能正确读取并反应,要么就是curiositem内容为{}时,服务端从存档文件夹里面的playerdata里面应用了curios饰品栏数据。

你确定你用的是最新的构建版吗。我这里测试没问题。这个bug是因为原来写的代码在数据为空时直接跳过了,我改成数据为空时把物品设为空气就好了。

fulide commented 4 months ago

image 从这个里面下载的,又测试了一遍,确实还是那样。

还是一样 我一步一步操作看了一下,似乎和数据库方面无关? 在进入和退出服务端的时候,都有正确的读取和更新数据库。 初步感觉 问题可能出在PlayerSync和服务端存档内的playerdata之间处理出了问题(猜的) 举个例子: 当我进入服务端01,装备饰品后,退出服务端01,数据库那边有正确更新内容。 此时进入服务端02,也有正确读取数据库的内容,饰品被同步。此时取下饰品(使饰品栏为空),退出服务端02,数据库那边也有正确更新,curiositem的内容确实变更为{}。 但此时回到服务端01后,饰品栏仍然有饰品。 要么curiositem内容为{}时,没能正确读取并反应,要么就是curiositem内容为{}时,服务端从存档文件夹里面的playerdata里面应用了curios饰品栏数据。

你确定你用的是最新的构建版吗。我这里测试没问题。这个bug是因为原来写的代码在数据为空时直接跳过了,我改成数据为空时把物品设为空气就好了。

mlus-asuka commented 4 months ago

不清楚了。我是用的客户端在两个世界同步。

fulide commented 4 months ago

感觉两个世界是没办法测试的 它们共用一个playerdata文件夹。 可否试试 [把物品设为空气] 这个操作换成 [删除或清空所有饰品] 此类操作?(如果API有提供相关方法的话)

mlus-asuka commented 4 months ago

感觉两个世界是没办法测试的 它们共用一个playerdata文件夹。 可否试试 [把物品设为空气] 这个操作换成 [删除或清空所有饰品] 此类操作?(如果API有提供相关方法的话)

并不是共用的。是两个存档之间可以同步。 curios的物品也是继承的forge的itemHandler。换了一个写法试试 https://github.com/mlus-asuka/PlayerSync/actions/runs/8921132929

fulide commented 4 months ago

感觉两个世界是没办法测试的 它们共用一个playerdata文件夹。 可否试试 [把物品设为空气] 这个操作换成 [删除或清空所有饰品] 此类操作?(如果API有提供相关方法的话)

并不是共用的。是两个存档之间可以同步。 curios的物品也是继承的forge的itemHandler。换了一个写法试试 https://github.com/mlus-asuka/PlayerSync/actions/runs/8921132929

还是一样。

fulide commented 4 months ago

有点不好判断哪个环节的问题,要不弄个debug模式,每个执行阶段都打印点log在控制台?

mlus-asuka commented 4 months ago

https://github.com/mlus-asuka/PlayerSync/actions/runs/8923661939 这回绝对修复了

fulide commented 4 months ago

https://github.com/mlus-asuka/PlayerSync/actions/runs/8923661939 这回绝对修复了

确实!你做到了!终于!可以关闭这个comment了!

顺带问问,有计划支持精妙背包吗? :D

mlus-asuka commented 4 months ago

精妙背包的东西是额外储存在世界文件夹的。和playerdata无关