mirror of
https://github.com/minetest-mods/3d_armor.git
synced 2024-12-27 03:00:40 +01:00
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
|
||||
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()
|
||||
return
|
||||
end
|
||||
@ -134,6 +134,61 @@ minetest.register_node("3d_armor_stand:armor_stand", {
|
||||
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", {
|
||||
physical = true,
|
||||
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