summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
authorJPG <jeanpatrick.guerrero@gmail.com>2016-12-17 13:15:02 +0100
committerJPG <jeanpatrick.guerrero@gmail.com>2016-12-17 14:22:49 +0100
commit0ab97751587c4073ec81d00cf45d9f7b5eda8432 (patch)
tree01ea62b581683baabe34afe6351c89707fa4063b /init.lua
parentd6510f1ad4bacd65656af65f783be109229a4def (diff)
Minor optimizations
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua42
1 files changed, 25 insertions, 17 deletions
diff --git a/init.lua b/init.lua
index a3d2846..6ca64f2 100644
--- a/init.lua
+++ b/init.lua
@@ -1,6 +1,11 @@
local craftguide, datas = {}, {}
local progressive_mode = minetest.setting_getbool("craftguide_progressive_mode")
+
+-- Lua 5.3 removed `table.maxn`, use this alternative in case of breakage:
+-- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1
+local remove, maxn, sort = table.remove, table.maxn, table.sort
local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil
+
local iX, iY = (minetest.setting_get("craftguide_size") or "8x3"):match(
"([%d]+)[.%d+]*[^%d]*x[^%d]*([%d]+)[.%d+]*")
iX, iY = max(8, iX or 8), max(1, iY or 3)
@@ -86,9 +91,7 @@ function craftguide:get_recipe(player_name, tooltip_l, item, recipe_num, recipes
local items = recipes[recipe_num].items
local width = recipes[recipe_num].width
if width == 0 then width = min(3, #items) end
- -- Lua 5.3 removed `table.maxn`, use this alternative in case of breakage:
- -- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1
- local rows = ceil(table.maxn(items) / width)
+ local rows = ceil(maxn(items) / width)
local btn_size, craftgrid_limit = 1, 5
if recipe_type == "normal" and
@@ -191,9 +194,7 @@ local function group_to_items(group)
return items_with_group
end
-function craftguide:recipe_in_inv(player_name, item_name, recipes_f)
- local player = minetest.get_player_by_name(player_name)
- local inv = player:get_inventory()
+function craftguide:recipe_in_inv(inv, item_name, recipes_f)
local recipes = recipes_f or minetest.get_all_craft_recipes(item_name) or {}
local show_item_recipes = {}
@@ -215,9 +216,7 @@ function craftguide:recipe_in_inv(player_name, item_name, recipes_f)
end
end
for i=#show_item_recipes, 1, -1 do
- if not show_item_recipes[i] then
- table.remove(recipes, i)
- end
+ if not show_item_recipes[i] then remove(recipes, i) end
end
return recipes, player_has_item(show_item_recipes)
@@ -225,6 +224,9 @@ end
function craftguide:get_items(player_name)
local items_list, data, list_size = {}, datas[player_name], 0
+ local player = minetest.get_player_by_name(player_name)
+ local inv = player:get_inventory()
+
for name, def in pairs(minetest.registered_items) do
local is_fuel = minetest.get_craft_result({
method="fuel", width=1, items={name}}).time > 0
@@ -235,19 +237,22 @@ function craftguide:get_items(player_name)
def.description:lower():find(data.filter, 1, true)) then
if progressive_mode then
- local _, has_item = self:recipe_in_inv(player_name, name)
- if has_item then items_list[list_size+1] = name end
+ local _, has_item = self:recipe_in_inv(inv, name)
+ if has_item then
+ list_size = list_size + 1
+ items_list[list_size] = name
+ end
else
- items_list[list_size+1] = name
+ list_size = list_size + 1
+ items_list[list_size] = name
end
- list_size = #items_list
end
end
- table.sort(items_list)
+ sort(items_list)
data.items = items_list
data.size = list_size
- data.pagemax = max(1, ceil(data.size / ipp))
+ data.pagemax = max(1, ceil(list_size / ipp))
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
@@ -286,9 +291,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if not recipes and not is_fuel then return end
if progressive_mode then
- local _, has_item = craftguide:recipe_in_inv(player_name, item)
+ local player = minetest.get_player_by_name(player_name)
+ local inv = player:get_inventory()
+ local _, has_item = craftguide:recipe_in_inv(inv, item)
+
if not has_item then return end
- recipes = craftguide:recipe_in_inv(player_name, item, recipes)
+ recipes = craftguide:recipe_in_inv(inv, item, recipes)
end
data.item = item