1 local inventory_icon
= {}
2 inventory_icon
.hudids
= {}
4 inventory_icon
.COLORIZE_STRING
= "[colorize:#A00000:192"
6 function inventory_icon
.get_inventory_state(inv
, listname
)
7 local size
= inv
:get_size(listname
)
10 local stack
= inv
:get_stack(listname
, i
)
11 if not stack
:is_empty() then
12 occupied
= occupied
+ 1
18 function inventory_icon
.replace_icon(name
)
19 return name
.."^[resize:32x32"
22 minetest
.register_on_joinplayer(function(player
)
23 local name
= player
:get_player_name()
24 inventory_icon
.hudids
[name
] = {}
25 local occupied
, size
= inventory_icon
.get_inventory_state(player
:get_inventory(), "main")
27 if occupied
>= size
then
28 icon
= "inventory_icon_backpack_full.png"
30 icon
= "inventory_icon_backpack_free.png"
32 inventory_icon
.hudids
[name
].main
= {}
33 inventory_icon
.hudids
[name
].main
.icon
= player
:hud_add({
34 hud_elem_type
= "image",
37 offset
= {x
=-32,y
=-32},
40 inventory_icon
.hudids
[name
].main
.text
= player
:hud_add({
41 hud_elem_type
= "text",
44 offset
= {x
=-36,y
=-20},
45 alignment
= {x
=0,y
=0},
47 text
= string.format("%d/%d", occupied
, size
)
49 if minetest
.get_modpath("unified_inventory") ~= nil then
50 inventory_icon
.hudids
[name
].bags
= {}
51 local bags_inv
= minetest
.get_inventory({type = "detached", name
= name
.."_bags"})
53 local bag
= bags_inv
:get_stack("bag"..i
, 1)
54 local scale
, text
, icon
55 if bag
:is_empty() then
56 scale
= { x
= 0, y
= 0 }
58 icon
= "bags_small.png^[resize:32x32"
60 scale
= { x
= 1, y
= 1 }
61 local occupied
, size
= inventory_icon
.get_inventory_state(player
:get_inventory(), "bag"..i
.."contents")
62 text
= string.format("%d/%d", occupied
, size
)
63 icon
= inventory_icon
.replace_icon(minetest
.registered_items
[bag
:get_name()].inventory_image
)
64 if occupied
>= size
then
65 icon
= icon
.. "^" .. inventory_icon
.COLORIZE_STRING
68 inventory_icon
.hudids
[name
].bags
[i
] = {}
69 inventory_icon
.hudids
[name
].bags
[i
].icon
= player
:hud_add({
70 hud_elem_type
= "image",
73 size
= { x
=32, y
=32 },
74 offset
= {x
=-36,y
=-32 -40*i
},
77 inventory_icon
.hudids
[name
].bags
[i
].text
= player
:hud_add({
78 hud_elem_type
= "text",
81 offset
= {x
=-36,y
=-20 -40*i
},
82 alignment
= {x
=0,y
=0},
90 minetest
.register_on_leaveplayer(function(player
)
91 inventory_icon
.hudids
[player
:get_player_name()] = nil
94 inventory_icon
.timer
= 0
95 minetest
.register_globalstep(function(dtime
)
96 inventory_icon
.timer
= inventory_icon
.timer
+ dtime
97 if inventory_icon
.timer
> 1 then
98 for playername
,hudids
in pairs(inventory_icon
.hudids
) do
99 local player
= minetest
.get_player_by_name(playername
)
100 local occupied
, size
= inventory_icon
.get_inventory_state(player
:get_inventory(), "main")
102 if occupied
>= size
then
103 icon
= "inventory_icon_backpack_full.png"
105 icon
= "inventory_icon_backpack_free.png"
107 player
:hud_change(hudids
.main
.icon
, "text", icon
)
108 player
:hud_change(hudids
.main
.text
, "text", string.format("%d/%d", occupied
, size
))
110 if minetest
.get_modpath("unified_inventory") ~= nil then
111 local bags_inv
= minetest
.get_inventory({type = "detached", name
= playername
.."_bags"})
113 local bag
= bags_inv
:get_stack("bag"..i
, 1)
114 local scale
, text
, icon
115 if bag
:is_empty() then
116 scale
= { x
= 0, y
= 0 }
118 icon
= "bags_small.png^[resize:32x32"
120 scale
= { x
= 1, y
= 1 }
121 local occupied
, size
= inventory_icon
.get_inventory_state(player
:get_inventory(), "bag"..i
.."contents")
122 text
= string.format("%d/%d", occupied
, size
)
123 icon
= inventory_icon
.replace_icon(minetest
.registered_items
[bag
:get_name()].inventory_image
)
124 if occupied
>= size
then
125 icon
= icon
.. "^" .. inventory_icon
.COLORIZE_STRING
128 player
:hud_change(inventory_icon
.hudids
[playername
].bags
[i
].icon
, "text", icon
)
129 player
:hud_change(inventory_icon
.hudids
[playername
].bags
[i
].icon
, "scale", scale
)
131 player
:hud_change(inventory_icon
.hudids
[playername
].bags
[i
].text
, "text", text
)
132 player
:hud_change(inventory_icon
.hudids
[playername
].bags
[i
].text
, "scale", scale
)
136 inventory_icon
.timer
= 0