Posted May 9, 201411 yr Hi, have been stuck for a while now on my mod, unable to test it to see if the block added is rendering correctly, namely because the act of loading the model crashes the game during PreInit, giving me this error: [02:54:29] [Client thread/ERROR] [FML]: mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized FML{7.2.156.1060} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.1.1060.jar) Unloaded->Constructed->Pre-initialized Forge{10.12.1.1060} [Minecraft Forge] (forgeSrc-1.7.2-10.12.1.1060.jar) Unloaded->Constructed->Pre-initialized financiacraft{0.0.1} [Financiacraft] (bin) Unloaded->Constructed->Errored [02:54:29] [Client thread/ERROR] [FML]: The following problems were captured during this phase [02:54:29] [Client thread/ERROR] [FML]: Caught exception from financiacraft net.minecraftforge.client.model.ModelFormatException: IO Exception reading model format at net.minecraftforge.client.model.obj.WavefrontObject.<init>(WavefrontObject.java:60) ~[WavefrontObject.class:?] at net.minecraftforge.client.model.obj.ObjModelLoader.loadInstance(ObjModelLoader.java:27) ~[ObjModelLoader.class:?] at net.minecraftforge.client.model.AdvancedModelLoader.loadModel(AdvancedModelLoader.java:65) ~[AdvancedModelLoader.class:?] at net.professordey.financiacraft.CustomTESR.<init>(CustomTESR.java:18) ~[CustomTESR.class:?] at net.professordey.financiacraft.Financiacraft.preinit(Financiacraft.java:63) ~[Financiacraft.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05] ... Caused by: java.io.FileNotFoundException: financiacraft:models/CoinPressBody.obj at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:71) ~[simpleReloadableResourceManager.class:?] at net.minecraftforge.client.model.obj.WavefrontObject.<init>(WavefrontObject.java:55) ~[WavefrontObject.class:?] ... 41 more For a time I struggled to work out what was wrong, but I eventually determined that it couldn't find the file because it ended with ".obj". When I removed that, the file was located without error, but I then get an immediate error from the AdvancedModLoader itself: [02:59:21] [Client thread/ERROR] [FML]: Fatal errors were detected during the transition from PREINITIALIZATION to INITIALIZATION. Loading cannot continue [02:59:21] [Client thread/ERROR] [FML]: mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized FML{7.2.156.1060} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.1.1060.jar) Unloaded->Constructed->Pre-initialized Forge{10.12.1.1060} [Minecraft Forge] (forgeSrc-1.7.2-10.12.1.1060.jar) Unloaded->Constructed->Pre-initialized financiacraft{0.0.1} [Financiacraft] (bin) Unloaded->Constructed->Errored [02:59:21] [Client thread/ERROR] [FML]: The following problems were captured during this phase [02:59:21] [Client thread/ERROR] [FML]: Caught exception from financiacraft java.lang.IllegalArgumentException: The resource name is not valid at net.minecraftforge.client.model.AdvancedModelLoader.loadModel(AdvancedModelLoader.java:55) ~[AdvancedModelLoader.class:?] at net.professordey.financiacraft.CustomTESR.<init>(CustomTESR.java:18) ~[CustomTESR.class:?] at net.professordey.financiacraft.Financiacraft.preinit(Financiacraft.java:63) ~[Financiacraft.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05] So now it's saying the resource name is invalid. Does anyone know what it's actually getting upset about and how to get around it? My model is located here: src\main\resources\assets\financiacraft\models\CoinPressBody.obj Edit: Oops, forget to include the TESR class package net.professordey.financiacraft; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; public class CustomTESR extends TileEntitySpecialRenderer{ private IModelCustom theModel; private ResourceLocation theTexture; private ResourceLocation modelnam; public CustomTESR(String modelname){ modelnam = new ResourceLocation("financiacraft", "models/" + modelname); theModel = AdvancedModelLoader.loadModel(modelnam); theTexture = new ResourceLocation("financiacraft", modelname +".png"); } @Override public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { bindTexture(theTexture); theModel.renderAll(); } }
May 9, 201411 yr Hi From AdvancedModelLoader:: public static IModelCustom loadModel(ResourceLocation resource) throws IllegalArgumentException, ModelFormatException { String name = resource.getResourcePath(); int i = name.lastIndexOf('.'); if (i == -1) { FMLLog.severe("The resource name %s is not valid", resource); throw new IllegalArgumentException("The resource name is not valid"); } It thinks your resource name is not valid because it doesn't contain a period '.' Are you sure that the reason that it couldn't originally find the file was because it ended in .obj? What did you change to fix it? (i.e. did you rename the file, the resource name, or both?) -TGG
May 9, 201411 yr Author Hey, All I did to fix it was remove the ".obj" part of the new ResourceLocation string, and then I assumed it was fixed because it moved on to the next line, the loadModel call. When the ResourceLocation string contains the ".obj", it can't find the file for some reason, despite that being the file's name. Could it be not seeing the extension on the file itself due to a permissions issue or something? Honestly don't know what else it could be
May 10, 201411 yr Hey, All I did to fix it was remove the ".obj" part of the new ResourceLocation string, and then I assumed it was fixed because it moved on to the next line, the loadModel call. When the ResourceLocation string contains the ".obj", it can't find the file for some reason, despite that being the file's name. Could it be not seeing the extension on the file itself due to a permissions issue or something? Honestly don't know what else it could be Hi Looking at the error logs, when you removed the ".obj", it actually failed earlier than before, so removing ".obj" is probably not a fix at all. It seems more likely to me that you've just put the .obj in the wrong folder, or the name doesn't match exactly (upper/lower case is important) Curious that the URL resource = AdvancedModelLoader.class.getResource(resourceName); appears to work, but the loadObjModel(resource.openStream()); doesn't. You could try putting a breakpoint into the WaveFront constructor, the fileName and URL resource parameters might tell you where it's looking. Alternatively this has worked for me with textures, might be worth a try. http://www.minecraftforge.net/forum/index.php/topic,11963.0.html -TGG
May 10, 201411 yr You should try changing modelnam = new ResourceLocation("financiacraft", "models/" + modelname); to modelnam = new ResourceLocation("financiacraft", "models/" + modelname + ".obj");
May 10, 201411 yr Author That's what I originally had it as, and it said it couldn't find the file. if I could just figure out how the hell the resource domain is resolved I could probably figure out where it's expecting the file to be, since for textures it automatically jumps to the modname/textures/blocks (|| items) folder, so I can't tell if what it's resolving the domain to for the source path I might be able to fix it, but I can't see where the code leads in that regard (Having looked through the Wavefront Object Loader class to see about getting the IO stream directly)
May 10, 201411 yr Your path is like this: assets/financiacraft/models/modelName.obj Make sure the model is in that place. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
May 12, 201411 yr Author As I was unsure where the code was aiming, I placed duplicates at: assets/financiacraft/[modelname].obj assets/financiacraft/models/[modelname].obj assets/financiacraft/models/tileentities/[modelname].obj Does anyone have a way to convert the obj to the raw code/io stream minecraft uses? I'll do it manually if I must but there's going to be a fair few of these models, so doing it manually would definitely put a damper of developing the code.
May 12, 201411 yr As I was unsure where the code was aiming, I placed duplicates at: assets/financiacraft/[modelname].obj assets/financiacraft/models/[modelname].obj assets/financiacraft/models/tileentities/[modelname].obj if I could just figure out how the hell the resource domain is resolved I could probably figure out where it's expecting the file to be, Did you try the technique in this link I posted earlier? http://www.minecraftforge.net/forum/index.php/topic,11963.0.html -TGG
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.