forked from minetest-mods/craftguide
Ensure that no fuel usages are not shown
This commit is contained in:
parent
a936452e21
commit
60b09a27f7
109
init.lua
109
init.lua
|
@ -22,6 +22,7 @@ local show_formspec = core.show_formspec
|
||||||
local globalstep = core.register_globalstep
|
local globalstep = core.register_globalstep
|
||||||
local on_shutdown = core.register_on_shutdown
|
local on_shutdown = core.register_on_shutdown
|
||||||
local get_players = core.get_connected_players
|
local get_players = core.get_connected_players
|
||||||
|
local get_craft_result = core.get_craft_result
|
||||||
local on_joinplayer = core.register_on_joinplayer
|
local on_joinplayer = core.register_on_joinplayer
|
||||||
local get_all_recipes = core.get_all_craft_recipes
|
local get_all_recipes = core.get_all_craft_recipes
|
||||||
local register_command = core.register_chatcommand
|
local register_command = core.register_chatcommand
|
||||||
|
@ -58,15 +59,15 @@ local DEV_CORE = sub(core.get_version().string, -3) == "dev"
|
||||||
craftguide.background = "craftguide_bg_full.png:10"
|
craftguide.background = "craftguide_bg_full.png:10"
|
||||||
|
|
||||||
local PNG = {
|
local PNG = {
|
||||||
bg = "craftguide_bg.png",
|
bg = "craftguide_bg.png",
|
||||||
search = "craftguide_search_icon.png",
|
search = "craftguide_search_icon.png",
|
||||||
clear = "craftguide_clear_icon.png",
|
clear = "craftguide_clear_icon.png",
|
||||||
prev = "craftguide_next_icon.png^\\[transformFX",
|
prev = "craftguide_next_icon.png^\\[transformFX",
|
||||||
next = "craftguide_next_icon.png",
|
next = "craftguide_next_icon.png",
|
||||||
arrow = "craftguide_arrow.png",
|
arrow = "craftguide_arrow.png",
|
||||||
fire = "craftguide_fire.png",
|
fire = "craftguide_fire.png",
|
||||||
book = "craftguide_book.png",
|
book = "craftguide_book.png",
|
||||||
sign = "craftguide_sign.png",
|
sign = "craftguide_sign.png",
|
||||||
}
|
}
|
||||||
|
|
||||||
local FMT = {
|
local FMT = {
|
||||||
|
@ -81,12 +82,12 @@ local FMT = {
|
||||||
}
|
}
|
||||||
|
|
||||||
craftguide.group_stereotypes = {
|
craftguide.group_stereotypes = {
|
||||||
wool = "wool:white",
|
dye = "dye:white",
|
||||||
dye = "dye:white",
|
wool = "wool:white",
|
||||||
|
coal = "default:coal_lump",
|
||||||
|
vessel = "vessels:glass_bottle",
|
||||||
|
flower = "flowers:dandelion_yellow",
|
||||||
water_bucket = "bucket:bucket_water",
|
water_bucket = "bucket:bucket_water",
|
||||||
vessel = "vessels:glass_bottle",
|
|
||||||
coal = "default:coal_lump",
|
|
||||||
flower = "flowers:dandelion_yellow",
|
|
||||||
mesecon_conductor_craftable = "mesecons:wire_00000000_off",
|
mesecon_conductor_craftable = "mesecons:wire_00000000_off",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +160,7 @@ end
|
||||||
function craftguide.register_craft(def)
|
function craftguide.register_craft(def)
|
||||||
def.custom = true
|
def.custom = true
|
||||||
def.width = 0
|
def.width = 0
|
||||||
local c = 1
|
local c = 0
|
||||||
|
|
||||||
if not is_table(def) or not next(def) then
|
if not is_table(def) or not next(def) then
|
||||||
return log("error", "craftguide.register_craft(): craft definition missing")
|
return log("error", "craftguide.register_craft(): craft definition missing")
|
||||||
|
@ -196,8 +197,8 @@ function craftguide.register_craft(def)
|
||||||
end
|
end
|
||||||
|
|
||||||
for symbol in gmatch(concat(def.grid), ".") do
|
for symbol in gmatch(concat(def.grid), ".") do
|
||||||
def.items[c] = def.key[symbol]
|
|
||||||
c = c + 1
|
c = c + 1
|
||||||
|
def.items[c] = def.key[symbol]
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local items, len = def.items, #def.items
|
local items, len = def.items, #def.items
|
||||||
|
@ -219,8 +220,8 @@ function craftguide.register_craft(def)
|
||||||
end
|
end
|
||||||
|
|
||||||
for name in gmatch(concat(items, ","), "[%s%w_:]+") do
|
for name in gmatch(concat(items, ","), "[%s%w_:]+") do
|
||||||
def.items[c] = clean_name(name)
|
|
||||||
c = c + 1
|
c = c + 1
|
||||||
|
def.items[c] = clean_name(name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -316,8 +317,7 @@ local function groups_item_in_recipe(item, recipe)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_filtered_items(player, data)
|
local function get_filtered_items(player, data)
|
||||||
local items, c = {}, 0
|
local items, known, c = {}, 0, 0
|
||||||
local known = 0
|
|
||||||
|
|
||||||
for i = 1, #init_items do
|
for i = 1, #init_items do
|
||||||
local item = init_items[i]
|
local item = init_items[i]
|
||||||
|
@ -350,7 +350,6 @@ local function get_usages(item)
|
||||||
for _, recipes in pairs(recipes_cache) do
|
for _, recipes in pairs(recipes_cache) do
|
||||||
for i = 1, #recipes do
|
for i = 1, #recipes do
|
||||||
local recipe = recipes[i]
|
local recipe = recipes[i]
|
||||||
|
|
||||||
if item_in_recipe(item, recipe) then
|
if item_in_recipe(item, recipe) then
|
||||||
c = c + 1
|
c = c + 1
|
||||||
usages[c] = recipe
|
usages[c] = recipe
|
||||||
|
@ -367,15 +366,25 @@ local function get_usages(item)
|
||||||
if fuel_cache[item] then
|
if fuel_cache[item] then
|
||||||
usages[#usages + 1] = {
|
usages[#usages + 1] = {
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
width = 1,
|
|
||||||
items = {item},
|
items = {item},
|
||||||
replacements = fuel_cache[item].replacements,
|
replacements = fuel_cache.replacements[item],
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
return usages
|
return usages
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function get_burntime(item)
|
||||||
|
return get_craft_result({method = "fuel", items = {item}}).time
|
||||||
|
end
|
||||||
|
|
||||||
|
local function cache_fuel(item)
|
||||||
|
local burntime = get_burntime(item)
|
||||||
|
if burntime > 0 then
|
||||||
|
fuel_cache[item] = burntime
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function cache_usages(item)
|
local function cache_usages(item)
|
||||||
local usages = get_usages(item)
|
local usages = get_usages(item)
|
||||||
if #usages > 0 then
|
if #usages > 0 then
|
||||||
|
@ -385,16 +394,8 @@ end
|
||||||
|
|
||||||
local function cache_recipes(output)
|
local function cache_recipes(output)
|
||||||
local recipes = get_all_recipes(output) or {}
|
local recipes = get_all_recipes(output) or {}
|
||||||
local num = #recipes
|
if #recipes > 0 then
|
||||||
|
recipes_cache[output] = recipes
|
||||||
if num > 0 then
|
|
||||||
if recipes_cache[output] then
|
|
||||||
for i = 1, num do
|
|
||||||
insert(recipes_cache[output], 1, recipes[i])
|
|
||||||
end
|
|
||||||
else
|
|
||||||
recipes_cache[output] = recipes
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -478,7 +479,7 @@ local function get_tooltip(item, info)
|
||||||
tooltip = get_desc(reg_items[item])
|
tooltip = get_desc(reg_items[item])
|
||||||
|
|
||||||
local function add(str)
|
local function add(str)
|
||||||
return tooltip .. "\n" .. str
|
return fmt("%s\n%s", tooltip, str)
|
||||||
end
|
end
|
||||||
|
|
||||||
if info.cooktime then
|
if info.cooktime then
|
||||||
|
@ -532,7 +533,7 @@ local function get_output_fs(fs, L)
|
||||||
pos_x, pos_y, 0.5, 0.5, ESC(tooltip))
|
pos_x, pos_y, 0.5, 0.5, ESC(tooltip))
|
||||||
end
|
end
|
||||||
|
|
||||||
local arrow_X = L.rightest + (L.s_btn_size or 1.1)
|
local arrow_X = L.rightest + (L.s_btn_size or 1.1)
|
||||||
local output_X = arrow_X + 0.9
|
local output_X = arrow_X + 0.9
|
||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.image,
|
fs[#fs + 1] = fmt(FMT.image,
|
||||||
|
@ -546,13 +547,13 @@ local function get_output_fs(fs, L)
|
||||||
else
|
else
|
||||||
local item = L.recipe.output
|
local item = L.recipe.output
|
||||||
local name = clean_name(item)
|
local name = clean_name(item)
|
||||||
local burntime = fuel_cache[name] and fuel_cache[name].burntime
|
|
||||||
|
|
||||||
fs[#fs + 1] = fmt(FMT.item_image_button,
|
fs[#fs + 1] = fmt(FMT.item_image_button,
|
||||||
output_X, YOFFSET + (sfinv_only and 0.7 or 0),
|
output_X, YOFFSET + (sfinv_only and 0.7 or 0),
|
||||||
1.1, 1.1, item, ESC(name), "")
|
1.1, 1.1, item, ESC(name), "")
|
||||||
|
|
||||||
local repair = repairable(item)
|
local burntime = fuel_cache[name]
|
||||||
|
local repair = repairable(name)
|
||||||
|
|
||||||
if burntime or repair then
|
if burntime or repair then
|
||||||
fs[#fs + 1] = get_tooltip(name, {
|
fs[#fs + 1] = get_tooltip(name, {
|
||||||
|
@ -575,7 +576,7 @@ end
|
||||||
|
|
||||||
local function get_recipe_fs(data, fs)
|
local function get_recipe_fs(data, fs)
|
||||||
local recipe = data.recipes[data.rnum]
|
local recipe = data.recipes[data.rnum]
|
||||||
local width = recipe.width
|
local width = recipe.width or 1
|
||||||
local replacements = recipe.replacements
|
local replacements = recipe.replacements
|
||||||
local cooktime, shapeless
|
local cooktime, shapeless
|
||||||
|
|
||||||
|
@ -656,12 +657,10 @@ local function get_recipe_fs(data, fs)
|
||||||
X, Y + (sfinv_only and 0.7 or 0),
|
X, Y + (sfinv_only and 0.7 or 0),
|
||||||
btn_size, btn_size, item, clean_name(item), ESC(label))
|
btn_size, btn_size, item, clean_name(item), ESC(label))
|
||||||
|
|
||||||
local burntime = fuel_cache[item] and fuel_cache[item].burntime
|
|
||||||
|
|
||||||
local info = {
|
local info = {
|
||||||
unknown = not reg_items[item],
|
unknown = not reg_items[item],
|
||||||
groups = groups,
|
groups = groups,
|
||||||
burntime = burntime,
|
burntime = fuel_cache[item],
|
||||||
cooktime = cooktime,
|
cooktime = cooktime,
|
||||||
replace = replace,
|
replace = replace,
|
||||||
}
|
}
|
||||||
|
@ -718,11 +717,11 @@ local function make_formspec(name)
|
||||||
|
|
||||||
fs[#fs + 1] = fmt([[
|
fs[#fs + 1] = fmt([[
|
||||||
image_button[%f,-0.05;0.8,0.8;%s;prev;;;false;%s^\[colorize:yellow:255]
|
image_button[%f,-0.05;0.8,0.8;%s;prev;;;false;%s^\[colorize:yellow:255]
|
||||||
label[%f,%f;%s / %u]
|
label[%f,%f;%u / %u]
|
||||||
image_button[%f,-0.05;0.8,0.8;%s;next;;;false;%s^\[colorize:yellow:255]
|
image_button[%f,-0.05;0.8,0.8;%s;next;;;false;%s^\[colorize:yellow:255]
|
||||||
]],
|
]],
|
||||||
sfinv_only and 5.45 or 6.83, PNG.prev, PNG.prev,
|
sfinv_only and 5.45 or 6.83, PNG.prev, PNG.prev,
|
||||||
sfinv_only and 6.35 or 7.85, 0.06, clr("yellow", data.pagenum), data.pagemax,
|
sfinv_only and 6.35 or 7.85, 0.06, data.pagenum, data.pagemax,
|
||||||
sfinv_only and 7.2 or 8.75, PNG.next, PNG.next)
|
sfinv_only and 7.2 or 8.75, PNG.next, PNG.next)
|
||||||
|
|
||||||
if #data.items == 0 then
|
if #data.items == 0 then
|
||||||
|
@ -809,7 +808,7 @@ local function search(data)
|
||||||
local item = data.items_raw[i]
|
local item = data.items_raw[i]
|
||||||
local def = reg_items[item]
|
local def = reg_items[item]
|
||||||
local desc = (def and def.description) and lower(def.description) or ""
|
local desc = (def and def.description) and lower(def.description) or ""
|
||||||
local search_in = item .. " " .. desc
|
local search_in = fmt("%s %s", item, desc)
|
||||||
local to_add
|
local to_add
|
||||||
|
|
||||||
if search_filter then
|
if search_filter then
|
||||||
|
@ -863,6 +862,8 @@ end
|
||||||
-- we have to override `core.register_craft` and `core.register_alias` and do some reverse engineering.
|
-- we have to override `core.register_craft` and `core.register_alias` and do some reverse engineering.
|
||||||
-- See engine's issues #4901 and #8920.
|
-- See engine's issues #4901 and #8920.
|
||||||
|
|
||||||
|
fuel_cache.replacements = {}
|
||||||
|
|
||||||
local old_register_alias = core.register_alias
|
local old_register_alias = core.register_alias
|
||||||
local current_alias = {}
|
local current_alias = {}
|
||||||
|
|
||||||
|
@ -897,10 +898,13 @@ core.register_craft = function(def)
|
||||||
name = current_alias[2]
|
name = current_alias[2]
|
||||||
end
|
end
|
||||||
|
|
||||||
def.items = {}
|
if def.type ~= "fuel" then
|
||||||
|
def.items = {}
|
||||||
|
end
|
||||||
|
|
||||||
if def.type == "fuel" then
|
if def.type == "fuel" then
|
||||||
fuel_cache[name] = def
|
fuel_cache[name] = def.burntime
|
||||||
|
fuel_cache.replacements[name] = def.replacements
|
||||||
|
|
||||||
elseif def.type == "cooking" then
|
elseif def.type == "cooking" then
|
||||||
def.width = def.cooktime
|
def.width = def.cooktime
|
||||||
|
@ -914,18 +918,17 @@ core.register_craft = function(def)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
def.width = #def.recipe[1]
|
def.width = #def.recipe[1]
|
||||||
local c = 1
|
local c = 0
|
||||||
|
|
||||||
for j = 1, #def.recipe do
|
for j = 1, #def.recipe do
|
||||||
if def.recipe[j] then
|
if def.recipe[j] then
|
||||||
for h = 1, def.width do
|
for h = 1, def.width do
|
||||||
|
c = c + 1
|
||||||
local it = def.recipe[j][h]
|
local it = def.recipe[j][h]
|
||||||
|
|
||||||
if it and it ~= "" then
|
if it and it ~= "" then
|
||||||
def.items[c] = it
|
def.items[c] = it
|
||||||
end
|
end
|
||||||
|
|
||||||
c = c + 1
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -946,18 +949,22 @@ local function show_item(def)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_init_items()
|
local function get_init_items()
|
||||||
local c = 1
|
local c = 0
|
||||||
for name, def in pairs(reg_items) do
|
for name, def in pairs(reg_items) do
|
||||||
if show_item(def) then
|
if show_item(def) then
|
||||||
cache_usages(name)
|
if not fuel_cache[name] then
|
||||||
|
cache_fuel(name)
|
||||||
|
end
|
||||||
|
|
||||||
if not recipes_cache[name] then
|
if not recipes_cache[name] then
|
||||||
cache_recipes(name)
|
cache_recipes(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
cache_usages(name)
|
||||||
|
|
||||||
if recipes_cache[name] or usages_cache[name] then
|
if recipes_cache[name] or usages_cache[name] then
|
||||||
init_items[c] = name
|
|
||||||
c = c + 1
|
c = c + 1
|
||||||
|
init_items[c] = name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user