Jump to content

How can I make 24 rotation states of block across blockstate?


alexfadeev

Recommended Posts

Hi!

 

First of all: I'm not a programmer at all. I just have a one task for myself and I need to resolve it.

And sorry for my English.

 

 

So. I try to add a block in world, which can set in all 24 states of rotation. I hope, you understand what I mean.

I try to do this cross the blockstate property. I think — it is most easy way. But I have 2 properties: Facing (UP, DOWN, NORTH, EAST, SOUTH, WEST) and BINDING (LEFT_TOP, LEFT_BOTTOM, RIGHT_TOP, RIGHT_BOTTOM). That in turn gives you 24 different state.

 

I know that blockstate it is just 4 bit and it have 16 state variations.

 

So, my question. How can I resolve this problem? Maybe somebody have ready-made solution or some topics, where I can read about multiple state of blocks? How can I make 24 states for my block?

 

Thanks for you help.

Link to comment
Share on other sites

If I understand your 24 states:

 

1) I can choose one of six faces to face me

 

2) I can then reach out, grip that face and dial it to choose one of its four adjacent faces to face UP. If I were holding a face with an arrow printed on it, I could point the arrow UP, RIGHT, DOWN or LEFT.

 

If your game purpose really needs to retain all of that information, then you do indeed have more states than can be kept in metadata. You'll need a TE as d7 suggested. If game effect really only hinges on one face (or allows you to calculate some of your data from neighbors like walls and fences do), then you can avoid the TE. If calculable, getActualState is where you'd do so.

 

What are you trying to do?

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

One other solution is to actually have two different blocks with the various states distributed between them. When someone performs certain rotations then you'd replace with the other block (with corresponding rotation state). If both blocks extend the same base block, then you can test for the base block anywhere your code needs the block.

 

But tile entity is better way to go. Just wanted to say that there are usually multiple options to solve problems in programming.

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

Link to comment
Share on other sites

I making a room:

 

899ab09b4c8345fbb1db1810d4713617.png

 

How can you see, here is 10 different blocks. They should be have 24 position states, because:

1ce613e4ac8f4afb9eacd757ecb50961.png

 

This is only one wall of room. But room have 6 walls. =) And yes, this is room from "The cube: Hypercube" movie.

 

I do not want make a many same blocks in different position. So I cut them to a minimum the number of unique blocks. And now I need to rotate them for construct my room.

 

 

I think, I will use TileEntities for resolve this. Now I learn about this.

Link to comment
Share on other sites

First of all, I would really really like some insight of you on this rotational stuff, because I have been beating my head against this for like a week and it's a) beginning to hurt and b) I still haven't figured it out.

 

For the rest, you can make block states based on properties in a TileEntity. You use getActualState in your Block class to transfer the data from TE into the IBlockState.

 

I'm obviously not the OP, but I managed to make a relatively simple block that stores its facing (just the standard

EnumFacing

values) in its

TileEntity

. You can see the implementation here:

[url=https://github.com/Choonster/TestMod3/blob/da28151e33cd2f3bb9f7db1478e862fab629f220/src/main/java/com/choonster/testmod3/block/BlockColoredRotatable.java]Block[/url]

,

[url=https://github.com/Choonster/TestMod3/blob/da28151e33cd2f3bb9f7db1478e862fab629f220/src/main/java/com/choonster/testmod3/tileentity/TileEntityColoredRotatable.java]TileEntity[/url]

, blockstates file

 

Getting the facing synced correctly between all players was a bit tricky, but I just needed to call

World#markBlockForUpdate

when rotating the block to send the

TileEntity

update packet and when receiving the packet to update the model with the new facing.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Yes, one facing. That's easy. But the Block can also be rotated around that facing, to achieve all 24 possible states. ;)

 

Hold on. If you have 6 states and TWO rotations, that's almost 100 total states.

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

I misread something. Probably as a result of having zoomed in on my tablet screen.

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

Yes, one facing. That's easy. But the Block can also be rotated around that facing, to achieve all 24 possible states. ;)

 

I managed to extend my previous example with a face rotation property:

[url=https://github.com/Choonster/TestMod3/blob/dee37427c6851507b30409e995dce21ee150c33c/src/main/java/com/choonster/testmod3/block/BlockColoredMultiRotatable.java]Block[/url]

,

[url=https://github.com/Choonster/TestMod3/blob/dee37427c6851507b30409e995dce21ee150c33c/src/main/java/com/choonster/testmod3/tileentity/TileEntityColoredMultiRotatable.java]TileEntity[/url]

, blockstates file

 

Having a block with so many possible combinations of properties makes me glad that Forge's blockstates format exists.

 

This should be pretty similar to what you're looking for, alexfadeev.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Even after figuring the data storage, you'll need to solve the placement problem. How will you control the secondary rotation? Perhaps right-clicks on an already-placed block can rotate it around its facing axis. It might actually be less work to make four different blocks.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

Even after figuring the data storage, you'll need to solve the placement problem. How will you control the secondary rotation? Perhaps right-clicks on an already-placed block can rotate it around its facing axis. It might actually be less work to make four different blocks.

 

I want resolve this cross the rotationYaw and rotationPitch. Thats why I called them LEFT_TP, LEFT_BOTTOM etc.

Actually all 24 states can be placed only with this properties, without EnumFacing. But with facing it will more reliably.

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.