Fix error on invalid item_button_ fields

Also reduce the player inventory sending by one. If a formspec is sent, it'll also take the newest known search text
This commit is contained in:
SmallJoker 2019-08-02 16:39:43 +02:00
parent 774674d0f5
commit 04b1cb9e7d

View File

@ -47,6 +47,15 @@ minetest.register_on_joinplayer(function(player)
refill:set_size("main", 1) refill:set_size("main", 1)
end) end)
local function apply_new_filter(player, search_text, new_dir)
local player_name = player:get_player_name()
minetest.sound_play("click", {to_player=player_name, gain = 0.1})
unified_inventory.apply_filter(player, search_text, new_dir)
unified_inventory.current_searchbox[player_name] = search_text
unified_inventory.set_inventory_formspec(player,
unified_inventory.current_page[player_name])
end
minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
local player_name = player:get_player_name() local player_name = player:get_player_name()
@ -60,7 +69,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.searchbox if fields.searchbox
and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then
unified_inventory.current_searchbox[player_name] = fields.searchbox unified_inventory.current_searchbox[player_name] = fields.searchbox
unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name])
end end
for i, def in pairs(unified_inventory.buttons) do for i, def in pairs(unified_inventory.buttons) do
@ -112,21 +120,18 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
unified_inventory.current_page[player_name]) unified_inventory.current_page[player_name])
end end
-- Check clicked item image button
local clicked_item local clicked_item
for name, value in pairs(fields) do for name, value in pairs(fields) do
if string.sub(name, 1, 12) == "item_button_" then
local new_dir, mangled_item = string.match(name, "^item_button_([a-z]+)_(.*)$") local new_dir, mangled_item = string.match(name, "^item_button_([a-z]+)_(.*)$")
if new_dir and mangled_item then
clicked_item = unified_inventory.demangle_for_formspec(mangled_item) clicked_item = unified_inventory.demangle_for_formspec(mangled_item)
if string.sub(clicked_item, 1, 6) == "group:" then if string.sub(clicked_item, 1, 6) == "group:" then
minetest.sound_play("click", {to_player=player_name, gain = 0.1}) -- Change search filter to this group
unified_inventory.apply_filter(player, clicked_item, new_dir) apply_new_filter(player, clicked_item, new_dir)
unified_inventory.current_searchbox[player_name] = clicked_item
unified_inventory.set_inventory_formspec(player,
unified_inventory.current_page[player_name])
return return
end end
if new_dir == "recipe" if new_dir == "recipe" or new_dir == "usage" then
or new_dir == "usage" then
unified_inventory.current_craft_direction[player_name] = new_dir unified_inventory.current_craft_direction[player_name] = new_dir
end end
break break
@ -145,6 +150,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
unified_inventory.alternate[player_name] = 1 unified_inventory.alternate[player_name] = 1
unified_inventory.set_inventory_formspec(player, "craftguide") unified_inventory.set_inventory_formspec(player, "craftguide")
elseif player_creative then elseif player_creative then
-- Creative page: Add entire stack to inventory
local inv = player:get_inventory() local inv = player:get_inventory()
local stack = ItemStack(clicked_item) local stack = ItemStack(clicked_item)
stack:set_count(stack:get_stack_max()) stack:set_count(stack:get_stack_max())
@ -162,12 +168,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
minetest.sound_play("paperflip2", minetest.sound_play("paperflip2",
{to_player=player_name, gain = 1.0}) {to_player=player_name, gain = 1.0})
elseif fields.searchresetbutton then elseif fields.searchresetbutton then
unified_inventory.apply_filter(player, "", "nochange") apply_new_filter(player, "", "nochange")
unified_inventory.current_searchbox[player_name] = ""
unified_inventory.set_inventory_formspec(player,
unified_inventory.current_page[player_name])
minetest.sound_play("click",
{to_player=player_name, gain = 0.1})
end end
-- alternate buttons -- alternate buttons