Posted February 11, 20214 yr Hey everyone ! I have problems to run my mod outside of dev env. It is unable to reach my Util class and I'im unable to find why. I hope some people know where this comes from, and if you need more info i'll gladly give it ^^ Here are logs/image/github repo: ---- Minecraft Crash Report ---- // Don't do that. Time: 11/02/21 18:30 Description: Exception in server tick loop java.lang.NoClassDefFoundError: Could not initialize class fr.bastoup.bperipherals.util.Util at fr.bastoup.bperipherals.util.blocks.BlockOrientable.func_196258_a(BlockOrientable.java:26) ~[?:1.1.0] {re:classloading} at fr.bastoup.bperipherals.util.blocks.BlockPeripheral.func_196258_a(BlockPeripheral.java:24) ~[?:1.1.0] {re:classloading} at net.minecraft.item.BlockItem.func_195945_b(BlockItem.java:105) ~[?:?] {re:classloading} at net.minecraft.item.BlockItem.func_195942_a(BlockItem.java:51) ~[?:?] {re:classloading} at net.minecraft.item.BlockItem.func_195939_a(BlockItem.java:39) ~[?:?] {re:classloading} at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:624) ~[?:?] {re:classloading} at net.minecraft.item.ItemStack.func_196084_a(ItemStack.java:184) ~[?:?] {re:classloading,xf:fml:forge:filled_map.4} at net.minecraft.server.management.PlayerInteractionManager.func_219441_a(PlayerInteractionManager.java:350) ~[?:?] {re:classloading} at net.minecraft.network.play.ServerPlayNetHandler.func_184337_a(ServerPlayNetHandler.java:958) ~[?:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.func_148833_a(SourceFile:36) ~[?:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket.func_148833_a(SourceFile:10) ~[?:?] {re:classloading} at net.minecraft.network.PacketThreadUtil.lambda$checkThreadAndEnqueue$0(PacketThreadUtil.java:34) ~[?:?] {re:classloading,xf:OptiFine:default} at net.minecraft.network.PacketThreadUtil$$Lambda$6122/817328133.run(Unknown Source) ~[?:?] {} at net.minecraft.util.concurrent.TickDelayedTask.run(SourceFile:18) ~[?:?] {re:classloading} at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213166_h(ThreadTaskExecutor.java:172) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default} at net.minecraft.util.concurrent.RecursiveEventLoop.func_213166_h(SourceFile:23) ~[?:?] {re:classloading} at net.minecraft.server.MinecraftServer.func_213166_h(MinecraftServer.java:734) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.func_213166_h(MinecraftServer.java:159) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213168_p(ThreadTaskExecutor.java:134) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default} at net.minecraft.server.MinecraftServer.func_213205_aW(MinecraftServer.java:717) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.func_213168_p(MinecraftServer.java:711) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213160_bf(ThreadTaskExecutor.java:115) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default} at net.minecraft.server.MinecraftServer.func_213202_o(MinecraftServer.java:696) ~[?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:646) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$startServer$0(MinecraftServer.java:232) [?:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer$$Lambda$5507/1039865382.run(Unknown Source) [?:?] {} at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51] {} GitHub files: https://github.com/BastouP411/bperipherals/blob/master/src/main/java/fr/bastoup/bperipherals/util/Util.java https://github.com/BastouP411/bperipherals/blob/master/src/main/java/fr/bastoup/bperipherals/util/blocks/BlockOrientable.java Thanks ^^ Edited February 11, 20214 yr by BastouP
February 11, 20214 yr Author 6 minutes ago, diesieben07 said: Couldn't reproduce this when I built your repository and installed the mod. Post the debug.log you got. debug.log I should also mention that I have optifine installed
February 11, 20214 yr Author Oh I did not understand that I needed to do that ^^ As for the handling do you have an example of what you mean ? ^^
February 11, 20214 yr Author 49 minutes ago, diesieben07 said: https://github.com/BastouP411/bperipherals/blob/a587095df61a68129810c6420f58a47ed9612b91/src/main/java/fr/bastoup/bperipherals/peripherals/database/TileDatabase.java#L70-L77 TOCTOU issue between exists() and createNewFile. Result of mkdirs and createNewFile not checked (they return false on failure!) IOException silently ignored. Generally I would highly recommend you use to use the more modern and safe java.nio Path APIs instead of the legacy java.io.File APIs, they for example throw exceptions instead of just returning false on failure. https://github.com/BastouP411/bperipherals/blob/a587095df61a68129810c6420f58a47ed9612b91/src/main/java/fr/bastoup/bperipherals/peripherals/database/TileDatabase.java#L78 markDirty called from outside the main thread. This is not allowed. You cannot interact with most Minecraft code from outside the main thread. You have several places that do this (e.g. getDiskId just accesses the inventory, which again is not threadsafe). https://github.com/BastouP411/bperipherals/blob/9395612e02c4cb9676bb2a0ccbe3e97861a5aa2d/src/main/java/fr/bastoup/bperipherals/util/Util.java#L133-L136 NoSuchFieldException declared for no reason. IllegalAccessException thrown instead of handled properly inside the method. https://github.com/BastouP411/bperipherals/blob/7421a353fdc575cd61db57bf5770c6d0bb4682b7/src/main/java/fr/bastoup/bperipherals/peripherals/database/PeripheralDatabase.java#L68-L75 Exceptions logged but then ignored. If they happen, file.getPath below will throw NullPointerException, because file is null (IDE warns you about this, listen to your IDE!). These exceptions should not show up here in the first place, see point above. Need I continue? Sorry again but I'm not really sure how to handle exceptions tat should not happen, like the ones with the reflection. Is there a "good" way of dealing with them istead of ignoring them ?
February 11, 20214 yr 1 hour ago, BastouP said: Is there a "good" way of dealing with them istead of ignoring them ? Quote Don’t catch fatal exceptions; nothing you can do about them anyway, and trying to generally makes it worse. Fix your code so that it never triggers a boneheaded exception – an “index out of range” exception should never happen in production code. Avoid vexing exceptions whenever possible by calling the “Try” versions of those vexing methods that throw in non-exceptional circumstances. If you cannot avoid calling a vexing method, catch its vexing exceptions. Always handle exceptions that indicate unexpected exogenous conditions; generally it is not worthwhile or practical to anticipate every possible failure. Just try the operation and be prepared to handle the exception. https://ericlippert.com/2008/09/10/vexing-exceptions/ File handling is exogenous. If an exception occurs, clean up what you can (eg. if you successfully opened a file, close it), then die with a fatal exception. Currently you're catching the exception, logging it, and continuing as if nothing bad happened (and thus, generally make things worse). Edited February 11, 20214 yr by Draco18s Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
February 11, 20214 yr Author 29 minutes ago, Draco18s said: https://ericlippert.com/2008/09/10/vexing-exceptions/ File handling is exogenous. If an exception occurs, clean up what you can (eg. if you successfully opened a file, close it), then die with a fatal exception. Currently you're catching the exception, logging it, and continuing as if nothing bad happened (and thus, generally make things worse). So what I do is like catching it, closing the files, and throw something like a runtime exception, or do I let it being thrown ? Edited February 11, 20214 yr by BastouP
February 11, 20214 yr Author 3 minutes ago, diesieben07 said: Well, in your case you should probably convert it to some kind of exception to be thrown to the Lua program running on the computercraft computer, so that that program can handle the error. So the IO exceptions etc. should propagate all the way trough the intermediate functions, only to be caught in the lua function ?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.