The Meaning of Life, the Universe, and Everything.
Join Date:
5/25/2017
Posts:
57
Member Details
That... actually.... sounds like it might be exactly right.
I'm going to try it but first I have bigger fish to fry.
So all of my Ruins stuff is done on my main computer, which hasn't connected to the internet in like 6 months, so I have to transfer all things to my laptop.
Recently I decided it would be fun to do something stupid and completely re-write all the ruins content by deleting every folder related to it. Somehow I'm also stupid enough to have already deleted all of that from the recycle bin. Is it possible to fix the problem without reconnecting to the internet or can I just download what I need from this computer (my laptop) and transfer it by flash drive?
Have you tried "preventRotation=1" to keep individual parts of the structure from intersecting?
Long ago I've noticed that spawning in the main parts of multi-structures with "/testruin" can give a "tested" result consistently different than when the same thing is spawned in by worldgen, and there are cases in which the "test" functionality differs from the main worldgen spawning. I'll guess that it is one of these things that is in play in the above structure, causing it to overlap unexpectedly, but not while being tested.
I'll further guess that there are X and Z offsets in command blocks set to spawn structures, and that these command blocks are off-center in the main template, and when the main structure is rotated, this compounds with the offsets in the sub-structure spawn events.
This is one reason why my "seeder" structures typically stack a bunch of Command Blocks on top of each other vertically, rather than spreading them out over a space -- or if I'm using Command Blocks to spawn special features in place (a treasure chest with a "magic book" in it, for instance, or a painting on a wall), I place the Command Block above or below the position I want, rather than offset by any value of X or Z. That way, rotation shouldn't be an issue affecting their relative placement.
For those structures (such as my "haunted mineshaft") where I do have Command Blocks that are located at the extremities of the seed structure (i.e., where I want to spawn tunnels to branch off from the main structure), I use preventRotation=1 to prevent such shenanigans.
can sombody here tell me how i would go about making a structure that intentionally has air in specific places?
for example i want to mkae custom-shaped cave rooms, and the way i'm trying to do that is to use glass as a placeholder and then replacing "glass" with "air" in the file, but its not working, because thats the same as using "preserveBlock"
EDIT: i fifured it out; but now the ruin spawns with 2 additional layers of just air at the bottom for some reason.
To dream the impossible dream, To fight the unbeatable foe, To bear with unbearable sorrow, To run where the brave dare not go.
To right the un-rightable wrong, To love pure and chaste from afar, To try when your arms are too weary, To reach the unreachable star.
You're doing exactly the right thing, but...any chance you're using "minecraft:air" instead of just plain "air"? There's a known bug that causes Ruins to think they're two different blocks, and "minecraft:air" is unrecognized as a result. Usually. And unrecognized blocks are treated as "preserveBlock". Kind of. It's complicated.
Bottom line: Change all the "minecraft:air" blocks to "air", and hopefully you'll get the results you expect. The next release of Ruins already contains a fix for this, but "air" should get you where you want to go for now. It'll still work fine after the fix, too, so you won't need to switch back to "minecraft:air" unless you really, really want to.
If that doesn't work, or you're already using "air", then you've uncovered a different problem. Let us know!
EDIT: Try setting "max_leveling=0" in your template file and see if that makes the bubble of air under your structure go away. I believe it defaults to 2.
@QuarterAnimal: Thanks for the tip! I didn't know about the "minecraft:air" bug. This might explain a few irregularities I have had in my own attempts at having "forced" air in an underwater structure (stuff that led me to messing around with tricks via tripwire, etc.).
It's usually best to turn auto-levelling off completely with levelling_buffer=-1, as preserveBlock is better adapted to specific structure details in smoothing areas into existing landforms.
Instead of breaking out huge amounts of glass and risk breaking random blocks in the walls, I just /fill the entire template with water and sponge out the spots that need to be air, then /fill the remaining water into a color of wool that isn't used in the build for preserveBlock, since water can have several damage values and hence several rules for it. Lastly /fill the sponges with air.
These are the settings I use, with the player standing in the center of the template:
/fill ~slightlyaboveXradius ExactUpperY ~slightlyaboveZradius ~-slightlyaboveXradius ExactLowerY ~-slightlyaboveZradius water 0 replace air
The replace setting lets me decide which set of blocks within the area will be set without overwriting any other blocks.
Things like window openings will need to be plugged (with the block choice for preserveBlock) to keep the sponge from affecting areas outside. Of course, sponges have a limited area of effect, which should be considered when choosing the way.
Also the blocks themselves used is important, since there are several blocks that break instantly in survival, also leaves and other colors of glass that are intended to stay in the build that can be carelessly broken by hand.
If there is water in the build itself, the water can be /fill replaced with something unused like another color of wool or whatever one decides, or something that will stand out easily if not changed back to the block it's supposed to be.
Each of us will have personal favorites for these. I often use a gold block to mark the position of command blocks, and sometimes an iron block. I use all the ores to make specific patterns in the floor that later become different kinds of stone/stonebrick/cobble in different proportions to make subtle interesting patterns show up. Unused types of stairs are useful for direction-sensitive randomized components, and so on.
I don't know that I'd recommend using "leveling_buffer=-1" to turn off leveling. It does do that, but leveling_buffer is used in other contexts as well, expanding (or--in the case of negative values--contracting) the X and Z dimensions of your structure's bounding box. One unfortunate consequence, for example, would be its preventing the /undoruin command from removing all associated blocks. Other mods subscribing to Ruins events would also be misinformed as to the structure's size. Of course, if you never use /undoruin or mods that listen for Ruins events, that's not an issue. Still...
I'd suggest using "max_leveling=0" instead. That effectively turns off leveling, but has the advantage of being only used for leveling. No nasty side effects.
EDIT: It occurs to me another more or less compelling reason for preferring "max_leveling=0" over "leveling_buffer=-1" is that, conceptually, a negative leveling_buffer value should merely constrain the effects of leveling within the XZ footprint of a structure, not stop leveling altogether. Now, it just so happens the code currently has a special case in which it skips leveling if the buffer is negative, and--while that special case will likely remain for the foreseeable future--it's best considered a deprecated feature. Because "leveling_buffer=-1" is more of an exploit than an intended use, there's no guarantee it will work in later versions. Setting max_leveling to 0, on the other hand, will always work, since that's exactly what it means: no leveling.
EDIT: I was wrong about max_leveling being used just for leveling, and setting it to 0 having no nasty side effects (see Jordan_Peacock's post, below). It's also used as a "lumpiness tolerance," and a value of 0 may be undesirably restrictive, preventing a template from being instantiated on anything but perfectly flat terrain. It looks like there is no ideal solution, but setting leveling_buffer to -1 and max_leveling to a smallish positive value--or leaving it at the default value of 2--is probably the best general workaround, at least for now. While it does slightly muck up the structure's bounding box, the downside of that is negligible for most purposes. Sorry, Gillymoth; you were right all along.
I have noticed it replaces a little off when doing /undoruin, but a good /fill usually takes care of that (when working in mid air). The very first structure with a foundation I made a few years ago I did use levelling_buffer=-3, in the hope that it would trim back exactly that far as it went with how far in the walls were, so good to know that detail was confirmed.
@Gillymoth: Hasn't /undoruin ALWAYS been broken? It always leaves two edges of the structure in place above-ground (only visible of course if you've actually got blocks going out that far), and if there was anything embedded into the ground (i.e., a basement), that ends up staying in place. It's been that way for me for several versions now -- well before I ever learned that "leveling_buffer=-1" was even an option. I thought that had been brought up before (with screenshots).
@QuarterAnimal: As I (mis?)understood it, max_leveling not only sets how many levels of terrain the Ruins spawner is going to flatten out to make a foundation for the Ruins structure, but it also serves as a factor in deciding whether a given location is a valid building spot. The higher the max_leveling, the more likely that it will be willing to build on a "slope." Set it to max_leveling=0, and I thought that would necessarily mean the structure won't spawn except on a perfectly flat spot. (I'm not entirely sure how "allowable_overhang" plays into this, but I'd wildly guessed that a higher value was involved in how many blocks in the desired "footprint" could be missing and it would still count as a valid area.)
In any case, for structures like giant gnarled oak trees (with "root systems") that I wanted to be able to spawn on hillsides just as easily as plains, the only combo I was able to find that worked (i.e., DOES NOT flatten out the surrounding area, AND lets me build on less-than-perfect footprint areas) was max_leveling set to some high number, leveling_buffer=-1, and (not sure what good it did, but it didn't seem to hurt) allowable_overhang set to a high number. Otherwise, to get the same effect I had to pull stunts like having a 1x1 footprint "structure" that consisted of a Command Block buried a few spaces down into the ground that had RUINSTRIGGER and a /testruin call to the "real" structure (the tree, surrounded by lots of preserveBlock) into place.
I won't be terribly surprised if I'm just horribly wrong on this, because I don't have a knack for intuiting the inner workings of programs without some sort of documentation that sums up that functionality. Mostly I've just been learning by observing others' templates, playing with settings, and posting erroneous claims to the forum (and subsequently being corrected by more knowledgeable persons), when the included instructions don't quite fill in all the gaps for me.
P.S., ARE there any mods that "subscribe to Ruins events"?
@Jordan_Peacock: No, you've got it exactly right on all counts. I was wrong; I missed the additional use of max_leveling as a tolerance for uneven terrain. Your description of allowable_overhang is also correct. Its value is the number of blocks in the footprint that can be missing (although the definition of "missing" may not be quite what you expect, especially for tall structures).
The interaction between leveling_buffer, max_leveling, allowable_overhang, embed_into_distance, random_height_offset, and the structure's height (and, to some extent, acceptable_target_blocks, unacceptable_target_blocks, preserve_water, preserve_lava, and rule0) is pretty hard to characterize definitively in a handful of sentences. For most templates, doing what Gillymoth suggested--setting leveling_buffer=-1 and leaving max_leveling at its default of 2--is the way to go. In extreme cases, such as tall or deeply embedded structures, or for special effects (e.g., your example of hillside spawns), you'll just have to experiment to get the results you're looking for.
As for mods that subscribe to Ruins events, I only know of one: Ruins. That's why /undoruin doesn't work--it gets the volume of blocks to revert from the event, and is therefore messed up by the incorrect bounding box dimensions when leveling_buffer is negative. (Well...it has other problems, too, but that's certainly one of them.) I suspect it's unlikely there are other mods out there that use the event, at least in wide circulation, but there's no easy way to know. All I can say is it's part of the Ruins API, so it's possible.
@jordan, I remember when I explained to you how to use my combination of settings levelling_buffer, Maxleveling, and embedintodistance in order to make perfect foundations, in post#2931 on page 146, and my first explanation of it was on post#2659 on page 133, and you were very thankful too.
The dependencies built into maxlevelling made it so there is a single perfect setting for general use, although once you understand the finer details then alterations can be made.
-------
Gillymoth Tip#2931 (page 146)
"you could do it the same way as I do exposed foundations for my buildings,
tree roots would be handled exactly the same, just use these three together:
embed_into_distance="how deep you want the roots"
max_leveling="how deep you want the roots" (same as number for embed_into_distance)
leveling_buffer=-1
setting the leveling buffer to -1 keeps it from filing ANY land (above the first layer),
and when used in conjunction with embed into distance, you get exposed foundations, and it still places on rough land.
-------
If max_levelling is larger than embed_into_distance, there is a chance the edges of the template will be floating in air, but the larger the number, the better the chance to spawn, considering rough terrain, so there is a balancing act. One has to decide how many layers they can add to the foundation that don't cost too much in terms of generation time, although each block set by ruins is infinitesimal, it adds up fast, so this cost becomes part of the considerations in making structures.
Specific cases such as max_levelling would be set to 0 to keep ships at sea from running aground, are exceptions to my general rule, but I designed the guideline to help new players get started, as 3 years ago there were several players starting to make templates, and we were all sharing tips on how to streamline the process, as there are extra steps past simply building the structure itself that go into making a complete template.
@jordan, I remember when I explained to you how to use my combination of settings levelling_buffer, Maxleveling, and embedintodistance in order to make perfect foundations, in post#2931 on page 146, and my first explanation of it was on post#2659 on page 133, and you were very thankful too.
Yes, I include that under what I referred to obliquely as "subsequently being corrected by more knowledgeable persons," and I'm still thankful. Your solution is far more elegant than my Command Block "seed" method.
@kashdeya ill look into this and edit in the results of the tests
When I was setting up the offsets for sections of my desert obelisk in 1.12, whenever a part was moved temporarily below the world floor, it would mess up the final position of that section, as all the sections had to be aligned perfectly, and the temporary move was truncating on the world floor, as it called another template when from below the world limit, although I've had interesting placement of vertical builds showing up in only the bottom 10 blocks of the world, despite being 100 blocks tall.
There are two fields in the random height offset, a min and a max, this could be a cause of unintended placement:
random_height_offset=-20,4
It adjusts the placement height finding a spot between the two numbers.
The embed into distance won't need to be any more than 255 at the very most, again the aforementioned truncation could show up in different ways depending on whether the data is stored as a byte.
Remembering the above details, I suggest calling another template from the first one while it's below the world limit, and that should truncate the position, setting it to zero as a starting point, then the second template won't need any further height adjustment. Try both adjoiningTemplate and ruinstrigger: /testruin with a zero for the y-coord.
Further detailing the /testruin command, the long form is this:
/testruin templatenameandfilepath x y z rotation
Realizing that I type rather ambiguously, what you want to do is call the template that is supposed to spawn with a Proxy template, and contained in the proxy template is either adjoiningTemplate or /testruin, and use an Absolute Y coordinate of Zero, (just a straight number 0, without the tilde ~) and of course the proxy itself being sunk down to the lower worldlimit.
I hope this helps, below is one of my more recent temples with the obelisk in the background, after fixing the above truncation of vertical sections caused by calling templates from below the world limit (that was in one of the early calibration tests). The latest version ended up being a single piece build, as all the complexity for making random glyphs on the sides became an unnecessary detail.
Hello everyone. It's been a while since I posted on here. A while back, I made a Color Temple. It spawns in 1 of 6-7 different color possibilities (complete with different enemies, chests, etc... The top of the color temple appears above ground, while the rest of it is underground.
The top part of it is supposed to be like a cave entrance. I want to get it so it spawns along a rock face and positioned so that the base of that cave entrance is level with the ground. What would be the best way to achieve this effect? As it stands right now, I'll occasionally end up with the base of the entrance hovering in the air above the ground in areas where there are varying elevations. Is there a way to change where the ruin checks for level ground at on the Ruin? Thanks.
There are several ways to solve this, depending on the style of the building. I have built a lot of structures, each with different ways of joining the entrance seamlessly into the terrain. The problem you're having is caused in part by the entrance being greatly offset from the center (the handle) of the structure, which is compounded by expecting a certain terrain feature to build into.
I spend a lot of time on each structure's entrance so that no matter if the land around it is higher or lower by a lot, it still connects the floor with the surrounding terrain, and so that the structure looks good either buried or exposed.
Moving the handle requires a proxy template, calling the structure with an offset to the X and Z coordinates to line up the entrance with the place where the proxy sets down. Using /testruin each of the 4 rotations can be placed, but be aware that preventRotation can propagate down to the called templates. Furthermore, offsetting the entire structure in this way can greatly magnify the rift between the structure and the ground level, which can be fixed by having the main chambers set in much deeper. Then you start to see how the solutions to these problems start to determine certain defining characteristics of the structure itself.
I have built dozens of mineshafts, underground facilities, desert wells, etc, with every kind of staircase and ladder connecting to the surface, with all sorts of surface structures set into the terrain, and the most important advice is simply to be adaptive. Often I'm building something and it becomes another thing entirely, or adapts to another seemingly unrelated build. Another consideration is that in presenting a single solution it could greatly influence the final shape of what you are trying to make, as my technical solutions are tightly woven into my aesthetic style.
There are several ways to solve this, depending on the style of the building. I have built a lot of structures, each with different ways of joining the entrance seamlessly into the terrain. The problem you're having is caused in part by the entrance being greatly offset from the center (the handle) of the structure, which is compounded by expecting a certain terrain feature to build into.
I spend a lot of time on each structure's entrance so that no matter if the land around it is higher or lower by a lot, it still connects the floor with the surrounding terrain, and so that the structure looks good either buried or exposed.
Moving the handle requires a proxy template, calling the structure with an offset to the X and Z coordinates to line up the entrance with the place where the proxy sets down. Using /testruin each of the 4 rotations can be placed, but be aware that preventRotation can propagate down to the called templates. Furthermore, offsetting the entire structure in this way can greatly magnify the rift between the structure and the ground level, which can be fixed by having the main chambers set in much deeper. Then you start to see how the solutions to these problems start to determine certain defining characteristics of the structure itself.
I have built dozens of mineshafts, underground facilities, desert wells, etc, with every kind of staircase and ladder connecting to the surface, with all sorts of surface structures set into the terrain, and the most important advice is simply to be adaptive. Often I'm building something and it becomes another thing entirely, or adapts to another seemingly unrelated build. Another consideration is that in presenting a single solution it could greatly influence the final shape of what you are trying to make, as my technical solutions are tightly woven into my aesthetic style.
Well, if this proxy template you are referring to is a template that calls the main template, then I already have that set up. That was the best way I could come up with to allow each of the spawned temples to have different enemy spawns, chest contents, color decorations, etc. If you want I can share what I made with you and you could take a look and run through the process of what I need to do to. Mine is capable of working with vanilla Minecraft.
Can anyone tell me how can I make a underground structure spawn on bedrock? I have used the following but it dont seem to work in 1.12
embed_into_distance=999
random_height_offset=3
acceptable_target_blocks=bedrock
Is there something I am missing or has something changed in 1.12 that I overlooked?
My at-first-glance theory: The problem is "acceptable_target_blocks" in the above. Just set it to blank, and leave "bedrock" out of it.
In an attempt to explain how this works, imagine that when Ruins is going to build a new structure (and it has gone through the process of randomly picking a template from those available), in a newly-generated chunk of terrain, it randomly picks a location on the surface of the world within that area.
The "surface" of the world in this case is basically the first non-air block that would be encountered if you were looking down from the sky in exactly that spot. (So, if you've got a mod such as Tinkers' Construct that adds sky islands to the world, "ground level" might actually end up being higher than expected. Natura's "clouds" can end up being a valid target as well.)
Note: I THINK there may be a few block types that are routinely ignored by this routine as if they were "air" -- snow_layer, tallgrass, red_flower, yellow_flower -- but I don't know the complete list.
If you set it to ignore water, it will treat water blocks the same as air, for purposes of finding "ground level" -- so it'll keep going until you hit ocean bottom. (Otherwise, water would be a perfectly valid place to pick a start location by default.) Ditto for options to ignore plants or lava.
Then, it's going to look at what type of block is has encountered and compare it to your "acceptable" and "unacceptable" target block lists. If you have specified "acceptable" target blocks, then the target block needs to be on that list, or the routine will simply abort attempting to build at that point. If the field is left blank, it will skip this check and continue.
Bedrock is *NOT* going to naturally spawn at the surface. Therefore, if you have "acceptable_target_blocks" equal to "bedrock," it's just not going to happen. A few versions of Ruins/Minecraft ago, the only place where this could have worked was in the Hell/Nether, because the top of the world was a big layer of bedrock, and for a while, structures would actually spawn there. (This led to a lot of bizarre situations, especially if any of them broke through the otherwise impenetrable bedrock layer, so people could burrow their way up to the "Limbo" area and then go exploring the various oddball structures that popped up.)
"unacceptable_target_blocks" will check the other side of things: If the target block is on this list, it will NOT build in that location. By default, new templates generated with /parseruin will fill this field with "flowing_water, water, flowing_lava, lava" under the assumption that a typical Ruins structure should be built on land. I *think* but cannot be absolutely certain that if ANY block within the potential "footprint" area of the building zone happens to be on this exclusion list, it will not build the structure. I did some experimentation with some of my Beach biome "sand castle" structures, and it *seemed* to behave that way, but I think I was told by someone on here that I was simply WRONG about that a while back. So take that with a grain of salt.
My personal recommendation is to leave unacceptable_target_blocks empty. Even if you're using a mod that adds "sky islands" to the mix, if you're setting to "embed_into_distance=999," that should be a moot point.
Now, the program will check a few other things, such as how level the build zone is, and how *intact* the build zone is. "max_leveling" is ostensibly used to flatten out the building zone, /to a certain extent/, before it starts building. Yes, I know, you're intending to build something down on bedrock, so it simply *does not matter* what the surface area looks like, but the program isn't that savvy.
My recommendation: set "max_leveling=16" (or some arbitrarily high number -- though it generally needn't be any higher than the maximum x/z dimensions of your structure), set "allowable_overhang=999" (again, some arbitrarily high number), and set "leveling_buffer=-1".
The reason for "leveling_buffer=-1" is to simply switch off the leveling process. Otherwise, any time your bedrock structure spawns into the world, there's going to be a weird flattened-out zone at ground level directly above it.
At this point, since you've set "embed_into_distance=999", then regardless of what is on the surface, the routine should proceed to pop down 999 levels ... except that it's going to hit zero first, and it can't very well go below that. So, your structure will be built with its bottom-most layer at the absolutely lowest possible point in a Minecraft world, which would be at the bottom bedrock layer.
Now, unless part of the fun here is that you want it to be POSSIBLE for someone to discover your secret dungeon at bedrock level and to fall through into the void underneath the world, I would suggest that you make AT LEAST one bottom layer of your structure to be solid bedrock. Otherwise, your structure is going to displace the existing bedrock. Unless you deliberately want your structure to have a "basement" sunk into bedrock, I'd recommend that you make the bottom 4 or 5 layers bedrock so the structure will be atop the area that is normally bedrock in a typical Minecraft world.
Possible Complication: However, you've also got a random height offset specified, so we don't know *exactly* where it's going to start (somewhere from layer 0 to layer 3, I guess), so that might not be applicable. I don't know what happens if the "random offset" would push it down below 0. I imagine it's going to stop at 0, rather than going down any deeper, but I haven't tried that.
This is a suggestion... (I'm sure it has been mentioned a thousand times.... ) All templates should be default to making ice an unacceptable target block. (-_-;) I forgot to do that when I started my new instance and now I have structures on the ice. [Rant over]
Well, if this proxy template you are referring to is a template that calls the main template, then I already have that set up. That was the best way I could come up with to allow each of the spawned temples to have different enemy spawns, chest contents, color decorations, etc. If you want I can share what I made with you and you could take a look and run through the process of what I need to do to. Mine is capable of working with vanilla Minecraft.
I came up with an idea.... As I noted, I have a template that calls in another template (so, it is just a one block structure). If I were to put a layer below it and use preserveBlock, I could create a platform that can then be used to checking purposes. Simply put, I don't want it spawning where there isn't solid ground in front of the entrance. Would that be a viable solution in this case? In this instance, it would check for solid ground underneath the platform, if if there isn't any, it doesn't build in that spot. Then just set an embed_into_distance down to compensate for the platform. I may have to test this out.... Hmmmm... [pondering]
That... actually.... sounds like it might be exactly right.
I'm going to try it but first I have bigger fish to fry.
So all of my Ruins stuff is done on my main computer, which hasn't connected to the internet in like 6 months, so I have to transfer all things to my laptop.
Recently I decided it would be fun to do something stupid and completely re-write all the ruins content by deleting every folder related to it. Somehow I'm also stupid enough to have already deleted all of that from the recycle bin. Is it possible to fix the problem without reconnecting to the internet or can I just download what I need from this computer (my laptop) and transfer it by flash drive?
This is one reason why my "seeder" structures typically stack a bunch of Command Blocks on top of each other vertically, rather than spreading them out over a space -- or if I'm using Command Blocks to spawn special features in place (a treasure chest with a "magic book" in it, for instance, or a painting on a wall), I place the Command Block above or below the position I want, rather than offset by any value of X or Z. That way, rotation shouldn't be an issue affecting their relative placement.
For those structures (such as my "haunted mineshaft") where I do have Command Blocks that are located at the extremities of the seed structure (i.e., where I want to spawn tunnels to branch off from the main structure), I use preventRotation=1 to prevent such shenanigans.
--- Jordan's & Kujaku10's UNOFFICIAL Custom Templates:
Greywolf's Minecraft Ruins (MC versions 1.7.10-1.12.2; requires AtomicStryker's "Ruins" mod)
Latest Updates: v1.7 (May 2018) * v1.8 (Jun 2016) * v1.9 (Sep 2016) * v1.10 (Jan 2017) * v1.11 (Apr 2018) * v1.12.* (Dec 2018)
can sombody here tell me how i would go about making a structure that intentionally has air in specific places?
for example i want to mkae custom-shaped cave rooms, and the way i'm trying to do that is to use glass as a placeholder and then replacing "glass" with "air" in the file, but its not working, because thats the same as using "preserveBlock"
EDIT: i fifured it out; but now the ruin spawns with 2 additional layers of just air at the bottom for some reason.
To right the un-rightable wrong, To love pure and chaste from afar, To try when your arms are too weary, To reach the unreachable star.
You're doing exactly the right thing, but...any chance you're using "minecraft:air" instead of just plain "air"? There's a known bug that causes Ruins to think they're two different blocks, and "minecraft:air" is unrecognized as a result. Usually. And unrecognized blocks are treated as "preserveBlock". Kind of. It's complicated.
Bottom line: Change all the "minecraft:air" blocks to "air", and hopefully you'll get the results you expect. The next release of Ruins already contains a fix for this, but "air" should get you where you want to go for now. It'll still work fine after the fix, too, so you won't need to switch back to "minecraft:air" unless you really, really want to.
If that doesn't work, or you're already using "air", then you've uncovered a different problem. Let us know!
EDIT: Try setting "max_leveling=0" in your template file and see if that makes the bubble of air under your structure go away. I believe it defaults to 2.
@QuarterAnimal: Thanks for the tip! I didn't know about the "minecraft:air" bug. This might explain a few irregularities I have had in my own attempts at having "forced" air in an underwater structure (stuff that led me to messing around with tricks via tripwire, etc.).
--- Jordan's & Kujaku10's UNOFFICIAL Custom Templates:
Greywolf's Minecraft Ruins (MC versions 1.7.10-1.12.2; requires AtomicStryker's "Ruins" mod)
Latest Updates: v1.7 (May 2018) * v1.8 (Jun 2016) * v1.9 (Sep 2016) * v1.10 (Jan 2017) * v1.11 (Apr 2018) * v1.12.* (Dec 2018)
It's usually best to turn auto-levelling off completely with levelling_buffer=-1, as preserveBlock is better adapted to specific structure details in smoothing areas into existing landforms.
Instead of breaking out huge amounts of glass and risk breaking random blocks in the walls, I just /fill the entire template with water and sponge out the spots that need to be air, then /fill the remaining water into a color of wool that isn't used in the build for preserveBlock, since water can have several damage values and hence several rules for it. Lastly /fill the sponges with air.
These are the settings I use, with the player standing in the center of the template:
/fill ~slightlyaboveXradius ExactUpperY ~slightlyaboveZradius ~-slightlyaboveXradius ExactLowerY ~-slightlyaboveZradius water 0 replace air
/fill ~XasAbove Ytop ~ZasAbove ~-XasAbove Ybot ~-ZasAbove air 0 replace sponge
/fill ~XasAbove Ytop ~ZasAbove ~-XasAbove Ybot ~-ZasAbove wool 1 replace water
The replace setting lets me decide which set of blocks within the area will be set without overwriting any other blocks.
Things like window openings will need to be plugged (with the block choice for preserveBlock) to keep the sponge from affecting areas outside. Of course, sponges have a limited area of effect, which should be considered when choosing the way.
Also the blocks themselves used is important, since there are several blocks that break instantly in survival, also leaves and other colors of glass that are intended to stay in the build that can be carelessly broken by hand.
If there is water in the build itself, the water can be /fill replaced with something unused like another color of wool or whatever one decides, or something that will stand out easily if not changed back to the block it's supposed to be.
Each of us will have personal favorites for these. I often use a gold block to mark the position of command blocks, and sometimes an iron block. I use all the ores to make specific patterns in the floor that later become different kinds of stone/stonebrick/cobble in different proportions to make subtle interesting patterns show up. Unused types of stairs are useful for direction-sensitive randomized components, and so on.
Gillymoth Structures for Ruins <<< Folder containing my Structure-sets for Ruins mod.
I don't know that I'd recommend using "leveling_buffer=-1" to turn off leveling. It does do that, but leveling_buffer is used in other contexts as well, expanding (or--in the case of negative values--contracting) the X and Z dimensions of your structure's bounding box. One unfortunate consequence, for example, would be its preventing the /undoruin command from removing all associated blocks. Other mods subscribing to Ruins events would also be misinformed as to the structure's size. Of course, if you never use /undoruin or mods that listen for Ruins events, that's not an issue. Still...I'd suggest using "max_leveling=0" instead. That effectively turns off leveling, but has the advantage of being only used for leveling. No nasty side effects.EDIT: It occurs to me another more or less compelling reason for preferring "max_leveling=0" over "leveling_buffer=-1" is that, conceptually, a negative leveling_buffer value should merely constrain the effects of leveling within the XZ footprint of a structure, not stop leveling altogether. Now, it just so happens the code currently has a special case in which it skips leveling if the buffer is negative, and--while that special case will likely remain for the foreseeable future--it's best considered a deprecated feature. Because "leveling_buffer=-1" is more of an exploit than an intended use, there's no guarantee it will work in later versions. Setting max_leveling to 0, on the other hand, will always work, since that's exactly what it means: no leveling.EDIT: I was wrong about max_leveling being used just for leveling, and setting it to 0 having no nasty side effects (see Jordan_Peacock's post, below). It's also used as a "lumpiness tolerance," and a value of 0 may be undesirably restrictive, preventing a template from being instantiated on anything but perfectly flat terrain. It looks like there is no ideal solution, but setting leveling_buffer to -1 and max_leveling to a smallish positive value--or leaving it at the default value of 2--is probably the best general workaround, at least for now. While it does slightly muck up the structure's bounding box, the downside of that is negligible for most purposes. Sorry, Gillymoth; you were right all along.
I have noticed it replaces a little off when doing /undoruin, but a good /fill usually takes care of that (when working in mid air). The very first structure with a foundation I made a few years ago I did use levelling_buffer=-3, in the hope that it would trim back exactly that far as it went with how far in the walls were, so good to know that detail was confirmed.
Gillymoth Structures for Ruins <<< Folder containing my Structure-sets for Ruins mod.
@Gillymoth: Hasn't /undoruin ALWAYS been broken? It always leaves two edges of the structure in place above-ground (only visible of course if you've actually got blocks going out that far), and if there was anything embedded into the ground (i.e., a basement), that ends up staying in place. It's been that way for me for several versions now -- well before I ever learned that "leveling_buffer=-1" was even an option. I thought that had been brought up before (with screenshots).
@QuarterAnimal: As I (mis?)understood it, max_leveling not only sets how many levels of terrain the Ruins spawner is going to flatten out to make a foundation for the Ruins structure, but it also serves as a factor in deciding whether a given location is a valid building spot. The higher the max_leveling, the more likely that it will be willing to build on a "slope." Set it to max_leveling=0, and I thought that would necessarily mean the structure won't spawn except on a perfectly flat spot. (I'm not entirely sure how "allowable_overhang" plays into this, but I'd wildly guessed that a higher value was involved in how many blocks in the desired "footprint" could be missing and it would still count as a valid area.)
In any case, for structures like giant gnarled oak trees (with "root systems") that I wanted to be able to spawn on hillsides just as easily as plains, the only combo I was able to find that worked (i.e., DOES NOT flatten out the surrounding area, AND lets me build on less-than-perfect footprint areas) was max_leveling set to some high number, leveling_buffer=-1, and (not sure what good it did, but it didn't seem to hurt) allowable_overhang set to a high number. Otherwise, to get the same effect I had to pull stunts like having a 1x1 footprint "structure" that consisted of a Command Block buried a few spaces down into the ground that had RUINSTRIGGER and a /testruin call to the "real" structure (the tree, surrounded by lots of preserveBlock) into place.
I won't be terribly surprised if I'm just horribly wrong on this, because I don't have a knack for intuiting the inner workings of programs without some sort of documentation that sums up that functionality. Mostly I've just been learning by observing others' templates, playing with settings, and posting erroneous claims to the forum (and subsequently being corrected by more knowledgeable persons), when the included instructions don't quite fill in all the gaps for me.
P.S., ARE there any mods that "subscribe to Ruins events"?
--- Jordan's & Kujaku10's UNOFFICIAL Custom Templates:
Greywolf's Minecraft Ruins (MC versions 1.7.10-1.12.2; requires AtomicStryker's "Ruins" mod)
Latest Updates: v1.7 (May 2018) * v1.8 (Jun 2016) * v1.9 (Sep 2016) * v1.10 (Jan 2017) * v1.11 (Apr 2018) * v1.12.* (Dec 2018)
@Jordan_Peacock: No, you've got it exactly right on all counts. I was wrong; I missed the additional use of max_leveling as a tolerance for uneven terrain. Your description of allowable_overhang is also correct. Its value is the number of blocks in the footprint that can be missing (although the definition of "missing" may not be quite what you expect, especially for tall structures).
The interaction between leveling_buffer, max_leveling, allowable_overhang, embed_into_distance, random_height_offset, and the structure's height (and, to some extent, acceptable_target_blocks, unacceptable_target_blocks, preserve_water, preserve_lava, and rule0) is pretty hard to characterize definitively in a handful of sentences. For most templates, doing what Gillymoth suggested--setting leveling_buffer=-1 and leaving max_leveling at its default of 2--is the way to go. In extreme cases, such as tall or deeply embedded structures, or for special effects (e.g., your example of hillside spawns), you'll just have to experiment to get the results you're looking for.
As for mods that subscribe to Ruins events, I only know of one: Ruins. That's why /undoruin doesn't work--it gets the volume of blocks to revert from the event, and is therefore messed up by the incorrect bounding box dimensions when leveling_buffer is negative. (Well...it has other problems, too, but that's certainly one of them.) I suspect it's unlikely there are other mods out there that use the event, at least in wide circulation, but there's no easy way to know. All I can say is it's part of the Ruins API, so it's possible.
@jordan, I remember when I explained to you how to use my combination of settings levelling_buffer, Maxleveling, and embedintodistance in order to make perfect foundations, in post#2931 on page 146, and my first explanation of it was on post#2659 on page 133, and you were very thankful too.
The dependencies built into maxlevelling made it so there is a single perfect setting for general use, although once you understand the finer details then alterations can be made.
-------
Gillymoth Tip#2931 (page 146)
"you could do it the same way as I do exposed foundations for my buildings,
tree roots would be handled exactly the same, just use these three together:
embed_into_distance="how deep you want the roots"
max_leveling="how deep you want the roots" (same as number for embed_into_distance)
leveling_buffer=-1
setting the leveling buffer to -1 keeps it from filing ANY land (above the first layer),
and when used in conjunction with embed into distance, you get exposed foundations, and it still places on rough land.
-------
If max_levelling is larger than embed_into_distance, there is a chance the edges of the template will be floating in air, but the larger the number, the better the chance to spawn, considering rough terrain, so there is a balancing act. One has to decide how many layers they can add to the foundation that don't cost too much in terms of generation time, although each block set by ruins is infinitesimal, it adds up fast, so this cost becomes part of the considerations in making structures.
Specific cases such as max_levelling would be set to 0 to keep ships at sea from running aground, are exceptions to my general rule, but I designed the guideline to help new players get started, as 3 years ago there were several players starting to make templates, and we were all sharing tips on how to streamline the process, as there are extra steps past simply building the structure itself that go into making a complete template.
Gillymoth Structures for Ruins <<< Folder containing my Structure-sets for Ruins mod.
Yes, I include that under what I referred to obliquely as "subsequently being corrected by more knowledgeable persons," and I'm still thankful. Your solution is far more elegant than my Command Block "seed" method.
--- Jordan's & Kujaku10's UNOFFICIAL Custom Templates:
Greywolf's Minecraft Ruins (MC versions 1.7.10-1.12.2; requires AtomicStryker's "Ruins" mod)
Latest Updates: v1.7 (May 2018) * v1.8 (Jun 2016) * v1.9 (Sep 2016) * v1.10 (Jan 2017) * v1.11 (Apr 2018) * v1.12.* (Dec 2018)
Can anyone tell me how can I make a underground structure spawn on bedrock? I have used the following but it dont seem to work in 1.12
embed_into_distance=999
random_height_offset=3
acceptable_target_blocks=bedrock
Is there something I am missing or has something changed in 1.12 that I overlooked?
@kashdeya ill look into this and edit in the results of the tests
When I was setting up the offsets for sections of my desert obelisk in 1.12, whenever a part was moved temporarily below the world floor, it would mess up the final position of that section, as all the sections had to be aligned perfectly, and the temporary move was truncating on the world floor, as it called another template when from below the world limit, although I've had interesting placement of vertical builds showing up in only the bottom 10 blocks of the world, despite being 100 blocks tall.
There are two fields in the random height offset, a min and a max, this could be a cause of unintended placement:
random_height_offset=-20,4
It adjusts the placement height finding a spot between the two numbers.
The embed into distance won't need to be any more than 255 at the very most, again the aforementioned truncation could show up in different ways depending on whether the data is stored as a byte.
Remembering the above details, I suggest calling another template from the first one while it's below the world limit, and that should truncate the position, setting it to zero as a starting point, then the second template won't need any further height adjustment. Try both adjoiningTemplate and ruinstrigger: /testruin with a zero for the y-coord.
Further detailing the /testruin command, the long form is this:
/testruin templatenameandfilepath x y z rotation
Realizing that I type rather ambiguously, what you want to do is call the template that is supposed to spawn with a Proxy template, and contained in the proxy template is either adjoiningTemplate or /testruin, and use an Absolute Y coordinate of Zero, (just a straight number 0, without the tilde ~) and of course the proxy itself being sunk down to the lower worldlimit.
I hope this helps, below is one of my more recent temples with the obelisk in the background, after fixing the above truncation of vertical sections caused by calling templates from below the world limit (that was in one of the early calibration tests). The latest version ended up being a single piece build, as all the complexity for making random glyphs on the sides became an unnecessary detail.
Gillymoth Structures for Ruins <<< Folder containing my Structure-sets for Ruins mod.
Hello everyone. It's been a while since I posted on here. A while back, I made a Color Temple. It spawns in 1 of 6-7 different color possibilities (complete with different enemies, chests, etc... The top of the color temple appears above ground, while the rest of it is underground.
The top part of it is supposed to be like a cave entrance. I want to get it so it spawns along a rock face and positioned so that the base of that cave entrance is level with the ground. What would be the best way to achieve this effect? As it stands right now, I'll occasionally end up with the base of the entrance hovering in the air above the ground in areas where there are varying elevations. Is there a way to change where the ruin checks for level ground at on the Ruin? Thanks.
There are several ways to solve this, depending on the style of the building. I have built a lot of structures, each with different ways of joining the entrance seamlessly into the terrain. The problem you're having is caused in part by the entrance being greatly offset from the center (the handle) of the structure, which is compounded by expecting a certain terrain feature to build into.
I spend a lot of time on each structure's entrance so that no matter if the land around it is higher or lower by a lot, it still connects the floor with the surrounding terrain, and so that the structure looks good either buried or exposed.
Moving the handle requires a proxy template, calling the structure with an offset to the X and Z coordinates to line up the entrance with the place where the proxy sets down. Using /testruin each of the 4 rotations can be placed, but be aware that preventRotation can propagate down to the called templates. Furthermore, offsetting the entire structure in this way can greatly magnify the rift between the structure and the ground level, which can be fixed by having the main chambers set in much deeper. Then you start to see how the solutions to these problems start to determine certain defining characteristics of the structure itself.
I have built dozens of mineshafts, underground facilities, desert wells, etc, with every kind of staircase and ladder connecting to the surface, with all sorts of surface structures set into the terrain, and the most important advice is simply to be adaptive. Often I'm building something and it becomes another thing entirely, or adapts to another seemingly unrelated build. Another consideration is that in presenting a single solution it could greatly influence the final shape of what you are trying to make, as my technical solutions are tightly woven into my aesthetic style.
Gillymoth Structures for Ruins <<< Folder containing my Structure-sets for Ruins mod.
Well, if this proxy template you are referring to is a template that calls the main template, then I already have that set up. That was the best way I could come up with to allow each of the spawned temples to have different enemy spawns, chest contents, color decorations, etc. If you want I can share what I made with you and you could take a look and run through the process of what I need to do to. Mine is capable of working with vanilla Minecraft.
Color Temple Project
My at-first-glance theory: The problem is "acceptable_target_blocks" in the above. Just set it to blank, and leave "bedrock" out of it.
In an attempt to explain how this works, imagine that when Ruins is going to build a new structure (and it has gone through the process of randomly picking a template from those available), in a newly-generated chunk of terrain, it randomly picks a location on the surface of the world within that area.
The "surface" of the world in this case is basically the first non-air block that would be encountered if you were looking down from the sky in exactly that spot. (So, if you've got a mod such as Tinkers' Construct that adds sky islands to the world, "ground level" might actually end up being higher than expected. Natura's "clouds" can end up being a valid target as well.)
Note: I THINK there may be a few block types that are routinely ignored by this routine as if they were "air" -- snow_layer, tallgrass, red_flower, yellow_flower -- but I don't know the complete list.
If you set it to ignore water, it will treat water blocks the same as air, for purposes of finding "ground level" -- so it'll keep going until you hit ocean bottom. (Otherwise, water would be a perfectly valid place to pick a start location by default.) Ditto for options to ignore plants or lava.
Then, it's going to look at what type of block is has encountered and compare it to your "acceptable" and "unacceptable" target block lists. If you have specified "acceptable" target blocks, then the target block needs to be on that list, or the routine will simply abort attempting to build at that point. If the field is left blank, it will skip this check and continue.
Bedrock is *NOT* going to naturally spawn at the surface. Therefore, if you have "acceptable_target_blocks" equal to "bedrock," it's just not going to happen. A few versions of Ruins/Minecraft ago, the only place where this could have worked was in the Hell/Nether, because the top of the world was a big layer of bedrock, and for a while, structures would actually spawn there. (This led to a lot of bizarre situations, especially if any of them broke through the otherwise impenetrable bedrock layer, so people could burrow their way up to the "Limbo" area and then go exploring the various oddball structures that popped up.)
"unacceptable_target_blocks" will check the other side of things: If the target block is on this list, it will NOT build in that location. By default, new templates generated with /parseruin will fill this field with "flowing_water, water, flowing_lava, lava" under the assumption that a typical Ruins structure should be built on land. I *think* but cannot be absolutely certain that if ANY block within the potential "footprint" area of the building zone happens to be on this exclusion list, it will not build the structure. I did some experimentation with some of my Beach biome "sand castle" structures, and it *seemed* to behave that way, but I think I was told by someone on here that I was simply WRONG about that a while back. So take that with a grain of salt.
My personal recommendation is to leave unacceptable_target_blocks empty. Even if you're using a mod that adds "sky islands" to the mix, if you're setting to "embed_into_distance=999," that should be a moot point.
Now, the program will check a few other things, such as how level the build zone is, and how *intact* the build zone is. "max_leveling" is ostensibly used to flatten out the building zone, /to a certain extent/, before it starts building. Yes, I know, you're intending to build something down on bedrock, so it simply *does not matter* what the surface area looks like, but the program isn't that savvy.
My recommendation: set "max_leveling=16" (or some arbitrarily high number -- though it generally needn't be any higher than the maximum x/z dimensions of your structure), set "allowable_overhang=999" (again, some arbitrarily high number), and set "leveling_buffer=-1".
The reason for "leveling_buffer=-1" is to simply switch off the leveling process. Otherwise, any time your bedrock structure spawns into the world, there's going to be a weird flattened-out zone at ground level directly above it.
At this point, since you've set "embed_into_distance=999", then regardless of what is on the surface, the routine should proceed to pop down 999 levels ... except that it's going to hit zero first, and it can't very well go below that. So, your structure will be built with its bottom-most layer at the absolutely lowest possible point in a Minecraft world, which would be at the bottom bedrock layer.
Now, unless part of the fun here is that you want it to be POSSIBLE for someone to discover your secret dungeon at bedrock level and to fall through into the void underneath the world, I would suggest that you make AT LEAST one bottom layer of your structure to be solid bedrock. Otherwise, your structure is going to displace the existing bedrock. Unless you deliberately want your structure to have a "basement" sunk into bedrock, I'd recommend that you make the bottom 4 or 5 layers bedrock so the structure will be atop the area that is normally bedrock in a typical Minecraft world.
Possible Complication: However, you've also got a random height offset specified, so we don't know *exactly* where it's going to start (somewhere from layer 0 to layer 3, I guess), so that might not be applicable. I don't know what happens if the "random offset" would push it down below 0. I imagine it's going to stop at 0, rather than going down any deeper, but I haven't tried that.
--- Jordan's & Kujaku10's UNOFFICIAL Custom Templates:
Greywolf's Minecraft Ruins (MC versions 1.7.10-1.12.2; requires AtomicStryker's "Ruins" mod)
Latest Updates: v1.7 (May 2018) * v1.8 (Jun 2016) * v1.9 (Sep 2016) * v1.10 (Jan 2017) * v1.11 (Apr 2018) * v1.12.* (Dec 2018)
This is a suggestion... (I'm sure it has been mentioned a thousand times.... ) All templates should be default to making ice an unacceptable target block. (-_-;) I forgot to do that when I started my new instance and now I have structures on the ice. [Rant over]
I came up with an idea.... As I noted, I have a template that calls in another template (so, it is just a one block structure). If I were to put a layer below it and use preserveBlock, I could create a platform that can then be used to checking purposes. Simply put, I don't want it spawning where there isn't solid ground in front of the entrance. Would that be a viable solution in this case? In this instance, it would check for solid ground underneath the platform, if if there isn't any, it doesn't build in that spot. Then just set an embed_into_distance down to compensate for the platform. I may have to test this out.... Hmmmm... [pondering]