Update doors mod
|
@ -6,6 +6,15 @@ local _doors = {}
|
|||
_doors.registered_doors = {}
|
||||
_doors.registered_trapdoors = {}
|
||||
|
||||
local function replace_old_owner_information(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("doors_owner")
|
||||
if owner and owner ~= "" then
|
||||
meta:set_string("owner", owner)
|
||||
meta:set_string("doors_owner", "")
|
||||
end
|
||||
end
|
||||
|
||||
-- returns an object to a door object or nil
|
||||
function doors.get(pos)
|
||||
local node_name = minetest.get_node(pos).name
|
||||
|
@ -82,7 +91,7 @@ minetest.register_node("doors:hidden", {
|
|||
on_blast = function() end,
|
||||
tiles = {"doors_blank.png"},
|
||||
-- 1px transparent block inside door hinge near node top.
|
||||
nodebox = {
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32},
|
||||
},
|
||||
|
@ -139,23 +148,11 @@ function _doors.door_toggle(pos, node, clicker)
|
|||
state = tonumber(state)
|
||||
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 item:get_name() == "default:key" then
|
||||
local key_meta = minetest.parse_json(item:get_metadata())
|
||||
local secret = meta:get_string("key_lock_secret")
|
||||
if secret ~= key_meta.secret then
|
||||
return false
|
||||
end
|
||||
replace_old_owner_information(pos)
|
||||
|
||||
elseif owner ~= "" then
|
||||
if clicker:get_player_name() ~= owner then
|
||||
if clicker and not default.can_interact_with_node(clicker, pos) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- until Lua-5.2 we have no bitwise operators :(
|
||||
if state % 2 == 1 then
|
||||
|
@ -205,11 +202,13 @@ local function on_place_node(place_to, newnode,
|
|||
end
|
||||
|
||||
local function can_dig_door(pos, digger)
|
||||
local digger_name = digger and digger:get_player_name()
|
||||
if digger_name and minetest.get_player_privs(digger_name).protection_bypass then
|
||||
replace_old_owner_information(pos)
|
||||
if default.can_interact_with_node(digger, pos) then
|
||||
return true
|
||||
else
|
||||
minetest.record_protection_violation(pos, digger:get_player_name())
|
||||
return false
|
||||
end
|
||||
return minetest.get_meta(pos):get_string("doors_owner") == digger_name
|
||||
end
|
||||
|
||||
function doors.register(name, def)
|
||||
|
@ -255,6 +254,7 @@ function doors.register(name, def)
|
|||
minetest.register_craftitem(":" .. name, {
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
groups = table.copy(def.groups),
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local pos
|
||||
|
@ -265,7 +265,8 @@ function doors.register(name, def)
|
|||
|
||||
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
|
||||
|
@ -323,14 +324,16 @@ function doors.register(name, def)
|
|||
meta:set_int("state", state)
|
||||
|
||||
if def.protected then
|
||||
meta:set_string("doors_owner", pn)
|
||||
meta:set_string("owner", pn)
|
||||
meta:set_string("infotext", "Owned by " .. pn)
|
||||
end
|
||||
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
|
||||
minetest.sound_play(def.sounds.place, {pos = pos})
|
||||
|
||||
on_place_node(pos, minetest.get_node(pos),
|
||||
placer, node, itemstack, pointed_thing)
|
||||
|
||||
|
@ -375,7 +378,9 @@ function doors.register(name, def)
|
|||
minetest.remove_node({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 = false
|
||||
def.on_rotate = function(pos, node, user, mode, new_param2)
|
||||
return false
|
||||
end
|
||||
|
||||
if def.protected then
|
||||
def.can_dig = can_dig_door
|
||||
|
@ -385,8 +390,9 @@ function doors.register(name, def)
|
|||
door:toggle(player)
|
||||
end
|
||||
def.on_skeleton_key_use = function(pos, player, newsecret)
|
||||
replace_old_owner_information(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("doors_owner")
|
||||
local owner = meta:get_string("owner")
|
||||
local pname = player:get_player_name()
|
||||
|
||||
-- verify placer is owner of lockable door
|
||||
|
@ -523,24 +529,12 @@ end
|
|||
|
||||
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 item:get_name() == "default:key" then
|
||||
local key_meta = minetest.parse_json(item:get_metadata())
|
||||
local secret = meta:get_string("key_lock_secret")
|
||||
if secret ~= key_meta.secret then
|
||||
return false
|
||||
end
|
||||
|
||||
elseif owner ~= "" then
|
||||
if clicker:get_player_name() ~= owner then
|
||||
replace_old_owner_information(pos)
|
||||
|
||||
if clicker and not default.can_interact_with_node(clicker, pos) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
|
||||
|
@ -581,10 +575,10 @@ function doors.register_trapdoor(name, def)
|
|||
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("owner", pn)
|
||||
meta:set_string("infotext", "Owned by "..pn)
|
||||
|
||||
return minetest.setting_getbool("creative_mode")
|
||||
return (creative and creative.is_enabled_for and creative.is_enabled_for(pn))
|
||||
end
|
||||
|
||||
def.on_blast = function() end
|
||||
|
@ -593,8 +587,9 @@ function doors.register_trapdoor(name, def)
|
|||
door:toggle(player)
|
||||
end
|
||||
def.on_skeleton_key_use = function(pos, player, newsecret)
|
||||
replace_old_owner_information(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("doors_owner")
|
||||
local owner = meta:get_string("owner")
|
||||
local pname = player:get_player_name()
|
||||
|
||||
-- verify placer is owner of lockable door
|
||||
|
@ -792,7 +787,7 @@ doors.register_fencegate("doors:gate_acacia_wood", {
|
|||
})
|
||||
|
||||
doors.register_fencegate("doors:gate_junglewood", {
|
||||
description = "Junglewood Fence Gate",
|
||||
description = "Jungle Wood Fence Gate",
|
||||
texture = "default_junglewood.png",
|
||||
material = "default:junglewood",
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
|
Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 95 B |
After Width: | Height: | Size: 491 B |
After Width: | Height: | Size: 420 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 132 B After Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 130 B After Width: | Height: | Size: 130 B |
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 233 B |
Before Width: | Height: | Size: 153 B After Width: | Height: | Size: 153 B |
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 101 B |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.9 KiB |