[1.18.2] 玩家死亡/重生时 数值继承异常
Rail1bc opened this issue · 2 comments
运行环境
Windows10
Minecraft版本(1.18.2):
构建版本(从/version指令获取): 1/1/2024 CatServer-1.18.2-ecf29bc1-server.jar
相关模组/插件:
描述这个BUG
当玩家死亡时身上具有药水效果,玩家重生后,药水效果不会显示,但是数值上可以发现确实存在药水效果
当玩家通过mod或插件拥有一些增益效果/负面效果,死亡重生、跨世界传送会导致效果被叠加,并且不会随着时间消失
导致的问题r
玩家跨世界传送/死亡重生会导致一部分数值异常
部分mod提供的护甲值/生命值/护甲韧性的增益减益会错误的叠加
复现方法
确保玩家被杀死时,身上有药水效果,比如缓慢250,玩家重生后无法移动,药水效果不会随时间消失
get 玩家移动速度的基础值为0.1,移动速度为0.0
此时再给玩家添加缓慢效果,药水效果可以正常随时间消失
截图/视频
(如果没有可以忽略)
运行环境
Windows10
Minecraft版本(1.18.2): 构建版本(从/version指令获取):
This serveris running CatServer version 1.18.2-ecf29bc1(MC: 1.18.2)
(lmplementing APlversion 1.18.2-R0.1-SNAPSHOT, Forge version 40.2.14)
相关模组/插件:
描述这个BUG 当玩家死亡时身上具有药水效果,玩家重生后,药水效果不会显示,但是数值上可以发现确实存在药水效果 当玩家通过mod或插件拥有一些增益效果/负面效果,死亡重生、跨世界传送会导致效果被叠加,并且不会随着时间消失
导致的问题r 玩家跨世界传送/死亡重生会导致一部分数值异常 部分mod提供的护甲值/生命值/护甲韧性的增益减益会错误的叠加
复现方法 确保玩家被杀死时,身上有药水效果,比如缓慢250,玩家重生后无法移动,药水效果不会随时间消失 get 玩家移动速度的基础值为0.1,移动速度为0.0 此时再给玩家添加缓慢效果,药水效果可以正常随时间消失
截图/视频 (如果没有可以忽略)
看起来是patches/minecraft/net/minecraft/server/players/PlayerList.java.patch第501行
serverplayer.m_21204_().m_22168_(p_11237_.m_21204_().m_22180_())
人话: serverplayer.getAttributes().load(p_11237_.getAttributes().save())
这里出现了问题……把原来的Attributes给复制到新ServerPlayer上了……
受影响的是
((LivingEntity)ServerPlayer).craftAttributes.handle.f_22139_/attributes
(是个HashMap)
里面有一个Key的f_22078_/descriptionId
=="attribute.name.generic.movement_speed"
对应的Value的f_22091/permanentModifiers
(是个ObjectArraySet)
里面存的速度效果会被复制(这个bug套了好多层好难找 吐了……)
我这边测试的结果是speed slowness这两个速度效果会因为修改了Attributes而被保留 防火/漂浮之类的效果似乎不受影响 经测试已确认删掉这一行之后重生的时候速度效果可以正常被移除
看起来这段是作者近期新加入的代码 并且跟forge和spigot的写法都不太一样 感觉应该把这一行删掉 不过不是很确定会不会影响到其他地方 还是请作者来决定如何修叭~XwX
@Kotori0629