PneumaticCraft: Repressurized

PneumaticCraft: Repressurized

43M Downloads

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

kingstick029 opened this issue Β· 22 comments

commented

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

commented

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?

commented

Oh well, so much for that idea 😞

commented

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...

commented

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...)

commented

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
commented

the stack trace might be more informative than before

the only difference i am noticing is copyNBTWithout(PneumaticCraftUtils.java:716) not ending on :713 πŸ€”

commented

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.

commented

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 πŸ€”

commented

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

commented
commented

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

commented

@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)

commented

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?

commented

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.

commented

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
commented

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.

commented

a bit more network traffic in exchange for not crashing seems like a good deal for now πŸ€”

commented

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.

commented

sure, i'll give it a go πŸ‘

commented

@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.

commented

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. πŸ€”

commented

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