Decoration API: Add flag for placement on liquid surface #3274
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add findLiquidSurface() function to mapgen.cpp
Update lua_api.txt
Currently a mess is made if water level is changed in mgv5/mgv7. Water lily and papyrus schematics appear at the wrong altitude, the water node placed by the waterlily schematic causes floods. This reminded me to add the long-overdue option of placing decorations on a liquid surface.
The new findLiquidSurface() function searches downwards through a mapchunk column and returns the level of the first liquid node found, if ground is found first the function returns -31000 disabling the decoration placement, this is to prevent decorations being placed under overhangs and in dark places.
Placing waterlilies this way does not allow random rotation, so a follow-up commit could add optional random rotation to simple decorations.
Keeping the waterlilies in shallow water will be another issue but can be solved using biome definitions (making swamp biomes shallower). Anyway it's not absolutely certain we will stop using schematics for waterlilies.
Works for schematic decorations too: