Ellpeck / PrettyPipes

Pretty Pipes is a simple to use, all-inclusive item transport mod featuring simple pipes that can be upgraded using modules to accomplish much more advanced tasks.
https://modrinth.com/mod/pretty-pipes
MIT License
21 stars 19 forks source link

NBT tag too Big #137

Open Howman opened 2 years ago

Howman commented 2 years ago

I keep getting this error when using pretty pipes well i be leave this is but not 100 % sure tho "Internal Exception: io.netty.handler.codec.DecoderException: java.lang.RuntimeException: Tried to read NBT tag that was too big; tried to allocate: 2097175bytes where max allowed: 2097152"

I am using prettypipes with minecolonies to move items into a sorter so it could be a minecolonies item going into pipes triggering error.

and I am playing through lan server so if you need any log files i would need to get them off the other computer since it hosts minecraft

Ellpeck commented 2 years ago

Hi, can you share both the client and server log files in full from a session where this issue occurred? You can remove any personal information like folder paths etc. if you want, of course.

innerlurken commented 2 years ago

Hi, I also get this problem, i have to replace the capabilities.dat file with an older one, when looking inside it has a few hundred 'items' in the pretty pipes section which i think is the issue, so just too many items being transferred in the pipe network

aofekiko commented 11 months ago

I'd like to join in on this problem, I have encountered a capabilities.dat file that has 1678 prettypipe:network items in it that reaches the packet size limit.

I've attached a parsed file with the error from the server: error.txt and the capabilities.dat file (Replaced the file extension to .txt since GitHub doesn't allow .dat files): capabilities.txt

Most data seems to be spent on path, isn't there a way to allow the client to calculate the path for itself? If not, perhaps a collection of cardinal vectors would be a more compact way to define the path of items are supposed to take? Something like this:

{
  "path": [
   {"axis":"y", "value":5}, 
   {"axis":"x", "value":-4},
   {"axis":"z", "value":1},
  ]
}
Ellpeck commented 11 months ago

Hi! I'll need a bit more context for the error you posted, @aofekiko.

It seems like a big packet is being sent here that features forge capabilities for the world from multiple mods? By default (at least when I first made the mod), Forge's Level capabilities aren't ever sent to the client automatically, and Pretty Pipes doesn't do so or require them to be either.

Can you try to reproduce this issue with just Pretty Pipes installed? There might be a mod that sends all capability data to the client, no matter what mods it comes from.

It might also be that I'm misunderstanding what specific packet this is, and so the full stack trace would be very useful!

aofekiko commented 11 months ago

I am running the FTB Inferno modpack. Sadly there is no stack trace other than the packet dump that I sent and the line [00:55:09] [Netty Epoll Server IO #6/ERROR]: Attempted to send packet over maximum protocol size: 2119699 > 2097152 that comes before it.

I will work on trying to reproduce this. Right now I cant seem to populate items with any entries

aofekiko commented 11 months ago

I managed to reproduce the issue. image Server stack trace:

[20:38:06] [Netty Server IO #6/ERROR] [minecraft/PacketEncoder]: Error receiving packet 34
java.lang.IllegalArgumentException: Packet too big (is 10053572, should be less than 8388608): net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket@2fe9c4fc
    at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:48) ~[server-1.18.2-20220404.173914-srg.jar%2342!/:?]
    at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:14) ~[server-1.18.2-20220404.173914-srg.jar%2342!/:?]
    at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:110) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:764) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:790) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:758) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:808) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1025) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:306) ~[netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at net.minecraft.network.Connection.m_178303_(Connection.java:214) ~[server-1.18.2-20220404.173914-srg.jar%2342!/:?]
    at net.minecraft.network.Connection.lambda$sendPacket$8(Connection.java:203) ~[server-1.18.2-20220404.173914-srg.jar%2342!/:?]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) [netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.68.Final.jar%2330!/:4.1.68.Final]
    at java.lang.Thread.run(Thread.java:833) [?:?]

Client logs show no error.

capabilities.dat file: capabilities.txt

World file used for reproduction: world.zip

Minecraft verison: 1.18.2 Forge verion: 40.2.7 Mod version: 1.12.8

Ellpeck commented 11 months ago

Thanks for investigating! This looks like it'll help a lot :)