From b121d0f8040eea7bbe78eb3910fc02dc2af2e1af Mon Sep 17 00:00:00 2001 From: emptyshore Date: Tue, 14 Feb 2023 12:42:26 +1300 Subject: [PATCH] Prevent placement of fire into nodes above water This addresses the edge case where fire is set to the top of a non-water block that represents water (such as kelp). Note this is forbidding theoretically legitimate setups for fire over water where fire is set to the side of a block diagonally from the water. Fire is still permitted next to water (so it can be set to the face of a block diagonally from a water column). --- mods/ITEMS/mcl_fire/init.lua | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/mods/ITEMS/mcl_fire/init.lua b/mods/ITEMS/mcl_fire/init.lua index 8827b9f9a..70e0769c4 100644 --- a/mods/ITEMS/mcl_fire/init.lua +++ b/mods/ITEMS/mcl_fire/init.lua @@ -448,18 +448,28 @@ function mcl_fire.set_fire(pointed_thing, player, allow_on_fire) else pname = player:get_player_name() end - local n = get_node(pointed_thing.above) - local nu = get_node(pointed_thing.under) - if allow_on_fire == false and get_item_group(nu.name, "fire") ~= 0 then - return - end + if minetest.is_protected(pointed_thing.above, pname) then minetest.record_protection_violation(pointed_thing.above, pname) return end - if n.name == "air" then - add_node(pointed_thing.above, {name="mcl_fire:fire"}) + + local n_pointed = minetest.get_node(pointed_thing.under) + if allow_on_fire == false and get_item_group(n_pointed.name, "fire") ~= 0 then + return end + + local n_fire_pos = minetest.get_node(pointed_thing.above) + if n_fire_pos.name ~= "air" then + return + end + + local n_below = minetest.get_node(vector.offset(pointed_thing.above, 0, -1, 0)) + if minetest.get_item_group(n_below.name, "water") ~= 0 then + return + end + + add_node(pointed_thing.above, {name="mcl_fire:fire"}) end minetest.register_lbm({