Compare commits

..

1 Commits
1.2.1 ... 1.2

Author SHA1 Message Date
49dd2753d3 Support for sfinv! 2018-11-11 22:24:48 +01:00
3 changed files with 54 additions and 76 deletions

View File

@ -1,4 +1,4 @@
« Copyright © 2015-2018, Jean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com> « Copyright © 2015-2017, Jean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

124
init.lua
View File

@ -17,13 +17,13 @@ craftguide.intllib = S
-- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1 -- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1
local remove, maxn, sort = table.remove, table.maxn, table.sort local remove, maxn, sort = table.remove, table.maxn, table.sort
local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil
local unpack = unpack
local DEFAULT_SIZE = 10 local DEFAULT_SIZE = 10
local MIN_LIMIT, MAX_LIMIT = 9, 12 local MIN_LIMIT, MAX_LIMIT = 9, 12
DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE)) DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE))
local GRID_LIMIT = 5 local GRID_LIMIT = 5
local BUTTON_SIZE = 1.1
local group_stereotypes = { local group_stereotypes = {
wool = "wool:white", wool = "wool:white",
@ -60,7 +60,8 @@ local function extract_groups(str)
end end
local function colorize(str) local function colorize(str)
return mt.colorize("#FFFF00", str) -- If client <= 0.4.14, don't colorize for compatibility.
return mt.colorize and mt.colorize("#FFFF00", str) or str
end end
local function get_fueltime(item) local function get_fueltime(item)
@ -104,18 +105,15 @@ function craftguide:get_tooltip(item, recipe_type, cooktime, groups)
return has_extras and tooltip .. "]" or "" return has_extras and tooltip .. "]" or ""
end end
function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage) function craftguide:get_recipe(iY, xoffset, recipe_num, recipes, show_usage)
local formspec, recipes_total = "", #recipes local formspec, recipes_total = "", #recipes
if recipes_total > 1 then if recipes_total > 1 then
formspec = formspec .. formspec = formspec ..
"button[" .. (iX - (sfinv_only and 2 or 2.4)) .. "," .. "button[0," .. (iY + (sfinv_only and 3.8 or 3.3)) ..
(iY + (sfinv_only and 3.9 or 3.3)) ..
";2,1;alternate;" .. S("Alternate") .. "]" .. ";2,1;alternate;" .. S("Alternate") .. "]" ..
"label[0," .. (iY + (sfinv_only and 3.3 or 2.8)) .. ";" ..
"label[" .. (iX - (sfinv_only and 2 or 2.4)) .. "," ..
(iY + (sfinv_only and 3.5 or 2.9)) .. ";" ..
(show_usage and S("Usage") or S("Recipe")) .. " " .. (show_usage and S("Usage") or S("Recipe")) .. " " ..
S("@1 of @2", recipe_num, recipes_total) .. "]" S("@1 of @2", recipe_num, recipes_total) .. "]"
end end
local recipe_type = recipes[recipe_num].type local recipe_type = recipes[recipe_num].type
@ -125,14 +123,11 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
if recipe_type == "cooking" or (recipe_type == "normal" and width == 0) then if recipe_type == "cooking" or (recipe_type == "normal" and width == 0) then
local icon = recipe_type == "cooking" and "furnace" or "shapeless" local icon = recipe_type == "cooking" and "furnace" or "shapeless"
formspec = formspec .. formspec = formspec ..
"image[" .. (xoffset + 0.2) .. "," .. (iY + (sfinv_only and 2.2 or 1.7)) .. "image[" .. (xoffset - 0.8) .. "," .. (iY + (sfinv_only and 2.2 or 1.7)) ..
";0.5,0.5;craftguide_" .. icon .. ".png" .. ";0.5,0.5;craftguide_" .. icon .. ".png]"
(icon == "shapeless" and "^[transformFX" or "") .. "]"
end end
if recipe_type == "cooking" then if width == 0 then
width = 1
elseif width == 0 then
width = min(3, #items) width = min(3, #items)
end end
@ -140,17 +135,18 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
if recipe_type == "normal" and (width > GRID_LIMIT or rows > GRID_LIMIT) then if recipe_type == "normal" and (width > GRID_LIMIT or rows > GRID_LIMIT) then
formspec = formspec .. formspec = formspec ..
"label[" .. xoffset .. "," .. (iY + 2.2) .. ";" .. "label[" .. xoffset .. "," .. (iY + 2) .. ";" ..
S("Recipe is too big to\nbe displayed (@1x@2)", width, rows) .. "]" S("Recipe is too big to\nbe displayed (@1x@2)", width, rows) .. "]"
else else
local btn_size = 1
for i, v in pairs(items) do for i, v in pairs(items) do
local X = (i - 1) % width + xoffset - width local X = (i - 1) % width + xoffset
local Y = ceil(i / width + (iY + 2) - min(2, rows)) local Y = ceil(i / width + (iY + 2) - min(2, rows))
if recipe_type == "normal" and (width > 3 or rows > 3) then if recipe_type == "normal" and (width > 3 or rows > 3) then
BUTTON_SIZE = width > 3 and 3 / width or 3 / rows btn_size = width > 3 and 3 / width or 3 / rows
X = BUTTON_SIZE * (i % width) + 0 X = btn_size * (i % width) + xoffset
Y = BUTTON_SIZE * floor((i - 1) / width) + (iY + 3) - min(2, rows) Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows)
end end
local groups = extract_groups(v) local groups = extract_groups(v)
@ -161,33 +157,19 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
formspec = formspec .. formspec = formspec ..
"item_image_button[" .. X .. "," .. "item_image_button[" .. X .. "," ..
(Y + (sfinv_only and 0.7 or 0.2)) .. ";" .. (Y + (sfinv_only and 0.7 or 0.2)) .. ";" ..
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" .. item_r .. btn_size .. "," .. btn_size .. ";" .. item_r ..
";" .. item_r .. ";" .. label .. "]" .. tltip ";" .. item_r .. ";" .. label .. "]" .. tltip
end end
BUTTON_SIZE = 1.1
end end
local output = recipes[recipe_num].output:match("%S+") local output = recipes[recipe_num].output
formspec = formspec .. return formspec ..
"image[" .. (xoffset + 0.08) .. "," .. (iY + (sfinv_only and 2.85 or 2.35)) .. "image[" .. (xoffset - 1) .. "," .. (iY + (sfinv_only and 2.85 or 2.35)) ..
";0.9,0.7;craftguide_arrow.png^[transformFX]" .. ";0.9,0.7;craftguide_arrow.png]" ..
"item_image_button[" .. (xoffset + 1) .. "," .. "item_image_button[" .. (xoffset - 2) .. "," ..
(iY + (sfinv_only and 2.7 or 2.2)) .. ";" .. (iY + (sfinv_only and 2.7 or 2.2)) .. ";1,1;" ..
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" .. output .. ";" .. output .. ";]" ..
output .. ";" .. output .. ";]" .. self:get_tooltip(output) self:get_tooltip(output:match("%S+"))
local output_is_fuel = get_fueltime(output) > 0
if output_is_fuel then
formspec = formspec ..
"image[" .. (xoffset + 2) .. "," ..
(iY + (sfinv_only and 2.85 or 2.35)) ..
";0.6,0.4;craftguide_arrow.png^[transformFX]" ..
"image[" .. (xoffset + 2.6) .. "," .. (iY + (sfinv_only and 2.68 or 2.18)) ..
";0.6,0.6;craftguide_fire.png]"
end
return formspec
end end
function craftguide:get_formspec(player_name, is_fuel) function craftguide:get_formspec(player_name, is_fuel)
@ -221,20 +203,19 @@ function craftguide:get_formspec(player_name, is_fuel)
"tooltip[clear;" .. S("Reset") .. "]" .. "tooltip[clear;" .. S("Reset") .. "]" ..
"tooltip[prev;" .. S("Previous page") .. "]" .. "tooltip[prev;" .. S("Previous page") .. "]" ..
"tooltip[next;" .. S("Next page") .. "]" .. "tooltip[next;" .. S("Next page") .. "]" ..
"button[" .. (data.iX - (sfinv_only and 2.6 or 3.1)) .. "button[" .. (data.iX - 3.1) .. ",0;0.8,0.95;prev;<]" ..
"," .. (sfinv_only and 0.03 or 0) .. ";0.8,0.95;prev;<]" .. "label[" .. (data.iX - 2.2) .. ",0.18;" ..
"label[" .. (data.iX - (sfinv_only and 1.7 or 2.2)) .. "," ..
(sfinv_only and 0.21 or 0.18) .. ";" ..
colorize(data.pagenum) .. " / " .. data.pagemax .. "]" .. colorize(data.pagenum) .. " / " .. data.pagemax .. "]" ..
"button[" .. (data.iX - (sfinv_only and 0.7 or 1.2)) .. "button[" .. (data.iX - 1.2) .. ",0;0.8,0.95;next;>]" ..
"," .. (sfinv_only and 0.03 or 0) .. ";0.8,0.95;next;>]" ..
"field[0.3,0.32;2.5,1;filter;;" .. mt.formspec_escape(data.filter) .. "]" "field[0.3,0.32;2.5,1;filter;;" .. mt.formspec_escape(data.filter) .. "]"
local xoffset = data.iX / 2.15 local even_num = data.iX % 2 == 0
local xoffset = data.iX / 2 + (even_num and 0.5 or 0)
if not next(data.items) then if not next(data.items) then
formspec = formspec .. formspec = formspec ..
"label[" .. ((data.iX / 2) - 1) .. ",2;" .. S("No item to show") .. "]" "label[" .. (xoffset - (even_num and 1.5 or 1)) .. ",2;" ..
S("No item to show") .. "]"
end end
local first_item = (data.pagenum - 1) * ipp local first_item = (data.pagenum - 1) * ipp
@ -245,31 +226,24 @@ function craftguide:get_formspec(player_name, is_fuel)
local Y = (i % ipp - X) / data.iX + 1 local Y = (i % ipp - X) / data.iX + 1
formspec = formspec .. formspec = formspec ..
"item_image_button[" .. (X - (sfinv_only and 0 or (X * 0.05))) .. "," .. "item_image_button[" .. (X - (X * 0.05)) .. "," .. Y .. ";1.1,1.1;" ..
Y .. ";" .. BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" ..
name .. ";" .. name .. "_inv;]" name .. ";" .. name .. "_inv;]"
end end
if data.item and reg_items[data.item] then if data.item and reg_items[data.item] then
if not data.recipes_item or (is_fuel and not get_recipe(data.item).items) then if not data.recipes_item or (is_fuel and not get_recipe(data.item).items) then
formspec = formspec .. formspec = formspec ..
"image[" .. (xoffset + 0.08) .. "," .. "image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
(iY + (sfinv_only and 2.85 or 2.35)) .. ";0.9,0.7;craftguide_arrow.png]" ..
";0.9,0.7;craftguide_arrow.png^[transformFX]" .. "item_image_button[" .. xoffset .. "," .. (iY + 2.2) ..
"item_image_button[" .. (xoffset - 1) .. "," .. ";1,1;" .. data.item .. ";" .. data.item .. ";]" ..
(iY + (sfinv_only and 2.7 or 2.2)) ..
";" .. BUTTON_SIZE .. "," .. BUTTON_SIZE ..
";" .. data.item .. ";" .. data.item .. ";]" ..
self:get_tooltip(data.item) .. self:get_tooltip(data.item) ..
"image[" .. (xoffset + 1) .. "," .. "image[" .. (xoffset - 2) .. "," ..
(iY + (sfinv_only and 2.68 or 2.18)) .. (iY + 2.18) .. ";1,1;craftguide_fire.png]"
";1.1,1.1;craftguide_fire.png]"
else else
local show_usage = data.show_usage local show_usage = data.show_usage
formspec = formspec .. formspec = formspec ..
self:get_recipe(data.iX, self:get_recipe(iY, xoffset,
iY,
xoffset,
data.rnum, data.rnum,
(show_usage and data.usages or data.recipes_item), (show_usage and data.usages or data.recipes_item),
show_usage) show_usage)
@ -433,21 +407,25 @@ function craftguide:get_item_usages(item)
end end
local function get_fields(player, ...) local function get_fields(player, ...)
local args, formname, fields = {...} local args = {...}
if sfinv_only then local formname, fields
fields = args[1]
if #args == 1 then
formname = "craftguide"
fields = args[#args]
else else
formname, fields = args[1], args[2] formname, fields = unpack(args)
end end
if not sfinv_only and formname ~= "craftguide" then return end if formname ~= "craftguide" then return end
local player_name = player:get_player_name() local player_name = player:get_player_name()
local data = datas[player_name] local data = datas[player_name]
local show_fs = function(is_fuel) local show_fs = function(is_fuel)
local context = sfinv.get_or_create_context(player)
context.fuel = is_fuel
if sfinv_only then if sfinv_only then
local context = sfinv.get_or_create_context(player)
context.fuel = is_fuel
sfinv.set_player_inventory_formspec(player, context) sfinv.set_player_inventory_formspec(player, context)
else else
craftguide:get_formspec(player_name, is_fuel) craftguide:get_formspec(player_name, is_fuel)

View File

@ -1,4 +1,4 @@
#For enabling some options of craftguide. #For enabling some options of craftguide.
craftguide_progressive_mode (Progressive Mode) bool false craftguide_progressive_mode (Progressive Mode) bool false
craftguide_sfinv_only (Sfinv only) bool false craftguide_sfinv_only (Sfinv only) bool true