forked from luanti-org/minetest_game
		
	Move keys to a separate mod (Fix #1490)
This commit is contained in:
		
							
								
								
									
										102
									
								
								mods/keys/craftitems.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								mods/keys/craftitems.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| -- Load support for MT game translation. | ||||
| local S = minetest.get_translator("keys") | ||||
|  | ||||
| -- | ||||
| -- Craftitems | ||||
| -- | ||||
|  | ||||
| minetest.register_craftitem("keys:skeleton_key", { | ||||
| 	description = S("Skeleton Key"), | ||||
| 	inventory_image = "keys_key_skeleton.png", | ||||
| 	on_use = function(itemstack, user, pointed_thing) | ||||
| 		if pointed_thing.type ~= "node" then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		local pos = pointed_thing.under | ||||
| 		local node = minetest.get_node(pos) | ||||
|  | ||||
| 		if not node then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		local node_reg = minetest.registered_nodes[node.name] | ||||
| 		local on_skeleton_key_use = node_reg and node_reg.on_skeleton_key_use | ||||
| 		if not on_skeleton_key_use then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		-- make a new key secret in case the node callback needs it | ||||
| 		local random = math.random | ||||
| 		local newsecret = string.format( | ||||
| 			"%04x%04x%04x%04x", | ||||
| 			random(2^16) - 1, random(2^16) - 1, | ||||
| 			random(2^16) - 1, random(2^16) - 1) | ||||
|  | ||||
| 		local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) | ||||
|  | ||||
| 		if secret then | ||||
| 			local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) | ||||
|  | ||||
| 			-- update original itemstack | ||||
| 			itemstack:take_item() | ||||
|  | ||||
| 			-- finish and return the new key | ||||
| 			local new_stack = ItemStack("keys:key") | ||||
| 			local meta = new_stack:get_meta() | ||||
| 			meta:set_string("secret", secret) | ||||
| 			meta:set_string("description", S("Key to @1's @2", user:get_player_name(), | ||||
| 				minetest.registered_nodes[node.name].description)) | ||||
|  | ||||
| 			if itemstack:get_count() == 0 then | ||||
| 				itemstack = new_stack | ||||
| 			else | ||||
| 				if inv:add_item("main", new_stack):get_count() > 0 then | ||||
| 					minetest.add_item(user:get_pos(), new_stack) | ||||
| 				end -- else: added to inventory successfully | ||||
| 			end | ||||
|  | ||||
| 			return itemstack | ||||
| 		end | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| minetest.register_tool("keys:key", { | ||||
| 	description = S("Key"), | ||||
| 	inventory_image = "keys_key.png", | ||||
| 	groups = {key = 1, not_in_creative_inventory = 1}, | ||||
| 	stack_max = 1, | ||||
| 	on_place = function(itemstack, placer, pointed_thing) | ||||
| 		local under = pointed_thing.under | ||||
| 		local node = minetest.get_node(under) | ||||
| 		local def = minetest.registered_nodes[node.name] | ||||
| 		if def and def.on_rightclick and | ||||
| 				not (placer and placer:is_player() and | ||||
| 				placer:get_player_control().sneak) then | ||||
| 			return def.on_rightclick(under, node, placer, itemstack, | ||||
| 				pointed_thing) or itemstack | ||||
| 		end | ||||
| 		if pointed_thing.type ~= "node" then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		local pos = pointed_thing.under | ||||
| 		node = minetest.get_node(pos) | ||||
|  | ||||
| 		if not node or node.name == "ignore" then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		local ndef = minetest.registered_nodes[node.name] | ||||
| 		if not ndef then | ||||
| 			return itemstack | ||||
| 		end | ||||
|  | ||||
| 		local on_key_use = ndef.on_key_use | ||||
| 		if on_key_use then | ||||
| 			on_key_use(pos, placer) | ||||
| 		end | ||||
|  | ||||
| 		return nil | ||||
| 	end | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user