Ensure that no fuel usages are not shown

This commit is contained in:
Jean-Patrick Guerrero 2019-09-19 11:54:38 +02:00
parent a936452e21
commit 60b09a27f7
1 changed files with 58 additions and 51 deletions

109
init.lua
View File

@ -22,6 +22,7 @@ local show_formspec = core.show_formspec
local globalstep = core.register_globalstep
local on_shutdown = core.register_on_shutdown
local get_players = core.get_connected_players
local get_craft_result = core.get_craft_result
local on_joinplayer = core.register_on_joinplayer
local get_all_recipes = core.get_all_craft_recipes
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"
local PNG = {
bg = "craftguide_bg.png",
search = "craftguide_search_icon.png",
clear = "craftguide_clear_icon.png",
prev = "craftguide_next_icon.png^\\[transformFX",
next = "craftguide_next_icon.png",
arrow = "craftguide_arrow.png",
fire = "craftguide_fire.png",
book = "craftguide_book.png",
sign = "craftguide_sign.png",
bg = "craftguide_bg.png",
search = "craftguide_search_icon.png",
clear = "craftguide_clear_icon.png",
prev = "craftguide_next_icon.png^\\[transformFX",
next = "craftguide_next_icon.png",
arrow = "craftguide_arrow.png",
fire = "craftguide_fire.png",
book = "craftguide_book.png",
sign = "craftguide_sign.png",
}
local FMT = {
@ -81,12 +82,12 @@ local FMT = {
}
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",
vessel = "vessels:glass_bottle",
coal = "default:coal_lump",
flower = "flowers:dandelion_yellow",
mesecon_conductor_craftable = "mesecons:wire_00000000_off",
}
@ -159,7 +160,7 @@ end
function craftguide.register_craft(def)
def.custom = true
def.width = 0
local c = 1
local c = 0
if not is_table(def) or not next(def) then
return log("error", "craftguide.register_craft(): craft definition missing")
@ -196,8 +197,8 @@ function craftguide.register_craft(def)
end
for symbol in gmatch(concat(def.grid), ".") do
def.items[c] = def.key[symbol]
c = c + 1
def.items[c] = def.key[symbol]
end
else
local items, len = def.items, #def.items
@ -219,8 +220,8 @@ function craftguide.register_craft(def)
end
for name in gmatch(concat(items, ","), "[%s%w_:]+") do
def.items[c] = clean_name(name)
c = c + 1
def.items[c] = clean_name(name)
end
end
@ -316,8 +317,7 @@ local function groups_item_in_recipe(item, recipe)
end
local function get_filtered_items(player, data)
local items, c = {}, 0
local known = 0
local items, known, c = {}, 0, 0
for i = 1, #init_items do
local item = init_items[i]
@ -350,7 +350,6 @@ local function get_usages(item)
for _, recipes in pairs(recipes_cache) do
for i = 1, #recipes do
local recipe = recipes[i]
if item_in_recipe(item, recipe) then
c = c + 1
usages[c] = recipe
@ -367,15 +366,25 @@ local function get_usages(item)
if fuel_cache[item] then
usages[#usages + 1] = {
type = "fuel",
width = 1,
items = {item},
replacements = fuel_cache[item].replacements,
replacements = fuel_cache.replacements[item],
}
end
return usages
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 usages = get_usages(item)
if #usages > 0 then
@ -385,16 +394,8 @@ end
local function cache_recipes(output)
local recipes = get_all_recipes(output) or {}
local num = #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
if #recipes > 0 then
recipes_cache[output] = recipes
end
end
@ -478,7 +479,7 @@ local function get_tooltip(item, info)
tooltip = get_desc(reg_items[item])
local function add(str)
return tooltip .. "\n" .. str
return fmt("%s\n%s", tooltip, str)
end
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))
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
fs[#fs + 1] = fmt(FMT.image,
@ -546,13 +547,13 @@ local function get_output_fs(fs, L)
else
local item = L.recipe.output
local name = clean_name(item)
local burntime = fuel_cache[name] and fuel_cache[name].burntime
fs[#fs + 1] = fmt(FMT.item_image_button,
output_X, YOFFSET + (sfinv_only and 0.7 or 0),
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
fs[#fs + 1] = get_tooltip(name, {
@ -575,7 +576,7 @@ end
local function get_recipe_fs(data, fs)
local recipe = data.recipes[data.rnum]
local width = recipe.width
local width = recipe.width or 1
local replacements = recipe.replacements
local cooktime, shapeless
@ -656,12 +657,10 @@ local function get_recipe_fs(data, fs)
X, Y + (sfinv_only and 0.7 or 0),
btn_size, btn_size, item, clean_name(item), ESC(label))
local burntime = fuel_cache[item] and fuel_cache[item].burntime
local info = {
unknown = not reg_items[item],
groups = groups,
burntime = burntime,
burntime = fuel_cache[item],
cooktime = cooktime,
replace = replace,
}
@ -718,11 +717,11 @@ local function make_formspec(name)
fs[#fs + 1] = fmt([[
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]
]],
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)
if #data.items == 0 then
@ -809,7 +808,7 @@ local function search(data)
local item = data.items_raw[i]
local def = reg_items[item]
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
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.
-- See engine's issues #4901 and #8920.
fuel_cache.replacements = {}
local old_register_alias = core.register_alias
local current_alias = {}
@ -897,10 +898,13 @@ core.register_craft = function(def)
name = current_alias[2]
end
def.items = {}
if def.type ~= "fuel" then
def.items = {}
end
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
def.width = def.cooktime
@ -914,18 +918,17 @@ core.register_craft = function(def)
end
else
def.width = #def.recipe[1]
local c = 1
local c = 0
for j = 1, #def.recipe do
if def.recipe[j] then
for h = 1, def.width do
c = c + 1
local it = def.recipe[j][h]
if it and it ~= "" then
def.items[c] = it
end
c = c + 1
end
end
end
@ -946,18 +949,22 @@ local function show_item(def)
end
local function get_init_items()
local c = 1
local c = 0
for name, def in pairs(reg_items) do
if show_item(def) then
cache_usages(name)
if not fuel_cache[name] then
cache_fuel(name)
end
if not recipes_cache[name] then
cache_recipes(name)
end
cache_usages(name)
if recipes_cache[name] or usages_cache[name] then
init_items[c] = name
c = c + 1
init_items[c] = name
end
end
end