From 56f7093834a010d2553ee508a29ffdfa7472f9b0 Mon Sep 17 00:00:00 2001 From: JoseDouglas26 Date: Wed, 22 May 2024 18:13:52 -0300 Subject: [PATCH] Changes on slab placement checks --- mods/ITEMS/mcl_stairs/api.lua | 39 +++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/mods/ITEMS/mcl_stairs/api.lua b/mods/ITEMS/mcl_stairs/api.lua index bebe7ba99..c580e2bba 100644 --- a/mods/ITEMS/mcl_stairs/api.lua +++ b/mods/ITEMS/mcl_stairs/api.lua @@ -237,30 +237,43 @@ function mcl_stairs.register_slab(subname, recipeitem, groups, images, descripti fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, }, on_place = function(itemstack, placer, pointed_thing) - local under = minetest.get_node(pointed_thing.under) + if not placer then return end + + local above = pointed_thing.above + local under = pointed_thing.under + local anode = minetest.get_node(above) + local unode = minetest.get_node(under) + local adefs = minetest.registered_nodes[anode.name] + local udefs = minetest.registered_nodes[unode.name] local wield_item = itemstack:get_name() - local creative_enabled = minetest.is_creative_enabled(placer:get_player_name()) + local player_name = placer:get_player_name() + local creative_enabled = minetest.is_creative_enabled(player_name) -- place slab using under node orientation - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) + local dir = vector.subtract(above, under) + local p2 = unode.param2 - local p2 = under.param2 + if minetest.is_protected(under, player_name) and not + minetest.check_player_privs(placer, "protection_bypass") then + minetest.record_protection_violation(under, player_name) + return + end -- combine two slabs if possible -- Requirements: Same slab material, must be placed on top of lower slab, or on bottom of upper slab - if (wield_item == under.name or (minetest.registered_nodes[under.name] and wield_item == minetest.registered_nodes[under.name]._mcl_other_slab_half)) and + if (wield_item == unode.name or (udefs and wield_item == udefs._mcl_other_slab_half)) and not ((dir.y >= 0 and minetest.get_item_group(under.name, "slab_top") == 1) or (dir.y <= 0 and minetest.get_item_group(under.name, "slab_top") == 0)) then - local player_name = placer:get_player_name() - if minetest.is_protected(pointed_thing.under, player_name) and not - minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pointed_thing.under, - player_name) - return + minetest.set_node(under, {name = double_slab, param2 = p2}) + + if not creative_enabled then + itemstack:take_item() end - local newnode = double_slab - minetest.set_node(pointed_thing.under, {name = newnode, param2 = p2}) + return itemstack + elseif (wield_item == anode.name or (adefs and adefs._mcl_other_slab_half)) then + minetest.set_node(above, {name = double_slab, param2 = p2}) + if not creative_enabled then itemstack:take_item() end