JheffersonMarques / MorePeripherals

Adds new peripherals for CC:Tweaked
MIT License
8 stars 2 forks source link

Java exceptions during trade filtering #18

Closed crazyvinvin closed 1 year ago

crazyvinvin commented 1 year ago

Hey there,

We're running a script that checks if a villager trade is the one that we want, else it cycles trades. This happens WITHOUT yielding (I think cycle trades should probably yiels), which for now makes it really quick (like 100k cycles in a second, so that we can find our efficiency 5 trade for 17 emeralds ;)

However, this has been A LOT of exceptions like this:

java.lang.ClassCastException: class net.minecraft.world.entity.npc.Villager cannot be cast to class net.minecraft.nbt.Tag (net.minecraft.world.entity.npc.Villager and net.minecraft.nbt.Tag are in module minecraft@1.19.2 of loader 'TRANSFORMER' @7654f833)
    at com.hakimen.peripherals.blocks.tile_entities.TradingInterfaceEntity.m_183515_(TradingInterfaceEntity.java:39) ~[MorePeripherals_1.19.2-1.8.1.jar%23137!/:1.7.3] {re:classloading}
    at net.minecraft.world.level.block.entity.BlockEntity.m_187482_(BlockEntity.java:77) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.level.block.entity.BlockEntity.m_187480_(BlockEntity.java:64) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.level.chunk.LevelChunk.m_8051_(LevelChunk.java:368) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.level.chunk.storage.ChunkSerializer.m_63454_(ChunkSerializer.java:342) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.level.ChunkMap.m_140258_(ChunkMap.java:803) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.server.level.ChunkMap.m_198874_(ChunkMap.java:770) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.server.level.ChunkMap.m_140353_(ChunkMap.java:477) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.server.level.ChunkMap.m_140280_(ChunkMap.java:441) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.server.level.ServerChunkCache.m_201698_(ServerChunkCache.java:314) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:285) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:866) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:292) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:806) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:654) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:244) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at java.lang.Thread.run(Thread.java:833) [?:?] {}

This is of course not a good thing, but we didn't even notice these exceptions until another exception crashed our server (causing a bit of panick). The exception looked like this:

[16:09:23] [Server thread/ERROR] [minecraft/MinecraftServer]: Encountered an unexpected exception
net.minecraft.ReportedException: Ticking entity
    at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:870) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:292) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:806) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:654) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:244) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    at java.lang.Thread.run(Thread.java:833) [?:?] {}
Caused by: java.lang.NullPointerException: Cannot invoke "net.minecraft.world.item.trading.MerchantOffers.iterator()" because the return value of "net.minecraft.world.entity.npc.Villager.m_6616_()" is null
    at net.minecraft.world.entity.ai.behavior.ShowTradesToPlayer.m_24127_(ShowTradesToPlayer.java:122) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.behavior.ShowTradesToPlayer.m_24112_(ShowTradesToPlayer.java:109) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.behavior.ShowTradesToPlayer.m_6725_(ShowTradesToPlayer.java:79) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.behavior.ShowTradesToPlayer.m_6725_(ShowTradesToPlayer.java:21) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.behavior.Behavior.m_22558_(Behavior.java:63) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.Brain.m_21963_(Brain.java:531) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.ai.Brain.m_21865_(Brain.java:476) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.npc.Villager.m_8024_(Villager.java:208) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.Mob.m_6140_(Mob.java:720) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.entity.LivingEntity.m_8107_(LivingEntity.java:2546) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,re:mixin}
    at net.minecraft.world.entity.Mob.m_8107_(Mob.java:504) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.entity.AgeableMob.m_8107_(AgeableMob.java:127) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.LivingEntity.m_8119_(LivingEntity.java:2291) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,re:mixin}
    at net.minecraft.world.entity.Mob.m_8119_(Mob.java:316) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.entity.npc.Villager.m_8119_(Villager.java:247) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.world.entity.Entity.m_6083_(Entity.java:1730) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B}
    at net.minecraft.world.entity.LivingEntity.m_6083_(LivingEntity.java:2732) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading,re:mixin}
    at net.minecraft.server.level.ServerLevel.m_8662_(ServerLevel.java:678) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.level.ServerLevel.m_8647_(ServerLevel.java:662) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.level.Level.m_46653_(Level.java:457) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.level.ServerLevel.m_184063_(ServerLevel.java:323) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.world.level.entity.EntityTickList.m_156910_(EntityTickList.java:54) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:classloading}
    at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:303) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}
    at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:866) ~[server-1.19.2-20220805.130853-srg.jar%23149!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}
    ... 5 more

I think we can make sure the second exception (which caused the server to crash) doesn't happen just by yielding, however this makes our script take 40 minutes to perform 35k cycles (which is what it took to get efficiency 5 cheapest trade), instead of less then a second.

If you need the lua script we're running for further investigation, just let me know.

JheffersonMarques commented 1 year ago

the first one is an issue while saving villager data, the second one is probably because it was too fast, maybe it would need to yield or just store last cycle time, and prevent cycling based on times between cycles

JheffersonMarques commented 1 year ago

Fixed in dev