From 815651a32ff48968f125196268429ccc373f2606 Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Sun, 19 Sep 2021 22:04:49 +0200 Subject: [PATCH] Fix custom recipes display, add i3.get_current_tab(), remove some superfluous chat messages --- API.md | 4 + init.lua | 60 ++++++++------- tests/test_custom_recipes.lua | 133 ++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 26 deletions(-) diff --git a/API.md b/API.md index 3541ee5..8bd10db 100644 --- a/API.md +++ b/API.md @@ -42,6 +42,10 @@ Updates the current formspec. `extra_formspec` adds an additional formspec strin Deletes a tab by name. +#### `i3.get_current_tab(player)` + +Returns the current player tab. `player` is an `ObjectRef` to the user. + #### `i3.set_tab(player[, tabname])` Sets the current tab by name. `player` is an `ObjectRef` to the user. diff --git a/init.lua b/init.lua index 65bea3e..b45c662 100644 --- a/init.lua +++ b/init.lua @@ -1014,16 +1014,13 @@ local function spawn_item(player, stack) core.add_item(look_at, stack) end -local function get_stack(player, stack, str) +local function get_stack(player, stack) local inv = player:get_inventory() - local name = player:get_player_name() if inv:room_for_item("main", stack) then inv:add_item("main", stack) - msg(name, S("@1 added in your inventory", str)) else spawn_item(player, stack) - msg(name, S("@1 spawned", str)) end end @@ -1063,22 +1060,13 @@ local function craft_stack(player, data, craft_rcp) end local count = stackcount * scrbar_val - local desc = get_desc(stackname) local iter = ceil(count / stackmax) local leftover = count for _ = 1, iter do local c = min(stackmax, leftover) - local str - - if c > 1 then - str = clr("#ff0", fmt("%s x %s", c, desc)) - else - str = clr("#ff0", fmt("%s", desc)) - end - local stack = ItemStack(fmt("%s %s", stackname, c)) - get_stack(player, stack, str) + get_stack(player, stack) leftover = leftover - stackmax end end @@ -1154,8 +1142,9 @@ local function select_item(player, name, data, _f) if core.is_creative_enabled(name) then local stack = ItemStack(item) local stackmax = stack:get_stack_max() - stack = fmt("%s %s", item, stackmax) - return get_stack(player, stack, clr("#ff0", fmt("%u x %s", stackmax, get_desc(item)))) + stack = fmt("%s %s", item, stackmax) + + return get_stack(player, stack) end if item == data.query_item then return end @@ -1389,22 +1378,34 @@ local function get_grid_fs(fs, data, rcp, is_recipe) local meta = item:get_meta() local name = item:get_name() local count = item:get_count() - - local X = ceil((i - 1) % width - width) - X = X + (X * 0.2) + data.inv_width + 3.9 - - local Y = ceil(i / width) - min(2, rows) - Y = Y + (Y * 0.15) + data.yoffset + 1.4 + local X, Y if large_recipe then - btn_size = (3 / width) * (3 / rows) + 0.3 + local a, b = 3, 3 + local add_x, add_y = 0, 0 + + if width < 3 then + a, b = width * 2, 1 + add_x = 2 + elseif rows < 3 then + a, b = 1, rows * 2 + add_y = 1.4 + end + + btn_size = (a / width) * (b / rows) + 0.3 _btn_size = btn_size local xi = (i - 1) % width local yi = floor((i - 1) / width) - X = btn_size * xi + data.inv_width + 0.3 + (xi * 0.05) - Y = btn_size * yi + data.yoffset + 0.2 + (yi * 0.05) + X = btn_size * xi + data.inv_width + 0.3 + (xi * 0.05) + add_x + Y = btn_size * yi + data.yoffset + 0.2 + (yi * 0.05) + add_y + else + X = ceil((i - 1) % width - width) + X = X + (X * 0.2) + data.inv_width + 3.9 + + Y = ceil(i / width) - min(2, rows) + Y = Y + (Y * 0.15) + data.yoffset + 1.4 end if X > right then @@ -2247,6 +2248,13 @@ function i3.remove_tab(tabname) end end +function i3.get_current_tab(player) + local name = player:get_player_name() + local data = pdata[name] + + return data.current_tab +end + function i3.set_tab(player, tabname) local name = player:get_player_name() local data = pdata[name] @@ -3265,7 +3273,7 @@ if progressive_mode then end player:hud_change(data.hud.text, "text", - fmt("%u new recipe%s discovered!", + fmt("%u new recipe%s unlocked!", data.discovered, data.discovered > 1 and "s" or "")) elseif data.show_hud == false then diff --git a/tests/test_custom_recipes.lua b/tests/test_custom_recipes.lua index 16e9e2a..de934c5 100644 --- a/tests/test_custom_recipes.lua +++ b/tests/test_custom_recipes.lua @@ -20,6 +20,139 @@ i3.register_craft({ items = {"default:copper_ingot 7, default:tin_ingot, default:steel_ingot 2"}, }) +i3.register_craft({ + grid = { + "X", + "#", + "X", + "X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X", + "#X", + "X", + "X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + + +i3.register_craft({ + grid = { + "X#", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X#X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X#XX", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X#XX", + "X#X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X#XX", + "X#X", + "#", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X##XX", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X##X#X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + +i3.register_craft({ + grid = { + "X##X#X", + "", + "X", + }, + key = { + ['#'] = "default:wood", + ['X'] = "default:glass 2", + }, + result = "default:mese 3", +}) + i3.register_craft({ grid = { "X #",