Fixes: #3913#3915
~~You can reproduce the crash by placing a fish bucket on top snow above an unknown node.
I also noticed that the code always uses pointed_thing.above so I fixed that and also added a function to mcl_utils to figure out where a node should be placed (either above or below). Looks like the rest of the code could also use improvement but at least it does not crash now.~~
Cora fixed a bunch of related crashes in Mineclona so I am replacing my commit and cherry picking all her commits here.
https://codeberg.org/mineclonia/mineclonia/pulls/549
Here is the list of fixes from that PR:
- Crash when placing snow layer on unknown nodes
- Crash when snow layers on unknown nodes are flooded
- Crash when placing fishbucket on snow on top of unknown nodes
- Crash when placing chorus flower and stem on unknown
- Crash when placing mob spawners on unknown
- The fishbucket on place to actually replace buildable_to
Co-authored-by: cora <coradelamouche@gmx.ch>
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/3914
Reviewed-by: ancientmarinerdev <ancientmariner_dev@proton.me>
Co-authored-by: 𝕵𝖔𝖍𝖆𝖓𝖓𝖊𝖘 𝕱𝖗𝖎𝖙𝖟 <mrrar@noreply.git.minetest.land>
Co-committed-by: 𝕵𝖔𝖍𝖆𝖓𝖓𝖊𝖘 𝕱𝖗𝖎𝖙𝖟 <mrrar@noreply.git.minetest.land>
This pull request renames buckets so that they use the `mcl_` naming convention.
I originally was going to do some renaming on a bigger scope, but decided against it for now.
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/3708
Reviewed-by: ancientmarinerdev <ancientmariner_dev@proton.me>
Co-authored-by: FossFanatic <fossfanatic@noreply.git.minetest.land>
Co-committed-by: FossFanatic <fossfanatic@noreply.git.minetest.land>
The function on_place_bucket defined a couple of variables that were
used only once or in a redundant check. After removal of the redundant
check in a previous commit, all use-once variables can now be substituted
with their assignment expressions.
The function on_place_bucket contains the following logic:
if not a and not b then return x end
if a then
foo(a)
elseif b then
foo(b)
else
return x
end
The "if not a and not b then .." is removed because the case is handled
by the else case later on. This will allow some further simplifications.