11-- Minetest 0.4 mod: bones
22-- See README.txt for licensing and other information.
33
4+ bones = {}
5+
46local function is_owner (pos , name )
57 local owner = minetest .get_meta (pos ):get_string (" owner" )
68 if owner == " " or owner == name or minetest .check_player_privs (name , " protection_bypass" ) then
@@ -165,6 +167,18 @@ local drop = function(pos, itemstack)
165167 end
166168end
167169
170+ local player_inventory_lists = { " main" , " craft" }
171+ bones .player_inventory_lists = player_inventory_lists
172+
173+ local function is_all_empty (player_inv )
174+ for _ , list_name in ipairs (player_inventory_lists ) do
175+ if not player_inv :is_empty (list_name ) then
176+ return false
177+ end
178+ end
179+ return true
180+ end
181+
168182minetest .register_on_dieplayer (function (player )
169183
170184 local bones_mode = minetest .settings :get (" bones_mode" ) or " bones"
@@ -179,8 +193,7 @@ minetest.register_on_dieplayer(function(player)
179193 end
180194
181195 local player_inv = player :get_inventory ()
182- if player_inv :is_empty (" main" ) and
183- player_inv :is_empty (" craft" ) then
196+ if is_all_empty (player_inv ) then
184197 return
185198 end
186199
@@ -198,19 +211,12 @@ minetest.register_on_dieplayer(function(player)
198211 end
199212
200213 if bones_mode == " drop" then
201-
202- -- drop inventory items
203- for i = 1 , player_inv :get_size (" main" ) do
204- drop (pos , player_inv :get_stack (" main" , i ))
205- end
206- player_inv :set_list (" main" , {})
207-
208- -- drop crafting grid items
209- for i = 1 , player_inv :get_size (" craft" ) do
210- drop (pos , player_inv :get_stack (" craft" , i ))
214+ for _ , list_name in ipairs (player_inventory_lists ) do
215+ for i = 1 , player_inv :get_size (list_name ) do
216+ drop (pos , player_inv :get_stack (list_name , i ))
217+ end
218+ player_inv :set_list (list_name , {})
211219 end
212- player_inv :set_list (" craft" , {})
213-
214220 drop (pos , ItemStack (" bones:bones" ))
215221 return
216222 end
@@ -221,21 +227,19 @@ minetest.register_on_dieplayer(function(player)
221227 local meta = minetest .get_meta (pos )
222228 local inv = meta :get_inventory ()
223229 inv :set_size (" main" , 8 * 4 )
224- inv :set_list (" main" , player_inv :get_list (" main" ))
225230
226- for i = 1 , player_inv :get_size (" craft" ) do
227- local stack = player_inv :get_stack (" craft" , i )
228- if inv :room_for_item (" main" , stack ) then
229- inv :add_item (" main" , stack )
230- else
231- -- drop if no space left
232- drop (pos , stack )
231+ for _ , list_name in ipairs (player_inventory_lists ) do
232+ for i = 1 , player_inv :get_size (list_name ) do
233+ local stack = player_inv :get_stack (list_name , i )
234+ if inv :room_for_item (" main" , stack ) then
235+ inv :add_item (" main" , stack )
236+ else -- no space left
237+ drop (pos , stack )
238+ end
233239 end
240+ player_inv :set_list (list_name , {})
234241 end
235242
236- player_inv :set_list (" main" , {})
237- player_inv :set_list (" craft" , {})
238-
239243 meta :set_string (" formspec" , bones_formspec )
240244 meta :set_string (" owner" , player_name )
241245
0 commit comments