homedecor_modpack/door_glass.lua
Vanessa Ezekowitz 9798c4fa36 Wrote a whole new door routine, used it to add solid glass and glass-and-wood
doors, converted the others to use that new code, and all use nodeboxes now.
Folding doors are now called "closet" doors and will be converted via a handful
of aliases.  Tweaked crafting recipe for oak closet door to put the steel ingot
on the left.  Moves all doors' crafting recipes into crafts.lua.  This sweeps
away the old buggy zlpdoors-derived code.
2012-10-04 07:24:36 -04:00

198 lines
6.5 KiB
Lua

-- This file supplies solid glass doors with frosted edges and metal handle
-- Left-opening
minetest.register_node("homedecor:door_glass_top_left", {
description = "glass door top half",
drawtype = "nodebox",
tiles = {
"homedecor_door_glass_tb.png",
"homedecor_blanktile.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_right_top.png",
"homedecor_door_glass_left_top.png",
},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = {snappy=3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
},
node_box = {
type = "fixed",
fixed = {
{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
}
},
drop = "homedecor:door_glass_bottom_left",
after_dig_node = function(pos, oldnode, oldmetadata, digger)
if minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "homedecor:door_glass_bottom_left" then
minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
end
end,
on_punch = function(pos, node, puncher)
nfdir=node.param2-1
if nfdir < 0 then nfdir = 3 end
minetest.env:add_node(pos, { name = "homedecor:door_glass_top_right", param2=nfdir})
minetest.env:add_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = "homedecor:door_glass_bottom_right", param2=nfdir})
end
})
minetest.register_node("homedecor:door_glass_bottom_left", {
description = "Glass Door",
drawtype = "nodebox",
tiles = {
"homedecor_blanktile.png",
"homedecor_door_glass_tb.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_right_bottom.png",
"homedecor_door_glass_left_bottom.png",
},
wield_image = "homedecor_door_glass_left_inv.png",
inventory_image = "homedecor_door_glass_left_inv.png",
wield_scale = {x=1,y=1,z=0.25},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = {snappy=3},
sounds = default.node_sound_wood_defaults(),
walkable = true,
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
},
node_box = {
type = "fixed",
fixed = {
{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
}
},
on_place = function(itemstack, placer, pointed_thing)
fdir = minetest.dir_to_facedir(placer:get_look_dir())
local pos = pointed_thing.above
if minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" then
minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place a door!' )
return
end
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_glass_top_left", param2=fdir})
return minetest.item_place(itemstack, placer, pointed_thing)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
if minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "homedecor:door_glass_top_left" then
minetest.env:remove_node({x=pos.x, y=pos.y+1, z=pos.z})
end
end,
on_punch = function(pos, node, puncher)
nfdir=node.param2-1
if nfdir < 0 then nfdir = 3 end
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_glass_top_right", param2=nfdir})
minetest.env:add_node(pos, { name = "homedecor:door_glass_bottom_right", param2=nfdir})
end
})
-- Right-opening
minetest.register_node("homedecor:door_glass_top_right", {
description = "glass door top half",
drawtype = "nodebox",
tiles = {
"homedecor_door_glass_tb.png",
"homedecor_blanktile.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_left_top.png",
"homedecor_door_glass_right_top.png",
},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = {snappy=3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
},
node_box = {
type = "fixed",
fixed = {
{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
}
},
drop = "homedecor:door_glass_bottom_left",
after_dig_node = function(pos, oldnode, oldmetadata, digger)
if minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "homedecor:door_glass_bottom_right" then
minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
end
end,
on_punch = function(pos, node, puncher)
nfdir=node.param2+1
if nfdir > 3 then nfdir = 0 end
minetest.env:add_node(pos, { name = "homedecor:door_glass_top_left", param2=nfdir})
minetest.env:add_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = "homedecor:door_glass_bottom_left", param2=nfdir})
end
})
minetest.register_node("homedecor:door_glass_bottom_right", {
description = "Glass Door (Right-opening)",
drawtype = "nodebox",
tiles = {
"homedecor_blanktile.png",
"homedecor_door_glass_tb.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_lr.png",
"homedecor_door_glass_left_bottom.png",
"homedecor_door_glass_right_bottom.png",
},
wield_image = "homedecor_door_glass_right_inv.png",
inventory_image = "homedecor_door_glass_right_inv.png",
wield_scale = {x=1,y=1,z=0.25},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = {snappy=3},
sounds = default.node_sound_wood_defaults(),
walkable = true,
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
},
node_box = {
type = "fixed",
fixed = {
{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
}
},
drop = "homedecor:door_glass_bottom_left",
on_place = function(itemstack, placer, pointed_thing)
fdir = minetest.dir_to_facedir(placer:get_look_dir())
local pos = pointed_thing.above
if minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" then
minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place a door!' )
return
end
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_glass_top_right", param2=fdir})
return minetest.item_place(itemstack, placer, pointed_thing)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
if minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "homedecor:door_glass_top_right" then
minetest.env:remove_node({x=pos.x, y=pos.y+1, z=pos.z})
end
end,
on_punch = function(pos, node, puncher)
nfdir=node.param2+1
if nfdir > 3 then nfdir = 0 end
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_glass_top_left", param2=nfdir})
minetest.env:add_node(pos, { name = "homedecor:door_glass_bottom_left", param2=nfdir})
end
})