ShadowNinja
2013-09-25 2e52c6c795704c12bebf3790e1ef70d7f0234801
commit | author | age
310761 1
S 2 minetest.register_on_joinplayer(function(player)
3     local player_name = player:get_player_name()
4     unified_inventory.players[player_name] = {}
5     unified_inventory.current_index[player_name] = 1
6     unified_inventory.filtered_items_list[player_name] = unified_inventory.items_list
7     unified_inventory.activefilter[player_name] = ""
8     unified_inventory.apply_filter(player, "")
9     unified_inventory.alternate[player_name] = 1
10     unified_inventory.current_item[player_name] = nil
11     unified_inventory.set_inventory_formspec(player, unified_inventory.default)
12     
13     -- Crafting guide inventories
14     local inv = minetest.create_detached_inventory(player:get_player_name().."craftrecipe", {
15         allow_put = function(inv, listname, index, stack, player)
16             return 0
17         end,
18         allow_take = function(inv, listname, index, stack, player)
19             if unified_inventory.is_creative(player:get_player_name()) then
20                 return stack:get_count()
21             else
22                 return 0
23             end
24         end,
25         allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
26             return 0
27         end,
28     })
29     inv:set_size("output", 1)
30     inv:set_size("build", 3 * 3)
31
32     -- Refill slot
33     local refill = minetest.create_detached_inventory(player_name.."refill", {
34         allow_put = function(inv, listname, index, stack, player)
35             if unified_inventory.is_creative(player:get_player_name()) then
36                 return stack:get_count()
37             else
38                 return 0
39             end
40         end,
41         on_put = function(inv, listname, index, stack, player)
42             local stacktable = stack:to_table()
43             stacktable.count = stack:get_stack_max()
44             inv:set_stack(listname, index, ItemStack(stacktable))
45             minetest.sound_play("electricity", {to_player=player_name, gain = 1.0})
46         end,
47     })
48     refill:set_size("main", 1)
49 end)
50
51 minetest.register_on_player_receive_fields(function(player, formname, fields)
52     local player_name = player:get_player_name()
53
54     for i, def in pairs(unified_inventory.buttons) do
55         if fields[def.name] then
56             def.action(player)
57             minetest.sound_play("click",
58                     {to_player=player_name, gain = 0.1})
59             return
60         end
61     end
62     
63     -- Inventory page controls
64     local start = math.floor(unified_inventory.current_index[player_name] / 80 + 1)
65     local start_i = start
66     local pagemax = math.floor((unified_inventory.filtered_items_list_size[player_name] - 1) / (80) + 1)
67     
68     if fields.start_list then
69         minetest.sound_play("paperflip1",
70                 {to_player=player_name, gain = 1.0})
71         start_i = 1
72     end
73     if fields.rewind1 then
74         minetest.sound_play("paperflip1",
75                 {to_player=player_name, gain = 1.0})
76         start_i = start_i - 1
77     end
78     if fields.forward1 then
79         minetest.sound_play("paperflip1",
80                 {to_player=player_name, gain = 1.0})
81         start_i = start_i + 1
82     end
83     if fields.rewind3 then
84         minetest.sound_play("paperflip1",
85                 {to_player=player_name, gain = 1.0})
86         start_i = start_i - 3
87     end
88     if fields.forward3 then
89         minetest.sound_play("paperflip1",
90                 {to_player=player_name, gain = 1.0})
91         start_i = start_i + 3
92     end
93     if fields.end_list then
94         minetest.sound_play("paperflip1",
95                 {to_player=player_name, gain = 1.0})
96         start_i = pagemax
97     end
98     if start_i < 1 then
99         start_i = 1
100     end
101     if start_i > pagemax then
102         start_i = pagemax
103     end
104     if not (start_i    == start) then
105         unified_inventory.current_index[player_name] = (start_i - 1) * 80 + 1
106         unified_inventory.set_inventory_formspec(player,
107                 unified_inventory.current_page[player_name])
108     end
109
110     -- Item list buttons
111     local list_index = unified_inventory.current_index[player_name]
112     local page = unified_inventory.current_page[player_name]
113     for i = 0, 80 do
114         local button = "item_button"..list_index
115         if fields[button] then 
116             minetest.sound_play("click",
117                     {to_player=player_name, gain = 0.1})
118             if not unified_inventory.is_creative(player_name) then
119                 unified_inventory.set_inventory_formspec(player, "craftguide")
120                 page = "craftguide"
121             end
122             if page == "craftguide" then 
123                 unified_inventory.current_item[player_name] =
124                         unified_inventory.filtered_items_list
125                             [player_name][list_index] 
126                 unified_inventory.alternate[player_name] = 1
127                 unified_inventory.update_recipe(player,
128                         unified_inventory.filtered_items_list
129                             [player_name][list_index], 1)
130                 unified_inventory.set_inventory_formspec(player,
131                         unified_inventory.current_page[player_name])
132             else
133                 if unified_inventory.is_creative(player_name) then
134                     local inv = player:get_inventory()
135                     dst_stack = {}
136                     dst_stack.name = unified_inventory.filtered_items_list
137                             [player_name][list_index] 
138                     dst_stack.count = 99
139                     if inv:room_for_item("main", dst_stack) then
140                         inv:add_item("main", dst_stack)
141                     end
142                 end
143             end
144         end
145         list_index = list_index + 1
146     end
147     
148     if fields.searchbutton then
149         unified_inventory.apply_filter(player, fields.searchbox)
150         unified_inventory.set_inventory_formspec(player,
151                 unified_inventory.current_page[player_name])
152         minetest.sound_play("paperflip2",
153                 {to_player=player_name, gain = 1.0})
154     end    
155     
156     -- alternate button
157     if fields.alternate then
158         minetest.sound_play("click",
159                 {to_player=player_name, gain = 0.1})
160         local item_name = unified_inventory.current_item[player_name]
161         if item_name then
162             local alternates = 0
163             local alternate = unified_inventory.alternate[player_name]
164             local crafts = unified_inventory.crafts_table[item_name]
165             if crafts ~= nil then
166                 alternates = #crafts
167             end
168             if alternates > 1 then
169                 alternate = alternate + 1
170                 if alternate > alternates then
171                     alternate = 1
172                 end
173                 unified_inventory.alternate[player_name] = alternate        
174                 unified_inventory.update_recipe(player,
175                         unified_inventory.current_item[player_name], alternate)
176                 unified_inventory.set_inventory_formspec(player,
177                         unified_inventory.current_page[player_name])
178             end
179         end
180     end
181 end)
182