@@ -186,6 +186,62 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv
186
186
craft_inv :set_stack (" craft" , index , original )
187
187
end )
188
188
189
+ minetest .register_craftitem (" default:skeleton_key" , {
190
+ description = " Skeleton Key" ,
191
+ inventory_image = " default_key_skeleton.png" ,
192
+ groups = {key = 1 },
193
+ on_use = function (itemstack , user , pointed_thing )
194
+ if pointed_thing .type ~= " node" then
195
+ return itemstack
196
+ end
197
+
198
+ local pos = pointed_thing .under
199
+ local node = minetest .get_node (pos )
200
+
201
+ if not node then
202
+ return itemstack
203
+ end
204
+
205
+ local on_skeleton_key_use = minetest .registered_nodes [node .name ].on_skeleton_key_use
206
+ if not on_skeleton_key_use then
207
+ return itemstack
208
+ end
209
+
210
+ -- make a new key secret in case the node callback needs it
211
+ local random = math.random
212
+ local newsecret = string.format (
213
+ " %04x%04x%04x%04x" ,
214
+ random (2 ^ 16 ) - 1 , random (2 ^ 16 ) - 1 ,
215
+ random (2 ^ 16 ) - 1 , random (2 ^ 16 ) - 1 )
216
+
217
+ local secret , _ , _ = on_skeleton_key_use (pos , user , newsecret )
218
+
219
+ if secret then
220
+ local inv = minetest .get_inventory ({type = " player" , name = user :get_player_name ()})
221
+
222
+ -- update original itemstack
223
+ itemstack :take_item ()
224
+
225
+ -- finish and return the new key
226
+ local new_stack = ItemStack (" default:key" )
227
+ local meta = new_stack :get_meta ()
228
+ meta :set_string (" secret" , secret )
229
+ meta :set_string (" description" , " Key to " .. user :get_player_name ().. " 's "
230
+ .. minetest .registered_nodes [node .name ].description )
231
+
232
+ if itemstack :get_count () == 0 then
233
+ itemstack = new_stack
234
+ else
235
+ if inv :add_item (" main" , new_stack ):get_count () > 0 then
236
+ minetest .add_item (user :getpos (), new_stack )
237
+ end -- else: added to inventory successfully
238
+ end
239
+
240
+ return itemstack
241
+ end
242
+ end
243
+ })
244
+
189
245
minetest .register_craftitem (" default:coal_lump" , {
190
246
description = " Coal Lump" ,
191
247
inventory_image = " default_coal_lump.png" ,
0 commit comments