Posted February 18, 201510 yr Hello, I cannot seem to be able to render a simple item/block in forge 1.8-11.14.0.1299 using eclipse I wrote a quick test mod to narrow down the problem. The client crashes at the following method: public static void registerRender(Item item){ Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } with the corresponding crash details: http://pastebin.com/0XSA7642 I have both a model file in "src\main\resources\assets\testmod\models\item" called "test_item.json" and a texture in "src\main\resources\assets\testmod\textures\items" called "test_item.png"
February 18, 201510 yr Not enough code. Follow the stacktrace. You are probably trying to register renderer to not yet initialized item/block. 1.7.10 is no longer supported by forge, you are on your own.
February 18, 201510 yr Author Main Class: package com.kandivia.testmod.main; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import com.kandivia.testmod.init.RegisterItems; import com.kandivia.testmod.proxy.CommonProxy; @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION) public class MainRegistry{ @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS) public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent preEvent){ RegisterItems.init(); RegisterItems.register(); } @EventHandler public void init(FMLPreInitializationEvent Event){ proxy.registerRenders(); } @EventHandler public void postInit(FMLPreInitializationEvent postEvent){ } } Item Register Class: package com.kandivia.testmod.init; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; import com.kandivia.testmod.main.Reference; public class RegisterItems { public static Item test_item; public static void init(){ test_item = new Item().setUnlocalizedName("test_item"); } public static void register(){ GameRegistry.registerItem(test_item, test_item.getUnlocalizedName().substring(5)); } public static void registerRenders(){ registerRender(test_item); } public static void registerRender(Item item){ Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } } Proxy Classes: package com.kandivia.testmod.proxy; import com.kandivia.testmod.init.RegisterItems; public class ClientProxy extends CommonProxy{ @Override public void registerRenders(){ RegisterItems.registerRenders(); } } package com.kandivia.testmod.proxy; public class CommonProxy { public void registerRenders(){ } } Reference Class: package com.kandivia.testmod.main; public class Reference { public static final String MOD_ID = "testmod"; public static final String MOD_NAME = "Test Mod"; public static final String VERSION = "1.0"; public static final String CLIENT_PROXY_CLASS = "com.kandivia.testmod.proxy.ClientProxy"; public static final String SERVER_PROXY_CLASS = "com.kandivia.testmod.proxy.CommonProxy"; } Rendering is in the init method and should run well after Item registers in the preInit method
February 19, 201510 yr 1. Renderers should be in load(). (you are good here). 2. Are you sure you know how .substring(index) works? You are taking String from 5 index to end. (That will cause bad texture naming). I am sorry, I don't see anything. My code looks very similar. ;c P.S: Be on the safe side - check for null in registerRender(Item item) 1.7.10 is no longer supported by forge, you are on your own.
February 19, 201510 yr Author item.getUnlocalizedName().substring(5) equates to "testitem" as doubled checked with a simple print statement So it should be the same as: new ModelResourceLocation("testmod:testitem", "inventory"); Running the game is just fine without running the render code. Trying to check for null atm.
February 19, 201510 yr This would not be directly related with your issue, but you should import and access Minecraft only in client proxy or client-only class. I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP) II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.
February 19, 201510 yr Author Narrowed the problem down futher today. Seems like i can't reference testitem after preInit? Will Crash: public static void registerRender(Item item){ String name = item.getUnlocalizedName().substring(5); } No Crash: public static void registerRender(Item item){ String name = "testmod:testitem"; } Will Crash: public static void registerRender(Item item){ ModelResourceLocation loc = new ModelResourceLocation("testmod:testitem", "inventory"); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, loc); // Crash on this line }
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.