forked from mtcontrib/3d_armor
Add a locked armor stand
This change adds a locked armor stand, so that player can use them savely on multiplayer worlds.
This commit is contained in:
parent
b6a44057a6
commit
4e8cf05436
@ -34,7 +34,7 @@ local function update_entity(pos)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if object then
|
if object then
|
||||||
if node.name ~= "3d_armor_stand:armor_stand" then
|
if node.name ~= "3d_armor_stand:armor_stand" and node.name ~= "3d_armor_stand:locked_armor_stand" then
|
||||||
object:remove()
|
object:remove()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -134,6 +134,61 @@ minetest.register_node("3d_armor_stand:armor_stand", {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function has_locked_armor_stand_privilege(meta, player)
|
||||||
|
local name = ""
|
||||||
|
if player then
|
||||||
|
if minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
name = player:get_player_name()
|
||||||
|
end
|
||||||
|
if name ~= meta:get_string("owner") then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local node = {}
|
||||||
|
for k,v in pairs(minetest.registered_nodes["3d_armor_stand:armor_stand"]) do node[k] = v end
|
||||||
|
node.description = "Locked " .. node.description
|
||||||
|
node.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if not has_locked_armor_stand_privilege(meta, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
local def = stack:get_definition() or {}
|
||||||
|
local groups = def.groups or {}
|
||||||
|
if groups[listname] then
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
node.allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if not has_locked_armor_stand_privilege(meta, player) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
node.on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", armor_stand_formspec)
|
||||||
|
meta:set_string("infotext", "Armor Stand")
|
||||||
|
meta:set_string("owner", "")
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for _, element in pairs(elements) do
|
||||||
|
inv:set_size("armor_"..element, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
node.after_place_node = function(pos, placer)
|
||||||
|
minetest.add_entity(pos, "3d_armor_stand:armor_entity")
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("owner", placer:get_player_name() or "")
|
||||||
|
meta:set_string("infotext", "Armor Stand (owned by " ..
|
||||||
|
meta:get_string("owner") .. ")")
|
||||||
|
end
|
||||||
|
minetest.register_node("3d_armor_stand:locked_armor_stand", node)
|
||||||
|
|
||||||
minetest.register_entity("3d_armor_stand:armor_entity", {
|
minetest.register_entity("3d_armor_stand:armor_entity", {
|
||||||
physical = true,
|
physical = true,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
@ -156,3 +211,9 @@ minetest.register_craft({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "3d_armor_stand:locked_armor_stand",
|
||||||
|
recipe = {
|
||||||
|
{"3d_armor_stand:armor_stand", "default:steel_ingot"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user