from enum import Enum from typing import Dict from shared import Machine, Item from pydantic import BaseModel, Field, ConfigDict class Machines(Enum): Miner = Machine(name="Miner") Smelter = Machine(name="Smelter") Constructor = Machine(name="Constructor") Assembler = Machine(name="Assembler") Sorter = Machine(name="Sorter") Crusher = Machine(name="Crusher") Foundry = Machine(name="Foundry") FlexibleBlastFurnace = Machine(name="Flexible Blast Furnace") Reformer = Machine(name="Reformer") class Items(Enum): IronIngot = Item(name="Iron Ingot") CopperIngot = Item(name="Copper Ingot") Limestone = Item(name="Limestone") IronOre = Item(name="Iron Ore") CopperOre = Item(name="Copper Ore") IronPlate = Item(name="Iron Plate") IronRod = Item(name="Iron Rod") Wire = Item(name="Wire") Cable = Item(name="Cable") Concrete = Item(name="Concrete") ReinforcedIronPlate = Item(name="Reinforced Iron Plate") ModularFrame = Item(name="Modular Frame") BronzeBeam = Item(name="Bronze Beam") TinPlate = Item(name="Tin Plate") TinIngot = Item(name="Tin Ingot") CrushedTin = Item(name="Crushed Tin") CrushedIron = Item(name="Crushed Iron") CrushedGangue = Item(name="Crushed Gangue") CrushedSiterite = Item(name="Crushed Siterite") SiteriteOre = Item(name="Siterite Ore") Screws = Item(name="Screws") BronzeIngot = Item(name="Bronze Ingot") CrushedCopper = Item(name="Crushed Copper") CrushedMagnesium = Item(name="Crushed Magnesium") CrushedCallanite = Item(name="Crushed Callanite") CallaniteOre = Item(name="Callanite Ore") CrushedLarrussite = Item(name="Crushed Larrussite") CrushedAurovite = Item(name="Crushed Aurovite") AuroviteOre = Item(name="Aurovite Ore") Sand = Item(name="Sand") MagnesiumGranules = Item(name="Magnesium Granules") CrushedZinc = Item(name="Crushed Zinc") LarrussiteOre = Item(name="Larrussite Ore") ZincIngot = Item(name="Zinc Ingot") Glass = Item(name="Glass") IronSheet = Item(name="Iron Sheet") CopperRod = Item(name="Copper Rod") CopperSheet = Item(name="Copper Sheet") BronzePlates = Item(name="Bronze Plates") CateriumRod = Item(name="Caterium Rod") CateriumIngot = Item(name="Caterium Ingot") CateriumPlate = Item(name="Caterium Plate") TinRod = Item(name="Tin Rod") ZincPlates = Item(name="Zinc Plates") IronWire = Item(name="Iron Wire") CopperBusbars = Item(name="Copper Busbars") Quickwire = Item(name="Quickwire") TinnedWire = Item(name="Tinned Wire") SolarCell = Item(name="Solar Cell") Silica = Item(name="Silica") BronzePipes = Item(name="Bronze Pipes") SmoothBeltDrive = Item(name="Smooth Belt Drive") TinnedSheet = Item(name="Tinned Sheet") Rotor = Item(name="Rotor") BronzeFrame = Item(name="Bronze Frame") AILimiter = Item(name="AI Limiter") Water = Item(name="Water") CrushedCaterium = Item(name="Crushed Caterium") CateriumHeatsink = Item(name="Caterium Heatsink") MoltenIron = Item(name="Molten Iron") MoltenCopper = Item(name="Molten Copper") MoltenTin = Item(name="Molten Tin") Steam = Item(name="Steam") MoltenBrass = Item(name="Molten Brass") BrassIngot = Item(name="Brass Ingot") BrassPlates = Item(name="Brass Plates") BrassPipes = Item(name="Brass Pipes") ColdSlag = Item(name="Cold Slag") FanBlades = Item(name="Fan Blades") class RawResources(Enum): Water = Items.Water SiteriteOre = Items.SiteriteOre LarrussiteOre = Items.LarrussiteOre CallaniteOre = Items.CallaniteOre AuroviteOre = Items.AuroviteOre class Recipe(BaseModel): model_config = ConfigDict(frozen=True) name: str building: Machines outputs: Dict[Items, float] inputs: Dict[Items, float] = Field(default_factory=dict) byproducts: Dict[Items, float] = Field(default_factory=dict) class Recipes(Enum): # Crusher # - Crushing Ores CrushedSiterite = Recipe( name="Crushed Siterite", building=Machines.Crusher, outputs={ Items.CrushedSiterite: 60.0, Items.CrushedGangue: 25.0, }, inputs={Items.SiteriteOre: 60.0}, ) CrushedLarrussite = Recipe( name="Crushed Larrussite", building=Machines.Crusher, outputs={ Items.CrushedLarrussite: 40.0, Items.CrushedGangue: 20.0, }, inputs={Items.LarrussiteOre: 60.0}, ) CrushedCallanite = Recipe( name="Crushed Callanite", building=Machines.Crusher, outputs={ Items.CrushedCallanite: 60.0, Items.CrushedGangue: 25.0, }, inputs={Items.CallaniteOre: 60.0}, ) CrushedAurovite = Recipe( name="Crushed Aurovite", building=Machines.Crusher, outputs={ Items.CrushedAurovite: 60.0, Items.CrushedGangue: 22.5, }, inputs={Items.AuroviteOre: 60.0}, ) # - Crushing Powders CoarseSand = Recipe( name="Coarse Sand", building=Machines.Crusher, outputs={ Items.Sand: 30.0 }, inputs={Items.CrushedGangue: 60.0}, ) MagnesiumGranules = Recipe( name="Magnesium Granules", building=Machines.Crusher, outputs={ Items.MagnesiumGranules: 72.0 }, inputs={Items.CrushedMagnesium: 80.0}, ) # Sorter # - Simple Sorting CrushedIron = Recipe( name="Crushed Iron", building=Machines.Sorter, outputs={ Items.CrushedIron: 90.0, Items.CrushedTin: 60.0, Items.CrushedGangue: 40.0, }, inputs={Items.CrushedSiterite: 120.0}, ) CrushedCopper = Recipe( name="Crushed Copper", building=Machines.Sorter, outputs={ Items.CrushedCopper: 96.0, Items.CrushedMagnesium: 80.0, Items.CrushedGangue: 40.0, }, inputs={Items.CrushedCallanite: 120.0}, ) CrushedZinc = Recipe( name="Crushed Zinc", building=Machines.Sorter, outputs={ Items.CrushedZinc: 96.0, Items.CrushedMagnesium: 48.0, Items.CrushedGangue: 60.0, }, inputs={Items.CrushedLarrussite: 120.0}, ) CrushedCaterium = Recipe( name="Crushed Caterium", building=Machines.Sorter, outputs={ Items.CrushedCaterium: 80.0, Items.CrushedCopper: 40.0, Items.CrushedGangue: 30.0, }, inputs={Items.CrushedAurovite: 120.0}, ) # Smelter # - smelting IronIngot = Recipe( name="Iron Ingot", building=Machines.Smelter, outputs={Items.IronIngot: 30.0}, inputs={Items.CrushedIron: 30.0}, ) CopperIngot = Recipe( name="Copper Ingot", building=Machines.Smelter, outputs={Items.CopperIngot: 48.0}, inputs={Items.CrushedCopper: 48.0}, ) TinIngot = Recipe( name="Tin Ingot", building=Machines.Smelter, outputs={Items.TinIngot: 15.0}, inputs={Items.CrushedTin: 15.0}, ) CateriumIngot = Recipe( name="Caterium Ingot", building=Machines.Smelter, outputs={Items.CateriumIngot: 40.0}, inputs={Items.CrushedCaterium: 40.0}, ) # - Ingots ImpureIronIngot = Recipe( name="Impure Iron Ingot", building=Machines.Smelter, outputs={Items.IronIngot: 30.0}, inputs={Items.CrushedSiterite: 30.0}, ) ImpureCopperIngot = Recipe( name="Impure Copper Ingot", building=Machines.Smelter, inputs={Items.CrushedCallanite: 24.0}, outputs={Items.CopperIngot: 24.0}, ) ImpureTinIngot = Recipe( name="Impure Tin Ingot", building=Machines.Smelter, inputs={Items.CrushedSiterite: 30.0}, outputs={Items.TinIngot: 15.0}, ) ImpureCateriumIngot = Recipe( name="Impure Caterium Ingot", building=Machines.Smelter, outputs={Items.CateriumIngot: 24.0}, inputs={Items.CrushedAurovite: 40.0}, ) ZincIngot = Recipe( name="Zinc Ingot", building=Machines.Smelter, outputs={Items.ZincIngot: 15.0}, inputs={Items.CrushedZinc: 24.0}, ) # - Standard Parts SloppyGlass = Recipe( name="Sloppy Glass", building=Machines.Smelter, outputs={Items.Glass: 20.0}, inputs={Items.Sand: 30.0}, ) CastIronScrew = Recipe( name="Cast Iron Screw", building=Machines.Smelter, outputs={Items.Screws: 40.0}, inputs={Items.IronIngot: 20.0}, ) # Constructor # - Standard Parts IronPlate = Recipe( name="Iron Plate", building=Machines.Constructor, outputs={Items.IronPlate: 20.0}, inputs={Items.IronIngot: 30.0}, ) Screws = Recipe( name="Screws", building=Machines.Constructor, outputs={Items.Screws: 50.0}, inputs={Items.IronRod: 20.0}, ) IronRod = Recipe( name="Iron Rod", building=Machines.Constructor, outputs={Items.IronRod: 15.0}, inputs={Items.IronIngot: 15.0}, ) IronSheet = Recipe( name="Iron Sheet", building=Machines.Constructor, outputs={Items.IronSheet: 50.0}, inputs={Items.IronPlate: 40.0}, ) CopperRod = Recipe( name="Copper Rod", building=Machines.Constructor, outputs={Items.CopperRod: 18.0}, inputs={Items.CopperIngot: 12.0}, ) CopperSheet = Recipe( name="Copper Sheet", building=Machines.Constructor, outputs={Items.CopperSheet: 30.0}, inputs={Items.CopperIngot: 24.0}, ) BronzeBeam = Recipe( name="Bronze Beam", building=Machines.Constructor, outputs={Items.BronzeBeam: 7.5}, inputs={Items.BronzeIngot: 22.5}, ) BronzePlates = Recipe( name="Bronze Plates", building=Machines.Constructor, outputs={Items.BronzePlates: 24.0}, inputs={Items.BronzeIngot: 30.0}, ) CateriumRod = Recipe( name="Caterium Rod", building=Machines.Constructor, outputs={Items.CateriumRod: 32.0}, inputs={Items.CateriumIngot: 16.0}, ) CateriumPlate = Recipe( name="Caterium Plate", building=Machines.Constructor, outputs={Items.CateriumPlate: 36.0}, inputs={Items.CateriumIngot: 60.0}, ) TinRod = Recipe( name="Tin Rod", building=Machines.Constructor, outputs={Items.TinRod: 15.0}, inputs={Items.TinIngot: 30.0}, ) ZincPlates = Recipe( name="Zinc Plates", building=Machines.Constructor, outputs={Items.ZincPlates: 15.0}, inputs={Items.ZincIngot: 12.5}, ) RolledBronzePlate = Recipe( name="Rolled Bronze Plate", building=Machines.Constructor, outputs={Items.BronzePipes: 16.0}, inputs={Items.BronzePlates: 8.0}, ) CompactedIronPlate = Recipe( name="Compacted Iron Plate", building=Machines.Constructor, outputs={Items.ReinforcedIronPlate: 3.0}, inputs={Items.IronPlate: 20.0}, ) # - Electronics IronWire = Recipe( name="Iron Wire", building=Machines.Constructor, outputs={Items.IronWire: 30.0}, inputs={Items.IronRod: 20.0}, ) Wire = Recipe( name="Wire", building=Machines.Constructor, outputs={Items.Wire: 30.0}, inputs={Items.CopperRod: 18.0}, ) CopperBusbars = Recipe( name="Copper Busbars", building=Machines.Constructor, outputs={Items.CopperBusbars: 15.0}, inputs={Items.CopperRod: 24.0}, ) Cable = Recipe( name="Cable", building=Machines.Constructor, outputs={Items.Cable: 30.0}, inputs={Items.Wire: 60.0}, ) Quickwire = Recipe( name="Quickwire", building=Machines.Constructor, outputs={Items.Quickwire: 80.0}, inputs={Items.CateriumRod: 24.0}, ) PureTinWire = Recipe( name="Pure Tin Wire", building=Machines.Constructor, outputs={Items.TinnedWire: 11.25}, inputs={Items.TinRod: 15.0}, ) # - Compounds Concrete = Recipe( name="Concrete", building=Machines.Constructor, outputs={Items.Concrete: 15.0}, inputs={Items.CrushedGangue: 45.0}, ) # - Industrial Parts BrassPlates = Recipe( name="Brass Plates", building=Machines.Constructor, outputs={Items.BrassPlates: 18.0}, inputs={Items.BrassIngot: 25.0}, ) # Foundry # - Building Parts SolarCell = Recipe( name="Solar Cell", building=Machines.Foundry, outputs={Items.SolarCell: 11.25}, inputs={ Items.ZincPlates: 22.5, Items.Silica: 67.5, }, ) # - Alloys BronzePipes = Recipe( name="Bronze Pipes", building=Machines.Foundry, outputs={Items.BronzePipes: 36.0}, inputs={ Items.CopperIngot: 24.0, Items.TinIngot: 15.0, }, ) # - ingots BronzeIngot = Recipe( name="Bronze Ingot", building=Machines.Foundry, outputs={Items.BronzeIngot: 45.0}, inputs={ Items.CopperIngot: 36.0, Items.TinIngot: 15.0, }, ) # - Other ThermalSilica = Recipe( name="Thermal Silica", building=Machines.Foundry, outputs={Items.Silica: 45.0}, inputs={ Items.Sand: 30.0, Items.MagnesiumGranules: 27.0, }, ) # Assembler # - Building Parts SmoothBeltDrive = Recipe( name="Smooth Belt Drive", building=Machines.Assembler, outputs={Items.SmoothBeltDrive: 18.75}, inputs={ Items.TinnedSheet: 15.0, Items.Rotor: 3.75, }, ) SlagConcrete = Recipe( name="Slag Concrete", building=Machines.Assembler, outputs={Items.Concrete: 22.5}, inputs={ Items.ColdSlag: 33.75, Items.CrushedGangue: 11.25, }, ) FanBlades = Recipe( name="Fan Blades", building=Machines.Assembler, outputs={Items.FanBlades: 7.5}, inputs={ Items.BrassPlates: 8.0, Items.IronRod: 22.5, }, ) # - Standard Parts TinPlate = Recipe( name="Tin Plate", building=Machines.Assembler, outputs={Items.TinPlate: 40.0}, inputs={ Items.TinIngot: 30.0, Items.IronPlate: 20.0, }, ) TinnedWire = Recipe( name="Tinned Wire", building=Machines.Assembler, outputs={Items.TinnedWire: 90}, inputs={ Items.Wire: 60.0, Items.TinRod: 45.0, }, ) TinnedSheet = Recipe( name="Tinned Sheet", building=Machines.Assembler, outputs={Items.TinnedSheet: 40.0}, inputs={ Items.TinIngot: 20.0, Items.CopperSheet: 20.0, }, ) Rotor = Recipe( name="Rotor", building=Machines.Assembler, outputs={Items.Rotor: 7.5}, inputs={ Items.CopperBusbars: 22.5, Items.IronWire: 60.0, }, ) ReinforcedIronPlate = Recipe( name="Reinforced Iron Plate", building=Machines.Assembler, outputs={Items.ReinforcedIronPlate: 5.0}, inputs={ Items.TinPlate: 20.0, Items.Screws: 37.5, }, ) BronzeFrame = Recipe( name="Bronze Frame", building=Machines.Assembler, outputs={Items.BronzeFrame: 5.0}, inputs={ Items.BronzeBeam: 10.0, Items.BronzePipes: 24.0, }, ) ModularFrame = Recipe( name="Modular Frame", building=Machines.Assembler, outputs={Items.ModularFrame: 6.0}, inputs={ Items.ReinforcedIronPlate: 7.5, Items.BronzeBeam: 7.5, }, ) FastenedFrame = Recipe( name="Fastened Frame", building=Machines.Assembler, outputs={Items.ModularFrame: 20.0}, inputs={ Items.ReinforcedIronPlate: 15, Items.Screws: 150, }, ) BrassPipes = Recipe( name="Brass Pipes", building=Machines.Assembler, outputs={Items.BrassPipes: 12.5}, inputs={ Items.BrassPlates: 15.0, Items.CopperRod: 7.5 }, ) # - Electronics AILimiter = Recipe( name="AI Limiter", building=Machines.Assembler, outputs={Items.AILimiter: 6.0}, inputs={ Items.CateriumPlate: 24.0, Items.TinnedWire: 18.0, }, ) # - Industrial CateriumHeatsink = Recipe( name="Caterium Heatsink", building=Machines.Assembler, outputs={Items.CateriumHeatsink: 10.0}, inputs={ Items.CateriumPlate: 28.0, Items.CopperBusbars: 10.0, }, ) # Flexible Blast Furnace # - Molten Metals MoltenIron = Recipe( name="Molten Iron", building=Machines.FlexibleBlastFurnace, outputs={Items.MoltenIron: 60.0}, inputs={ Items.CrushedIron: 120.0, }, ) MoltenCopper = Recipe( name="Molten Copper", building=Machines.FlexibleBlastFurnace, outputs={Items.MoltenCopper: 60.0}, inputs={ Items.CrushedCopper: 120.0, }, ) MoltenTin = Recipe( name="Molten Tin", building=Machines.FlexibleBlastFurnace, outputs={Items.MoltenTin: 60.0}, inputs={ Items.CrushedTin: 120.0, }, ) # - Alloys MoltenBrass = Recipe( name="Molten Brass", building=Machines.FlexibleBlastFurnace, outputs={Items.MoltenBrass: 60.0}, inputs={ Items.CrushedZinc: 32.0, Items.MoltenCopper: 20.0, }, ) # Reformer # - Ingots CastIronIngot = Recipe( name="Cast Iron Ingot", building=Machines.Reformer, outputs={ Items.IronIngot: 180.0, Items.Steam: 60.0 }, inputs={ Items.MoltenIron: 60.0, Items.Water: 60.0, }, ) CastCopperIngot = Recipe( name="Cast Copper Ingot", building=Machines.Reformer, outputs={ Items.CopperIngot: 144.0, Items.Steam: 24.0 }, inputs={ Items.MoltenCopper: 48.0, Items.Water: 24.0, } ) CastTinIngot = Recipe( name="Cast Tin Ingot", building=Machines.Reformer, outputs={ Items.TinIngot: 180.0, Items.Steam: 20.0 }, inputs={ Items.MoltenTin: 60.0, Items.Water: 20.0, } ) CastBrassIngot = Recipe( name="Cast Brass Ingot", building=Machines.Reformer, outputs={ Items.BrassIngot: 50.0, Items.Steam: 15.0 }, inputs={ Items.MoltenBrass: 40.0, Items.Water: 15.0, } ) Recipe.model_rebuild()