alexfadeev Posted November 19, 2015 Posted November 19, 2015 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. Quote
jeffryfisher Posted November 19, 2015 Posted November 19, 2015 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? Quote 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.
jabelar Posted November 19, 2015 Posted November 19, 2015 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. Quote Check out my tutorials here: http://jabelarminecraft.blogspot.com/
alexfadeev Posted November 20, 2015 Author Posted November 20, 2015 I making a room: How can you see, here is 10 different blocks. They should be have 24 position states, because: 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. Quote
Choonster Posted November 20, 2015 Posted November 20, 2015 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. Quote 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.
Draco18s Posted November 20, 2015 Posted November 20, 2015 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. Quote 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.
Draco18s Posted November 20, 2015 Posted November 20, 2015 I misread something. Probably as a result of having zoomed in on my tablet screen. Quote 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.
Choonster Posted November 20, 2015 Posted November 20, 2015 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. Quote 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.
jeffryfisher Posted November 21, 2015 Posted November 21, 2015 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. Quote 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.
alexfadeev Posted November 21, 2015 Author Posted November 21, 2015 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. Quote
Recommended Posts
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.