Jump to content

[1.12.2] Coding in a crop gives me "java.lang.IllegalArgumentException" With Blockstates


Recommended Posts

Posted (edited)

Hi, I've come back to coding once again and Everything seems to go swell Except when I tried making a crop. It's similar enough to Reeds but slightly different.

The Error in question is

java.lang.IllegalArgumentException: Cannot set property PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]} as it does not exist in BlockStateContainer{block=minecraft:air, properties=[age]}

my Base Crop class where all my crops are based on this class

  Reveal hidden contents

Which gets added into my main block class here:

  Reveal hidden contents

Then Registered Here (Both The Blocks and Block Models):
 

  Reveal hidden contents

The #registerModels function is defined in my ClientProxy Here:
 

  Reveal hidden contents

I'm pretty sure I'm missing something obvious but idk what since I never touched IBlockstates before...

If there's anything else someone needs like logs or other of my classes simply ask. I will provide.

Edited by Delupara
Update the relevant files to use @ObjectHolder instead of IHasModel interface.

When they say your code doesn't follow convention but ur edgy so u dont care

d-d-d-dab on them haterz

 

Posted
  On 9/7/2019 at 9:21 PM, Delupara said:

IHasModel

Expand  

No stop using this.

 

  On 9/7/2019 at 9:21 PM, Delupara said:

public static final Block H_BLOCK = new WcBlockBase(Material.LEAVES,"h_block","h_block",SoundType.PLANT); public static final Block H_CROP_BLOCK = new WcBlockCropBase("h_crop_block");

Expand  

Don't statically initialize your Block or Item or any registry values.

 

  On 9/7/2019 at 9:21 PM, Delupara said:

java.lang.IllegalArgumentException: Cannot set property PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]} as it does not exist in BlockStateContainer{block=minecraft:air, properties=[age]}

Expand  

This isn't quite enough information to diagnose the problem. Post the whole error.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted
  On 9/7/2019 at 9:28 PM, Animefan8888 said:

No stop using this.

Expand  

Question: Why?

  Just now, Animefan8888 said:

Don't statically initialize your Block or Item or any registry values.

Expand  

Where do I initialize them then? More importantly how since they're final

  Just now, Animefan8888 said:

This isn't quite enough information to diagnose the problem. Post the whole error. 

Expand  

I uploaded both the Lastest Log and the crash report

latest.logFetching info... crash-2019-09-07_13.32.28-client.txtFetching info...

When they say your code doesn't follow convention but ur edgy so u dont care

d-d-d-dab on them haterz

 

Posted
  On 9/7/2019 at 9:41 PM, Delupara said:

Why?

Expand  

Because it's easier to just loop through a Set/List of Item/Block(technically still an Item) and register them directly in the ModelRegistryEvent with a for loop. It's much simpler and you only have to write it once instead of every new class.

  On 9/7/2019 at 9:41 PM, Delupara said:

Where do I initialize them then?

Expand  

Inside their registry event.

  On 9/7/2019 at 9:41 PM, Delupara said:

how since they're final

Expand  

Use the @ObjectHolder annotation it retrieves objects after the registry event has fired. And applies the value to the field.

 

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted (edited)
  On 9/7/2019 at 9:58 PM, Animefan8888 said:

Inside their registry event.

Expand  

Ok so from what I understand I use @ObjectHolder to inject the null declared object from that object's registry (Block in this case) then somehow reference that ObjectHolder in the block registry handler and inject that object's declaration? If so how do I reference the object annotated by @ObjectHolder? The Wiki doesn't seem to tell me how...

Also, whats the Event In question? I can't look it up Away from my pc and the documentation doesn't provide a list of available events

Edited by Delupara

When they say your code doesn't follow convention but ur edgy so u dont care

d-d-d-dab on them haterz

 

Posted
  On 9/7/2019 at 10:17 PM, Delupara said:

whats the Event In question?

Expand  

Don't know what your asking here. I only referred to registry events. IE Register<Block>

  On 9/7/2019 at 10:17 PM, Delupara said:

then somehow reference that ObjectHolder in the block registry handler and inject that object's declaration?

Expand  

No. You just need to do something like this

@ObjectHolder("modid")

class Registry

public static final Block SOME_BLOCK = null;

registerBlocks

   event.getRegistry().register(new Block(...).setRegistryName("modid:some_block"))

Boom done.Then you can reference the value you created in the registry event by using the SOME_BLOCK field.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted
  On 9/7/2019 at 11:22 PM, Delupara said:

However The same error persist.

Expand  

Post the error again it could be slightly different. Also maybe change this.blockState.getBaseState() in your blocks constructor to getDefaultState()

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted
  On 9/8/2019 at 12:03 AM, Animefan8888 said:

Post the error again it could be slightly different. Also maybe change this.blockState.getBaseState() in your blocks constructor to getDefaultState()

Expand  

Like I said Its more or less the same error/stacktrace but I still uploaded the new  error. Doing what you suggested basically got nowhere.

 

latest.logFetching info...

When they say your code doesn't follow convention but ur edgy so u dont care

d-d-d-dab on them haterz

 

Posted
  On 9/7/2019 at 9:21 PM, Delupara said:

WcBlockCropBase extends BlockCrops implements IPlantable{

Expand  

You know that BlockCrops already implements IPlantable, right?

 

  On 9/7/2019 at 9:21 PM, Delupara said:

Integer.valueOf(0)

Expand  

You know that you don't have to use ValueOf on integer literals, right?

 

  On 9/7/2019 at 9:21 PM, Delupara said:

this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)));

Expand  

Why do you have this in your constructor twice?

 

  On 9/7/2019 at 9:21 PM, Delupara said:
	public WcBlockCropBase(String name) {
		this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)));
		this.setUnlocalizedName(name);
		this.setRegistryName(name);
		this.setCreativeTab(WC.WC_TAB);
		setTickRandomly(true);
		WcBlocks.crops.add(this);
		WcItems.items.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
		this.createBlockState();
		this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)));
	}
Expand  

And you called super()...where, exactly?

 

  On 9/7/2019 at 9:21 PM, Delupara said:

((Integer)state.getValue(AGE)).intValue();

Expand  

getValue already returned an int, that you cast to an Integer, that you then called intValue on...

 

  On 9/7/2019 at 9:21 PM, Delupara said:

WcBlocks.crops.add(this);

Expand  
  On 9/7/2019 at 9:21 PM, Delupara said:
		WcBlocks.blocks.add(WcBlocks.hemp_block);
		WcBlocks.crops.add(WcBlocks.hemp_crop_block);
Expand  

1) You don't need both of these

2) The second one is doubly-useless because those static references are still null because they aren't populated until AFTER the event

 

  On 9/7/2019 at 9:21 PM, Delupara said:

WcItems.items.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));

Expand  
  On 9/7/2019 at 9:21 PM, Delupara said:
		WcItems.items.add(WcItems.d_w);
		WcItems.items.add(WcItems.g);
Expand  

Ditto...

 

  On 9/7/2019 at 9:21 PM, Delupara said:

ModelLoader.setCustomStateMapper(block, null);

Expand  

Well, that was fucking pointless.

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.

Posted (edited)
  On 9/8/2019 at 2:36 AM, Draco18s said:

You know that BlockCrops already implements IPlantable, right?

Expand  

Yeah sorry I make mistakes. I don't code that much anymore and I just forgot child classes implement the same interfaces as their parents. My Mistake.

  Quote

You know that you don't have to use ValueOf on integer literals, right? 

Expand  

That was only because I followed what BlockCrop did. If it needed to translate integer litterals into wrapper objects I assumed I should of done the same. Sorry If Minecraft's programmers did this.

  Quote

Why do you have this in your constructor twice?

Expand  

Because I didn't notice. Again look at my first answer.

  Quote

And you called super()...where, exactly?

Expand  

Nowhere. I assumed it wasn't necessary since I was doing the same function calls. I added it though, First line in my constructor.

  Quote

getValue already returned an int, that you cast to an Integer, that you then called intValue on...

Expand  

Does it really matter anyway? Java isn't the only coding language I program in, but one of the few that works this way when it comes to understanding the difference between object wrappers and litterals..... In the end it doesn't matter anyway.

  Quote

1) You don't need both of these

2) The second one is doubly-useless because those static references are still null because they aren't populated until AFTER the event

Expand  

Then how am I supposed to loop trough my items and blocks to register their respective models? I'm gonna add a lot to this mod so I don't feel like copying/pasting each individual items and blocks especially when looping is a thing.... And I know.... Read the lines above in the code, I did populated them with the right classes no? Those lines are for looping the ModelRegistryEvent items/blocks.

  Quote

Ditto... 

 

Well, that was fucking pointless.

Expand  

 

Thanks for helping by making feel like a dunce for not know EVERY single details in an API. Goes to show how some people perpetuate the "You don't know 100% of the thing therefore you shouldn't deserve help". I don't code everyday and I have attention issues, Seems like you're gifted by not having these problems, stop being a prick and help those who DO have that problem instead of downing them.

Regardless of you belittling, the problem persist with the code adjusted.

Edited by Delupara

When they say your code doesn't follow convention but ur edgy so u dont care

d-d-d-dab on them haterz

 

Posted
  On 9/11/2019 at 9:07 PM, Delupara said:

I assumed it wasn't necessary since I was doing the same function calls. I added it though, First line in my constructor.

Expand  

It matters because there are final fields in the Block class that aren't set unless you call the super.

  On 9/11/2019 at 9:07 PM, Delupara said:

Then how am I supposed to loop trough my items and blocks to register their respective models?

Expand  

Add them to the list in their constructor? Also I think he was also pointing out that having two lists is pointless.

 

  On 9/11/2019 at 9:07 PM, Delupara said:

Regardless of you belittling, the problem persist with the code adjusted.

Expand  

Post your updated code.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted (edited)
  On 9/11/2019 at 9:07 PM, Delupara said:

Sorry If Minecraft's programmers did this.

Expand  

They didn't. That's what the decompiler did because the decompiler doesn't know better because there's multiple different original Java source that compile to the same bytes.

The point here is that you shouldn't blindly copy and paste stuff. You should actually understand what it's doing and evaluate if what its doing is the proper way to do things.

By copying and pasting you've demonstrated that you lack sufficient knowledge of Java and we don't help with basic Java here. I am entirely within reason to point out stupid shit as being stupid.

 

  On 9/11/2019 at 9:07 PM, Delupara said:

the problem persist with the code adjusted

Expand  

Cool. Can you post it? The problems I was pointing out could have entirely been the cause of your issue, one way or another, but if its still a problem, its hard to diagnose it without seeing your current code.

Edited by Draco18s

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.

Posted
  On 9/11/2019 at 9:38 PM, diesieben07 said:

This is not true. It is impossible to not call a super constructor. If you don't do it explicitly, Java will call the parameterless superconstructor implicitly. If no such superconstructor exist, this is a compile-time error.

Expand  

I forgot that 1.12's BlockBush had a parameterless constructor.

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.

Posted
  On 9/11/2019 at 10:11 PM, Delupara said:

Also added the log.

Expand  

The problem is that the BlockCrops is expecting your Block to have it's AGE property on it when it doesn't. So you'll have to not extend that class or use its AGE property.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

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.

Announcements



×
×
  • Create New...

Important Information

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