Jump to content

[1.8] NullPointerException on Rendering


kandivia

Recommended Posts

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"

 

Link to comment
Share on other sites

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

 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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	
}

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.