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:
		| @@ -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"}, | ||||||
|  | 	} | ||||||
|  | }) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user