ZeroNoRyouki Posted February 10, 2016 Posted February 10, 2016 Hi! I'm working on a mod and I like very much big multiblock machines and structures but I'd like to make them look a bit better than a Borg cube, something like an Arc Furnace from Immersive Engineering instead of a Steam Boiler from Railcraft to give you an idea What I'd like to do is make a 3D model for the whole multiblock in Blender or 3DS MAX and use the resulting OBJ model to render the assembled multiblock in game The question is how to do that So far I came up with the following ideas / concepts: 1) use TESR to render the whole model by delegating the job to one of the TEs of the multiblock structure This can turn ugly performance-wise and I don't know if the Minecraft rendering engine support models much bigger than 1 or 2 block spaces 2) cut the 3D model in pieces and generate an OBJ for each of the blocks in the multiblock structure Aside from the cutting nightmare, there will probably be problems regarding the orientation of the multiblock What do you think guys? Quote
Ernio Posted February 10, 2016 Posted February 10, 2016 Not my profession for a long time now, but in past I think I stumbled upon something like this. Design was pretty much: Place one block (center) which renders whole thing and fill air around with special invisible blocks. I am unsure if it was in Entity or Block class, but I remember there is a method that allows you to change rendering distance hit-box (meaning you start seeing (render) block before you actually see central-block). But as said - this might have been method for Entity (that was like a year ago, idk). Note that you will need some pretty big recursion to break such a structure. Way I would do it is to make that one of those structures (when trying to place them) cannot ever be in 1-block contact with other. Then (since "invisible block" is of your design) you can NOT care about checking whether your recursion is removing structure wanted or passed onto another one next to it, and just make tail call. Just an idea. Hope anything here is helpful, but you got to do the actual research (or wait for someone else). Quote 1.7.10 is no longer supported by forge, you are on your own.
ZeroNoRyouki Posted February 10, 2016 Author Posted February 10, 2016 First of all thank you for your reply I'm not sure if I got it right, are the invisible blocks to be placed around the whole structure (for example, around the 5x5x5 cube that form my multiblock) or around the central block? Thank you! Z Quote
Draco18s Posted February 10, 2016 Posted February 10, 2016 The invisible blocks are every real block in your multiblock structure. 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.
KeeganDeathman Posted February 11, 2016 Posted February 11, 2016 Oh, I've done this recently! Basically, in your TESR and Block classes, in the rendering functions(renderTileEntityAt, isOpaqueCube, shouldSideBeRendered,etc) check the tile entity for a boolean method called isMultiblock or something. This will use worldObj.getBlock to check if the required blocks are not null, and the right blocks. Then, return if it is. Make sure you don't render the obj if it isn't multiblock, and you do render the blocks. Remember also to translate the model! Don't forget to also update the fake blocks. I'd suggest doing something along the lines of: if(te.isMultiblock() || te.isToldMultiblock) //don't render sides if(isMultiblock()) //render OBJ if(multiblockcode) //set blocks isToldMulitblock() And the model can be huge! But be careful on scale and don't go overboard with the vertices Quote [shadow=gray,left][glow=red,2,300]KEEGAN[/glow][/shadow]
ZeroNoRyouki Posted February 13, 2016 Author Posted February 13, 2016 Sorry guys for the late reply and thank you for your help! I was able to make this work using the standard blockstate tying it into my multiblock controller with getActualState and shouldSideBeRendered and delegating the "you should render the model" state to one of the block (selected when then whole machine became fully assembled) (no texture on the model right now) In the tests so far I dont' see any performance drops so all good. The next step is to animate things a bit Quote
Draco18s Posted February 13, 2016 Posted February 13, 2016 Your invisible blocks should also be transparent, so the model gets light. 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.
ZeroNoRyouki Posted February 13, 2016 Author Posted February 13, 2016 uh right! could that be done in the blockstate / model file? after a quick read of the specs I can't find a way to do it thank you Z Edit: Solved Quote
HbmMods Posted April 30, 2016 Posted April 30, 2016 You got the model to work? How did you do this!? Quote
NEG2013 Posted April 30, 2016 Posted April 30, 2016 Hey so I'm pretty good at coding and I had a mod in 1.7.10 but updating messed it all up and I don't want to restart so would you be willing to partner with me? Quote
ZeroNoRyouki Posted April 30, 2016 Author Posted April 30, 2016 You got the model to work? How did you do this!? Yup, with plain vanilla blockstate All the blocks use the same blockstate: { "variants": { "state=single": { "model": "sand" }, "state=invisible": { "model": "thedarkkin:transparentBlock" }, "state=renderer": { "model": "thedarkkin:mblock1/multib1.obj" } } } "single" is for blocks that are not part of a formed multiblock (I used the vanilla sand block model because this was a proof of concept rather then an actual machine) "invisible" is for blocks that are part of a formed mutiblock but are not the mutiblock render delegate. they are actualy invisible in game "renderer" is for the block selected to be the render delegate of the formed multiblock Basically when the multiblock form itself, I select one block and delegate to it the job of rendering the 3D model (using the "render" blockstate and it's OBJ model). All the other block will render as an invisible cube. You must create the 3D model keeping in mind where the render delegate of your choice is in the whole structure. Mine was in the center of the bottom layer The block class override getActualState() and return one of the three possibile states according to the state of the multiblock (how to actualy do that depends on how you implement your multiblock logic) Quote
HbmMods Posted May 2, 2016 Posted May 2, 2016 Thanks, I don't actually want a multiblock structure, but for what I understood I can simply "load" the obj file with the json, is that really everything to it? Seems way too easy, I've found three tutorials with overly complicated ways to load obj. Quote
HbmMods Posted May 2, 2016 Posted May 2, 2016 Well, I got it to work almost perfectly. How do I have to export the obj file to bind the texture? It's always white for me .-. Quote
ZeroNoRyouki Posted May 3, 2016 Author Posted May 3, 2016 Hi, glad it worked for you too You need to export the material library (.MTL) along with the OBJ file and place it in the same directory of the OBJ file Then, open the MTL file in a text editor and change the path of your texture files using the same format as in all the other resource locations you use in your mod (basically, yourmodid:path_to_texture) Hope that helps Z 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.