Files
modolith/mods/travelnet/doors.lua
T

147 lines
3.5 KiB
Lua

-- Doors that are especially useful for travelnet elevators but can also be used in other situations.
-- All doors (not only these here) in front of a travelnet or elevator are opened automaticly when a player arrives
-- and are closed when a player departs from the travelnet or elevator.
-- Autor: Sokomine
local S = minetest.get_translator("travelnet")
function travelnet.register_door(node_base_name, def_tiles, material)
local closed_door = node_base_name .. "_closed"
local open_door = node_base_name .. "_open"
minetest.register_node(open_door, {
description = S("Elevator door (open)"),
drawtype = "nodebox",
tiles = def_tiles,
use_texture_alpha = "clip",
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
-- only the closed variant is in creative inventory
groups = {
snappy = 2,
choppy = 2,
oddly_breakable_by_hand = 2,
pickaxey = 1,
handy = 1,
not_in_creative_inventory = 1,
door = 1
},
-- larger than one node but slightly smaller than a half node so
-- that wallmounted torches pose no problem
node_box = {
type = "fixed",
fixed = {
{ -0.90, -0.5, 0.4, -0.49, 1.5, 0.5 },
{ 0.49, -0.5, 0.4, 0.9, 1.5, 0.5 },
},
},
selection_box = {
type = "fixed",
fixed = {
{ -0.9, -0.5, 0.4, 0.9, 1.5, 0.5 },
},
},
drop = closed_door,
on_rightclick = function(pos, node)
minetest.add_node(pos, {
name = closed_door,
param2 = node.param2
})
end,
})
minetest.register_node(closed_door, {
description = S("Elevator door (closed)"),
drawtype = "nodebox",
tiles = def_tiles,
use_texture_alpha = "clip",
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = {
snappy = 2,
choppy = 2,
oddly_breakable_by_hand = 2,
pickaxey = 1,
handy = 1,
door = 1
},
_mcl_blast_resistance = 1,
_mcl_hardness = 0.7,
node_box = {
type = "fixed",
fixed = {
{ -0.5, -0.5, 0.4, -0.01, 1.5, 0.5 },
{ 0.01, -0.5, 0.4, 0.5, 1.5, 0.5 },
},
},
selection_box = {
type = "fixed",
fixed = {
{ -0.5, -0.5, 0.4, 0.5, 1.5, 0.5 },
},
},
on_rightclick = function(pos, node)
minetest.add_node(pos, {
name = open_door,
param2 = node.param2
})
end,
})
-- add a craft receipe for the door
minetest.register_craft({
output = closed_door,
recipe = {
{ material, "", material },
{ material, "", material },
{ material, "", material }
}
})
-- Make doors reacts to mesecons
if minetest.get_modpath("mesecons") then
local mesecons = {
effector = {
action_on = function(pos, node)
minetest.add_node(pos, {
name = open_door,
param2 = node.param2
})
end,
action_off = function(pos, node)
minetest.add_node(pos, {
name = closed_door,
param2 = node.param2
})
end,
rules = mesecon.rules.pplate
}
}
minetest.override_item(closed_door, { mesecons=mesecons })
minetest.override_item(open_door, { mesecons=mesecons })
end
end
-- actually register the doors
-- (but only if the materials for them exist)
if minetest.get_modpath("default") or minetest.get_modpath("mcl_core") then
travelnet.register_door(
"travelnet:elevator_door_steel",
{ "default_stone.png" },
xcompat.materials.steel_ingot
)
travelnet.register_door(
"travelnet:elevator_door_glass",
{ "travelnet_elevator_door_glass.png" },
xcompat.materials.glass
)
travelnet.register_door(
"travelnet:elevator_door_tin",
{ "default_clay.png" },
xcompat.materials.tin_ingot
)
end