Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Upload file
Getting Started
Cryopod
Commands
New Player Guide
Star Systems and Planets
Asteri System
Ilios System
Regulus System
Sirius System
Horizon
Trench
AU-0821
Items
Natural Resources
Crafted Resources
Processed Resources
Player Weapons
Power Armor
Starships
Starship Basics
Drill (Starship)
Gravity Well (Starship)
Hyperdrive
Mining Lasers
Navigation Computer
Particle Shields
Supercapital Multiblocks
Thrusters
Machines
Ammo Press
Area Shield
Auto Crafter
Decomposer
Farming Machines
Gas Machines
Incinerator
Item Charger
Mob Defender
Power Furnace
Power Generation and Storage
Printer
Processing Machines
Ship Factory
Solar Panels
Splitter
Horizon's End Wiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Module:Crafting
Module
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local i18n = { moduleArgs = [[Module:ProcessArgs]], moduleRecipe = [[Module:Recipe table]], moduleSlot = [[Module:Inventory slot]], moduleAliases = [[Module:Inventory slot/Aliases]], type = 'Crafting' } p.i18n = i18n local slot = require( i18n.moduleSlot ) local recipeTable = require( i18n.moduleRecipe ).table local aliases = mw.loadData( i18n.moduleAliases ) local cArgVals = { 'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3' } p.cArgVals = cArgVals function p.table( f ) local args = f if f == mw.getCurrentFrame() then args = require( i18n.moduleArgs ).merge( true ) else f = mw.getCurrentFrame() end -- Automatic shapeless positioning if args[1] then args.shapeless = 1 if args[7] then args.A1 = args[1] args.B1 = args[2] args.C1 = args[3] args.A2 = args[4] args.B2 = args[5] args.C2 = args[6] if args[8] then -- ◼◼◼ ◼◼◼ -- ◼◼◼ OR ◼◼◼ -- ◼◼◼ ◼◼◻ args.A3 = args[7] args.B3 = args[8] args.C3 = args[9] if args[9] then local identical = true for i = 1, 8 do if args[i] ~= args[i + 1] then identical = false break end end if identical then args.shapeless = nil end end else -- ◼◼◼ -- ◼◼◼ -- ◻◼◻ args.B3 = args[7] end elseif args[2] then args.A2 = args[1] args.B2 = args[2] if args[5] then -- ◻◻◻ ◻◻◻ -- ◼◼◼ OR ◼◼◼ -- ◼◼◼ ◼◼◻ args.C2 = args[3] args.A3 = args[4] args.B3 = args[5] args.C3 = args[6] elseif args[4] then -- ◻◻◻ -- ◼◼◻ -- ◼◼◻ args.A3 = args[3] args.B3 = args[4] else -- ◻◻◻ ◻◻◻ -- ◼◼◻ OR ◼◼◻ -- ◻◼◻ ◻◻◻ args.B3 = args[3] end else -- ◻◻◻ -- ◻◼◻ -- ◻◻◻ args.B2 = args[1] args.shapeless = nil end for i = 1, 9 do args[i] = nil end end -- Create recipe table, and list of ingredients local out, ingredientSets, outputSets = recipeTable( args, { uiFunc = 'craftingTable', type = i18n.type, ingredientArgs = cArgVals, outputArgs = { 'Output' }, } ) local title = mw.title.getCurrentTitle() if args.ignoreusage or args.nocat == '1' or title.namespace ~= 0 or title.isSubpage then return out end -- SMW -- Json contains the full frames, the other SMW properties are just item names. local smw_json = { ["type"] = args.type, ["shapeless"] = args.shapeless, ["fixed"] = args.fixed, ["notfixed"] = args.notfixed, ["description"] = mw.text.unstrip(args.description or ''), --Remove ref tags ["name"] = args.name, ["ingredients"] = args.ingredients, ["nocat"] = args.nocat, ["A1"] = args.A1, ["A2"] = args.A2, ["A3"] = args.A3, ["B1"] = args.B1, ["B2"] = args.B2, ["B3"] = args.B3, ["C1"] = args.C1, ["C2"] = args.C2, ["C3"] = args.C3, ["Output"] = args.Output, ["group"] = args.group } -- Flatten the item sets into a simple list local function makeNameList(itemSets) local retTable = {} local inputRetTable = {} local usedNames = {} for _, itemSet in pairs(itemSets) do for _, item in pairs(itemSet) do --local name = item.mod .. ":" .. item.name -- use instead of just item.name if mods are covered if not usedNames[item.name] then table.insert(retTable, item.name) table.insert(inputRetTable, item.name) usedNames[item.name] = true if aliases[item.name] then for _, aliasEntry in ipairs(aliases[item.name]) do if not usedNames[aliasEntry] then table.insert(retTable, (aliasEntry.name or aliasEntry)) -- Sometimes the alias entry is a table, so try and grab its name from within the table with a fallback to just the entry. usedNames[aliasEntry] = true end end end end end end return retTable, inputRetTable end local output_names, original_output_names = makeNameList(outputSets) local ingredient_names, original_ingredient_names = makeNameList(ingredientSets) local group_names = {} if args.group then for name in string.gmatch(args.group, "[^,]+") do table.insert(group_names, mw.text.trim(name)) end end local json = mw.text.jsonEncode(smw_json) local smw_sub = {} -- We must have a unique subname since Crafting usage cannot handle when multiple json entries are within one sub object. local subname = 'CRAFTING_OUT_'..table.concat(original_output_names,'_'):sub(1,100)..'_IN_'..table.concat(original_ingredient_names,'_'):sub(1,100)..'_'..mw.hash.hashValue("md4",json) local smw_sub = { -- the actual SMW sub-object ['Crafting ingredient'] = ingredient_names, ['Crafting output'] = output_names, ['Crafting JSON'] = json, ['Crafting type'] = args.type } mw.smw.subobject(smw_sub, subname) return out end return p
Summary:
Please note that all contributions to Horizon's End Wiki are considered to be released under the GNU Free Documentation License 1.3 or later (see
Horizon's End Wiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Nowrap
(
edit
)
Template:Template link
(
edit
)
Template:Tl
(
edit
)
Module:Crafting/doc
(
edit
)
Toggle limited content width