mirror of
https://github.com/minetest-mods/craftguide.git
synced 2025-06-29 14:40:49 +02:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
49dd2753d3 |
2
LICENSE
2
LICENSE
@ -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
124
init.lua
@ -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)
|
||||||
|
@ -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
|
Reference in New Issue
Block a user