end
if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then
+ -- is player wielding the right key?
+ local item = clicker:get_wielded_item()
local owner = meta:get_string("doors_owner")
- if owner ~= "" then
+ if item:get_name() == "default:key" then
+ local key_meta = item:get_meta()
+ local secret = meta:get_string("key_lock_secret")
+
+ if key_meta:get_string("secret") == "" then
+ key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+ end
+
+ if secret ~= key_meta:get_string("secret") then
+ return false
+ end
+
+ elseif owner ~= "" then
if clicker:get_player_name() ~= owner then
return false
end
local node = minetest.get_node(pointed_thing.under)
local pdef = minetest.registered_nodes[node.name]
- if pdef and pdef.on_rightclick then
+ if pdef and pdef.on_rightclick and
+ not placer:get_player_control().sneak then
return pdef.on_rightclick(pointed_thing.under,
node, placer, itemstack, pointed_thing)
end
end
def.after_dig_node = function(pos, node, meta, digger)
minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z})
- nodeupdate({x = pos.x, y = pos.y + 1, z = pos.z})
+ minetest.check_for_falling({x = pos.x, y = pos.y + 1, z = pos.z})
+ end
+ def.on_rotate = function(pos, node, user, mode, new_param2)
+ return false
end
- def.on_rotate = screwdriver and screwdriver.rotate_simple or false
if def.protected then
def.can_dig = can_dig_door
def.on_blast = function() end
+ def.on_key_use = function(pos, player)
+ local door = doors.get(pos)
+ door:toggle(player)
+ end
+ 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 locked door.")
+ 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 door", owner
+ end
else
def.on_blast = function(pos, intensity)
minetest.remove_node(pos)
inventory_image = "doors_item_steel.png",
protected = true,
groups = {cracky = 1, level = 2},
- sounds = default.node_sound_stone_defaults(),
+ sounds = default.node_sound_metal_defaults(),
sound_open = "doors_steel_door_open",
sound_close = "doors_steel_door_close",
recipe = {
function _doors.trapdoor_toggle(pos, node, clicker)
node = node or minetest.get_node(pos)
if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then
+ -- is player wielding the right key?
+ local item = clicker:get_wielded_item()
local meta = minetest.get_meta(pos)
local owner = meta:get_string("doors_owner")
- if owner ~= "" then
+ if item:get_name() == "default:key" then
+ local key_meta = item:get_meta()
+ local secret = meta:get_string("key_lock_secret")
+
+ if key_meta:get_string("secret") == "" then
+ key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+ end
+
+ if secret ~= key_meta:get_string("secret") then
+ return false
+ end
+
+ elseif owner ~= "" then
if clicker:get_player_name() ~= owner then
return false
end
if not name:find(":") then
name = "doors:" .. name
end
-
+
local name_closed = name
local name_opened = name.."_open"
end
def.on_blast = function() end
+ def.on_key_use = function(pos, player)
+ local door = doors.get(pos)
+ door:toggle(player)
+ end
+ 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
def.on_blast = function(pos, intensity)
minetest.remove_node(pos)
tile_front = "doors_trapdoor_steel.png",
tile_side = "doors_trapdoor_steel_side.png",
protected = true,
- sounds = default.node_sound_stone_defaults(),
+ sounds = default.node_sound_metal_defaults(),
sound_open = "doors_steel_door_open",
sound_close = "doors_steel_door_close",
groups = {cracky = 1, level = 2, door = 1},
fence_open.collision_box = {
type = "fixed",
fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4},
- {-5/8, -3/8, -1/2, -3/8, 3/8, 0}},
+ {-1/2, -3/8, -1/2, -3/8, 3/8, 0}},
}
minetest.register_node(":" .. name .. "_closed", fence_closed)
material = "default:aspen_wood",
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}
})
+
+
+----fuels----
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:trapdoor",
+ burntime = 7,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:door_wood",
+ burntime = 14,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:gate_wood_closed",
+ burntime = 7,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:gate_acacia_wood_closed",
+ burntime = 8,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:gate_junglewood_closed",
+ burntime = 9,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:gate_pine_wood_closed",
+ burntime = 6,
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "doors:gate_aspen_wood_closed",
+ burntime = 5,
+})