From 67c72c374428339f95b702bd78bfaba3b086dfdc Mon Sep 17 00:00:00 2001 From: Duane Robertson Date: Sun, 28 Jul 2019 02:18:08 -0500 Subject: [PATCH] Rearrange and add recipe tooltips. --- init.lua | 64 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/init.lua b/init.lua index 4299dc4..49e34f2 100644 --- a/init.lua +++ b/init.lua @@ -26,6 +26,7 @@ local WORN_INV = 'worn' minetest.register_craftitem(mod_name..':bag_medium', { + description = 'Medium Bag', inventory_image = 'bags_medium.png', stack_max = 1, _dinv_storage_size = 16, @@ -41,6 +42,7 @@ minetest.register_craft({ }) minetest.register_craftitem(mod_name..':bag_large', { + description = 'Large Bag', inventory_image = 'bags_large.png', stack_max = 1, _dinv_storage_size = 24, @@ -56,6 +58,7 @@ minetest.register_craft({ }) minetest.register_craftitem(mod_name..':bag_small', { + description = 'Small Bag', inventory_image = 'bags_small.png', stack_max = 1, _dinv_storage_size = 8, @@ -106,6 +109,7 @@ minetest.register_craft({ }) minetest.register_craftitem(mod_name..':diamond_plate', { + description = 'Diamond Plate', inventory_image = 'dinv_diamond_plate.png', }) @@ -222,6 +226,7 @@ minetest.register_craft({ }) minetest.register_craftitem(mod_name..':steel_plate', { + description = 'Steel Plate', inventory_image = 'dinv_steel_plate.png', }) @@ -235,6 +240,7 @@ minetest.register_craft({ }) minetest.register_craftitem(mod_name..':steel_rings', { + description = 'Steel Rings', inventory_image = 'dinv_steel_rings.png', }) @@ -414,14 +420,14 @@ local worn_items = mod.worn_items -- Formspec definitions are confusing. -mod.form_size = 'size[11.25,7.75]' -mod.main_inventory = 'list[current_player;main;0,4;8,4;' -mod.craft_inventory = 'list[current_player;craft;3,0;3,3;]' -mod.craft_preview = 'list[current_player;craftpreview;6,1;1,1;]' -mod.main_inventory_scroll_up = 'image_button[8,4;1,1;transparent_button.png;dinv_main_inventory_up;Up]' -mod.main_inventory_scroll_down = 'image_button[8,7;1,1;transparent_button.png;dinv_main_inventory_down;Down]' -mod.recipe_buttons = 'image_button[3,3;1,1;transparent_button.png;dinv_recipe_back;Back]image_button[5,3;1,1;transparent_button.png;dinv_recipe_fore;Fore]' -mod.worn_items_inv = 'list[current_player;worn;9.25,4;2,4;]' +mod.form_size = 'size[11.25,7.25]' +mod.main_inventory = 'list[current_player;main;0,3.5;8,4;' +mod.craft_inventory = 'list[current_player;craft;1,0;3,3;]' +mod.craft_preview = 'list[current_player;craftpreview;4,2;1,1;]' +mod.main_inventory_scroll_up = 'image_button[8,3.5;1,1;transparent_button.png;dinv_main_inventory_up;Up]' +mod.main_inventory_scroll_down = 'image_button[8,6.5;1,1;transparent_button.png;dinv_main_inventory_down;Down]' +mod.recipe_button = 'image_button[4,1;1,1;transparent_button.png;dinv_recipe_next;Next]' +mod.worn_items_inv = 'list[current_player;worn;9.25,3.5;2,4;]' -- All this is necessary to add scroll buttons to chests. @@ -604,7 +610,6 @@ function mod.make_inventory_spec(player) inventory = inventory .. mod.main_inventory .. scroll_main_to .. ']' inventory = inventory .. mod.craft_inventory inventory = inventory .. 'listring[]' - inventory = inventory .. mod.recipe_buttons inventory = inventory .. mod.craft_preview inventory = inventory .. mod.main_inventory_scroll_up inventory = inventory .. mod.main_inventory_scroll_down @@ -686,10 +691,16 @@ function mod.recipe_grid(player) dat['recipe_number'] = recipe_number end local recipe = recipes[recipe_number] - --print(dump(recipe)) local inv = '' - inv = inv .. 'container[3,0]' + inv = inv .. 'container[1,0]' + + do + local tooltip = craft_item + inv = inv .. 'item_image[3,2;1,1;' .. craft_item .. ']' + tooltip = minetest.registered_items[craft_item].description or tooltip + inv = inv .. 'tooltip[3,2;1,1;' .. 'recipe: ' .. tooltip .. ']' + end local w = recipe.width or 3 if w == 0 or w > 3 then @@ -705,21 +716,23 @@ function mod.recipe_grid(player) if recipe.type == 'normal' then item = recipe.items[(y * w) + x] end + local tooltip = item if item and item:find('^group') then --print(item) item = group_rep[item] if item then g_s[i] = true end + elseif item then + tooltip = minetest.registered_items[item].description or tooltip end if item then inv = inv .. 'item_image[' .. (x - 1) .. ',' .. (y) .. ';1,1;' .. item .. ']' + inv = inv .. 'tooltip[' .. (x - 1) .. ',' .. (y) .. ';1,1;' .. 'recipe: ' .. tooltip .. ']' end end end - inv = inv .. 'container_end[]' - inv = inv .. 'container[3,0]' for i = 1, 9 do if g_s[i] then local x = (i - 1) % w @@ -729,6 +742,10 @@ function mod.recipe_grid(player) end inv = inv .. 'container_end[]' + if #recipes > 1 then + inv = inv .. mod.recipe_button + end + return inv end @@ -752,7 +769,7 @@ function mod.recipe_list(player) end local inv = '' - inv = inv .. 'textlist[7,0;4,3.5;dinv_recipe_list;' + inv = inv .. 'textlist[5,0;3.75,2.9;dinv_recipe_list;' local t for k, v in pairs(sorted_items) do if t then @@ -886,13 +903,11 @@ function mod.show_recipe(player, field) return end - if field:find('CHG') then - local n = field:gsub('.*CHG:(%d+).*', '%1') - if n then - mod.dat[player_name].craft_item_number = tonumber(n) - mod.dat[player_name].recipe_number = 1 - player:set_inventory_formspec(mod.make_inventory_spec(player)) - end + local t = minetest.explode_textlist_event(field) + if t.type == 'CHG' and t.index then + mod.dat[player_name].craft_item_number = tonumber(t.index) + mod.dat[player_name].recipe_number = 1 + player:set_inventory_formspec(mod.make_inventory_spec(player)) end end @@ -1127,8 +1142,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) fields['dinv_main_inventory_up'] or fields['dinv_main_inventory_down'] or fields['dinv_recipe_list'] - or fields['dinv_recipe_back'] - or fields['dinv_recipe_fore'] + or fields['dinv_recipe_next'] ) then return end @@ -1142,9 +1156,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) mod.scroll_main(player, 16, main_inventory_size) elseif fields and fields['dinv_recipe_list'] then mod.show_recipe(player, fields['dinv_recipe_list']) - elseif fields and fields['dinv_recipe_back'] then - mod.switch_recipe(player, -1) - elseif fields and fields['dinv_recipe_fore'] then + elseif fields and fields['dinv_recipe_next'] then mod.switch_recipe(player, 1) end end)