Funwayguy / BetterQuesting

MIT License
57 stars 103 forks source link

RuntimeException Crash with Thermal Dynamics #481

Closed Freebi85 closed 5 years ago

Freebi85 commented 6 years ago

---- Minecraft Crash Report ----

WARNING: coremods are present: FarseekCoreMod (Farseek-1.12-2.3.1.jar) MicdoodlePlugin (MicdoodleCore-1.12.2-4.0.1.181.jar) ForgelinPlugin (Forgelin-1.7.4.jar) BedPatch (bedpatch-2.2-1.12.2.jar) Plugin (NotEnoughIDs-1.5.4.3.jar) LibrarianLib Plugin (librarianlib-1.12.2-4.15.jar) DynamicSurroundingsCore (DynamicSurroundings-1.12.2-3.4.9.17.jar) LoadingPlugin (Bloodmoon-MC1.12.2-1.5.3.jar) MalisisCorePlugin (malisiscore-1.12.2-6.4.0.jar) Inventory Tweaks Coremod (InventoryTweaks-1.63.jar) CorePlugin (ForgeEndertech-1.12.2-4.4.0.0-build.0180.jar) FMLPlugin (elulib-0.1.12.jar) CorePlugin (SmoothFont-mc1.12.2-1.16.1.jar) IELoadingPlugin (ImmersiveEngineering-core-0.12-86.jar) RandomPatches (randompatches-1.12.2-1.6.1.0.jar) AppleCore (AppleCore-mc1.12.2-3.1.4.jar) LoadingPlugin (Quark-r1.5-130.jar) Do not report to Forge! (If you haven't disabled the FoamFix coremod, try disabling it in the config! Note that this bit of text will still appear.) (foamfix-0.10.2-1.12.2.jar) AstralCore (astralsorcery-1.12.2-1.10.2.jar) IvToolkit (IvToolkit-1.3.3-1.12.jar) llibrary (llibrary-core-1.0.8-1.12.2.jar) OpenModsCorePlugin (OpenModsLib-1.12.2-0.12.1.jar) CTMCorePlugin (CTM-MC1.12.2-0.3.2.20.jar) Contact their authors BEFORE contacting forge

// Who set us up the TNT?

Time: 10/29/18 8:03 PM Description: Rendering screen

java.lang.RuntimeException: Item "thermaldynamics:cover" (cofh.thermaldynamics.item.ItemCover) threw a fatal error during search! Please report this to the item's developer(s). at betterquesting.api2.client.gui.panels.lists.CanvasItemDatabase.updateSearch(CanvasItemDatabase.java:159) at betterquesting.api2.client.gui.panels.lists.CanvasItemDatabase.drawPanel(CanvasItemDatabase.java:64) at betterquesting.api2.client.gui.panels.CanvasEmpty.drawPanel(CanvasEmpty.java:52) at betterquesting.api2.client.gui.panels.CanvasEmpty.drawPanel(CanvasEmpty.java:52) at betterquesting.api2.client.gui.panels.CanvasTextured.drawPanel(CanvasTextured.java:27) at betterquesting.api2.client.gui.GuiScreenCanvas.drawPanel(GuiScreenCanvas.java:200) at betterquesting.api2.client.gui.GuiScreenCanvas.func_73863_a(GuiScreenCanvas.java:115) at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:381) at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1124) at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1118) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:397) at net.minecraft.client.main.Main.main(SourceFile:123) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) Caused by: java.lang.IllegalArgumentException: Invalid item stack "2xtile.air@0" registed to creative search tab! at betterquesting.api2.client.gui.panels.lists.CanvasItemDatabase.updateSearch(CanvasItemDatabase.java:125) ... 17 more A detailed walkthrough of the error, its code path and all known details is as follows:

-- Head -- Thread: Client thread Stacktrace: at betterquesting.api2.client.gui.panels.lists.CanvasItemDatabase.updateSearch(CanvasItemDatabase.java:159) at betterquesting.api2.client.gui.panels.lists.CanvasItemDatabase.drawPanel(CanvasItemDatabase.java:64) at betterquesting.api2.client.gui.panels.CanvasEmpty.drawPanel(CanvasEmpty.java:52) at betterquesting.api2.client.gui.panels.CanvasEmpty.drawPanel(CanvasEmpty.java:52) at betterquesting.api2.client.gui.panels.CanvasTextured.drawPanel(CanvasTextured.java:27) at betterquesting.api2.client.gui.GuiScreenCanvas.drawPanel(GuiScreenCanvas.java:200) at betterquesting.api2.client.gui.GuiScreenCanvas.func_73863_a(GuiScreenCanvas.java:115) at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:381)

-- Screen render details -- Details: Screen name: betterquesting.client.gui2.editors.nbt.GuiItemSelection Mouse location: Scaled: (431, 146). Absolute: (1295, 563) Screen size: Scaled: (640, 334). Absolute: (1920, 1001). Scale factor of 3

-- Affected level -- Details: Level name: MpServer All players: 1 total; [GCEntityClientPlayerMP['Freebi85'/914, l='MpServer', x=899.83, y=67.00, z=10121.39]] Chunk stats: MultiplayerChunkCache: 729, 729 Level seed: 0 Level generator: ID 00 - default, ver 1. Features enabled: false Level generator options: Level spawn location: World: (870,67,10120), Chunk: (at 6,4,8 in 54,632; contains blocks 864,0,10112 to 879,255,10127), Region: (1,19; contains chunks 32,608 to 63,639, blocks 512,0,9728 to 1023,255,10239) Level time: 15989480 game time, 9659 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 100 total; [EntityBuckKiko['Kiko Buck'/768, l='MpServer', x=896.91, y=79.00, z=10058.97], EntityRamFriesian['Friesian Ram'/770, l='MpServer', x=897.02, y=72.00, z=10067.62], EntityDoeFainting['Fainting Doe'/771, l='MpServer', x=905.55, y=67.48, z=10133.55], EntityDoeFainting['Fainting Doe'/772, l='MpServer', x=905.55, y=67.18, z=10133.55], EntityWolf['Wolf'/773, l='MpServer', x=908.50, y=64.00, z=10164.50], EntityTravelingMerchant['Traveling Merchant'/105737, l='MpServer', x=888.40, y=68.00, z=10103.48], EntityEweFriesian['Friesian Ewe'/783, l='MpServer', x=920.50, y=74.00, z=10104.89], EntityChameleon['Chameleon'/784, l='MpServer', x=906.35, y=69.95, z=10097.41], EntityMotherSpider['Mother Spider'/168471, l='MpServer', x=822.70, y=46.00, z=10166.30], EntityBabySpider['Baby Spider'/168474, l='MpServer', x=826.65, y=49.00, z=10166.07], EntityBabySpider['Baby Spider'/168475, l='MpServer', x=826.04, y=49.00, z=10165.25], EntityItem['item.item.dyePowder.purple'/157208, l='MpServer', x=917.49, y=31.00, z=10094.99], EntitySupportCreeper['Support Creeper'/166681, l='MpServer', x=822.50, y=42.00, z=10166.50], EntityBabySpider['Baby Spider'/168473, l='MpServer', x=822.78, y=46.70, z=10166.24], EntityBabySpider['Baby Spider'/168476, l='MpServer', x=825.18, y=49.00, z=10164.05], EntityTreasureSlime['Treasure Slime'/166685, l='MpServer', x=864.26, y=14.00, z=10060.76], EntityBabySkeleton['Baby Skeleton'/171298, l='MpServer', x=850.50, y=28.00, z=10073.50], EntityBullFriesian['Friesian Bull'/807, l='MpServer', x=941.13, y=67.23, z=10090.95], EntityBullHereford['Hereford Bull'/808, l='MpServer', x=941.43, y=67.20, z=10092.78], EntityBat['Bat'/169514, l='MpServer', x=823.25, y=24.10, z=10160.75], EntityBuckFainting['Fainting Buck'/809, l='MpServer', x=933.80, y=72.00, z=10089.83], GCEntityClientPlayerMP['Freebi85'/914, l='MpServer', x=899.83, y=67.00, z=10121.39], EntityCowFriesian['Friesian Cow'/810, l='MpServer', x=942.91, y=67.31, z=10091.80], EntityBat['Bat'/161065, l='MpServer', x=836.92, y=22.14, z=10149.27], EntityBat['Bat'/169519, l='MpServer', x=829.66, y=27.10, z=10169.51], EntityBat['Bat'/169516, l='MpServer', x=819.91, y=27.28, z=10162.74], EntityBabySpider['Baby Spider'/160813, l='MpServer', x=943.50, y=55.00, z=10080.50], EntityBat['Bat'/169522, l='MpServer', x=835.66, y=32.75, z=10080.32], EntityGroveSprite['Grove Sprite'/166963, l='MpServer', x=954.23, y=71.00, z=10178.55], EntityBabySpider['Baby Spider'/160817, l='MpServer', x=942.65, y=54.00, z=10082.39], PoisonousLibelle['Poisonous Libelle'/823, l='MpServer', x=948.25, y=62.00, z=10064.25], PoisonousLibelle['Poisonous Libelle'/824, l='MpServer', x=948.30, y=62.00, z=10064.25], PoisonousLibelle['Poisonous Libelle'/825, l='MpServer', x=948.25, y=62.00, z=10064.74], PoisonousLibelle['Poisonous Libelle'/826, l='MpServer', x=948.75, y=62.00, z=10064.75], PoisonousLibelle['Poisonous Libelle'/827, l='MpServer', x=948.34, y=62.00, z=10064.75], PoisonousLibelle['Poisonous Libelle'/828, l='MpServer', x=948.75, y=62.00, z=10064.75], PoisonousLibelle['Poisonous Libelle'/829, l='MpServer', x=948.75, y=62.00, z=10064.75], PoisonousLibelle['Poisonous Libelle'/830, l='MpServer', x=948.75, y=62.00, z=10064.75], VengeanceSpirit['Vengeance Spirit'/170812, l='MpServer', x=831.56, y=11.00, z=10153.64], EntityGroveSprite['Grove Sprite'/167240, l='MpServer', x=935.19, y=70.00, z=10061.51], EntitySpider['Spider'/157007, l='MpServer', x=972.96, y=26.00, z=10125.00], EntityBat['Bat'/166487, l='MpServer', x=856.10, y=14.95, z=10077.98], EntitySupportCreeper['Support Creeper'/169049, l='MpServer', x=958.50, y=25.00, z=10074.50], EntitySkeleton['Skeleton'/172397, l='MpServer', x=979.50, y=21.00, z=10192.50], EntityZombie['Zombie'/172403, l='MpServer', x=921.70, y=20.00, z=10191.51], EntityZombie['Zombie'/157058, l='MpServer', x=963.50, y=24.00, z=10122.50], EntityCreeper['Creeper'/157056, l='MpServer', x=962.50, y=24.00, z=10121.50], EntityBat['Bat'/160129, l='MpServer', x=832.49, y=22.18, z=10132.98], EntitySpider['Spider'/157063, l='MpServer', x=941.56, y=29.00, z=10077.69], EntitySkeletonWarrior['Skeleton Warrior'/157831, l='MpServer', x=955.50, y=23.00, z=10056.50], EntitySupportCreeper['Support Creeper'/162955, l='MpServer', x=921.15, y=20.00, z=10191.48], EntityZombie['Zombie'/172172, l='MpServer', x=966.50, y=24.00, z=10124.50], EntityCreeper['Creeper'/172173, l='MpServer', x=964.50, y=24.00, z=10123.50], EntityBat['Bat'/164752, l='MpServer', x=833.26, y=23.03, z=10142.24], EntityMotherSpider['Mother Spider'/124824, l='MpServer', x=836.30, y=20.00, z=10141.32], EntitySkeleton['Skeleton'/154280, l='MpServer', x=945.50, y=30.00, z=10073.50], EntitySkeleton['Skeleton'/166583, l='MpServer', x=941.50, y=29.85, z=10061.50], EntityCreeper['Creeper'/166580, l='MpServer', x=884.16, y=15.00, z=10167.50], EntitySkeleton['Skeleton'/166584, l='MpServer', x=939.71, y=31.00, z=10062.51], EntitySpider['Spider'/166585, l='MpServer', x=941.50, y=30.00, z=10061.50], VengeanceSpirit['Vengeance Spirit'/171453, l='MpServer', x=820.41, y=19.00, z=10167.25], EntityTreasureSlime['Treasure Slime'/146627, l='MpServer', x=879.12, y=33.00, z=10047.69], EntityBat['Bat'/161735, l='MpServer', x=844.54, y=26.67, z=10083.56], EntityDonkey['Donkey'/710, l='MpServer', x=857.60, y=72.00, z=10064.43], EntitySkeleton['Skeleton'/145102, l='MpServer', x=956.50, y=32.00, z=10055.50], EntitySkeleton['Skeleton'/168143, l='MpServer', x=928.50, y=20.00, z=10104.50], EntityBabySpider['Baby Spider'/169682, l='MpServer', x=923.07, y=47.00, z=10073.13], EntityBabySpider['Baby Spider'/169683, l='MpServer', x=923.77, y=47.00, z=10073.16], EntityMotherSpider['Mother Spider'/169680, l='MpServer', x=924.07, y=47.00, z=10074.15], EntityBabySpider['Baby Spider'/169681, l='MpServer', x=924.17, y=47.70, z=10074.14], EntityCrystal['item.item.itemrockcrystalsimple'/724, l='MpServer', x=875.27, y=65.00, z=10136.52], EntityCrystal['item.item.itemrockcrystalsimple'/725, l='MpServer', x=875.13, y=65.00, z=10136.67], EntityChameleon['Chameleon'/166359, l='MpServer', x=956.50, y=77.00, z=10172.50], EntityCrystal['item.item.itemrockcrystalsimple'/726, l='MpServer', x=875.13, y=65.00, z=10136.58], EntityBabySpider['Baby Spider'/169684, l='MpServer', x=924.52, y=47.00, z=10073.09], EntityCrystal['item.item.itemrockcrystalsimple'/727, l='MpServer', x=875.15, y=65.00, z=10136.62], EntityBabySpider['Baby Spider'/169685, l='MpServer', x=923.01, y=47.00, z=10073.89], EntityCrystal['item.item.itemrockcrystalsimple'/728, l='MpServer', x=875.31, y=65.00, z=10136.51], EntityCrystal['item.item.itemrockcrystalsimple'/729, l='MpServer', x=875.37, y=65.00, z=10136.60], EntityCrystal['item.item.itemrockcrystalsimple'/730, l='MpServer', x=875.52, y=65.00, z=10136.68], EntityChameleon['Chameleon'/166360, l='MpServer', x=871.50, y=73.00, z=10065.50], EntityCrystal['item.item.itemrockcrystalsimple'/731, l='MpServer', x=875.44, y=65.00, z=10136.76], EntityCrystal['item.item.itemrockcrystalsimple'/732, l='MpServer', x=875.44, y=65.00, z=10136.76], EntityZombie['Zombie'/733, l='MpServer', x=877.30, y=13.96, z=10172.50], EntityGroveSprite['Grove Sprite'/171743, l='MpServer', x=946.19, y=65.00, z=10174.52], EntityHedgehog['Hedgehog'/734, l='MpServer', x=869.04, y=69.00, z=10185.32], EntityHedgehog['Hedgehog'/735, l='MpServer', x=868.33, y=70.00, z=10181.90], EntityChameleon['Chameleon'/164843, l='MpServer', x=833.50, y=65.00, z=10192.50], EntityZombie['Zombie'/747, l='MpServer', x=884.29, y=38.00, z=10056.50], EntityZombie['Zombie'/748, l='MpServer', x=891.07, y=55.00, z=10061.70], EntityZombieVillager['Zombie Villager'/749, l='MpServer', x=944.46, y=55.00, z=10080.72], EntityEweFriesian['Friesian Ewe'/753, l='MpServer', x=883.05, y=61.00, z=10064.80], EntityDoeFainting['Fainting Doe'/754, l='MpServer', x=891.35, y=72.00, z=10069.44], EntitySowOldSpot['Old Spot Sow'/755, l='MpServer', x=895.56, y=72.00, z=10064.55], EntityMinecartEmpty['entity.MinecartRideable.name'/757, l='MpServer', x=891.43, y=67.00, z=10178.15], EntitySkeleton['Skeleton'/166137, l='MpServer', x=954.50, y=33.00, z=10053.50], EntityZombie['Zombie'/764, l='MpServer', x=890.47, y=57.00, z=10059.76], EntityBrainyZombie['Angry Zombie'/765, l='MpServer', x=900.48, y=48.00, z=10061.80], EntityZombie['Zombie'/766, l='MpServer', x=896.51, y=51.00, z=10059.76], EntityBrainyZombie['Angry Zombie'/767, l='MpServer', x=904.47, y=47.00, z=10071.20]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.func_72914_a(WorldClient.java:420) at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2740) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:418) at net.minecraft.client.main.Main.main(SourceFile:123) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

-- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_51, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 2528323320 bytes (2411 MB) / 8000634880 bytes (7630 MB) up to 10260316160 bytes (9785 MB) JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx11008m -Xms256m -XX:PermSize=256m IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94 FML: MCP 9.42 Powered by Forge 14.23.5.2772 238 mods loaded, 238 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

Funwayguy commented 6 years ago

As the error state: "Invalid item stack "2xtile.air@0" registered to creative search tab!"

You'd need to take this up with the Thermal Dynamics dev(s) on why an AIR item was registered inside the creative search tab.

Freebi85 commented 6 years ago

I know, I did that. And this was the answer:

"Their search needs to not be irresponsible. They are explicitly catching the error, doing nothing, and then complaining. If they are doing anything where an error can occur and they clearly know it can, then it's something they are doing.

This is on them to solve."

Funwayguy commented 6 years ago

So by their logic I'm responsible for handling a broken item they registered just because my mod pre-emtively pointed it out and could haved ignored it but chose not to in order to have the user responsibly report the potential mistake and prevent crashes elsewhere (Forge can and will crash if this item is queried by the Ore Dictionary which I do use during search).

TLDR: No I won't be "fixing" anything on my end nor will I be outright ignoring their broken item error. There is no practical reason that item should be registered there.

Freebi85 commented 6 years ago

And their answer again:

"So they are throwing a fatal exception for an empty item stack being in a creative tab, the crash contains basically no information, and is caught internally in BQ then re-thrown causing an extremely confusing crash report. This is definitely a case they need to handle, an empty stack is NOT a fatal error."

Let's just leave it be. Its okay... Close.

KingLemming commented 6 years ago

So here's the thing - you are taking a quirk (I believe this occurs when mods get uninstalled and cover data gets shredded) and turning it INTO a fatal error when it is in fact a perfectly valid fallback state due to ItemStack::isEmpty().

As I mentioned on our issue tracker:

The stack is simply empty. It's not actually broken, it can still be manipulated later on and the OreDictionary ABSOLUTELY DOES NOT CRASH with our mod installed.

We would know, we have the Lexicon and do more OreDict manipulation than basically anyone else.

This error is entirely of your own making.

Funwayguy commented 6 years ago

This empty itemstack was directly obtained from your item class from the registry. Nothing was shredded or uninstalled or even involved an inventory.

I know for a fact the OreDictionary lookup can crash when passed an "empty" stack, broken or not because that happened several times already to other users before I added these pre-checks. The OD crash provides even less info than I do which made figuring out whoes item broke it impossible before.

If you want me to make this a non-fatal error then so be it but I still don't see this as a safe, standard, or practical thing to be doing with the creative tabs.

KingLemming commented 6 years ago

So here's the thing. It's layered. An "air" cover means that a block improperly reported its state to the cover system or otherwise can't be turned into one. However, due to the way things work, we have to roll with it, because funny enough, it can still be changed later. Some blocks do weird stuff.

Good news is that it gets filtered and won't cause crashes. Give it a try. It won't. ;) And these aren't OreDict'd in any way.

So yes, this should be non-fatal. Feel free to throw a warning up if you like, but the only reason it's crashing is because you're forcing one based on your own perception of what might cause a crash in the future.