diff options
Diffstat (limited to 'stairsplus.lua')
-rw-r--r-- | stairsplus.lua | 73 |
1 files changed, 13 insertions, 60 deletions
diff --git a/stairsplus.lua b/stairsplus.lua index c99ffd2..c03a3e9 100644 --- a/stairsplus.lua +++ b/stairsplus.lua @@ -14,22 +14,6 @@ local dirs1 = { 21, 20, 23, 22, 21 } local dirs2 = { 15, 8, 17, 6, 15 } local dirs3 = { 14, 11, 16, 5, 14 } -stairsplus_players_onwall = {} - -minetest.register_chatcommand("st", { - params = "", - description = "Toggle stairsplus between placing wall/vertical stairs/panels and normal.", - func = function(name, param) - stairsplus_players_onwall[name] = not stairsplus_players_onwall[name] - - if stairsplus_players_onwall[name] then - minetest.chat_send_player(name, "Stairsplus: Placing wall stairs/vertical panels.") - else - minetest.chat_send_player(name, "Stairsplus: Placing floor/ceiling stairs/panels.") - end - end -}) - stairsplus_can_it_stack = function(itemstack, placer, pointed_thing) return false --[[ @@ -100,54 +84,23 @@ local function get_nodedef_field(nodename, fieldname) return minetest.registered_nodes[nodename][fieldname] end -function stairsplus_rotate_and_place(itemstack, placer, pointed_thing, onwall) - - local node = minetest.env:get_node(pointed_thing.under) - - if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then - - local above = pointed_thing.above - local under = pointed_thing.under - local top = {x=under.x, y=under.y+1, z=under.z} - - local pitch = placer:get_look_pitch() - local node = minetest.env:get_node(above) - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local wield_name = itemstack:get_name() - - local slab = string.find(wield_name, "slab") - local panel = string.find(wield_name, "panel") - local micro = string.find(wield_name, "micro") - local iswall = (above.x ~= under.x) or (above.z ~= under.z) - local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) - - if get_nodedef_field(minetest.env:get_node(under).name, "buildable_to") then - if slab then fdir = 0 end - minetest.env:add_node(under, {name = wield_name, param2 = fdir }) -- place right side up - elseif not get_nodedef_field(minetest.env:get_node(above).name, "buildable_to") then - return - elseif onwall or (iswall and (slab or panel)) then - if slab then - minetest.env:add_node(above, {name = wield_name, param2 = dirs2[fdir+2] }) -- place with wall slab rotation - else - minetest.env:add_node(above, {name = wield_name, param2 = dirs3[fdir+2] }) -- place with wall panel/micro rotation - end - elseif isceiling then - local nfdir = dirs1[fdir+2] - if slab then nfdir = 22 end - minetest.env:add_node(above, {name = wield_name, param2 = nfdir }) -- place upside down variant - else - if slab then fdir = 0 end - minetest.env:add_node(above, {name = wield_name, param2 = fdir }) -- place right side up - end +--[[ - if not stairsplus_expect_infinite_stacks then - itemstack:take_item() +function(itemstack, placer, pointed_thing) + local keys=placer:get_player_control() + stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"]) return itemstack end - else - minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer) + +]]-- + +function stairsplus_rotate_and_place(itemstack, placer, pointed_thing) + if not moreblocks.node_is_owned(pointed_thing.under, placer) then + local keys=placer:get_player_control() + minetest.rotate_and_place(itemstack, placer, pointed_thing, + stairsplus_expect_infinite_stacks, {force_wall = keys.sneak}) end + return itemstack end function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light) |