@@ -11,10 +11,12 @@ local min_inv_size = 4 * 8 -- display and provide at least this many slots
1111
1212bones = {}
1313
14+
1415local function NS (s )
1516 return s
1617end
1718
19+
1820local function is_owner (pos , name )
1921 local owner = minetest .get_meta (pos ):get_string (" owner" )
2022 if owner == " " or owner == name or minetest .check_player_privs (name , " protection_bypass" ) then
@@ -23,6 +25,7 @@ local function is_owner(pos, name)
2325 return false
2426end
2527
28+
2629local function appendmulti (tbl ,...)
2730 for _ , v in pairs ({... }) do
2831 table.insert (tbl , v )
101104local share_bones_time = tonumber (minetest .settings :get (" share_bones_time" )) or 1200
102105local share_bones_time_early = tonumber (minetest .settings :get (" share_bones_time_early" )) or share_bones_time / 4
103106
107+
104108local function find_next_empty (inv ,listname ,start )
105109 while start <= inv :get_size (listname ) do
106110 if inv :get_stack (listname , start ):get_count () == 0 then
@@ -111,6 +115,7 @@ local function find_next_empty(inv,listname,start)
111115 return - 1
112116end
113117
118+
114119local function find_next_populated (inv , listname , start )
115120 while start <= inv :get_size (listname ) do
116121 if inv :get_stack (listname , start ):get_count () > 0 then
@@ -121,6 +126,7 @@ local function find_next_populated(inv, listname, start)
121126 return - 1
122127end
123128
129+
124130-- slot reordering to make sure the first rows of the bone are always populated
125131local function bones_inv_reorder (meta )
126132 local next_empty = 1 -- there are no empty slots inside the bones before this
@@ -140,6 +146,7 @@ local function bones_inv_reorder(meta)
140146 end
141147end
142148
149+
143150local bones_def = {
144151 description = S (" Bones" ),
145152 tiles = {
@@ -255,10 +262,12 @@ local bones_def = {
255262 end ,
256263}
257264
265+
258266default .set_inventory_action_loggers (bones_def , " bones" )
259267
260268minetest .register_node (" bones:bones" , bones_def )
261269
270+
262271local function may_replace (pos , player )
263272 local node_name = minetest .get_node (pos ).name
264273 local node_definition = minetest .registered_nodes [node_name ]
@@ -294,15 +303,19 @@ local function may_replace(pos, player)
294303 return node_definition .buildable_to
295304end
296305
306+
297307local player_inventory_lists = { " main" , " craft" }
298308bones .player_inventory_lists = player_inventory_lists
299309
310+
300311local collect_items_callbacks = {}
301312
313+
302314function bones .register_collect_items (func )
303315 table.insert (collect_items_callbacks , func )
304316end
305317
318+
306319bones .register_collect_items (function (player )
307320 local items = {}
308321 local player_inv = player :get_inventory ()
@@ -323,6 +336,7 @@ bones.register_collect_items(function(player)
323336 return items
324337end )
325338
339+
326340local function collect_items (player , player_name )
327341 if minetest .is_creative_enabled (player_name ) then
328342 return {}
@@ -335,6 +349,7 @@ local function collect_items(player, player_name)
335349 return items
336350end
337351
352+
338353-- Try to find the closest space near the player to place bones
339354local function find_bones_pos (player )
340355 local rounded_player_pos = vector .round (player :get_pos ())
@@ -347,6 +362,7 @@ local function find_bones_pos(player)
347362 return bones_pos
348363end
349364
365+
350366local function place_bones (player , bones_pos , items )
351367 local param2 = minetest .dir_to_facedir (player :get_look_dir ())
352368 minetest .set_node (bones_pos , {name = " bones:bones" , param2 = param2 })
@@ -388,6 +404,7 @@ local function place_bones(player, bones_pos, items)
388404 return leftover_items
389405end
390406
407+
391408minetest .register_on_dieplayer (function (player )
392409 local bones_mode = minetest .settings :get (" bones_mode" ) or " bones"
393410 if bones_mode ~= " bones" and bones_mode ~= " drop" and bones_mode ~= " keep" then
0 commit comments