Talk:Games/Minetest Game/Smelting

From Minetest Wiki
(Redirected from Talk:Smelting)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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,
})