Talk:Games/Minetest Game/Smelting
From Minetest
Semi-automatic generation of fuel table
Since updating the fuel table is a tedious and error-prone task, I have written a Lua script to semi-automatically generate the table.
Put the following code into a mod called “wikifuel”, enable it in Minetest Game with no other mods enabled and use the /wikifuel command. The mod will then output a wiki table into fuel_recipes.txt in the world directory. This wiki table can be pasted into the the article.
The wiki table you get will still need manual updates:
- Links need to be corrected
- Images need to be corrected
- Replacements must be added by hand (e.g. Lava Bucket turning into Empty Bucket)
- Groups must be added by hand
-- TODO: Add support for replacements
-- TODO: Add support for groups
-- TODO: Make item count sortable
local function do_out(playername, param)
local outstring = ""
outstring =
[=[
{| class="wikitable collapsible sortable"
! scope="row" class="unsortable" |
! scope="row" | Block
! scope="row" | Burning time in seconds
! scope="row" class="unsortable" | Items smelted per fuel<ref>Assuming a smelting time of 3 seconds</ref>
! scope="row" class="unsortable" |
! scope="row" | Remainder
|-
]=]
local fuelitems = {}
for k,v in pairs(minetest.registered_items) do
local f = minetest.get_craft_result({method="fuel", items = {k}})
if f~=nil and f.time > 0 then table.insert(fuelitems, {burntime=f.time, item=k}) end
end
table.sort(fuelitems, function(a,b)
return a.burntime > b.burntime
end)
for i=1,#fuelitems do
local itemname = minetest.registered_items[fuelitems[i].item].description
if itemname == nil then itemname = "UNKNOWN ITEM" end
local burntime = fuelitems[i].burntime
local iwhole = math.floor(burntime/3)
local iremainder = math.fmod(burntime, 3)
local itemcount = ""
if iremainder == 0 then
itemcount = tostring(iwhole)
else
if iwhole >= 1 then
itemcount = tostring(iwhole)
itemcount = itemcount .. ''
end
if iremainder == 2 then
itemcount = itemcount .. "⅔"
elseif iremainder == 1 then
itemcount = itemcount .. "⅓"
end
end
outstring = outstring ..
string.format(
[=[
| [[File:%s.png|link=%s|32px]]
| [[%s]]
| %d
| %s
|
| ''Nothing''
|-
]=], itemname, itemname, itemname, burntime, itemcount)
end
outstring = outstring .. "|}\n<references/>"
local filename = minetest.get_worldpath().."/fuel_recipes.txt"
local file = io.open(filename, "w")
file:write(outstring)
file:close()
minetest.chat_send_player(playername, "Fuel items written to: "..filename)
minetest.log("action", "[wikifuel] Fuel items were written into file: "..filename)
end
minetest.register_chatcommand("wikifuel", {
description = "Writes a list of all available fuels in MediaWiki syntax",
params = "",
privs = {server=true},
func = do_out,
})

