Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[Solved]1.11.2. Add integer/float property to vanilla blocks


aw_wolfe
 Share

Recommended Posts

I want to add an integer and float property to some vanilla blocks...something that can be accessed later with a blockstate.getProperty or something. An example is a weight value.  Each block type would have a weight that I specify.  I could have a lookup table, but I wanted to see if possible to add it in the 'proper way' that would also then allow other mods to have access to the new property.

 

Further, I was hoping to avoid creating a new extended class for every block I wanted to add the new properties to, but instead add a new IProperty (?) to the default blockstate that I would create/init at mod loading. I do not see a register property function or a way to reset the default state with new property (hopefully, I'm missing one that is exposed). I'm still trying to figure out the properties design, so maybe way off base.

 

--Does this make sense? Am I going about it the correct way? I just want to see if I'm stumbling/fumbling in the correct direction.

Thanks,

Tony

Edited by aw_wolfe
Link to comment
Share on other sites

The problem is that properties are not this "magic thing" that get stored. They have to be encoded in metadata to be saved to disk. If you were to add properties to vanilla blocks (even if that was possible), you basically wouldn't be able to save anything, because many blocks (e.g. doors) already use the full 4 bits of metadata.

 

What you need to do is write your own data structure and manage this stuff yourself, probably using WorldSavedData.

Link to comment
Share on other sites

Even if you could, however, it would probably cause chaos in the model system, as you could theoretically add a block property to a block after the model loads, which MC would not know what do with when it tries to render said block. So, I think you're restricted in terms of options:

- Make the IProperty accessible via an API and have other mods use and implement it themselves, which you would need to check for whenever you wanted to do something with the block. (This doesn't help in editing vanilla blocks)

- Abandon dynamic properties in place of something else

- Manually add substitutions for all the vanilla blocks you want to change, via the GameRegistry#addSubstitutionAlias

Edited by TheMasterGabriel
Link to comment
Share on other sites

Ok. Thanks. I don't think I need to save the information, more of a physical property, i.e. every stone would always weigh the same. So I was thinking that every load would add the property onto the block type each time.

 

I'm ok with a look up table, but was wanting to design in a way that another mod could access the information if it wanted to.

 

How do mods access other mods ? Can an API be set up like

//
//PSUEDO CODE--just to express my question
//


//my_mod
external
float getBlockWeight(String blockName){
	//do my lookup table
	return doLookupTable(blockName);
}

//different_mod
float weight=my_mod.getBlockWeight("minecraft:stone");

 

Link to comment
Share on other sites

You just want a HashMap then. As for an API:

An API is nothing special, it is simply a piece of code you promise to keep binary compatible, so that other people can rely on it. So, make a public method that exposes the weight for a block and tada, you have an API.

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

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.