Open IRicTheCoder opened 1 month ago
Also, any additional EMC/knowledge sync packets received while processing one such packet will be added to the queue, with no limit on the number of such packets in the queue. Each time a player's EMC value is updated, including through commands and EMC Links, an EMC/knowledge sync packet is sent to that player, with no limit on the number of such packets sent per tick.
Example result from OP's setup (all of this happens in the same frame on the client, but across many ticks serverside):
Even though the EMC/knowledge sync packets are being processed one after another, they can be received far faster than can be processed, especially if a Transmutation Table is open (whose GUI updates from every packet). If this continues automatically due to EMC Links, the resulting backlog grows endlessly, causing an infinite loop and client hang.
Would it be possible to throttle the processing of EMC/knowledge sync packets so that the list of transmutable items only updates once per frame, instead of potentially many (or infinite) times per frame?
Tickets that do not conform to this template will be closed without comment
Exact ProjectE version (do not say "latest", "latest on Curse", or similar): 1.20.1-PE1.0.1
Exact Forge version: 47.3.7
Link to crash log (please use a paste site, do not attach the .txt or paste the log inline): There isn't one as the client hangs until it either crashes from Out of Memory (which is rare, and does not provide any files not even a process pid log) or is force closed, no crash reports, or logs get generated from that.
Steps to reproduce:
What I expected to happen: Maybe use Async methods to search for the items to add or remove, have a cached list to make it easier, or even block the update of the tablet to only run on open, or every X amount of time. This would most likely prevent the client hanging.
Couldn't test much more so I can't be sure if there are more factors involved, but the not hanging is the behavior I would expect.
As a side note, I would suggest making the item list update only run when the tablet is open or when the player puts an item into it or takes an item, instead of every time the EMC value updates.
What happened instead: What is happening is pretty simple to explain, and seems to happen mainly when using ProjectExpansion with ProjectE, since there isn't a way to generate a lot of updates to the EMC value without it.
When you have a few EMC Links pulling and pushing in and out of the EMC, and you open the tablet with a lot of items learned, or in the case of our tests with the Tome of Knowledge learned, it hang the client.
In a world with less than 50 Links, and using a simple debugger to read the calls, the tablet runs more than 3 thousand calls in terms of instructions, to update the value, the items that display based on the EMC value and for sorting.
We tested a lot of things as this issue started happening in Project Architect 2, from using Links or not, Transmutation Interfaces or not, Collectors (which aren't in the modpack but I tested them), at the end the number of updates seem to be the driver for the issue.
Increasing the time it takes for the ProjectExpansion Links to run doesn't seem to be enough to fix it.
NOTE: The reason why I am posting this issue here, is because it is related mainly to how the table seems to be handling updates, which is, in my opinion, more related to ProjectE itself then its addons.