Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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"

 

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.

  • 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

 

 

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.

  • 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.

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.

  • 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.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.