Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some bug will kick player out of server by collecting the drones #990

Open
kingstick029 opened this issue Apr 16, 2022 · 22 comments
Open

Some bug will kick player out of server by collecting the drones #990

kingstick029 opened this issue Apr 16, 2022 · 22 comments
Labels
Bug Fixed in Dev Issue will be closed after next release other mod issue

Comments

@kingstick029
Copy link

Describe the bug

I discover a bug where when a drone is destroy and collected by other players who did not place will cause the server become buggy and kick people out of the server.

How to reproduce the bug

I place a harvesting drone, and another player destroys it and collects it. Me and my friend are kicked out of the server with this description : Internal Exception: io.netty.handler.codec.EncoderException: java.util.ConcurrentModificationException

Expected behavior

Please fix it

Additional details

here is the server log
[18:45:43] [Server thread/INFO] [minecraft/DedicatedServer]: kenken311 left the game
[18:45:43] [Netty Server IO #18/ERROR] [minecraft/NettyPacketEncoder]: Error encoding packet
java.util.ConcurrentModificationException: null
at java.util.HashMap$HashIterator.nextNode(Unknown Source) ~[?:1.8.0_311] {}
at java.util.HashMap$KeyIterator.next(Unknown Source) ~[?:1.8.0_311] {}
at me.desht.pneumaticcraft.common.util.PneumaticCraftUtils.copyNBTWithout(PneumaticCraftUtils.java:713) ~[pneumaticcraft:1.16.5-2.15.6-315] {re:classloading}
at me.desht.pneumaticcraft.common.item.ItemPressurizable.roundedPressure(ItemPressurizable.java:156) ~[pneumaticcraft:1.16.5-2.15.6-315] {re:classloading}
at me.desht.pneumaticcraft.common.item.ItemPressurizable.getShareTag(ItemPressurizable.java:112) ~[pneumaticcraft:1.16.5-2.15.6-315] {re:classloading}
at net.minecraftforge.common.extensions.IForgeItemStack.getShareTag(IForgeItemStack.java:376) ~[forge:?] {re:mixin,re:computing_frames,re:classloading,pl:mixin:APP:apotheosis.mixins.json:MixinIForgeItemStack,pl:mixin:A}
at net.minecraft.network.PacketBuffer.writeItemStack(PacketBuffer.java:308) ~[?:?] {re:classloading}
at net.minecraft.network.PacketBuffer.func_150788_a(PacketBuffer.java:290) ~[?:?] {re:classloading}
at net.minecraft.network.play.server.SEntityEquipmentPacket.func_148840_b(SourceFile:54) ~[?:?] {re:classloading}
at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:38) ~[?:?] {re:classloading}
at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:12) ~[?:?] {re:classloading}
at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
at net.minecraft.network.NetworkManager.lambda$sendPacket$5(NetworkManager.java:196) ~[?:?] {re:classloading,pl:runtimedistcleaner:A,re:mixin,pl:runtimedistcleaner:A}
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:465) [server-1.16.5-20210115.111550-extra.jar:?] {}
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [server-1.16.5-20210115.111550-extra.jar:?] {}
at java.lang.Thread.run(Unknown Source) [?:1.8.0_311] {}

Which Minecraft version are you using?

1.16

Crash log

No response

@desht
Copy link
Member

desht commented Apr 23, 2022

Hmm, seen problems like this before and I'd hoped I'd fixed them, but I guess not. Seems to be hard to do anything with getShareTag() without causing a CME, which kind of defeats the point of using it; the intention is to sync rounded air values for pneumatic items to clients to reduce network chatter.

I will continue to investigate, although this could be hard to debug since it never happens in a dev world.

@Quezler
Copy link

Quezler commented Apr 23, 2022

i would be more than happy to try out some debug builds of the mod on my enigmatica 6 expert server & try to intentionally trigger it if it would help you to gather the required information 🤔

@desht
Copy link
Member

desht commented Apr 23, 2022

Thanks, I'll let you know if I have a build to test.

desht added a commit that referenced this issue Apr 23, 2022
@desht
Copy link
Member

desht commented Apr 23, 2022

Build 317 from https://jenkins.k-4u.nl/job/PneumaticCraft-Repressurized-1.16/ is ready for testing, may or may not help...

@kingstick029
Copy link
Author

kingstick029 commented Apr 23, 2022 via email

@Quezler
Copy link

Quezler commented Apr 23, 2022

@desht two server members still crashed when i picked up one of my drones, this is the error from the server console:

[23Apr2022 12:52:05.095] [Netty Epoll Server IO #38/ERROR] [net.minecraft.network.NettyPacketEncoder/]: Error encoding packet
java.util.ConcurrentModificationException: null
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) ~[?:?]
	at java.util.HashMap$KeyIterator.next(HashMap.java:1607) ~[?:?]
	at me.desht.pneumaticcraft.common.util.PneumaticCraftUtils.copyNBTWithout(PneumaticCraftUtils.java:713) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.roundedPressure(ItemPressurizable.java:156) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.getShareTag(ItemPressurizable.java:112) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at net.minecraftforge.common.extensions.IForgeItemStack.getShareTag(IForgeItemStack.java:376) ~[forge:?]
	at net.minecraft.network.PacketBuffer.writeItemStack(PacketBuffer.java:308) ~[?:?]
	at net.minecraft.network.PacketBuffer.func_150788_a(PacketBuffer.java:290) ~[?:?]
	at net.minecraft.network.play.server.SEntityEquipmentPacket.func_148840_b(SourceFile:54) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:38) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:12) ~[?:?]
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at net.minecraft.network.NetworkManager.lambda$sendPacket$5(NetworkManager.java:196) ~[?:?]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:313) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [server-1.16.5-20210115.111550-extra.jar:?]
	at java.lang.Thread.run(Thread.java:832) [?:?]
[23Apr2022 12:52:05.659] [Netty Epoll Server IO #24/ERROR] [net.minecraft.network.NettyPacketEncoder/]: Error encoding packet
java.util.ConcurrentModificationException: null
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) ~[?:?]
	at java.util.HashMap$KeyIterator.next(HashMap.java:1607) ~[?:?]
	at me.desht.pneumaticcraft.common.util.PneumaticCraftUtils.copyNBTWithout(PneumaticCraftUtils.java:713) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.roundedPressure(ItemPressurizable.java:156) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.getShareTag(ItemPressurizable.java:112) ~[pneumaticcraft:1.16.5-2.15.6-317]
	at net.minecraftforge.common.extensions.IForgeItemStack.getShareTag(IForgeItemStack.java:376) ~[forge:?]
	at net.minecraft.network.PacketBuffer.writeItemStack(PacketBuffer.java:308) ~[?:?]
	at net.minecraft.network.PacketBuffer.func_150788_a(PacketBuffer.java:290) ~[?:?]
	at net.minecraft.network.play.server.SEntityEquipmentPacket.func_148840_b(SourceFile:54) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:38) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:12) ~[?:?]
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at net.minecraft.network.NetworkManager.lambda$sendPacket$5(NetworkManager.java:196) ~[?:?]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:313) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [server-1.16.5-20210115.111550-extra.jar:?]
	at java.lang.Thread.run(Thread.java:832) [?:?]
[23Apr2022 12:52:05.712] [Server thread/INFO] [net.minecraft.network.play.ServerPlayNetHandler/]: NordpolTheArson lost connection: Internal Exception: io.netty.handler.codec.EncoderException: java.util.ConcurrentModificationException
[23Apr2022 12:52:05.713] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: NordpolTheArson left the game
[23Apr2022 12:52:06.184] [Server thread/INFO] [net.minecraft.network.play.ServerPlayNetHandler/]: Catchears lost connection: Internal Exception: io.netty.handler.codec.EncoderException: java.util.ConcurrentModificationException
[23Apr2022 12:52:06.184] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Catchears left the game

(the server, me, and both player names mentioned in the log were all running 517)

@desht
Copy link
Member

desht commented Apr 23, 2022

Oh well, so much for that idea 😞

@Quezler
Copy link

Quezler commented Apr 23, 2022

i recently had another accidental crash of a player, i took a harvester drone out of rs storage and held it in my inventory just fine, but the moment i selected the slot in the hotbar so i held it one of my players crashed again, so it might be less (or also) pickup related and more like "rendering in a player's hand" error, but that's just a guess.

what i can tell from said recent occurrence is that only one of the players nearby crashed, two others didn't crash, i did not pay attention to distance or which way they were looking, if that matters at all.

Oh well, so much for that idea 😞

any more ideas or ways to debug?

@desht
Copy link
Member

desht commented Apr 23, 2022

Yeah, the problem is when the server sync's the (pressurizable) item a player is holding to other clients that are nearby. I know what's going wrong, but I'm still trying to figure out a way to prevent the problem occurring...

desht added a commit that referenced this issue Apr 23, 2022
@desht
Copy link
Member

desht commented Apr 23, 2022

OK, build 318 will be available shortly, with another attempt (and if this doesn't fix it, the stack trace might be more informative than before...)

@Quezler
Copy link

Quezler commented Apr 23, 2022

While trying to crash a player standing afk by holding drones, someone joined and while joining (not even completely loaded in/rendering yet) he crashed, all on 318:

[23Apr2022 17:24:51.523] [Netty Epoll Server IO #34/ERROR] [net.minecraft.network.NettyPacketEncoder/]: Error encoding packet
java.util.ConcurrentModificationException: null
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) ~[?:?]
	at java.util.HashMap$KeyIterator.next(HashMap.java:1607) ~[?:?]
	at me.desht.pneumaticcraft.common.util.PneumaticCraftUtils.copyNBTWithout(PneumaticCraftUtils.java:716) ~[pneumaticcraft:1.16.5-2.15.6-318]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.roundedPressure(ItemPressurizable.java:156) ~[pneumaticcraft:1.16.5-2.15.6-318]
	at me.desht.pneumaticcraft.common.item.ItemPressurizable.getShareTag(ItemPressurizable.java:112) ~[pneumaticcraft:1.16.5-2.15.6-318]
	at net.minecraftforge.common.extensions.IForgeItemStack.getShareTag(IForgeItemStack.java:376) ~[forge:?]
	at net.minecraft.network.PacketBuffer.writeItemStack(PacketBuffer.java:308) ~[?:?]
	at net.minecraft.network.PacketBuffer.func_150788_a(PacketBuffer.java:290) ~[?:?]
	at net.minecraft.network.play.server.SEntityEquipmentPacket.func_148840_b(SourceFile:54) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:38) ~[?:?]
	at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:12) ~[?:?]
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[server-1.16.5-20210115.111550-extra.jar:?]
	at net.minecraft.network.NetworkManager.lambda$sendPacket$5(NetworkManager.java:196) ~[?:?]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:313) [server-1.16.5-20210115.111550-extra.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [server-1.16.5-20210115.111550-extra.jar:?]
	at java.lang.Thread.run(Thread.java:832) [?:?]
[23Apr2022 17:24:52.252] [Server thread/INFO] [net.minecraft.network.play.ServerPlayNetHandler/]: bad_egg365 lost connection: Internal Exception: io.netty.handler.codec.EncoderException: java.util.ConcurrentModificationException
[23Apr2022 17:24:52.252] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: bad_egg365 left the game

@Quezler
Copy link

Quezler commented Apr 23, 2022

the stack trace might be more informative than before

the only difference i am noticing is copyNBTWithout(PneumaticCraftUtils.java:716) not ending on :713 🤔

@desht
Copy link
Member

desht commented Apr 24, 2022

Yeah, definitely trying to iterate the NBT keyset, as I thought...

Question: does this only happen when there's more than one player online (or specifically in range of the player equipping the drone) ? Does it happen if there's only one other player present?

@Quezler
Copy link

Quezler commented Apr 24, 2022

Ill have to run some additional tests, during the last crash attempt i was within a few blocks of an afk player swapping through 3 different drones in my hotbar and he didn't crash (not 100% if i stood with his fov), but another player that joined and was in that dimension did immediately crash upon joining.

Usually when several players are connected only one or two players tend to crash, but at those times i did not take into account server join order or dimension join order.

I'll try to see if i can trigger single players to crash, memory regarding the previous attempts is blurry at best so a new round of testing is required.

@Quezler
Copy link

Quezler commented Apr 24, 2022

i am currently having trouble reproducing it, two players connected while i loaded in, i've tried holding/dropping/plonking/scrolling drones and nothing causes anyone to crash, even asking one of the players who joined later than me to reconnect incase it was somehow related to the join order.

and just as i was typing this i returned to the main base (again) with a drone in hand, and now the member that didn't reconnect & whom i've visited several times with drones just now crashed:

[09:50:34] [Netty Epoll Server IO #10/ERROR] [minecraft/NettyPacketEncoder]: Error encoding packet
java.util.ConcurrentModificationException: null
        at java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) ~[?:?] {}
        at java.util.HashMap$KeyIterator.next(HashMap.java:1607) ~[?:?] {}
        at me.desht.pneumaticcraft.common.util.PneumaticCraftUtils.copyNBTWithout(PneumaticCraftUtils.java:716) ~[pneumaticcraft:1.16.5-2.15.6-318] {re:classloading}
        at me.desht.pneumaticcraft.common.item.ItemPressurizable.roundedPressure(ItemPressurizable.java:156) ~[pneumaticcraft:1.16.5-2.15.6-318] {re:classloading}
        at me.desht.pneumaticcraft.common.item.ItemPressurizable.getShareTag(ItemPressurizable.java:112) ~[pneumaticcraft:1.16.5-2.15.6-318] {re:classloading}
        at net.minecraftforge.common.extensions.IForgeItemStack.getShareTag(IForgeItemStack.java:376) ~[forge:?] {re:mixin,re:computing_frames,re:classloading,pl:mixin:APP:apotheosis.mixins.json:MixinIForgeItemStack,pl:mixin:A}
        at net.minecraft.network.PacketBuffer.writeItemStack(PacketBuffer.java:308) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:randompatches.mixins.json:packetsizelimits.PacketBufferMixin,pl:mixin:APP:actuallycompatible.mixins.json:PacketBufferEncoderMixin,pl:mixin:A}
        at net.minecraft.network.PacketBuffer.func_150788_a(PacketBuffer.java:290) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:randompatches.mixins.json:packetsizelimits.PacketBufferMixin,pl:mixin:APP:actuallycompatible.mixins.json:PacketBufferEncoderMixin,pl:mixin:A}
        at net.minecraft.network.play.server.SEntityEquipmentPacket.func_148840_b(SourceFile:54) ~[?:?] {re:classloading}
        at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:38) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:connectivity.mixins.json:networkstats.NettyPacketEncoderMixin,pl:mixin:A}
        at net.minecraft.network.NettyPacketEncoder.encode(NettyPacketEncoder.java:12) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:connectivity.mixins.json:networkstats.NettyPacketEncoderMixin,pl:mixin:A}
        at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[server-1.16.5-20210115.111550-extra.jar:?] {re:mixin}
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[server-1.16.5-20210115.111550-extra.jar:?] {}
        at net.minecraft.network.NetworkManager.lambda$sendPacket$5(NetworkManager.java:196) ~[?:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:runtimedistcleaner:A}
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:313) [server-1.16.5-20210115.111550-extra.jar:?] {}
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [server-1.16.5-20210115.111550-extra.jar:?] {}
        at java.lang.Thread.run(Thread.java:832) [?:?] {}
[09:50:34] [Server thread/INFO] [minecraft/ServerPlayNetHandler]: Mick_2006 lost connection: Internal Exception: io.netty.handler.codec.EncoderException: java.util.ConcurrentModificationException
[09:50:34] [Server thread/INFO] [minecraft/DedicatedServer]: Mick_2006 left the game

@desht
Copy link
Member

desht commented Apr 24, 2022

My theory is that it happens when there's more than one other player around. And if I'm right, it's a Forge problem which I can't do much about, other than report it. Although I can just disable the NBT modification when sync'ing to client, which will get rid of the problem, but potentially increase the amount of network chatter from server to (each) client. But there may be no way around that in the short term.

@Quezler
Copy link

Quezler commented Apr 24, 2022

a bit more network traffic in exchange for not crashing seems like a good deal for now 🤔

desht added a commit that referenced this issue Apr 24, 2022
- work around problems with pressure rounding in sync'd NBT data
  which can cause players to be kicked
#990
@desht
Copy link
Member

desht commented Apr 24, 2022

Yep. Next build (319) will add a config setting nbt_to_client_modification in pneumaticcraft-common.toml. True by default, but setting it to false will disable the NBT modification that is currently causing player kicks.

desht added a commit that referenced this issue Apr 26, 2022
- work around problems with pressure rounding in sync'd NBT data
  which can cause players to be kicked
#990
@desht desht added other mod issue Fixed in Dev Issue will be closed after next release labels Apr 27, 2022
desht added a commit that referenced this issue May 3, 2022
@desht
Copy link
Member

desht commented May 3, 2022

@Quezler when you have a chance, would you be able to test build 321? (ensuring that nbt_to_client_modification is set to true) ?

I think I found a situation where I might end up modifying NBT on the network thread, and this build should fix that.

@Quezler
Copy link

Quezler commented May 3, 2022

sure, i'll give it a go 👍

@Quezler
Copy link

Quezler commented May 8, 2022

Sorry for the late response, there haven't been many other players online during the moments i was working on pnc, but 321 hasn't (to my knowledge) caused anyone to crash yet, but due to the aforementioned reason it might be inconclusive. 🤔

@desht
Copy link
Member

desht commented May 8, 2022

Ok, thanks. Ideally need to test what happens when someone picks up a drone with at least 2 other players present.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Fixed in Dev Issue will be closed after next release other mod issue
Projects
None yet
Development

No branches or pull requests

3 participants