Posted April 26, 20169 yr Hey Guys, I'm just learning modding for 1.8.9 I want to create a simple BlockOre with an EnumOreType with 3 Types of Ores. Everything works, except the in Inventory/Hand rendering. I get the following error: [23:23:45] [Client thread/ERROR] [FML]: Model definition for location mattech:ore#inventory not found i googled and tried it for days now but all i found was "Your json files have to be in the wrong place", but i think they are right... Please help me. Thanks. Full github repository: https://github.com/M4tt1z1n/Mattech Like i said the Block is BlockOre with EnumOreType Mattizin
April 27, 20169 yr Author Hey, Does nobody have an idea? Or do you need further information? Mattizin
April 27, 20169 yr Im not sure if it is part of the problem, but i am always using lower case letters for the json stuff
April 27, 20169 yr Author Mhh. In my opinion when i Register the Blocks(subblocks) like this with the name + "Ore" i should be able to reach the json file with name+Ore or im wrong? for(int i = 0; i < EnumOreType.values().length; i++) { registerRender(ModBlocks.ore, i, EnumOreType.values()[i].getName() + "Ore"); }
April 27, 20169 yr And you cant register one block three times with different renderer, how should minecraft know which to use? You need to instantiate ur ore blocks as 3 different ones
April 27, 20169 yr Author Yeah, thought github link was enough, but here it is: public static void registerRender(Block block, int meta, String fileName) { Item item = Item.getItemFromBlock(block); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, meta, new ModelResourceLocation(modid + ":" + fileName, "inventory")); System.out.println(modid + ":" + fileName); }
April 27, 20169 yr yeah sorry i had a total brainfart (pls ignore my words about u cant register them, if you are using the metadata correctly you can) im still not sure what the problem is, but i feel like its bc the capital letters, did you try it?
April 27, 20169 yr Author So i changed every unlocalizedName (of the oreBlock), jsonfiles (models + blockstates) to lowercase... Still get this: [20:59:31] [Client thread/ERROR] [FML]: Model definition for location mattech:ore#inventory not found See latest Github commit https://github.com/M4tt1z1n/Mattech for my changes. I have no clue what im doing wrong here...
April 27, 20169 yr By default, the only model loaded for an Item (including an ItemBlock ) is the one with its registry name ( Item#getRegistryName ). You're telling Minecraft to use different models for each metadata value of the Item form of ModBlocks.ore , but you never tell it to load any of these models. To tell Minecraft to load a model other than the default one, call ModelBakery.registerItemVariants in preInit. Each argument is either the location of an item model or the location and variant of a blockstates file to load the model from. Don't use ItemModelMesher#register , use ModelLoader.setCustomModelResourceLocation (for metadata-based models, will call ModelBakery.registerItemVariants for you) or ModelLoader.setCustomMeshDefinition (for arbitrary ItemStack to ModelResourceLocation mapping) in preInit. Never use getUnlocalizedName().substring(5) anywhere in your code. Unlocalised names can change at any time, registry names are IDs and must not change. As I said before, the default model loaded for an Item is the one with its registry name, unlocalised names have nothing to do with models. I suggest using the registry name system to register your Block s and Item s: Call setRegistryName to set the registry name, then call the single argument overload of GameRegistry.registerBlock / registerItem to register the Block / Item . Do not use unlocalised names as registry names, but you can use registry names as unlocalised names (this will include your mod ID in the unlocalised name, which will avoid conflicts with other mods). Using registry names now will make it much easier to update to the new registry system in 1.9. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
April 27, 20169 yr Author Ok i think i got the main point of your reply, but can you give me an example how to use the modelbakery for item rendering for blocks with meta? And how to use registry names instead of unlocalized Names?
April 27, 20169 yr See here for an example of what I'm talking about. registerBlockItemModelForMeta (which you can see in the same class) is essentially just a wrapper around ModelLoader.setCustomModelResourceLocation . This uses a variant of the block's blockstates file (uses Forge's blockstates format) rather than an item model. To use an item model, use a ModelResourceLocation with the model's location and the "inventory" variant. Use the getRegistryName method to get the registry name of an Item or Block . Most of my mod's items use this method to set their registry and unlocalised names, but some (e.g. Records) have completely separate unlocalised and registry names that they set manually. I use a similar method for blocks. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
April 27, 20169 yr Author OK i tried it lookin into your sourcecode and understand it a bit mroe, but i get the same error still.. latest changes are online: https://github.com/M4tt1z1n/Mattech I think im doing something completely wrong here
April 27, 20169 yr ModelLoader.setCustomModelResourceLocation must be called in preInit, as I said in my previous post. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
April 27, 20169 yr Author Thank you, that works now. I just have to rewrite my method to register the blockrenderer for the normal blocks(not meta) because mc crashes when i use my method at the moment when it is loaded in pre init. I commented it out to test only the meta Block and that worked
April 27, 20169 yr The RenderItem instance is created between preInit and init, so you can't access it in preInit. The solution is to use the ModelLoader methods instead of the ItemModelMesher methods. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
April 27, 20169 yr Author Thank you, i understood the conzept now and with helpof your github project i can reproduce it. Thank you all
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.