Several changes (see below)
Dropped support for punching doors to open them - only right-click now. Moved gates out of fences and into doors file, renamed that file to doors_and_gates.lua. Changed gates to also use right click to open, and in the process completely rewrote how gates are defined and managed; this necessitated creating some duplicate textures. Some of them are blank, and texture pack authors may find the extra filenames useful anyway. Node names for all gates have changed, aliases are provided for backward compatibility.
226
door_nodes.lua
@ -1,226 +0,0 @@
|
||||
-- Node definitions for Homedecor doors
|
||||
|
||||
-- Boilerplate to support localized strings if intllib mod is installed.
|
||||
local S
|
||||
if (minetest.get_modpath("intllib")) then
|
||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
||||
S = intllib.Getter(minetest.get_current_modname())
|
||||
else
|
||||
S = function ( s ) return s end
|
||||
end
|
||||
|
||||
local sides = {"left", "right"}
|
||||
local rsides = {"right", "left"}
|
||||
|
||||
-- cheater's method of detecting if default doors are right-click-to-open:
|
||||
-- default.generate_ore() was exposed to the modding API one day prior to the
|
||||
-- right-click thing.
|
||||
|
||||
local use_rightclick = type(default.generate_ore)
|
||||
|
||||
for i in ipairs(sides) do
|
||||
local side = sides[i]
|
||||
local rside = rsides[i]
|
||||
|
||||
for j in ipairs(homedecor_door_models) do
|
||||
local doorname = homedecor_door_models[j][1]
|
||||
local doordesc = homedecor_door_models[j][2]
|
||||
local nodeboxes_top = nil
|
||||
local nodeboxes_bottom = nil
|
||||
|
||||
if side == "left" then
|
||||
nodeboxes_top = homedecor_door_models[j][3]
|
||||
nodeboxes_bottomtom = homedecor_door_models[j][4]
|
||||
else
|
||||
nodeboxes_top = homedecor_door_models[j][5]
|
||||
nodeboxes_bottomtom = homedecor_door_models[j][6]
|
||||
end
|
||||
|
||||
local tiles_top = {
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_lrt.png",
|
||||
"homedecor_door_"..doorname.."_lrt.png",
|
||||
"homedecor_door_"..doorname.."_"..rside.."_top.png",
|
||||
"homedecor_door_"..doorname.."_"..side.."_top.png",
|
||||
}
|
||||
|
||||
local tiles_bottom = {
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_lrb.png",
|
||||
"homedecor_door_"..doorname.."_lrb.png",
|
||||
"homedecor_door_"..doorname.."_"..rside.."_bottom.png",
|
||||
"homedecor_door_"..doorname.."_"..side.."_bottom.png",
|
||||
}
|
||||
|
||||
local selectboxes_top = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -1.5, 6/16, 0.5, 0.5, 8/16}
|
||||
}
|
||||
|
||||
local selectboxes_bottom = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 6/16, 0.5, 1.5, 8/16}
|
||||
}
|
||||
|
||||
if use_rightclick == nil then -- register the version that uses on_punch
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_top_"..side, {
|
||||
description = doordesc.." "..S("(Top Half, %s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_top,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_top,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_top
|
||||
},
|
||||
drop = "homedecor:door_"..doorname.."_bottom_"..side,
|
||||
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_"..doorname.."_bottom_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
homedecor_flip_door({x=pos.x, y=pos.y-1, z=pos.z}, node, puncher, doorname, side)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_bottom_"..side, {
|
||||
description = doordesc.." "..S("(%s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_bottom,
|
||||
inventory_image = "homedecor_door_"..doorname.."_"..side.."_inv.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_bottom,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_bottomtom
|
||||
},
|
||||
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_"..doorname.."_top_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
homedecor_flip_door(pos, node, puncher, doorname, side)
|
||||
end,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
return homedecor_place_door(itemstack, placer, pointed_thing, doorname, side)
|
||||
end,
|
||||
})
|
||||
|
||||
else -- register the version that uses on_rightclick
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_top_"..side, {
|
||||
description = doordesc.." "..S("(Top Half, %s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_top,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_top,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_top
|
||||
},
|
||||
drop = "homedecor:door_"..doorname.."_bottom_"..side,
|
||||
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_"..doorname.."_bottom_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_door({x=pos.x, y=pos.y-1, z=pos.z}, node, clicker, doorname, side)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_bottom_"..side, {
|
||||
description = doordesc.." "..S("(%s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_bottom,
|
||||
inventory_image = "homedecor_door_"..doorname.."_"..side.."_inv.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_bottom,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_bottomtom
|
||||
},
|
||||
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_"..doorname.."_top_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
||||
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
|
||||
return homedecor_place_door(itemstack, placer, pointed_thing, doorname, side)
|
||||
else
|
||||
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer)
|
||||
end
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_door(pos, node, clicker, doorname, side)
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function homedecor_place_door(itemstack, placer, pointed_thing, name, side)
|
||||
local pos = pointed_thing.above
|
||||
if homedecor_node_is_owned(pointed_thing.under, placer) == false then
|
||||
|
||||
local nodename = minetest.env:get_node(pointed_thing.under).name
|
||||
local field = nil
|
||||
|
||||
if minetest.registered_nodes[nodename] then field = minetest.registered_nodes[nodename].on_rightclick end
|
||||
|
||||
if field == nil then
|
||||
fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
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(), S('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_"..name.."_top_"..side, param2=fdir})
|
||||
minetest.env:add_node(pos, { name = "homedecor:door_"..name.."_bottom_"..side, param2=fdir})
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
function homedecor_flip_door(pos, node, player, name, side)
|
||||
local rside = nil
|
||||
local nfdir = nil
|
||||
if side == "left" then
|
||||
rside = "right"
|
||||
nfdir=node.param2 - 1
|
||||
if nfdir < 0 then nfdir = 3 end
|
||||
else
|
||||
rside = "left"
|
||||
nfdir=node.param2 + 1
|
||||
if nfdir > 3 then nfdir = 0 end
|
||||
end
|
||||
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_"..name.."_top_"..rside, param2=nfdir})
|
||||
minetest.env:add_node(pos, { name = "homedecor:door_"..name.."_bottom_"..rside, param2=nfdir})
|
||||
end
|
||||
|
294
doors_and_gates.lua
Normal file
@ -0,0 +1,294 @@
|
||||
-- Node definitions for Homedecor doors
|
||||
|
||||
-- Boilerplate to support localized strings if intllib mod is installed.
|
||||
local S
|
||||
if (minetest.get_modpath("intllib")) then
|
||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
||||
S = intllib.Getter(minetest.get_current_modname())
|
||||
else
|
||||
S = function ( s ) return s end
|
||||
end
|
||||
|
||||
-- doors
|
||||
|
||||
local sides = {"left", "right"}
|
||||
local rsides = {"right", "left"}
|
||||
|
||||
for i in ipairs(sides) do
|
||||
local side = sides[i]
|
||||
local rside = rsides[i]
|
||||
|
||||
for j in ipairs(homedecor_door_models) do
|
||||
local doorname = homedecor_door_models[j][1]
|
||||
local doordesc = homedecor_door_models[j][2]
|
||||
local nodeboxes_top = nil
|
||||
local nodeboxes_bottom = nil
|
||||
|
||||
if side == "left" then
|
||||
nodeboxes_top = homedecor_door_models[j][3]
|
||||
nodeboxes_bottomtom = homedecor_door_models[j][4]
|
||||
else
|
||||
nodeboxes_top = homedecor_door_models[j][5]
|
||||
nodeboxes_bottomtom = homedecor_door_models[j][6]
|
||||
end
|
||||
|
||||
local tiles_top = {
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_lrt.png",
|
||||
"homedecor_door_"..doorname.."_lrt.png",
|
||||
"homedecor_door_"..doorname.."_"..rside.."_top.png",
|
||||
"homedecor_door_"..doorname.."_"..side.."_top.png",
|
||||
}
|
||||
|
||||
local tiles_bottom = {
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_tb.png",
|
||||
"homedecor_door_"..doorname.."_lrb.png",
|
||||
"homedecor_door_"..doorname.."_lrb.png",
|
||||
"homedecor_door_"..doorname.."_"..rside.."_bottom.png",
|
||||
"homedecor_door_"..doorname.."_"..side.."_bottom.png",
|
||||
}
|
||||
|
||||
local selectboxes_top = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -1.5, 6/16, 0.5, 0.5, 8/16}
|
||||
}
|
||||
|
||||
local selectboxes_bottom = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 6/16, 0.5, 1.5, 8/16}
|
||||
}
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_top_"..side, {
|
||||
description = doordesc.." "..S("(Top Half, %s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_top,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_top,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_top
|
||||
},
|
||||
drop = "homedecor:door_"..doorname.."_bottom_"..side,
|
||||
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_"..doorname.."_bottom_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_door({x=pos.x, y=pos.y-1, z=pos.z}, node, clicker, doorname, side)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:door_"..doorname.."_bottom_"..side, {
|
||||
description = doordesc.." "..S("(%s-opening)"):format(side),
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_bottom,
|
||||
inventory_image = "homedecor_door_"..doorname.."_"..side.."_inv.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
selection_box = selectboxes_bottom,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodeboxes_bottomtom
|
||||
},
|
||||
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_"..doorname.."_top_"..side then
|
||||
minetest.env:remove_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
end
|
||||
end,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
||||
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
|
||||
return homedecor_place_door(itemstack, placer, pointed_thing, doorname, side)
|
||||
else
|
||||
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer)
|
||||
end
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_door(pos, node, clicker, doorname, side)
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- Gates
|
||||
|
||||
local gates_list = { "picket", "picket_white", "barbed_wire", "chainlink" }
|
||||
local gate_names = { "Unpainted Picket", "White Picket", "Barbed Wire", "Chainlink" }
|
||||
|
||||
local gate_models_closed = {
|
||||
{{ -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }},
|
||||
|
||||
{{ -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }},
|
||||
|
||||
{{ -8/16, -8/16, 6/16, -6/16, 8/16, 8/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ -8/16, 7/16, 13/32, 8/16, 8/16, 15/32 }, -- top piece
|
||||
{ -8/16, -8/16, 13/32, 8/16, -7/16, 15/32 }, -- bottom piece
|
||||
{ -6/16, -8/16, 7/16, 6/16, 8/16, 7/16 }}, -- the wire
|
||||
|
||||
{{ -8/16, -8/16, 6/16, -7/16, 8/16, 8/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ -8/16, 7/16, 13/32, 8/16, 8/16, 15/32 }, -- top piece
|
||||
{ -8/16, -8/16, 13/32, 8/16, -7/16, 15/32 }, -- bottom piece
|
||||
{ -8/16, -8/16, 7/16, 8/16, 8/16, 7/16 }, -- the chainlink itself
|
||||
{ -8/16, -3/16, 6/16, -6/16, 3/16, 8/16 }} -- the lump representing the lock
|
||||
}
|
||||
|
||||
local gate_models_open = {
|
||||
{{ 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }},
|
||||
|
||||
{{ 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }},
|
||||
|
||||
{{ 6/16, -8/16, -8/16, 8/16, 8/16, -6/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ 13/32, 7/16, -8/16, 15/32, 8/16, 8/16 }, -- top piece
|
||||
{ 13/32, -8/16, -8/16, 15/32, -7/16, 8/16 }, -- bottom piece
|
||||
{ 7/16, -8/16, -6/16, 7/16, 8/16, 6/16 }}, -- the wire
|
||||
|
||||
{{ 6/16, -8/16, -8/16, 8/16, 8/16, -7/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ 13/32, 7/16, -8/16, 15/32, 8/16, 8/16 }, -- top piece
|
||||
{ 13/32, -8/16, -8/16, 15/32, -7/16, 8/16 }, -- bottom piece
|
||||
{ 7/16, -8/16, -8/16, 7/16, 8/16, 8/16 }, -- the chainlink itself
|
||||
{ 6/16, -3/16, -8/16, 8/16, 3/16, -6/16 }} -- the lump representing the lock
|
||||
}
|
||||
|
||||
for i in ipairs(gates_list) do
|
||||
|
||||
local gate=gates_list[i]
|
||||
|
||||
minetest.register_node("homedecor:gate_"..gate.."_closed", {
|
||||
drawtype = "nodebox",
|
||||
description = S(gate_names[i].." Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_gate_"..gate.."_top.png",
|
||||
"homedecor_gate_"..gate.."_bottom.png",
|
||||
"homedecor_gate_"..gate.."_left.png",
|
||||
"homedecor_gate_"..gate.."_right.png",
|
||||
"homedecor_gate_"..gate.."_back.png",
|
||||
"homedecor_gate_"..gate.."_front.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = gate_models_closed[i]
|
||||
},
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_gate(pos, node, clicker, gate, "closed")
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:gate_"..gate.."_open", {
|
||||
drawtype = "nodebox",
|
||||
description = S(gate_names[i].." Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_gate_"..gate.."_top.png",
|
||||
"homedecor_gate_"..gate.."_bottom.png",
|
||||
"homedecor_gate_"..gate.."_front.png",
|
||||
"homedecor_gate_"..gate.."_back.png",
|
||||
"homedecor_gate_"..gate.."_left.png",
|
||||
"homedecor_gate_"..gate.."_right.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed ={ 0.4, -0.5, -0.5, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = gate_models_open[i]
|
||||
},
|
||||
drop = "homedecor:gate_"..gate.."_closed",
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
homedecor_flip_gate(pos, node, clicker, gate, "open")
|
||||
end
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
minetest.register_alias("homedecor:fence_barbed_wire_gate_open", "homedecor:gate_chainlink_open")
|
||||
minetest.register_alias("homedecor:fence_barbed_wire_gate_closed", "homedecor:gate_chainlink_closed")
|
||||
minetest.register_alias("homedecor:fence_chainlink_gate_open", "homedecor:gate_barbed_wire_open")
|
||||
minetest.register_alias("homedecor:fence_chainlink_gate_closed", "homedecor:gate_barbed_wire_closed")
|
||||
minetest.register_alias("homedecor:fence_picket_gate_open", "homedecor:gate_picket_open")
|
||||
minetest.register_alias("homedecor:fence_picket_gate_closed", "homedecor:gate_picket_closed")
|
||||
minetest.register_alias("homedecor:fence_picket_gate_white_open", "homedecor:gate_picket_white_open")
|
||||
minetest.register_alias("homedecor:fence_picket_gate_white_closed", "homedecor:gate_picket_white_closed")
|
||||
|
||||
----- helper functions
|
||||
|
||||
function homedecor_place_door(itemstack, placer, pointed_thing, name, side)
|
||||
local pos = pointed_thing.above
|
||||
if homedecor_node_is_owned(pointed_thing.under, placer) == false then
|
||||
|
||||
local nodename = minetest.env:get_node(pointed_thing.under).name
|
||||
local field = nil
|
||||
|
||||
if minetest.registered_nodes[nodename] then field = minetest.registered_nodes[nodename].on_rightclick end
|
||||
|
||||
if field == nil then
|
||||
fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
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(), S('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_"..name.."_top_"..side, param2=fdir})
|
||||
minetest.env:add_node(pos, { name = "homedecor:door_"..name.."_bottom_"..side, param2=fdir})
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
function homedecor_flip_door(pos, node, player, name, side)
|
||||
local rside = nil
|
||||
local nfdir = nil
|
||||
if side == "left" then
|
||||
rside = "right"
|
||||
nfdir=node.param2 - 1
|
||||
if nfdir < 0 then nfdir = 3 end
|
||||
else
|
||||
rside = "left"
|
||||
nfdir=node.param2 + 1
|
||||
if nfdir > 3 then nfdir = 0 end
|
||||
end
|
||||
minetest.env:add_node({x=pos.x, y=pos.y+1, z=pos.z}, { name = "homedecor:door_"..name.."_top_"..rside, param2=nfdir})
|
||||
minetest.env:add_node(pos, { name = "homedecor:door_"..name.."_bottom_"..rside, param2=nfdir})
|
||||
end
|
||||
|
||||
function homedecor_flip_gate(pos, node, player, gate, oc)
|
||||
local fdir = node.param2
|
||||
|
||||
if oc == "closed" then
|
||||
minetest.env:add_node(pos, { name = "homedecor:gate_"..gate.."_open", param2=fdir})
|
||||
else
|
||||
minetest.env:add_node(pos, { name = "homedecor:gate_"..gate.."_closed", param2=fdir})
|
||||
end
|
||||
end
|
310
fences.lua
@ -456,316 +456,6 @@ minetest.register_node("homedecor:fence_chainlink_corner", {
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
-- =====
|
||||
-- Gates
|
||||
|
||||
minetest.register_node("homedecor:fence_picket_gate_closed", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Unpainted Picket Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_fence_picket_gate.png",
|
||||
"homedecor_fence_picket_gate.png",
|
||||
"homedecor_fence_picket_gate_backside.png",
|
||||
"homedecor_fence_picket_gate.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_picket_gate_open", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Unpainted Picket Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_fence_picket_gate.png",
|
||||
"homedecor_fence_picket_gate_backside.png",
|
||||
"homedecor_fence_picket_gate.png",
|
||||
"homedecor_fence_picket_gate.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.4, -0.5, -0.5, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }
|
||||
},
|
||||
drop = "homedecor:fence_picket_gate_closed"
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_picket_gate_white_closed", {
|
||||
drawtype = "nodebox",
|
||||
description = S("White Picket Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_fence_picket_gate_white.png",
|
||||
"homedecor_fence_picket_gate_white.png",
|
||||
"homedecor_fence_picket_gate_white_backside.png",
|
||||
"homedecor_fence_picket_gate_white.png"
|
||||
},
|
||||
-- inventory_image = "homedecor_fence_picket_gate.png",
|
||||
-- wield_image = "homedecor_fence_picket_gate.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_picket_gate_white_open", {
|
||||
drawtype = "nodebox",
|
||||
description = S("White Picket Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_blanktile.png",
|
||||
"homedecor_fence_picket_gate_white.png",
|
||||
"homedecor_fence_picket_gate_white_backside.png",
|
||||
"homedecor_fence_picket_gate_white.png",
|
||||
"homedecor_fence_picket_gate_white.png"
|
||||
},
|
||||
-- inventory_image = "homedecor_fence_picket_gate.png",
|
||||
-- wield_image = "homedecor_fence_picket_gate.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.4, -0.5, -0.5, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }
|
||||
},
|
||||
drop = "homedecor:fence_picket_gate_closed"
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_barbed_wire_gate_closed", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Barbed Wire Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_backside.png",
|
||||
"homedecor_fence_barbed_wire_gate_front.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -8/16, 6/16, -6/16, 8/16, 8/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ -8/16, 7/16, 13/32, 8/16, 8/16, 15/32 }, -- top piece
|
||||
{ -8/16, -8/16, 13/32, 8/16, -7/16, 15/32 }, -- bottom piece
|
||||
{ -6/16, -8/16, 7/16, 6/16, 8/16, 7/16 } -- the wire
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_barbed_wire_gate_open", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Barbed Wire Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_front.png",
|
||||
"homedecor_fence_barbed_wire_gate_backside.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png",
|
||||
"homedecor_fence_barbed_wire_gate_edges.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.375, -0.5, -0.5, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ 6/16, -8/16, -8/16, 8/16, 8/16, -6/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ 13/32, 7/16, -8/16, 15/32, 8/16, 8/16 }, -- top piece
|
||||
{ 13/32, -8/16, -8/16, 15/32, -7/16, 8/16 }, -- bottom piece
|
||||
{ 7/16, -8/16, -6/16, 7/16, 8/16, 6/16 } -- the wire
|
||||
}
|
||||
},
|
||||
drop = "homedecor:fence_barbed_wire_gate_closed"
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_chainlink_gate_closed", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Chainlink Fence Gate"),
|
||||
tiles = {
|
||||
"homedecor_fence_chainlink_gate_tb.png",
|
||||
"homedecor_fence_chainlink_gate_tb.png",
|
||||
"homedecor_fence_chainlink_gate_sides.png",
|
||||
"homedecor_fence_chainlink_gate_sides.png",
|
||||
"homedecor_fence_chainlink_gate_backside.png",
|
||||
"homedecor_fence_chainlink_gate_front.png",
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -8/16, 6/16, -7/16, 8/16, 8/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ -8/16, 7/16, 13/32, 8/16, 8/16, 15/32 }, -- top piece
|
||||
{ -8/16, -8/16, 13/32, 8/16, -7/16, 15/32 }, -- bottom piece
|
||||
{ -8/16, -8/16, 7/16, 8/16, 8/16, 7/16 }, -- the chainlink itself
|
||||
{ -8/16, -3/16, 6/16, -6/16, 3/16, 8/16 } -- the lump representing the lock
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:fence_chainlink_gate_open", {
|
||||
drawtype = "nodebox",
|
||||
description = S("Chainlink Fence Gate (open)"),
|
||||
tiles = {
|
||||
"homedecor_fence_chainlink_gate_tb.png",
|
||||
"homedecor_fence_chainlink_gate_tb.png",
|
||||
"homedecor_fence_chainlink_gate_front.png",
|
||||
"homedecor_fence_chainlink_gate_backside.png",
|
||||
"homedecor_fence_chainlink_gate_sides.png",
|
||||
"homedecor_fence_chainlink_gate_sides.png",
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = {snappy=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { 0.375, -0.5, -0.5, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ 6/16, -8/16, -8/16, 8/16, 8/16, -7/16 }, -- left post
|
||||
{ 6/16, -8/16, 6/16, 8/16, 8/16, 8/16 }, -- right post
|
||||
{ 13/32, 7/16, -8/16, 15/32, 8/16, 8/16 }, -- top piece
|
||||
{ 13/32, -8/16, -8/16, 15/32, -7/16, 8/16 }, -- bottom piece
|
||||
{ 7/16, -8/16, -8/16, 7/16, 8/16, 8/16 }, -- the chainlink itself
|
||||
{ 6/16, -3/16, -8/16, 8/16, 3/16, -6/16 } -- the lump representing the lock
|
||||
}
|
||||
},
|
||||
drop = "homedecor:fence_chainlink_gate_closed"
|
||||
})
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_picket_gate_white_closed" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_picket_gate_white_open", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_picket_gate_white_open" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_picket_gate_white_closed", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_picket_gate_closed" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_picket_gate_open", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_picket_gate_open" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_picket_gate_closed", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_barbed_wire_gate_closed" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_barbed_wire_gate_open", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_barbed_wire_gate_open" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_barbed_wire_gate_closed", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_chainlink_gate_closed" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_chainlink_gate_open", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="homedecor:fence_chainlink_gate_open" then
|
||||
fdir=node.param2
|
||||
minetest.env:add_node(pos, { name = "homedecor:fence_chainlink_gate_closed", param2 = fdir })
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post")
|
||||
|
||||
homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post")
|
||||
|
2
init.lua
@ -72,7 +72,7 @@ dofile(minetest.get_modpath("homedecor").."/shutters.lua")
|
||||
dofile(minetest.get_modpath("homedecor").."/shingles.lua")
|
||||
|
||||
dofile(minetest.get_modpath("homedecor").."/door_models.lua")
|
||||
dofile(minetest.get_modpath("homedecor").."/door_nodes.lua")
|
||||
dofile(minetest.get_modpath("homedecor").."/doors_and_gates.lua")
|
||||
|
||||
dofile(minetest.get_modpath("homedecor").."/signs_lib.lua")
|
||||
dofile(minetest.get_modpath("homedecor").."/fences.lua")
|
||||
|
Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 562 B |
Before Width: | Height: | Size: 397 B After Width: | Height: | Size: 397 B |
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 529 B |
BIN
textures/homedecor_gate_barbed_wire_left.png
Normal file
After Width: | Height: | Size: 397 B |
BIN
textures/homedecor_gate_barbed_wire_right.png
Normal file
After Width: | Height: | Size: 397 B |
BIN
textures/homedecor_gate_barbed_wire_top.png
Normal file
After Width: | Height: | Size: 397 B |
Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 601 B |
Before Width: | Height: | Size: 490 B After Width: | Height: | Size: 490 B |
Before Width: | Height: | Size: 591 B After Width: | Height: | Size: 591 B |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
BIN
textures/homedecor_gate_chainlink_right.png
Normal file
After Width: | Height: | Size: 505 B |
BIN
textures/homedecor_gate_chainlink_top.png
Normal file
After Width: | Height: | Size: 490 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
textures/homedecor_gate_picket_bottom.png
Normal file
After Width: | Height: | Size: 115 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
textures/homedecor_gate_picket_left.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
textures/homedecor_gate_picket_right.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
textures/homedecor_gate_picket_top.png
Normal file
After Width: | Height: | Size: 115 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
textures/homedecor_gate_picket_white_bottom.png
Normal file
After Width: | Height: | Size: 115 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
textures/homedecor_gate_picket_white_left.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
textures/homedecor_gate_picket_white_right.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
textures/homedecor_gate_picket_white_top.png
Normal file
After Width: | Height: | Size: 115 B |