Closed i493052739 closed 4 months ago
模组崩服问题解决了,但通过实现 spigot 的 BucketEmptyEventListener 进一步测试发现, 它后续的 entity 在 cat 对 level 的使用逻辑,也需要修一下 可以看到 entity 的 m8119 方法也会默认使用 ServerLevel 的 getMinecraftWorld 方法 而这个方法在机械动力自定义的 Level 子实现类的实例中并未实现 导致 BucketEmptyEventListener 在处理时失败(不影响正常玩家放水桶,只是在机械臂放水桶时失败)
18.02 22:22:37 [Server] INFO Caused by: java.lang.AbstractMethodError:
Method com/simibubi/create/content/kinetics/deployer/DeployerHandler$ItemUseWorld.getMinecraftWorld()Lnet/minecraft/server/level/ServerLevel; is abstract
18.02 22:22:37 [Server] INFO at java.lang.Thread.run(Thread.java:833) [?:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:344) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:984) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:1144) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:397) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:1229) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:419) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.world.level.entity.EntityTickList.m_156910_(EntityTickList.java:54) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.level.ServerLevel.lambda$tick$6(ServerLevel.java:439) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.world.level.Level.m_46653_(Level.java:1372) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.level.ServerLevel.m_8647_(ServerLevel.java:820) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.server.level.ServerLevel.m_8662_(ServerLevel.java:836) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at net.minecraft.world.entity.Entity.m_6083_(Entity.java:1947) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.contraptions.AbstractContraptionEntity.m_8119_(AbstractContraptionEntity.java:373) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.contraptions.OrientedContraptionEntity.tickContraption(OrientedContraptionEntity.java:280) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.contraptions.AbstractContraptionEntity.tickActors(AbstractContraptionEntity.java:460) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.kinetics.deployer.DeployerMovementBehaviour.visitNewPosition(DeployerMovementBehaviour.java:75) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.kinetics.deployer.DeployerMovementBehaviour.activate(DeployerMovementBehaviour.java:106) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.kinetics.deployer.DeployerHandler.activate(DeployerHandler.java:135) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
18.02 22:22:37 [Server] INFO at com.simibubi.create.content.kinetics.deployer.DeployerHandler.activateInner(DeployerHandler.java:338) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
...
后续再看下,至少目前不崩服了。。。
CraftEventFactory的方法类型最好不要改, 新建一个方法调用过去比较好
看看新的报错, 只能从调用的地方处理
看看新的报错, 只能从调用的地方处理
如期抛出,后续有空会再测测看看会不会影响机械臂其他使用场景。
[20:13:11] [Server thread/ERROR] [Minecraft]: Could not pass event PlayerBucketEmptyEvent to Residence
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:594) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:578) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory.getPlayerBucketEvent_Modded(CraftEventFactory.java:470) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory.callPlayerBucketEmptyEvent(CraftEventFactory.java:431) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at net.minecraft.world.item.BucketItem.emptyContents(BucketItem.java:173) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.world.item.BucketItem.emptyContents(BucketItem.java:143) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.world.item.BucketItem.m_7203_(BucketItem.java:108) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at com.simibubi.create.content.kinetics.deployer.DeployerHandler.activateInner(DeployerHandler.java:338) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.kinetics.deployer.DeployerHandler.activate(DeployerHandler.java:135) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.kinetics.deployer.DeployerMovementBehaviour.activate(DeployerMovementBehaviour.java:106) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.kinetics.deployer.DeployerMovementBehaviour.visitNewPosition(DeployerMovementBehaviour.java:75) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.contraptions.AbstractContraptionEntity.tickActors(AbstractContraptionEntity.java:460) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.contraptions.OrientedContraptionEntity.tickContraption(OrientedContraptionEntity.java:280) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at com.simibubi.create.content.contraptions.AbstractContraptionEntity.m_8119_(AbstractContraptionEntity.java:373) ~[create-1.18.2-0.5.1.f-all.jar%2378!/:0.5.1.f]
at net.minecraft.world.entity.Entity.m_6083_(Entity.java:1947) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.level.ServerLevel.m_8662_(ServerLevel.java:836) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.level.ServerLevel.m_8647_(ServerLevel.java:820) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.world.level.Level.m_46653_(Level.java:1372) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.level.ServerLevel.lambda$tick$6(ServerLevel.java:439) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.world.level.entity.EntityTickList.m_156910_(EntityTickList.java:54) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:419) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:1229) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:397) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:1144) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:984) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:344) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.UnsupportedOperationException: Unsupported Operation! Please report to https://github.com/Luohuayu/CatServer/issues (World class: com.simibubi.create.content.kinetics.deployer.DeployerHandler$ItemUseWorld)
at net.minecraft.world.level.LevelAccessor.getMinecraftWorld(LevelAccessor.java:107) ~[server-1.18.2-20220404.173914-srg.jar%23133!/:?]
at org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock.getWorld(CraftBlock.java:95) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock.getLocation(CraftBlock.java:104) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
at com.bekvon.bukkit.residence.listeners.ResidencePlayerListener.onPlayerBucketEmpty(ResidencePlayerListener.java:1832) ~[?:?]
at jdk.internal.reflect.GeneratedMethodAccessor298.invoke(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[forge-1.18.2-40.2.14-universal.jar%23138!/:?]
... 28 more
修复机械动力自己实现的 Level 子类没法在 CatServer cast 成 ServerLevel 的 bug
它的作者写了个 level 的子类,在 bucket 互动时给这个level子类传到 bukkit eventbus 当参数去发事件了 导致这个自定义的 level 子类无法 cast 为 ServerLevel 从而服务端崩溃
排查发现对应的几个需要强转的事件是为了一个 canBuild 里的 getSharedSpawnPos 逻辑,这个逻辑可以单独抽出来 从而避免桶事件相关模组的强转问题
测试结果:机械臂模拟level的水桶正常放出![image](https://github.com/Luohuayu/CatServer/assets/36336351/58ae608c-df93-456a-ba4e-2c038d377467)