@@ -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,12 +25,14 @@ 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 )
2932 end
3033end
3134
35+
3236local function get_bones_formspec_for_size (numitems )
3337 local cols , rows
3438 local scroll = false
@@ -61,9 +65,11 @@ local function get_bones_formspec_for_size(numitems)
6165 return table.concat (output )
6266end
6367
68+
6469local share_bones_time = tonumber (minetest .settings :get (" share_bones_time" )) or 1200
6570local share_bones_time_early = tonumber (minetest .settings :get (" share_bones_time_early" )) or share_bones_time / 4
6671
72+
6773local function find_next_empty (inv ,listname ,start )
6874 while start <= inv :get_size (listname ) do
6975 if inv :get_stack (listname , start ):get_count () == 0 then
@@ -74,6 +80,7 @@ local function find_next_empty(inv,listname,start)
7480 return - 1
7581end
7682
83+
7784local function find_next_populated (inv , listname , start )
7885 while start <= inv :get_size (listname ) do
7986 if inv :get_stack (listname , start ):get_count () > 0 then
@@ -84,6 +91,7 @@ local function find_next_populated(inv, listname, start)
8491 return - 1
8592end
8693
94+
8795-- slot reordering to make sure the first rows of the bone are always populated
8896local function bones_inv_reorder (meta )
8997 local next_empty = 1 -- there are no empty slots inside the bones before this
@@ -103,6 +111,7 @@ local function bones_inv_reorder(meta)
103111 end
104112end
105113
114+
106115local bones_def = {
107116 description = S (" Bones" ),
108117 tiles = {
@@ -213,10 +222,12 @@ local bones_def = {
213222 end ,
214223}
215224
225+
216226default .set_inventory_action_loggers (bones_def , " bones" )
217227
218228minetest .register_node (" bones:bones" , bones_def )
219229
230+
220231local function may_replace (pos , player )
221232 local node_name = minetest .get_node (pos ).name
222233 local node_definition = minetest .registered_nodes [node_name ]
@@ -252,7 +263,8 @@ local function may_replace(pos, player)
252263 return node_definition .buildable_to
253264end
254265
255- local drop = function (pos , itemstack )
266+
267+ local function drop (pos , itemstack )
256268 local obj = minetest .add_item (pos , itemstack :take_item (itemstack :get_count ()))
257269 if obj then
258270 obj :set_velocity ({
@@ -263,14 +275,17 @@ local drop = function(pos, itemstack)
263275 end
264276end
265277
278+
266279bones .player_inventory_lists = { " main" , " craft" }
267280
268281local collect_items_callbacks = {}
269282
283+
270284function bones .register_collect_items (func )
271285 table.insert (collect_items_callbacks , func )
272286end
273287
288+
274289bones .register_collect_items (function (player )
275290 local items = {}
276291 local player_inv = player :get_inventory ()
@@ -291,6 +306,7 @@ bones.register_collect_items(function(player)
291306 return items
292307end )
293308
309+
294310local function collect_items (player , player_name )
295311 if minetest .is_creative_enabled (player_name ) then
296312 return {}
@@ -303,6 +319,7 @@ local function collect_items(player, player_name)
303319 return items
304320end
305321
322+
306323-- Try to find the closest space near the player to place bones
307324local function find_bones_pos (player )
308325 local rounded_player_pos = vector .round (player :get_pos ())
@@ -315,6 +332,7 @@ local function find_bones_pos(player)
315332 return bones_pos
316333end
317334
335+
318336local function place_bones (player , bones_pos , items )
319337 local param2 = minetest .dir_to_facedir (player :get_look_dir ())
320338 minetest .set_node (bones_pos , {name = " bones:bones" , param2 = param2 })
@@ -356,6 +374,7 @@ local function place_bones(player, bones_pos, items)
356374 return leftover_items
357375end
358376
377+
359378minetest .register_on_dieplayer (function (player )
360379 local bones_mode = minetest .settings :get (" bones_mode" ) or " bones"
361380 if bones_mode ~= " bones" and bones_mode ~= " drop" and bones_mode ~= " keep" then
0 commit comments