Crafting: Fix some incorrect inventory states
This commit is contained in:
parent
06edc935b7
commit
03f84f062a
@ -290,7 +290,7 @@ form = form .. "tablecolumns[text,align=left,width=2;text,align=left,width=40]"
|
|||||||
|
|
||||||
default.ui.register_page("crafting:crafting", form)
|
default.ui.register_page("crafting:crafting", form)
|
||||||
|
|
||||||
function crafting.get_formspec(name)
|
function crafting.get_formspec(name, select_item)
|
||||||
local row = 1
|
local row = 1
|
||||||
|
|
||||||
if crafting.userdata[name] ~= nil then
|
if crafting.userdata[name] ~= nil then
|
||||||
@ -307,15 +307,37 @@ function crafting.get_formspec(name)
|
|||||||
else
|
else
|
||||||
craftitems = crafting.get_crafts(inv)
|
craftitems = crafting.get_crafts(inv)
|
||||||
end
|
end
|
||||||
|
if select_item == nil then
|
||||||
|
if row > #craftitems then
|
||||||
|
row = #craftitems
|
||||||
|
if crafting.userdata[name] ~= nil then
|
||||||
|
crafting.userdata[name].row = row
|
||||||
|
end
|
||||||
|
elseif row < 1 and #craftitems >= 1 then
|
||||||
|
row = 1
|
||||||
|
if crafting.userdata[name] ~= nil then
|
||||||
|
crafting.userdata[name].row = row
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local selected_craftdef = nil
|
local selected_craftdef = nil
|
||||||
|
|
||||||
local craft_count = 0
|
local craft_count = 0
|
||||||
for i, itemn in ipairs(craftitems) do
|
for i, itemn in ipairs(craftitems) do
|
||||||
local itemstack = ItemStack(itemn)
|
local itemstack = ItemStack(itemn)
|
||||||
local itemdef = minetest.registered_items[itemstack:get_name()]
|
local itemname = itemstack:get_name()
|
||||||
|
local itemdef = minetest.registered_items[itemname]
|
||||||
|
|
||||||
if i == row then
|
if select_item then
|
||||||
|
if itemname == select_item then
|
||||||
|
selected_craftdef = crafting.registered_crafts[itemn]
|
||||||
|
row = i
|
||||||
|
if crafting.userdata[name] ~= nil then
|
||||||
|
crafting.userdata[name].row = row
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif i == row then
|
||||||
selected_craftdef = crafting.registered_crafts[itemn]
|
selected_craftdef = crafting.registered_crafts[itemn]
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -341,6 +363,13 @@ function crafting.get_formspec(name)
|
|||||||
craft_count = craft_count + 1
|
craft_count = craft_count + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if select_item and (not selected_craftdef) and #craftitems > 0 then
|
||||||
|
row = 1
|
||||||
|
selected_craftdef = crafting.registered_crafts[craftitems[row]]
|
||||||
|
if crafting.userdata[name] ~= nil then
|
||||||
|
crafting.userdata[name].row = row
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local form = default.ui.get_page("crafting:crafting")
|
local form = default.ui.get_page("crafting:crafting")
|
||||||
|
|
||||||
@ -471,16 +500,24 @@ local function on_player_receive_fields(player, form_name, fields)
|
|||||||
crafting.userdata[name].row = selection.row
|
crafting.userdata[name].row = selection.row
|
||||||
|
|
||||||
minetest.show_formspec(name, "crafting:crafting",
|
minetest.show_formspec(name, "crafting:crafting",
|
||||||
crafting.get_formspec(name, crafting.userdata[name].row))
|
crafting.get_formspec(name))
|
||||||
end
|
end
|
||||||
elseif fields.toggle_filter then
|
elseif fields.toggle_filter then
|
||||||
|
local craftitems
|
||||||
|
if crafting.userdata[name] and crafting.userdata[name].mode == MODE_GUIDE then
|
||||||
|
craftitems = crafting.get_crafts()
|
||||||
|
else
|
||||||
|
craftitems = crafting.get_crafts(inv)
|
||||||
|
end
|
||||||
|
local old_item = craftitems[crafting.userdata[name].row]
|
||||||
if crafting.userdata[name].mode == MODE_GUIDE then
|
if crafting.userdata[name].mode == MODE_GUIDE then
|
||||||
crafting.userdata[name].mode = MODE_CRAFTABLE
|
crafting.userdata[name].mode = MODE_CRAFTABLE
|
||||||
else
|
else
|
||||||
crafting.userdata[name].mode = MODE_GUIDE
|
crafting.userdata[name].mode = MODE_GUIDE
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.show_formspec(name, "crafting:crafting",
|
minetest.show_formspec(name, "crafting:crafting",
|
||||||
crafting.get_formspec(name, crafting.userdata[name].row))
|
crafting.get_formspec(name, old_item))
|
||||||
end
|
end
|
||||||
|
|
||||||
player:set_inventory_formspec(crafting.get_formspec(name))
|
player:set_inventory_formspec(crafting.get_formspec(name))
|
||||||
@ -489,7 +526,7 @@ end
|
|||||||
function crafting.update_crafting_formspec(player)
|
function crafting.update_crafting_formspec(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
minetest.show_formspec(name, "crafting:crafting",
|
minetest.show_formspec(name, "crafting:crafting",
|
||||||
crafting.get_formspec(name, crafting.userdata[name].row))
|
crafting.get_formspec(name))
|
||||||
player:set_inventory_formspec(crafting.get_formspec(name))
|
player:set_inventory_formspec(crafting.get_formspec(name))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user