239 lines
6.9 KiB
Lua
239 lines
6.9 KiB
Lua
|
|
|
|
|
|
local _lib_doors = {}
|
|
lib_shapes.registered_doors = {}
|
|
|
|
local nodes_created = 0
|
|
|
|
|
|
lib_shapes.register_door_node = function(node_mat, shape)
|
|
|
|
local node_mod = ""
|
|
local node_name = ""
|
|
local node_def = {}
|
|
local new_node = {}
|
|
local new_node_name = ""
|
|
local new_node_def = {}
|
|
local new_node_tiles = {}
|
|
local new_node_groups = {}
|
|
|
|
local shape_def = {}
|
|
--local shape_tiles = {}
|
|
local shape_node_box = {}
|
|
local shape_selection_box = {}
|
|
local shape_open_node_box = {}
|
|
local shape_open_selection_box = {}
|
|
--local shape_collision_box = {}
|
|
|
|
shape_def = lib_shapes.registered_shapes["shape_" .. shape]
|
|
--shape_tiles = shape_def.tiles
|
|
shape_node_box = shape_def.node_box
|
|
shape_selection_box = shape_def.selection_box
|
|
shape_open_node_box = shape_def.open_node_box
|
|
shape_open_selection_box = shape_def.open_selection_box
|
|
--shape_collision_box = shape_def.collision_box
|
|
|
|
node_mod, node_name = unpack(node_mat:split(":", true))
|
|
node_def = minetest.registered_nodes[node_mat]
|
|
|
|
new_node_name = node_mod .. ":" .. node_name .. "_" .. shape
|
|
|
|
new_node_groups = node_def.groups
|
|
new_node_groups.not_in_creative_inventory = 1
|
|
new_node_groups.lib_shaped_node = 3
|
|
new_node_groups.lib_doors = 1
|
|
|
|
local name_closed = new_node_name
|
|
local name_opened = new_node_name.."_open"
|
|
local skel_key = false
|
|
local temp_tile
|
|
|
|
if node_def.tiles then
|
|
if node_def.tiles[1] then
|
|
new_node_tiles[1] = node_def.tiles[1] .. ""
|
|
else
|
|
new_node_tiles[1] = node_def.tiles .. ""
|
|
end
|
|
if node_def.tiles[2] then
|
|
new_node_tiles[2] = node_def.tiles[2] .. ""
|
|
else
|
|
new_node_tiles[2] = new_node_tiles[1]
|
|
end
|
|
if node_def.tiles[3] then
|
|
temp_tile = node_def.tiles[3]
|
|
new_node_tiles[3] = "([combine:16x16:-8,0=" .. node_def.tiles[3] .. ":8,0=" .. node_def.tiles[3] .. ""
|
|
else
|
|
temp_tile = new_node_tiles[2]
|
|
new_node_tiles[3] = "[combine:16x16:-8,0=" .. new_node_tiles[2] .. ":8,0=" .. new_node_tiles[2] .. ""
|
|
end
|
|
if node_def.tiles[4] then
|
|
new_node_tiles[4] = "([combine:16x16:8,0=" .. node_def.tiles[4] .. ":-8,0=" .. node_def.tiles[4] .. ""
|
|
else
|
|
new_node_tiles[4] = new_node_tiles[3]
|
|
end
|
|
if node_def.tiles[5] then
|
|
new_node_tiles[5] = node_def.tiles[5] .. ""
|
|
else
|
|
new_node_tiles[5] = temp_tile
|
|
end
|
|
if node_def.tiles[6] then
|
|
new_node_tiles[6] = node_def.tiles[6] .. ""
|
|
else
|
|
new_node_tiles[6] = temp_tile
|
|
end
|
|
|
|
|
|
if shape_def.shape_type == "tree" then
|
|
new_node_tiles[1] = node_def.tiles[1]
|
|
new_node_tiles[2] = node_def.tiles[2]
|
|
new_node_tiles[3] = node_def.tiles[3]
|
|
new_node_tiles[4] = node_def.tiles[3]
|
|
new_node_tiles[5] = node_def.tiles[3]
|
|
new_node_tiles[6] = node_def.tiles[3]
|
|
end
|
|
if shape_def.shape_type == "light" then
|
|
end
|
|
end
|
|
|
|
new_node_def = {
|
|
description = node_def.description .. "_" .. shape_def.description,
|
|
drawtype = "nodebox",
|
|
tiles = new_node_tiles,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
connects_to = { "group:wall", "group:stone", "group:lib_architecture", "group:lib_doors", "group:lib_fences", "group:lib_general", "group:lib_shaped_node" },
|
|
is_ground_content = false,
|
|
walkable = true,
|
|
groups = new_node_groups,
|
|
sounds = node_def.sounds,
|
|
sound_open = "doors_door_open",
|
|
sound_close = "doors_door_close",
|
|
protected = false,
|
|
|
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
|
lib_shapes.door_toggle(pos, node, clicker)
|
|
return itemstack
|
|
end,
|
|
}
|
|
if skel_key then
|
|
new_node_def.can_dig = can_dig_door
|
|
new_node_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
|
|
local pn = placer:get_player_name()
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("doors_owner", pn)
|
|
meta:set_string("infotext", "Owned by "..pn)
|
|
|
|
return minetest.setting_getbool("creative_mode")
|
|
end
|
|
|
|
new_node_def.on_blast = function() end
|
|
new_node_def.on_key_use = function(pos, player)
|
|
local door = lib_doors.get(pos)
|
|
--lib_doors:toggle(player)
|
|
lib_shapes.door_toggle(pos, node, clicker)
|
|
end
|
|
new_node_def.on_skeleton_key_use = function(pos, player, newsecret)
|
|
local meta = minetest.get_meta(pos)
|
|
local owner = meta:get_string("doors_owner")
|
|
local pname = player:get_player_name()
|
|
|
|
-- verify placer is owner of lockable door
|
|
if owner ~= pname then
|
|
minetest.record_protection_violation(pos, pname)
|
|
minetest.chat_send_player(pname, "You do not own this trapdoor.")
|
|
return nil
|
|
end
|
|
|
|
local secret = meta:get_string("key_lock_secret")
|
|
if secret == "" then
|
|
secret = newsecret
|
|
meta:set_string("key_lock_secret", secret)
|
|
end
|
|
|
|
return secret, "a locked trapdoor", owner
|
|
end
|
|
else
|
|
new_node_def.on_blast = function(pos, intensity)
|
|
minetest.remove_node(pos)
|
|
return {name}
|
|
end
|
|
end
|
|
|
|
local def_opened = table.copy(new_node_def)
|
|
local def_closed = table.copy(new_node_def)
|
|
|
|
def_closed.node_box = shape_node_box
|
|
def_closed.selection_box = shape_selection_box
|
|
|
|
def_opened.node_box = shape_open_node_box
|
|
def_opened.selection_box = shape_open_selection_box
|
|
|
|
def_opened.drop = name_closed
|
|
def_opened.groups.not_in_creative_inventory = 1
|
|
|
|
minetest.register_node(name_opened, def_opened)
|
|
minetest.register_node(name_closed, def_closed)
|
|
|
|
lib_shapes.registered_doors[name_opened] = true
|
|
lib_shapes.registered_doors[name_closed] = true
|
|
|
|
|
|
minetest.register_craft({
|
|
output = new_node_name .. " 99",
|
|
recipe = {
|
|
{ '', '', '' },
|
|
{ '', 'lib_shapes:shape_' .. shape, ''},
|
|
{ '', node_mat, ''},
|
|
}
|
|
})
|
|
|
|
end
|
|
|
|
|
|
lib_shapes.register_doors_set = function(node_mat)
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered_with_window")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_with_window_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered_sliding")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_sliding_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered_300_height_150_width")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_300_height_150_width_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered_400_height_200_width")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_400_height_200_width_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "door_centered_400_height_250_width")
|
|
lib_shapes.register_door_node(node_mat, "door_centered_400_height_250_width_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "trapdoor_solid")
|
|
lib_shapes.register_door_node(node_mat, "trapdoor_with_window")
|
|
|
|
lib_shapes.register_door_node(node_mat, "fencegate_centered")
|
|
lib_shapes.register_door_node(node_mat, "fencegate_centered_right")
|
|
|
|
lib_shapes.register_door_node(node_mat, "fencegate_centered_solid")
|
|
lib_shapes.register_door_node(node_mat, "fencegate_centered_solid_right")
|
|
|
|
nodes_created = nodes_created + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|