Jump to content

Crash upon ItemSeeds initialization


ModMCdl

Recommended Posts

Heyo everyone! I'm trying to create a new crop for an upcoming mod of mine. I'm pretty good with java and have modded a bit before, but this being my first time delving into crops and such, I'm at a bit of a loss. I'm getting an error saying that there's no registry name set for my "ItemSeeds" which I can't find anywhere. I have "dpetal" set as my "ItemSeeds," and I think I registered dpetal properly, but apparently I didn't. Can someone help me here?

 

Crash Report: https://pastebin.com/FaR2DBd0

ModItems Class: https://pastebin.com/kCnJE216

ItemDpetal Class: https://pastebin.com/Hgqb3TX3

 

Thanks for your help! I know this is probably a stupid mistake, but it's just flying over my head here.

Edited by ModMCdl

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

dpetal = new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND);

You never set the registry name for the dpetal(at least not in the code you've posted), and the ItemSeeds class does not do that for you. Your ItemDpeal class does but you do not use it.

 

Side note: do not use ItemModelMesher, it is outdated and buggy. Use ModelLoader.

Link to comment
Share on other sites

1 minute ago, V0idWa1k3r said:

dpetal = new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND);

You never set the registry name for the dpetal(at least not in the code you've posted), and the ItemSeeds class does not do that for you. Your ItemDpeal class does but you do not use it.

 

Side note: do not use ItemModelMesher, it is outdated and buggy. Use ModelLoader.

Ohhh... so that's where I was going wrong. Lol, I knew it was something stupid, and I just needed another set of eyes. So I just would use dpetal= new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND), ItemDpetal(); or would I write a new line for it and have two dpetal = new etc.? (Stupid question probably, but bear with me here...)

 

As for the ItemModelMesher, I suppose it is a bad habit of mine. I've always used it since I was modding, and it never really failed me, but I should really get around to changing soon.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

1 minute ago, ModMCdl said:

So I just would use dpetal= new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND), ItemDpetal(); or would I write a new line for it and have two dpetal = new etc.?

What do you want the dpetal item to be? If it is supposed to be a ItemDpetal then you would set the value of dpetal to an instance of ItemDpetal. If it is supposed to be ItemSeeds you would need to set it's registry name explicidly with Item::setRegistryName

Link to comment
Share on other sites

12 minutes ago, ModMCdl said:

Ohhh... so that's where I was going wrong. Lol, I knew it was something stupid, and I just needed another set of eyes. So I just would use dpetal= new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND), ItemDpetal(); or would I write a new line for it and have two dpetal = new etc.? (Stupid question probably, but bear with me here...)

Uh.

dpetal = new ItemDpetal(...)?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

11 minutes ago, V0idWa1k3r said:

What do you want the dpetal item to be? If it is supposed to be a ItemDpetal then you would set the value of dpetal to an instance of ItemDpetal. If it is supposed to be ItemSeeds you would need to set it's registry name explicidly with Item::setRegistryName

Hmmm...

dpetal = new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND).setUnlocalizedName("dpetal").setRegistryName(new ResourceLocation(Reference.MOD_ID, "dpetal"));

This is seemingly how I could go about it, but now I get a "Attempt to register a null object" error.

Just now, Draco18s said:

Uh.

dpetal = new ItemDpetal(...)?

So I would replace ItemSeeds with ItemDpetal? Wouldn't it not be recognized as a crop anymore? Or am I completely missing something here? Again, really stupid questions I'm asking, but crops are seemingly alluding me right now...

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

5 minutes ago, ModMCdl said:

dpetal = new ItemSeeds(ModBlocks.darklilac, Blocks.FARMLAND).setUnlocalizedName("dpetal").setRegistryName(new ResourceLocation(Reference.MOD_ID, "dpetal"));

This is seemingly how I could go about it, but now I get a "Attempt to register a null object" error.

Looks correct to me unless I am missing something. Please show your updated code and the error log. 

 

5 minutes ago, ModMCdl said:

So I would replace ItemSeeds with ItemDpetal? Wouldn't it not be recognized as a crop anymore?

If you want the dpetal item to be an instance of ItemSeeds why have you created a ItemDpetal class in the first place?

Link to comment
Share on other sites

5 minutes ago, ModMCdl said:

So I would replace ItemSeeds with ItemDpetal? Wouldn't it not be recognized as a crop anymore? Or am I completely missing something here? Again, really stupid questions I'm asking, but crops are seemingly alluding me right now...

Really depends on what you're doing. I had assumed that ItemDpetal was a class that extended ItemSeed, but it does not.

Option a: use the vanilla ItemSeeds class (but figure out what your error is, I don't see anything obviously wrong1)

Option b: make your class extend ItemSeeds (and possibly fix some other errors)

 

1Your unlocalized names should include your mode ID so it doesn't conflict with other mods using the same unlocalized name. The chance is low, but non-zero. This is usually done by doing item.setUnlocalizedName(item.getRegistryName()).

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

1 minute ago, V0idWa1k3r said:

Looks correct to me unless I am missing something. Please show your updated code and the error log. 

Updated error: https://pastebin.com/3miFG37w

 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

1 minute ago, Draco18s said:

Really depends on what you're doing. I had assumed that ItemDpetal was a class that extended ItemSeed, but it does not.

Option a: use the vanilla ItemSeeds class (but figure out what your error is, I don't see anything obviously wrong1)

Option b: make your class extend ItemSeeds (and possibly fix some other errors)

 

1Your unlocalized names should include your mode ID so it doesn't conflict with other mods using the same unlocalized name. The chance is low, but non-zero. This is usually done by doing item.setUnlocalizedName(item.getRegistryName()).

So I would define Dpetals as a ItemSeeds instead of a normal item like public class ItemDpetal extends ItemSeeds { instead of public class ItemDpetal extends Item {

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

Your new error actually has nothing to do with the item, look at the stacktrace:

    at init.ModBlocks.registerBlock(ModBlocks.java:49)

    at init.ModBlocks.register(ModBlocks.java:37)

 

Something you are registering in your ModBlocks class is null. We can't tell what since you've never posted your ModBlocks class.

Link to comment
Share on other sites

*facepalm* Lol I'm an idiot. Can't believe I missed that. Even more of an idiot because now I'm totally confused at what's happening.

 

ModBlocks class: https://pastebin.com/hsxtuxES

 

Am aware of the ItemModelMesher again, just a habit I need to break.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

While I do not see what is null there your registerBlock method is not doing what it is supposed to do. Currently it registeres all your blocks and an ItemBlock for the block you've passed. As you are calling it 4 times all your blocks get registered 4 times which is not what you want at all.

As for the null itself I would guess that you are calling the register method before the init method/not calling init method at all/calling registerBlock from one of the constructors of your blocks which causes the issue due to your method not doing what it is supposed to. 

Link to comment
Share on other sites

4 minutes ago, V0idWa1k3r said:

While I do not see what is null there your registerBlock method is not doing what it is supposed to do. Currently it registeres all your blocks and an ItemBlock for the block you've passed. As you are calling it 4 times all your blocks get registered 4 times which is not what you want at all.

As for the null itself I would guess that you are calling the register method before the init method/not calling init method at all/calling registerBlock from one of the constructors of your blocks which causes the issue due to your method not doing what it is supposed to. 

This method has worked for me countless times in the past. I don't really know what you mean.

 

 

UPDATE: I can get the game to launch, but then it crashes upon planting with an unexpected error: https://pastebin.com/xBduBhmb

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

1 minute ago, ModMCdl said:

This method has worked for me countless times in the past. I don't really know what you mean.

 

Spoiler

 

Your code:

 


private static void registerBlock(Block block) {
        GameRegistry.register(alog);
        GameRegistry.register(aleaf);
        GameRegistry.register(trune);
        GameRegistry.register(darklilac);
        ItemBlock item = new ItemBlock(block);
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }

 

Let's pretend we are the JVM executing the register method.

Line 1: registerBlock(alog);

Executed code:


private static void registerBlock(Block block) {
        GameRegistry.register(alog);
        GameRegistry.register(aleaf);
        GameRegistry.register(trune);
        GameRegistry.register(darklilac);
        ItemBlock item = new ItemBlock(block);
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }

.

 

Line 2: registerBlock(aleaf);

Executed code:


private static void registerBlock(Block block) {
        GameRegistry.register(alog);
        GameRegistry.register(aleaf);
        GameRegistry.register(trune);
        GameRegistry.register(darklilac);
        ItemBlock item = new ItemBlock(block);
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }

 

etc.

 

 

Every time you call registerBlock you register all your blocks. Every single one of them. Again and again.

 

 

4 minutes ago, ModMCdl said:

I can get the game to launch, but then it crashes upon planting with an unexpected error

And this happens because your items are created before your blocks. Thus the dpetal item recieves null as it's soil block because at the time of it's initialization the ModBlocks.darklilac is null.

Link to comment
Share on other sites

1 minute ago, V0idWa1k3r said:

And this happens because your items are created before your blocks. Thus the dpetal item recieves null as it's soil block because at the time of it's initialization the ModBlocks.darklilac is null.

So I should register my blocks before my Items? I swear, I've never encountered problems with this setup before in the past.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

3 minutes ago, V0idWa1k3r said:

And this happens because your items are created before your blocks. Thus the dpetal item recieves null as it's soil block because at the time of it's initialization the ModBlocks.darklilac is null.

And there's the error I expected to find when I saw the thread title. Cool!

/me likes not being wrong.

sunshine.png

1 minute ago, ModMCdl said:

So I should register my blocks before my Items? I swear, I've never encountered problems with this setup before in the past.


Yes.

And the reason you probably never encountered it before was because you'd never done crops before. ItemSeed requires a reference to a block, which means it MUST be created after the block.

Edited by Draco18s
  • Like 2

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

2 minutes ago, Draco18s said:

Yes

So, because I have never done it that way before, and this is the way I taught myself, how would I go about doing this?

(I feel like I'm learning to mod all over again)...

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

3 minutes ago, V0idWa1k3r said:

Just initialize your blocks before your items. You know how to move a line or two of code higher, right?

Again, I am an idiot. Lol. But that still doesn't fix the "crash upon planting" problem.

 

So after all of this, do these changes make my dpetal class necessary?  Because I have defined everything for it in my ModItems now, I believe.

Edited by ModMCdl

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

1 minute ago, ModMCdl said:

do these changes make my dpetal class necessary?

Do you need a custom class here or not is a question only you can answer. These changes do not have anything to do with your class. Do you need it for any custom behaviour or will ItemSeeds suffice is up to you.

Link to comment
Share on other sites

Just now, V0idWa1k3r said:

Do you need a custom class here or not is a question only you can answer. These changes do not have anything to do with your class. Do you need it for any custom behaviour or will ItemSeeds suffice is up to you.

Then I'll keep it around. I'm planning on doing more with these in the future, so it will probably come in handy.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

So I'm still getting the crash upon planting, same error as before. Initializing my blocks first hasn't solved that. 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Link to comment
Share on other sites

I figured it out. I had moved the block initialization up, but neglected to move up the registry as well. It seems to be working alright now.

 

I want to thank both of you sincerely for helping me out. I've been told in many places to just "leave and find a tutorial somewhere" rather than "waste their time" with my "pointless questions." You two have been a big help!

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

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.