diff --git a/src/main/java/satisfactory/Database.java b/src/main/java/satisfactory/Database.java index f5f846f..eb6a1f8 100644 --- a/src/main/java/satisfactory/Database.java +++ b/src/main/java/satisfactory/Database.java @@ -1,8 +1,6 @@ package satisfactory; -import satisfactory.buildings.Building; -import satisfactory.buildings.PowerGenerationBuilding; -import satisfactory.buildings.ProductionBuilding; +import satisfactory.buildings.*; import satisfactory.items.Item; import satisfactory.items.Recipe; import satisfactory.items.RecipeBuilder; @@ -11,7 +9,7 @@ import satisfactory.items.type.*; import java.util.*; public class Database { - public static final Item TODO_ITEM = new Ore("TODO ITEM"); + public static final Item TODO_ITEM = new Ore("TODO ITEM",0); // BUILDINGS public static final class Buildings { @@ -28,9 +26,47 @@ public class Database { public static final Building OIL_EXTRACTOR = new ProductionBuilding("Oil Extractor", 40, oilExtractor()); public static final Building PACKAGER = new ProductionBuilding("Packager", 10, packager()); public static final Building REFINERY = new ProductionBuilding("Refinery", 30, refinery()); - public static final Building RESOURCE_WELL_EXTRACTOR = new ProductionBuilding("Resource Well Extractor", -9999, resourceWellExtractor()); // FIXME values // TODO: couple with Resource Well Pressurizer + public static final Building RESOURCE_WELL_PRESSURIZER = new ProductionBuilding("Resource Well Pressurizer", -1, resourceWellPressurizer()); + public static final Building RESOURCE_WELL_EXTRACTOR = new ResourceWellExtractor("Resource Well Extractor", resourceWellExtractor(), RESOURCE_WELL_PRESSURIZER); // FIXME values // TODO: couple with Resource Well Pressurizer + public static final Building NUCLEAR_POWER_PLANT = new PowerGenerationBuilding("Nuclear Power Plant", 0, nuclearPowerPlantCost(), nuclearPowerPlantConsumes()); // TODO power + + private static Map nuclearPowerPlantConsumes() { + return new HashMap<>(); // TODO + } + + private static Map nuclearPowerPlantCost() { + HashMap cost = new HashMap<>(); + cost.put(Concrete, 250); + cost.put(HeavyModularFrame, 25); + cost.put(SuperComputer, 5); + cost.put(Cable, 100); + cost.put(AlcladAluminumSheet, 100); + return cost; + } + + private static Map resourceWellPressurizer() { + Map cost = new HashMap<>(); + cost.put(Wire, 200); + cost.put(Rubber, 50); + cost.put(EncasedIndustrialBeam, 50); + cost.put(Motor, 50); + return cost; + } + public static final Building SMELTER = new ProductionBuilding("Smelter", 4, smelter()); public static final Building WATER_EXTRACTOR = new ProductionBuilding("Water Extractor", 20, waterExtractor()); + public static final Building PARTICLE_ACCELERATOR = new ParticleAccelerator("Particle Accelerator", -1, particleAccelerator()); + + private static Map particleAccelerator() { + Map cost = new HashMap<>(); + cost.put(Database.RadioControlUnit, 25); + cost.put(Database.ElectromagneticControlRod, 100); + cost.put(Database.SuperComputer, 10); + cost.put(Database.CoolingSystem, 50); + cost.put(Database.FusedModularFrame, 20); + cost.put(Database.TurboMotor, 10); + return cost; + } private static Map assembler() { Map cost = new HashMap<>(); @@ -231,121 +267,222 @@ public class Database { return cost; } + public static final Building FICSMAS_GIANT_TREE = new DecorationBuilding("Giant FICSMAS Tree", ficsmasGiantTree()); + public static final Building FICSMAS_CANDY_CANE = new DecorationBuilding("Candy Cane", ficsmasCandyCane()); + public static final Building FICSMAS_SNOWMAN = new DecorationBuilding("Snowman", ficsmasSnowman()); + public static final Building FICSMAS_GIFT_TREE = new ProductionBuilding("FICSMAS Gift Tree", 0 ,ficsmasGiftTree()); + public static final Building FICSMAS_POWER_LIGHT = new DecorationBuilding("FICSMAS Power Light", ficsmasPowerLight()); + public static final Building FICSMAS_SNOW_DISPENSER = new DecorationBuilding("FICSMAS Snow Dispenser", ficsmasSnowDispenser()); + public static final Building FICSMAS_WREATH = new DecorationBuilding("FICSMAS Wreath", ficsmasWreath()); + + private static Map ficsmasGiantTree() { + Map cost = new HashMap<>(); + cost.put(Database.FICSMASTreeBranch, 100); + cost.put(Database.ReinforcedIronPlate, 50); + cost.put(Database.Concrete, 500); + return cost; + } + + private static Map ficsmasCandyCane() { + Map cost = new HashMap<>(); + cost.put(Database.FICSMASBow, 100); + cost.put(Database.FICSMASCandyCane, 50); + return cost; + } + + private static Map ficsmasSnowman() { + Map cost = new HashMap<>(); + cost.put(Database.FICSMASActualSnow, 50); + cost.put(Database.FICSMASCandyCane, 3); + cost.put(Database.FICSMASBow, 1); + cost.put(Database.FICSMASRedOrnament, 3); + cost.put(Database.FICSMASBlueOrnament, 2); + return cost; + } + + private static Map ficsmasGiftTree() { + Map cost = new HashMap<>(); + cost.put(Database.FICSMASGift, 50); + cost.put(Database.FICSMASTreeBranch, 100); + cost.put(Database.FICSMASCopperOrnament, 20); + cost.put(Database.FICSMASIronOrnament, 20); + return cost; + } + + private static Map ficsmasPowerLight() { + Map cost = new HashMap<>(); + cost.put(Cable, 1); + cost.put(FICSMASOrnamentBundle, 1); + return cost; + } + + private static Map ficsmasSnowDispenser() { + Map cost = new HashMap<>(); + cost.put(FICSMASCandyCane, 10); + cost.put(FICSMASActualSnow, 100); + cost.put(FICSMASDecoration, 2); + return cost; + } + private static Map ficsmasWreath() { + Map cost = new HashMap<>(); + cost.put(FICSMASDecoration, 1); + cost.put(FICSMASBow, 1); + return cost; + } + } // ITEMS public static final Map preferences = new HashMap<>(); // Items & recipes - public static final Item IronOre = new Ore("Iron Ore"); - public static final Item IronIngot = new Ingot("Iron Ingot"); - public static final Item CopperOre = new Ore("Copper Ore"); - public static final Item CopperIngot = new Ingot("Copper Ingot"); - public static final Item Coal = new Ore("Coal"); - public static final Item SteelIngot = new Ingot("Steel Ingot"); - public static final Item CateriumOre = new Ore("Caterium Ore"); - public static final Item CateriumIngot = new Ingot("Caterium Ingot"); - public static final Item IronPlate = new Part("Iron Plate"); - public static final Item IronRod = new Part("Iron Rod"); - public static final Item Screw = new Part("Screw"); - public static final Item ReinforcedIronPlate = new Part("Reinforced Iron Plate"); - public static final Item ModularFrame = new Part("Modular Frame"); - public static final Item SteelBeam = new Part("Steel Beam"); - public static final Item SteelPipe = new Part("Steel Pipe"); - public static final Item Limestone = new Ore("Limestone"); - public static final Item Concrete = new Part("Concrete"); - public static final Item EncasedIndustrialBeam = new Part("Encased Industrial Beam"); - public static final Item HeavyModularFrame = new Part("Heavy Modular Frame"); - public static final Item CopperSheet = new Part("Copper Sheet"); - public static final Item Wire = new Part("Wire"); - public static final Item Cable = new Part("Cable"); - public static final Item Quickwire = new Part("Quickwire"); - public static final Item CircuitBoard = new Part("Circuit Board"); - public static final Item AILimiter = new Part("A.I. Limiter"); - public static final Item HighSpeedConnector = new Part("High-Speed Connector"); - public static final Item Biomass = new Part("Biomass"); - public static final Item SolidBiofuel = new Part("Solid Biofuel"); - public static final Item Mycelia = new Pickup("Mycelia"); - public static final Item Leaves = new Pickup("Leaves"); - public static final Item Wood = new Pickup("Wood"); - public static final Item AlienProtein = new Pickup("Alien Protein"); - public static final Item HogRemains = new Pickup("Hog Remains"); - public static final Item PlasmaSpitterRemains = new Pickup("Plasma Spitter Remains"); - public static final Item StingerRemains = new Pickup("Stinger Remains"); - public static final Item HatcherRemains = new Pickup("Hatcher Remains"); - public static final Item Fabric = new Part("Fabric"); - public static final Item Rotor = new Part("Rotor"); - public static final Item Stator = new Part("Stator"); - public static final Item Motor = new Part("Motor"); - public static final Item GreenPowerSlug = new Pickup("Green Power Slug"); - public static final Item YellowPowerSlug = new Pickup("Yellow Power Slug"); - public static final Item PurplePowerSlug = new Pickup("Purple Power Slug"); - public static final Item PowerShard = new Pickup("PowerShard"); - public static final Item Sulfur = new Ore("Sulfur"); - public static final Item BlackPowder = new Part("Black powder"); - public static final Item IronRebar = new Part("Iron Rebar"); - public static final Item FlowerPetals = new Pickup("Flower Petals"); - public static final Item ColorCatridge = new Part("Color Catridge"); - public static final Item Beacon = new Tool("Beacon"); - public static final Item Rubber = new Part("Rubber"); - public static final Item RifleAmmo = new Part("Rifle Ammo"); - public static final Item GasFilter = new Tool("Gas Filter"); - public static final Item Plastic = new Part("Plastic"); - public static final Item Computer = new Part("Computer"); - public static final Item SuperComputer = new Part("Super Computer"); - public static final Item EmptyCanister = new Part("Empty Canister"); - public static final Item ModularEngine = new Part("Modular Engine"); - public static final Item AdaptiveControlUnit = new Part("Adaptive Control Unit"); - public static final Item SmartPlating = new Part("Smart Plating"); - public static final Item AutomatedWiring = new Part("Automated Wiring"); - public static final Item VersatileFrameWork = new Part("Versatile Framework"); - public static final Item Nobelisk = new Part("Nobelisk"); + public static final Item IronOre = new Ore("Iron Ore", 100); + public static final Item IronIngot = new Ingot("Iron Ingot", 100); + public static final Item CopperOre = new Ore("Copper Ore", 100); + public static final Item CopperIngot = new Ingot("Copper Ingot", 100); + public static final Item Coal = new Ore("Coal", 100); + public static final Item SteelIngot = new Ingot("Steel Ingot", 100); + public static final Item CateriumOre = new Ore("Caterium Ore", 100); + public static final Item CateriumIngot = new Ingot("Caterium Ingot", 100); + public static final Item IronPlate = new Part("Iron Plate", 200); + public static final Item IronRod = new Part("Iron Rod", 200); + public static final Item Screw = new Part("Screw", 500); + public static final Item ReinforcedIronPlate = new Part("Reinforced Iron Plate", 100); + public static final Item ModularFrame = new Part("Modular Frame", 50); + public static final Item SteelBeam = new Part("Steel Beam", 200); + public static final Item SteelPipe = new Part("Steel Pipe", 200); + public static final Item Limestone = new Ore("Limestone", 100); + public static final Item Concrete = new Part("Concrete", 500); + public static final Item EncasedIndustrialBeam = new Part("Encased Industrial Beam", 100); + public static final Item HeavyModularFrame = new Part("Heavy Modular Frame", -1); + public static final Item CopperSheet = new Part("Copper Sheet", 200); + public static final Item Wire = new Part("Wire", 500); + public static final Item Cable = new Part("Cable", 200); + public static final Item Quickwire = new Part("Quickwire", 500); + public static final Item CircuitBoard = new Part("Circuit Board", 200); + public static final Item AILimiter = new Part("A.I. Limiter", -1); + public static final Item HighSpeedConnector = new Part("High-Speed Connector", 100); + public static final Item Biomass = new Part("Biomass", -1); + public static final Item SolidBiofuel = new Part("Solid Biofuel", 200); + public static final Item Mycelia = new Pickup("Mycelia", 200); + public static final Item Leaves = new Pickup("Leaves", -1); + public static final Item Wood = new Pickup("Wood", -1); + public static final Item AlienProtein = new Pickup("Alien Protein", -1); + public static final Item HogRemains = new Pickup("Hog Remains", -1); + public static final Item PlasmaSpitterRemains = new Pickup("Plasma Spitter Remains", -1); + public static final Item StingerRemains = new Pickup("Stinger Remains", -1); + public static final Item HatcherRemains = new Pickup("Hatcher Remains", -1); + public static final Item Fabric = new Part("Fabric", -1); + public static final Item Rotor = new Part("Rotor", -1); + public static final Item Stator = new Part("Stator", -1); + public static final Item Motor = new Part("Motor", -1); + public static final Item GreenPowerSlug = new Pickup("Green Power Slug", -1); + public static final Item YellowPowerSlug = new Pickup("Yellow Power Slug", -1); + public static final Item PurplePowerSlug = new Pickup("Purple Power Slug", -1); + public static final Item PowerShard = new Pickup("PowerShard", -1); + public static final Item Sulfur = new Ore("Sulfur", 100); + public static final Item BlackPowder = new Part("Black powder", 200); + public static final Item IronRebar = new Part("Iron Rebar", -1); + public static final Item FlowerPetals = new Pickup("Flower Petals", -1); + public static final Item ColorCatridge = new Part("Color Catridge", 200); + public static final Item Beacon = new Tool("Beacon", -1); + public static final Item Rubber = new Part("Rubber", 200); + public static final Item RifleAmmo = new Part("Rifle Ammo", 500); + public static final Item GasFilter = new Tool("Gas Filter", -1); + public static final Item Plastic = new Part("Plastic", 200); + public static final Item Computer = new Part("Computer", 50); + public static final Item SuperComputer = new Part("Super Computer", -1); + public static final Item EmptyCanister = new Part("Empty Canister", 100); + public static final Item ModularEngine = new Part("Modular Engine", -1); + public static final Item AdaptiveControlUnit = new Part("Adaptive Control Unit", -1); + public static final Item SmartPlating = new Part("Smart Plating", -1); + public static final Item AutomatedWiring = new Part("Automated Wiring", -1); + public static final Item VersatileFrameWork = new Part("Versatile Framework", -1); + public static final Item Nobelisk = new Part("Nobelisk", -1); public static final Item Water = new RawFluid("Water"); public static final Item CrudeOil = new RawFluid("Crude Oil"); public static final Item HeavyOilResidue = new ProcessedFluid("Heavy Oil Residue"); public static final Item Fuel = new ProcessedFluid("Fuel"); + public static final Item PackagedFuel = new Part("Packaged Fuel", 100); + public static final Item PackagedWater = new Part("Packaged Water", -1); + public static final Item PackagedOil = new Part("Packaged Oil", -1); + public static final Item PackagedHeavyOilResidue = new Part("Packaged Heavy Oil Residue", -1); + public static final Item PackagedAluminaSolution = new Part("Packaged Alumina Solution", -1); + public static final Item PackagedSulfuricAcid = new Part("Packaged Sulfuric Acid", -1); // TODO + public static final Item PackagedNitrogenGas = new Part("Packaged Nitrogen Gas", -1); public static final Item LiquidBiofuel = new ProcessedFluid("Liquid Biofuel"); - public static final Item PackagedLiquidBiofuel = new Part("Packaged Liquid Biofuel"); - public static final Item PetroleumCoke = new Part("Petroleum Coke"); - public static final Item PolymerResin = new Part("Polymer Resin"); + public static final Item PackagedLiquidBiofuel = new Part("Packaged Liquid Biofuel", -1); + public static final Item PetroleumCoke = new Part("Petroleum Coke", -1); + public static final Item PolymerResin = new Part("Polymer Resin", -1); // TODO: verify below! - public static final Item AluminumIngot = new Part("Aluminum Ingot"); - public static final Item AlcladAluminumSheet = new Part("Alclad Aluminum Sheet"); - public static final Item AluminumCasing = new Part("Aluminum Casing"); - public static final Item RawQuartz = new Ore("Raw Quartz"); - public static final Item QuartzCristal = new Part("Quartz Cristal"); - public static final Item CrystalOscillator = new Part("Crystal Oscillator"); - public static final Item RadioControlUnit = new Part("Radio Control Unit"); - public static final Item AluminumScrap = new Part("Aluminum Scrap"); - public static final Item Silica = new Part("Silica"); - public static final Item Bauxite = new Ore("Bauxite"); + public static final Item AluminumIngot = new Part("Aluminum Ingot", -1); + public static final Item AlcladAluminumSheet = new Part("Alclad Aluminum Sheet", -1); + public static final Item AluminumCasing = new Part("Aluminum Casing", -1); + public static final Item RawQuartz = new Ore("Raw Quartz", -1); + public static final Item QuartzCristal = new Part("Quartz Cristal", -1); + public static final Item CrystalOscillator = new Part("Crystal Oscillator", -1); + public static final Item RadioControlUnit = new Part("Radio Control Unit", -1); + public static final Item AluminumScrap = new Part("Aluminum Scrap", -1); + public static final Item Silica = new Part("Silica", -1); + public static final Item Bauxite = new Ore("Bauxite", 100); public static final Item AluminaSolution = new ProcessedFluid("Alumina Solution"); public static final Item SulfuricAcid = new ProcessedFluid("Sulfuric Acid"); - public static final Item EncasedUraniumCell = new Part("Encased Uranium Cell"); - public static final Item ElectromagneticControlRod = new Part("Electromagnetic Control Rod"); - public static final Item UraniumFuelRod = new Part("Uranium Fuel Rod"); - public static final Item Uranium = new Ore("Uranium"); - public static final Item Battery = new Part("Battery"); - public static final Item MagneticFieldGenerator = new Part("Magnetic Field Generator"); - public static final Item HeatSink = new Part("Heat Sink"); - public static final Item AssemblyDirectorSystem = new Part("Assembly Director System"); + public static final Item EncasedUraniumCell = new Part("Encased Uranium Cell", -1); + public static final Item ElectromagneticControlRod = new Part("Electromagnetic Control Rod", -1); + public static final Item UraniumFuelRod = new Part("Uranium Fuel Rod", -1); + public static final Item Uranium = new Ore("Uranium", -1); + public static final Item Battery = new Part("Battery", -1); + public static final Item MagneticFieldGenerator = new Part("Magnetic Field Generator", -1); + public static final Item HeatSink = new Part("Heat Sink", -1); + public static final Item AssemblyDirectorSystem = new Part("Assembly Director System", -1); public static final Item NitrogenGas = new Gas("Nitrogen Gas"); - public static final Item CoolingSystem = new Part("Cooling System"); - public static final Item FusedModularFrame = new Part("Fused Modular Frame"); - public static final Item PortableMiner = new Tool("Portable Miner"); + public static final Item CoolingSystem = new Part("Cooling System", -1); + public static final Item FusedModularFrame = new Part("Fused Modular Frame", -1); + public static final Item PortableMiner = new Tool("Portable Miner", 1); public static final Item Turbofuel = new ProcessedFluid("Turbofuel"); - public static final Item PackagedTurboFuel = new Part("Packaged Turbofuel"); - public static final Item CompactedCoal = new Part("Compated Coal"); - public static final Item RebarGun = new Tool("Rebar Gun"); - public static final Item Rifle = new Tool("Rifle"); - public static final Item StunRebar = new Part("Stun Rebar"); - public static final Item ExplosiveRebar = new Part("Explosive Rebar"); - public static final Item SmokelessPowder = new Part("Smokeless Powder"); - public static final Item HomingRifleAmmo = new Part("Homing Rifle Ammo"); - public static final Item GasNobelisk = new Part("Gas Nobelisk"); - public static final Item ClusterNobelisk = new Part("Cluster Nobelisk"); - public static final Item ObjectScanner = new Tool("Object Scanner"); - public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator"); + public static final Item PackagedTurboFuel = new Part("Packaged Turbofuel", -1); + public static final Item CompactedCoal = new Part("Compated Coal", -1); + public static final Item RebarGun = new Tool("Rebar Gun", -1); + public static final Item Rifle = new Tool("Rifle", -1); + public static final Item StunRebar = new Part("Stun Rebar", -1); + public static final Item ExplosiveRebar = new Part("Explosive Rebar", -1); + public static final Item SmokelessPowder = new Part("Smokeless Powder", 100); + public static final Item HomingRifleAmmo = new Part("Homing Rifle Ammo", -1); + public static final Item GasNobelisk = new Part("Gas Nobelisk", -1); + public static final Item ClusterNobelisk = new Part("Cluster Nobelisk", -1); + public static final Item ObjectScanner = new Tool("Object Scanner", -1); + public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator", -1); + + public static final Item FICSMASGift = new Ore("FICSMAS Gift", 500); + public static final Item FICSMASTreeBranch = new Part("FICSMAS Tree Branch", 500); + public static final Item FICSMASCandyCane = new Part("Candy Cane", 500); + public static final Item FICSMASBow = new Part("FICSMAS Bow", 500); + public static final Item FICSMASRedOrnament = new Part("Red FICSMAS Oranment", 500); + public static final Item FICSMASBlueOrnament = new Part("Blue FICSMAS Oranment", 500); + public static final Item FICSMASCandyCaneBasher = new Tool("Candy Cane Basher", -1);; + public static final Item FICSMASActualSnow = new Part("Actual Snow", 500); + public static final Item FICSMASSnowBall = new Part("Snowball", 500); + public static final Item FICSMASCopperOrnament = new Part("Copper FICSMAS Ornament", 200); + public static final Item FICSMASIronOrnament = new Part("Iron FICSMAS Ornament", 200); + public static final Item FICSMASOrnamentBundle = new Part("FICSMAS Ornament Bundle", 100); + public static final Item FICSMASDecoration = new Part("FICSMAS Decoration", 500); + public static final Item FICSMASSweetFireworks = new Part("Sweet Fireworks",500); + public static final Item FICSMASFancyFireworks = new Part("Fancy Fireworks", 500); + public static final Item FICSMASSparklyFireworks = new Part("Sparkly Fireworks", 500); + public static final Item FICSMASWonderStar = new Part("FICSMAS Wonder Star", 50); + public static final Item XenoZapper = new Tool("Xeno-Zapper", -1); + + public static final Item BerylNut = new Pickup("Beryl Nut", 100); + public static final Item Paleberry = new Pickup("Paleberry", 50); + public static final Item BaconAgaric = new Pickup("BaconAgaric", 50); + public static final Item MercerSphere = new Pickup("Mercer Sphere WIP", -1); + public static final Item Somersloop = new Pickup("Somersloop WIP", -1); + + public static final Item ThermalPropulsionRocket = new Part("Thermal Propulsion Rocket", -1); + public static final Item NuclearPasta = new Part("Nuclear Pasta", -1); + public static final Item TurboMotor = new Part("Turbo Motor", -1); + public static final Item CopperPowder = new Part("Copper Powder", -1); + public static final Item PressureConversionCube = new Part("Pressure Conversion Cube", -1); static { { @@ -409,6 +546,13 @@ public class Database { { // Concrete Concrete.add(new RecipeBuilder().setDuration(4).addInput(Limestone, 3).addOutput(Concrete, 1).setBuilding(Buildings.CONSTRUCTOR).createRecipe()); + new RecipeBuilder().setName("Wet Concrete") + .setBuilding(Buildings.REFINERY) + .setDuration(3) + .addInput(Limestone, 6) + .addInput(Water, 5) + .addOutput(Concrete, 4) + .createRecipe(); } { // Iron Plate @@ -495,6 +639,13 @@ public class Database { { // Wire Wire.add(new RecipeBuilder().setDuration(4).addInput(CopperIngot,1).addOutput(Wire,2).setBuilding(Buildings.CONSTRUCTOR).createRecipe()); + new RecipeBuilder().setName("Fused Wire") + .setBuilding(Buildings.ASSEMBLER) + .setDuration(20) + .addInput(CopperIngot,4) + .addInput(CateriumIngot,1) + .addOutput(Wire,30) + .createRecipe(); } { // Cable @@ -755,6 +906,13 @@ public class Database { .addInput(ModularFrame,1) .addInput(SteelBeam, 12).addOutput(VersatileFrameWork,2).createRecipe(); VersatileFrameWork.add(recipe); + new RecipeBuilder().setName("Flexible Framework") + .setDuration(16) + .addInput(ModularFrame,1) + .addInput(SteelBeam, 6) + .addInput(Rubber,8) + .addOutput(VersatileFrameWork,2) + .createRecipe(); } { // Fuel @@ -773,6 +931,10 @@ public class Database { Fuel.setPreference(recipe); } + { + // Packaged Fuel + //TODO + } { // Polymer Resin Recipe polymerResin = new RecipeBuilder().setDuration(1).setBuilding(Buildings.REFINERY) @@ -865,9 +1027,15 @@ public class Database { Silica.add(recipe); } { - Recipe recipe = new RecipeBuilder().setDuration(4).addInput(AluminumScrap,6).addOutput(AluminumIngot,4).setBuilding(Buildings.FOUNDRY) + Recipe recipe = new RecipeBuilder().setDuration(4).addInput(AluminumScrap,6).setBuilding(Buildings.FOUNDRY) .addInput(Silica, 5) .addOutput(AluminumIngot, 4).createRecipe(); + new RecipeBuilder().setName("Pure Aluminum Ingot") + .setBuilding(Buildings.SMELTER) + .setDuration(2) + .addInput(AluminumScrap, 2) + .addOutput(AluminumIngot,1) + .createRecipe(); } { Recipe recipe = new RecipeBuilder().setDuration(6).setBuilding(Buildings.REFINERY) @@ -903,6 +1071,15 @@ public class Database { .addInput(SulfuricAcid, 8) .addOutput(EncasedUraniumCell, 5) .addOutput(SulfuricAcid, 2, true).createRecipe(); + new RecipeBuilder().setName("Infused Uranium Cell") + .setDuration(12) + .setBuilding(Buildings.MANUFACTURER) + .addInput(Uranium, 5) + .addInput(Silica,3) + .addInput(Sulfur, 5) + .addInput(Quickwire, 15) + .addOutput(EncasedUraniumCell, 4) + .createRecipe(); } { Recipe recipe = new RecipeBuilder().setDuration(120).setBuilding(Buildings.MANUFACTURER) @@ -918,6 +1095,15 @@ public class Database { .addInput(AluminumCasing, 1) .addOutput(Battery, 1) .addOutput(Water, 1.5, true).createRecipe(); + new RecipeBuilder().setName("Classic Battery") + .setBuilding(Buildings.MANUFACTURER) + .setDuration(8) + .addInput(Sulfur,6) + .addInput(AlcladAluminumSheet,7) + .addInput(Plastic, 8) + .addInput(Wire, 12) + .addOutput(Battery, 4) + .createRecipe(); } { Recipe recipe = new RecipeBuilder().setDuration(8).setBuilding(Buildings.ASSEMBLER) @@ -936,6 +1122,13 @@ public class Database { .addInput(Stator, 3) .addInput(AILimiter, 2) .addOutput(ElectromagneticControlRod, 2).createRecipe(); + new RecipeBuilder().setName("Electromagnetic Connection Rod") + .setBuilding(Buildings.ASSEMBLER) + .setDuration(15) + .addInput(Stator,2) + .addInput(HighSpeedConnector,1) + .addOutput(ElectromagneticControlRod,2) + .createRecipe(); } { Recipe recipe = new RecipeBuilder().setDuration(10).setBuilding(Buildings.BLENDER) @@ -977,6 +1170,13 @@ public class Database { .addOutput(EmptyCanister, 2, true) .createRecipe(); Turbofuel.add(packaged); + new RecipeBuilder().setName("Turbo Heavy Fuel") + .setDuration(8) + .addInput(HeavyOilResidue, 5) + .addInput(CompactedCoal, 4) + .addOutput(Turbofuel, 4) + .createRecipe(); + } { // Packaged Turbofuel @@ -1101,7 +1301,315 @@ public class Database { .addOutput(Coal, 10) .createRecipe(); } + { + // FICSMAS Gift + new RecipeBuilder().setName("gift_tree").setBuilding(Buildings.FICSMAS_GIFT_TREE) + .addOutput(FICSMASGift,15).setDuration(4).createRecipe(); + } + { + // FICSMAS Tree Branch + new RecipeBuilder().setName("FICSMAS Tree Branch").setBuilding(Buildings.CONSTRUCTOR) + .addInput(FICSMASGift, 1) + .addOutput(FICSMASTreeBranch, 1) + .setDuration(6) + .createRecipe(); + } + { + // Candy Cane + new RecipeBuilder().setName("Candy Cane").setBuilding(Buildings.CONSTRUCTOR) + .addInput(FICSMASGift, 3) + .addOutput(FICSMASCandyCane, 1) + .setDuration(12) + .createRecipe(); + } + { + // FICSMAS Bow + new RecipeBuilder().setName("FICSMAS Bow").setBuilding(Buildings.CONSTRUCTOR) + .addInput(FICSMASGift, 2) + .addOutput(FICSMASBow, 1) + .setDuration(12) + .createRecipe(); + } + { + // Red FICSMAS Oranment + new RecipeBuilder().setName("Red FICSMAS Oranment").setBuilding(Buildings.SMELTER) + .addInput(FICSMASGift, 1) + .addOutput(FICSMASRedOrnament, 1) + .setDuration(12) + .createRecipe(); + } + { + // Blue FICSMAS Oranment + new RecipeBuilder().setName("Blue FICSMAS Oranment").setBuilding(Buildings.SMELTER) + .addInput(FICSMASGift, 1) + .addOutput(FICSMASRedOrnament, 2) + .setDuration(6) + .createRecipe(); + } + { + // Candy Cane Basher + new RecipeBuilder().setName("Actual Snow").setBuilding(Buildings.EQUIPMENT_WORKSHOP) + .addInput(XenoZapper, 2) + .addInput(FICSMASCandyCane, 25) + .addInput(FICSMASGift, 15) + .addOutput(FICSMASCandyCaneBasher, 1) + .setDuration(80) + .createRecipe(); + } + { + // Actual Snow + new RecipeBuilder().setName("Actual Snow").setBuilding(Buildings.CONSTRUCTOR) + .addInput(FICSMASGift, 5) + .addOutput(FICSMASActualSnow, 2) + .setDuration(6) + .createRecipe(); + } + { + // Snowball + new RecipeBuilder().setBuilding(Buildings.CONSTRUCTOR) + .addInput(FICSMASActualSnow, 3) + .addOutput(FICSMASSnowBall,1) + .setDuration(12) + .createRecipe(); + } + { + // Copper FICSMAS Ornament + new RecipeBuilder().setName("Copper FICSMAS Ornament").setBuilding(Buildings.FOUNDRY) + .addInput(FICSMASRedOrnament, 2) + .addInput(CopperIngot, 2) + .addOutput(FICSMASCopperOrnament, 1) + .setDuration(12) + .createRecipe(); + } + { + // Iron FICSMAS Ornament + new RecipeBuilder().setName("Iron FICSMAS Ornament").setBuilding(Buildings.FOUNDRY) + .addInput(FICSMASBlueOrnament, 3) + .addInput(IronIngot, 3) + .addOutput(FICSMASIronOrnament, 1) + .setDuration(12) + .createRecipe(); + } + { + // FICSMAS Ornament Bundle + new RecipeBuilder().setName("FICSMAS Ornament Bundle").setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASCopperOrnament, 1) + .addInput(FICSMASIronOrnament, 1) + .addOutput(FICSMASOrnamentBundle, 1) + .setDuration(12) + .createRecipe(); + } + { + // FICSMAS Decoration + new RecipeBuilder().setName(FICSMASDecoration.getName()).setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASTreeBranch,15) + .addInput(FICSMASOrnamentBundle,6) + .addOutput(FICSMASDecoration,2) + .setDuration(60) + .createRecipe(); + } + { + // Sweet Fireworks + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASTreeBranch,6) + .addInput(FICSMASCandyCane,3) + .addOutput(FICSMASSweetFireworks,1) + .setDuration(24) + .createRecipe();//TODO , EQUIPMENT_WORKSHOP) + } + { + // Fancy Fireworks + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASTreeBranch,4) + .addInput(FICSMASBow,3) + .addOutput(FICSMASFancyFireworks,1) + .setDuration(24) + .createRecipe();//TODO , EQUIPMENT_WORKSHOP) + } + { + // Sparkly Fireworks + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASTreeBranch,3) + .addInput(FICSMASActualSnow,3) + .addOutput(FICSMASSparklyFireworks,2) + .setDuration(24) + .createRecipe();//TODO , EQUIPMENT_WORKSHOP) + } + { + // FICSMAS Wonder Star + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + .addInput(FICSMASDecoration,5) + .addInput(FICSMASCandyCane,20) + .addOutput(FICSMASWonderStar,1) + .setDuration(24) + .createRecipe(); + } + { + // Xeno-Zapper + new RecipeBuilder().setName("Xeno-Zapper").setBuilding(Buildings.EQUIPMENT_WORKSHOP) + .addInput(IronRod, 10) + .addInput(ReinforcedIronPlate, 2) + .addInput(Cable, 15) + .addInput(Wire, 50) + .addOutput(XenoZapper, 1) + .setDuration(40) + .createRecipe(); + } + { + // Thermal Propulsion Rocket + new RecipeBuilder().setBuilding(Buildings.MANUFACTURER) + .addInput(ModularEngine,5) + .addInput(TurboMotor, 2) + .addInput(CoolingSystem, 6) + .addInput(FusedModularFrame,2) + .addOutput(ThermalPropulsionRocket,2) + .setDuration(48) + .createRecipe(); + } + { + // Nuclear Pasta + new RecipeBuilder().setBuilding(Buildings.PARTICLE_ACCELERATOR) + .addInput(CopperPowder, 200) + .addInput(PressureConversionCube,1) + .addOutput(NuclearPasta,1) + .setDuration(120) + .createRecipe(); + } + { + // Turbo Motor + new RecipeBuilder().setBuilding(Buildings.MANUFACTURER) + // TODO: craft bench + .addInput(CoolingSystem, 4) + .addInput(RadioControlUnit, 2) + .addInput(Motor, 4) + .addInput(Rubber, 24) + .addOutput(TurboMotor, 1) + .setDuration(112) // TODO: 1.875/min + .createRecipe(); + } + { + // Copper Powder + new RecipeBuilder().setBuilding(Buildings.CONSTRUCTOR) + // TODO: craft bench + .addInput(CopperIngot, 30) + .addOutput(CopperPowder, 5) + .setDuration(6) + .createRecipe(); + } + { + // Pressure Conversion Cube + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + // TODO: craft bench + .addInput(FusedModularFrame, 1) + .addInput(RadioControlUnit, 2) + .addOutput(PressureConversionCube, 1) + .setDuration(60) + .createRecipe(); + } + + } + public static final Item NitricAcid = new ProcessedFluid("Nitric Acid"); + public static final Item PackagedNitricAcid = new ProcessedFluid("Packaged Nitric Acid"); + public static final Item EmptyFluidTank = new Part("Empty Fluid Tank", -1); + { + // Nitric Acid + new RecipeBuilder().setBuilding(Buildings.BLENDER) + .addInput(NitrogenGas, 12) + .addInput(Water, 3) + .addInput(IronPlate, 1) + .addOutput(NitricAcid, 3) + .setDuration(6) + .createRecipe(); + new RecipeBuilder().setBuilding(Buildings.PACKAGER) + .addInput(PackagedNitricAcid, 1) + .addOutput(NitricAcid, 1) + .addOutput(EmptyFluidTank, 1, true) + .setDuration(3) + .createRecipe(); + new RecipeBuilder().setBuilding(Buildings.PACKAGER) + .addInput(NitricAcid, 1) + .addInput(EmptyFluidTank, 1) + .addOutput(PackagedNitricAcid, 1) + .setDuration(2) + .createRecipe(); + } + { + //Empty Fluid Tank + new RecipeBuilder().setBuilding(Buildings.CONSTRUCTOR) + // TODO: craftbench + .addInput(AluminumIngot, 1) + .addOutput(EmptyFluidTank, 1) + .setDuration(1) + .createRecipe(); + } + { + // Packaged Nitrogen Gas + new RecipeBuilder().setBuilding(Buildings.PACKAGER) + .addInput(NitrogenGas, 4) + .addInput(EmptyFluidTank, 1) + .addOutput(PackagedNitrogenGas, 1) + .setDuration(1) + .createRecipe(); + new RecipeBuilder().setBuilding(Buildings.PACKAGER) + .addInput(PackagedNitrogenGas, 1) + .addOutput(NitrogenGas, 4) + .addOutput(EmptyFluidTank, 1, true) + .setDuration(1) // TODO 240/min + .createRecipe(); + } + public static final Item PlutoniumFuelRod = new Part("Plutonium Fuel Rod", -1); + public static final Item EncasedPlutoniumCell = new Part("Encased Plutonium Cell", -1); + public static final Item PlutoniumPellet = new Part("Plutonium Pellet", -1); + public static final Item NonfissileUranium = new Part("Non-fissile Uranium", -1); + public static final Item UraniumWaste = new Part("Uranium Waste", -1); + { + // Plutonium Fuel Rod + new RecipeBuilder().setBuilding(Buildings.MANUFACTURER) + .addInput(EncasedPlutoniumCell, 30) + .addInput(SteelBeam, 18) + .addInput(ElectromagneticControlRod, 6) + .addInput(HeatSink, 10) + .addOutput(PlutoniumFuelRod, 1) + .setDuration(240) + .createRecipe(); + } + { + // Encased Plutonium Cell + new RecipeBuilder().setBuilding(Buildings.ASSEMBLER) + // TODO: craft bench + .addInput(PlutoniumPellet, 2) + .addInput(Concrete, 4) + .addOutput(EncasedPlutoniumCell, 1) + .setDuration(12) + .createRecipe(); + } + { + // Plutonium Pellet + new RecipeBuilder().setBuilding(Buildings.PARTICLE_ACCELERATOR) + .addInput(NonfissileUranium, 100) + .addInput(UraniumWaste, 25) + .addOutput(PlutoniumPellet, 30) + .setDuration(12) + .createRecipe(); + } + { + // Uranium Waste + new RecipeBuilder().setBuilding(Buildings.NUCLEAR_POWER_PLANT) + .addOutput(UraniumWaste, 1) + .setDuration(60) + .createRecipe(); + } + { + // Non-fissile Uranium + new RecipeBuilder().setBuilding(Buildings.BLENDER) + .addInput(UraniumWaste, 15) + .addInput(Silica, 10) + .addInput(NitricAcid, 6) + .addInput(SulfuricAcid, 6) + .addOutput(NonfissileUranium, 20) + .addOutput(Water, 6, true) + .setDuration(12) //TODO: 50/min + .createRecipe(); } - } diff --git a/src/main/java/satisfactory/Test.java b/src/main/java/satisfactory/Test.java index ddd3856..9e3a1c3 100644 --- a/src/main/java/satisfactory/Test.java +++ b/src/main/java/satisfactory/Test.java @@ -136,7 +136,8 @@ public class Test { planFor("mf", new Production(Database.ModularFrame, 10)); */ //planFor("aluminumIngot", new Production(Database.AluminumIngot, 240)); - planFor("fusedFrame", new Production(Database.FusedModularFrame, 1.5)); + //planFor("fusedFrame", new Production(Database.FusedModularFrame, 1.5)); + planFor("p4", new Production(Database.AssemblyDirectorSystem,4), new Production(Database.MagneticFieldGenerator, 4), new Production(Database.ThermalPropulsionRocket, 1), new Production(Database.NuclearPasta, 1)); } private static void planFor(Item item, int amount, String name) { diff --git a/src/main/java/satisfactory/buildings/Building.java b/src/main/java/satisfactory/buildings/Building.java index 9f067c6..e0395ac 100644 --- a/src/main/java/satisfactory/buildings/Building.java +++ b/src/main/java/satisfactory/buildings/Building.java @@ -25,7 +25,7 @@ public abstract class Building { public Map getCost(int n) { Map instances = new HashMap<>(); - cost.forEach((item, integer) -> instances.put(item, n * integer)); + getCost().forEach((item, integer) -> instances.put(item, n * integer)); return instances; } diff --git a/src/main/java/satisfactory/buildings/DecorationBuilding.java b/src/main/java/satisfactory/buildings/DecorationBuilding.java new file mode 100644 index 0000000..e576993 --- /dev/null +++ b/src/main/java/satisfactory/buildings/DecorationBuilding.java @@ -0,0 +1,12 @@ +package satisfactory.buildings; + +import satisfactory.items.Item; + +import java.util.Map; + +public class DecorationBuilding extends Building { + public DecorationBuilding(String name, Map cost){ + super(name); + this.cost = cost; + } +} diff --git a/src/main/java/satisfactory/buildings/ParticleAccelerator.java b/src/main/java/satisfactory/buildings/ParticleAccelerator.java new file mode 100644 index 0000000..35852d9 --- /dev/null +++ b/src/main/java/satisfactory/buildings/ParticleAccelerator.java @@ -0,0 +1,16 @@ +package satisfactory.buildings; + +import satisfactory.items.Item; + +import java.util.Map; + +public class ParticleAccelerator extends ProductionBuilding{ + public ParticleAccelerator(String name, int power, Map cost) { + super(name, power, cost); + } + + @Override + public Integer getPower() { + return 1000; // TODO calculate + } +} diff --git a/src/main/java/satisfactory/buildings/ResourceWellExtractor.java b/src/main/java/satisfactory/buildings/ResourceWellExtractor.java new file mode 100644 index 0000000..42231c8 --- /dev/null +++ b/src/main/java/satisfactory/buildings/ResourceWellExtractor.java @@ -0,0 +1,22 @@ +package satisfactory.buildings; + +import satisfactory.Database; +import satisfactory.items.Item; + +import java.util.HashMap; +import java.util.Map; + +public class ResourceWellExtractor extends ProductionBuilding{ + private final Building dependendBuilding; + public ResourceWellExtractor(String name, Map cost,Building pressurizer) { + super(name, 0, cost); + dependendBuilding = pressurizer; + } + + @Override + public Map getCost() { + Map totalCost = new HashMap<>(super.getCost()); + dependendBuilding.getCost().forEach((item, integer) -> totalCost.merge(item, integer, Integer::sum)); + return totalCost; + } +} diff --git a/src/main/java/satisfactory/items/Item.java b/src/main/java/satisfactory/items/Item.java index 1bc8db9..2ea8994 100644 --- a/src/main/java/satisfactory/items/Item.java +++ b/src/main/java/satisfactory/items/Item.java @@ -13,20 +13,22 @@ import java.util.Set; public abstract class Item { private final String name; private final Set recipes; + public final int stackSize; public int sum = 0; protected boolean isRaw = false; private Recipe preference = null; - protected Item(String name, Set recipes) { + protected Item(String name, int stackSize, Set recipes) { this.name = name; + this.stackSize = stackSize; this.recipes = recipes; for (Recipe recipe : recipes) { add(recipe); } } - public Item(String name) { - this(name, new HashSet<>()); + public Item(String name, int stackSize) { + this(name, stackSize, new HashSet<>()); } public static Map production(Graph graph) { @@ -94,7 +96,11 @@ public abstract class Item { } public String ID() { - return getName().replace(" ", "").replace(".", "_"); + return getName() + .replace(" ", "") + .replace(".", "_") + .replace("-", "") + ; } public Recipe getPreference() { diff --git a/src/main/java/satisfactory/items/RecipeBuilder.java b/src/main/java/satisfactory/items/RecipeBuilder.java index 65bc394..23b399b 100644 --- a/src/main/java/satisfactory/items/RecipeBuilder.java +++ b/src/main/java/satisfactory/items/RecipeBuilder.java @@ -62,8 +62,8 @@ public class RecipeBuilder { this.byProducts.add(byProduct); return this; } - public RecipeBuilder setByProducts(Set byProduct) { - this.byProducts =byProducts;// TODO: merge? + public RecipeBuilder setByProducts(Set byProducts) { + this.byProducts = byProducts;// TODO: merge? return this; } diff --git a/src/main/java/satisfactory/items/type/Fluid.java b/src/main/java/satisfactory/items/type/Fluid.java index 9d9bc21..cac7599 100644 --- a/src/main/java/satisfactory/items/type/Fluid.java +++ b/src/main/java/satisfactory/items/type/Fluid.java @@ -5,6 +5,6 @@ import satisfactory.items.Item; public abstract class Fluid extends Item { public Fluid(String name) { - super(name); + super(name, 0); } } diff --git a/src/main/java/satisfactory/items/type/Gas.java b/src/main/java/satisfactory/items/type/Gas.java index 34cea0c..b492daa 100644 --- a/src/main/java/satisfactory/items/type/Gas.java +++ b/src/main/java/satisfactory/items/type/Gas.java @@ -2,7 +2,7 @@ package satisfactory.items.type; import satisfactory.items.Item; -public class Gas extends Item { +public class Gas extends Fluid { public Gas(String name) { super(name); diff --git a/src/main/java/satisfactory/items/type/Ingot.java b/src/main/java/satisfactory/items/type/Ingot.java index 2091511..a925c9e 100644 --- a/src/main/java/satisfactory/items/type/Ingot.java +++ b/src/main/java/satisfactory/items/type/Ingot.java @@ -4,7 +4,7 @@ import satisfactory.items.Item; public class Ingot extends Item { - public Ingot(String name) { - super(name); + public Ingot(String name, int stackSize) { + super(name, stackSize); } } diff --git a/src/main/java/satisfactory/items/type/Ore.java b/src/main/java/satisfactory/items/type/Ore.java index 3e83fda..04b5221 100644 --- a/src/main/java/satisfactory/items/type/Ore.java +++ b/src/main/java/satisfactory/items/type/Ore.java @@ -4,8 +4,8 @@ import satisfactory.items.Item; public class Ore extends Item { - public Ore(String name) { - super(name); + public Ore(String name, int stackSize) { + super(name, stackSize); setIsRaw(); } diff --git a/src/main/java/satisfactory/items/type/Part.java b/src/main/java/satisfactory/items/type/Part.java index 825720b..d1ff1d6 100644 --- a/src/main/java/satisfactory/items/type/Part.java +++ b/src/main/java/satisfactory/items/type/Part.java @@ -4,7 +4,7 @@ import satisfactory.items.Item; public class Part extends Item { - public Part(String name) { - super(name); + public Part(String name, int stackSize) { + super(name, stackSize); } } diff --git a/src/main/java/satisfactory/items/type/Pickup.java b/src/main/java/satisfactory/items/type/Pickup.java index 329ce10..b5ceb79 100644 --- a/src/main/java/satisfactory/items/type/Pickup.java +++ b/src/main/java/satisfactory/items/type/Pickup.java @@ -4,8 +4,8 @@ import satisfactory.items.Item; public class Pickup extends Item { - public Pickup(String name) { - super(name); + public Pickup(String name, int stackSize) { + super(name, stackSize); setIsRaw(); } } diff --git a/src/main/java/satisfactory/items/type/Tool.java b/src/main/java/satisfactory/items/type/Tool.java index 9f91f52..3891715 100644 --- a/src/main/java/satisfactory/items/type/Tool.java +++ b/src/main/java/satisfactory/items/type/Tool.java @@ -4,7 +4,7 @@ import satisfactory.items.Item; public class Tool extends Item { - public Tool(String name) { - super(name); + public Tool(String name, int stackSize) { + super(name, stackSize); } }