Jump to content

[SOLVED] Benefits of Metadata Items/Blocks?


Dronus86

Recommended Posts

Some time ago (1.4.5?), I considered trying out modding and didn't follow through. My research gave me an understanding of metadata and item ids, and how there are a somewhat limited number of ids available, and metadata was useful in reducing the number of ids you used in addition to a variety other things.

 

I just started to mess around with modding again in the past week, and I've been reviewing a variety of tutorials and guides as I've moved along. In addition, I've been browsing any open source mods I can, to get ideas about proper implementation (such as using metadata for items that are variations of a similar thing, like recoloring).

 

This has got me wondering:

Is there still an achievable limit on the number of items or blocks Minecraft can register?

Since item IDs and block IDs no longer exist, is there any benefit to using item/block metadata to create multiple items/blocks, aside from lower line count and reduced code repetition?

What if the items you want to create each interact significantly differently, even if they appear very similar? Would it be more intelligent to simple extend and expand on base class instead of trying to force these different items into one class?

 

Thanks!

Link to comment
Share on other sites

Metadata have always been used for reduced code repetition, for example, you won't make 6 different stair blocks all the same but different orientation, metadata only reduced id usage in some cases.

Actually, reduced code repetition is kind of what efficient programming is. Object-oriented programming was made to reduce the amount of code you use to make the program by having some kind of structure, i.e. class, that has all the relevant code, and use instances whenever needed.

This means metadata is only another thing to use so you won't make blocks for everything, not only because you don't want to use up all the ids.

Link to comment
Share on other sites

At the end of the day, it is your own code.  While it is more "professional" coding style to use indexes, loops, etc. to process similar things, it isn't that bad (if you're more comfortable with it) to separate them.  Especially if there are just a few variations.

 

For example, let's say you need to cycle through four things in an array.  While it is natural for experienced coders to use a loop, it is actually about the same amount of lines of code to simply process each element with its own line of code.  And often that is more readable, especially if you use enumeration or constants to represent the index. 

 

Anyway, it sounds to me that you'd be more comfortable separating variations into separate classes, and I think that is fine.  It may in some cases mean more lines of code, but the code may be more readable and less prone to error. 

 

I think for directional blocks, metadata is still preferred because otherwise each direction will be different -- for example in the creative tab you'd have to have all four directions, and in inventory it would be different, etc.  But for things like colors, or different behavior, it doesn't matter that much.

 

By the way, if you're feeling limited with the metadata due to small number of bits to work with you can create your own sort of extended metadata if you want.  In your main class you can just make a public byte array with index being position of the block for example and just make sure to update it when blocks are placed or destroyed.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

By the way, if you're feeling limited with the metadata due to small number of bits to work with you can create your own sort of extended metadata if you want.  In your main class you can just make a public byte array with index being position of the block for example and just make sure to update it when blocks are placed or destroyed.

 

If you mean a public array to store one block's coordinates, which I don't think you do, I don't think that's a good idea, since all what the metadata's about is the inability to have a field that applies to one block, as a field ingame is like a static field because you use one Block instance.

If you mean a list with coordinates as key, then that's not good idea either, unless you're sure your block won't exist a lot in a world. It will have some instabilities too, such as if piston pushes a block.

 

The way Minecraft handle coordinate specific things to blocks is known to everyone, tile entities.

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.

Announcements



×
×
  • Create New...

Important Information

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