Browse Source

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
pull/134/head
SmallJoker 6 months ago
parent
commit
04b1cb9e7d
1 changed files with 17 additions and 16 deletions
  1. +17
    -16
      callbacks.lua

+ 17
- 16
callbacks.lua View File

@@ -47,6 +47,15 @@ minetest.register_on_joinplayer(function(player)
refill:set_size("main", 1)
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)
local player_name = player:get_player_name()

@@ -60,7 +69,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.searchbox
and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then
unified_inventory.current_searchbox[player_name] = fields.searchbox
unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name])
end

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])
end

-- Check clicked item image button
local clicked_item
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)
if string.sub(clicked_item, 1, 6) == "group:" then
minetest.sound_play("click", {to_player=player_name, gain = 0.1})
unified_inventory.apply_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])
-- Change search filter to this group
apply_new_filter(player, clicked_item, new_dir)
return
end
if new_dir == "recipe"
or new_dir == "usage" then
if new_dir == "recipe" or new_dir == "usage" then
unified_inventory.current_craft_direction[player_name] = new_dir
end
break
@@ -145,6 +150,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
unified_inventory.alternate[player_name] = 1
unified_inventory.set_inventory_formspec(player, "craftguide")
elseif player_creative then
-- Creative page: Add entire stack to inventory
local inv = player:get_inventory()
local stack = ItemStack(clicked_item)
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",
{to_player=player_name, gain = 1.0})
elseif fields.searchresetbutton then
unified_inventory.apply_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})
apply_new_filter(player, "", "nochange")
end

-- alternate buttons

Loading…
Cancel
Save