Module:Metallurgic Infuser
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.
Documentation for this module may be created at Module:Metallurgic Infuser/doc
local p = {}
function p.table( f )
local args = f
if f == mw.getCurrentFrame() then
args = require( 'Module:ProcessArgs' ).merge()
else
f = mw.getCurrentFrame()
end
local grid = require( 'Module:Grid' )
-- Start table when appropriate
local multirow = f:callParserFunction( '#dplvar', 'multirow' )
if multirow ~= '1' then
multirow = nil
end
local head = args.head or ''
if multirow then
head = ''
elseif head ~= '' then
multirow = 1
f:callParserFunction( '#dplvar:set', 'multirow', '1' )
else
head = 1
end
-- End table when appropriate
local foot = args.foot or ''
if multirow then
if foot ~= '' then
multirow = nil
f:callParserFunction( '#dplvar:set', 'multirow', '0' )
end
else
foot = 1
end
local header = ''
if head ~= '' then
local name = ''
local description = ''
if args.showname == '1' or multirow and args.showname ~= '0' then
name = 'Name !! '
f:callParserFunction( '#dplvar:set', 'infusingname', '1' )
end
if args.showdescription == '1' then
description = ' !! class="unsortable" | Description'
f:callParserFunction( '#dplvar:set', 'infusingdescription', '1' )
end
local class = args.class or ''
local recipeClass = ''
if multirow then
class = 'sortable collapsible ' .. class
recipeClass = 'class="unsortable collapse-button" |'
end
header = table.concat( {
' {| class="wikitable ' .. class .. '"',
'! ' .. name .. 'Ingredients !! ' .. recipeClass .. ' [[Metallurgic Infuser]] recipe' .. description,
'|-'
}, '\n' )
end
-- Name cell
local nameCell
if f:callParserFunction( '#dplvar', 'infusingname' ) == '1' then
if args.name or '' ~= '' then
nameCell = args.name
else
local names = {}
local links = {}
for v in mw.text.gsplit( args.Output or '', '%s*;%s*' ) do
parts = grid.getParts( v, args.Mod )
parts.mod = parts.mod or ''
if not names[parts.mod .. ':' .. parts.name] then
local link = ''
if parts.mod ~= '' then
link = 'Mods/' .. parts.mod .. '/' .. parts.name .. '|'
end
if parts.name:find( '^Any ' ) then
table.insert( links, 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' )
else
table.insert( links, '[[' .. link .. parts.name .. ']]' )
end
names[parts.mod .. ':' .. parts.name] = 1
end
end
nameCell = table.concat( links, ' or<br>' )
end
end
-- Infusion materials
local infusionMaterial = {
['Diamond'] = 'Diamond Dust; Compressed Diamond',
['Obsidian'] = 'Refined Obsidian Dust; Compressed Obsidian',
['Tin'] = 'Tin Dust',
['Bio Fuel'] = 'Bio Fuel',
['Redstone'] = 'Redstone; Block of Redstone; Compressed Redstone',
['Carbon'] = 'Coal; Charcoal; Compressed Carbon',
['Mushroom'] = 'Any Mushroom'
}
-- Create ingredient list
local ingredients = {}
local ingredientKeys = {}
local animatedIngredients = {}
local animatedKeys = {}
for k, v in pairs( args ) do
v = mw.text.trim( v )
if v ~= '' then
if tostring( k ):find( '^Input$' ) then
if v:find( ';' ) then
table.insert( animatedKeys, v )
else
local parts = grid.getParts( v, args.Mod )
parts.mod = parts.mod or ''
local fullName = parts.mod .. ':' .. parts.name
if not ingredients[fullName] then
table.insert( ingredientKeys, fullName )
ingredients[fullName] = { mod = parts.mod, name = parts.name }
end
end
elseif tostring( k ):find( '^Infuse$' ) then
args.InfuseBar = args.Infuse
local infuse = infusionMaterial[v]
if infuse then
table.insert( animatedKeys, infuse )
args.Infuse = infuse
end
end
end
end
for k, v in ipairs( animatedKeys ) do
local frames = mw.text.split( v, '%s*;%s*' )
local length = #frames
for k2, v2 in ipairs( frames ) do
local parts = grid.getParts( v2, args.Mod )
parts.mod = parts.mod or ''
local fullName = parts.mod .. ':' .. parts.name
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then
table.insert( ingredientKeys, fullName )
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }
end
end
end
-- Ingredients cell
local ingredientsCell
if args.ingredients or '' ~= '' then
ingredientsCell = args.ingredients
else
ingredientsCell = {}
for k, v in ipairs( ingredientKeys ) do
local link = ''
local separator = ' +'
if k == #ingredientKeys then
separator = ''
elseif animatedIngredients[v] and not animatedIngredients[v].final then
separator = ' or'
end
local mod = ( ingredients[v] or animatedIngredients[v] ).mod
local name = ( ingredients[v] or animatedIngredients[v] ).name
if mod ~= '' then
link = 'Mods/'.. mod .. '/' .. name .. '|'
end
if name:find( '^Any ' ) then
table.insert( ingredientsCell, 'Any [[' .. link .. name:sub( 5 ) .. ']]' .. separator )
else
table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator )
end
end
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )
end
-- Recipe cell
local recipeCell = grid.metallurgicInfuser( args )
local row = { ingredientsCell, recipeCell }
if nameCell then
table.insert( row, 1, nameCell )
end
if f:callParserFunction( '#dplvar', 'infusingdescription' ) == '1' then
table.insert( row, args.description or '' )
end
row = table.concat( row, '\n|\n' )
if nameCell then
row = '!\n' .. row
else
row = '|\n' .. row
end
local footer = ''
if foot ~= '' then
footer = '|}'
f:callParserFunction( '#dplvar:set', 'infusingname', '0', 'infusingdescription', '0' )
end
-- Create ingredient categories for DPL
local title = mw.title.getCurrentTitle()
local category = ''
if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage and args.InfuseBar ~= null then
category = '[[Category:Recipe using ' .. args.InfuseBar .. ' Infusion]]'
end
return header .. '\n' .. row .. '\n|-\n' .. footer .. category
end
return p
Retrieved from ‘http://wiki.aidancbrady.com/w/index.php?title=Module:Metallurgic_Infuser&oldid=4355’
Cookies help us deliver our services. By using our services, you agree to our use of cookies.