master
agp8x 2023-12-09 18:41:59 +01:00
parent 4a28775e9c
commit 33959e80d0
6 changed files with 155 additions and 38 deletions

View File

@ -16,7 +16,7 @@ public class Database {
// BUILDINGS // BUILDINGS
public static final class Buildings { public static final class Buildings {
public static final Building ASSEMBLER = new ProductionBuilding("Assembler", 15, assembler()); public static final Building ASSEMBLER = new ProductionBuilding("Assembler", 15, assembler());
public static final Building BLENDER = new ProductionBuilding("Blender", -9999, blender()); // FIXME values public static final Building BLENDER = new ProductionBuilding("Blender", 75, blender());
public static final Building CONSTRUCTOR = new ProductionBuilding("Constructor", 4, constructor()); public static final Building CONSTRUCTOR = new ProductionBuilding("Constructor", 4, constructor());
public static final Building CRAFT_BENCH = new ProductionBuilding("Craft Bench", 0, craftBench()); public static final Building CRAFT_BENCH = new ProductionBuilding("Craft Bench", 0, craftBench());
public static final Building EQUIPMENT_WORKSHOP = new ProductionBuilding("Equipment Workshop", 0, equipmentWorkshop()); public static final Building EQUIPMENT_WORKSHOP = new ProductionBuilding("Equipment Workshop", 0, equipmentWorkshop());
@ -43,7 +43,10 @@ public class Database {
private static Map<Item, Integer> blender() { private static Map<Item, Integer> blender() {
Map<Item, Integer> cost = new HashMap<>(); Map<Item, Integer> cost = new HashMap<>();
cost.put(TODO_ITEM, 1); //FIXME values cost.put(Motor, 20);
cost.put(HeavyModularFrame, 10);
cost.put(AluminumCasing, 50);
cost.put(RadioControlUnit, 5);
return cost; return cost;
} }
@ -343,7 +346,6 @@ public class Database {
public static final Item ClusterNobelisk = new Part("Cluster Nobelisk"); public static final Item ClusterNobelisk = new Part("Cluster Nobelisk");
public static final Item ObjectScanner = new Tool("Object Scanner"); public static final Item ObjectScanner = new Tool("Object Scanner");
public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator"); public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator");
private static final Collection<Item> items = new HashSet<>();
static { static {
{ {
@ -376,6 +378,7 @@ public class Database {
// Iron Ingot // Iron Ingot
IronIngot.add(new RecipeBuilder().setDuration(2).addInput(IronOre, 1).addOutput(IronIngot, 1).setBuilding(Buildings.SMELTER).createRecipe()); IronIngot.add(new RecipeBuilder().setDuration(2).addInput(IronOre, 1).addOutput(IronIngot, 1).setBuilding(Buildings.SMELTER).createRecipe());
Recipe alt = new RecipeBuilder().setDuration(12).setBuilding(Buildings.REFINERY) Recipe alt = new RecipeBuilder().setDuration(12).setBuilding(Buildings.REFINERY)
.setName("Pure Iron Ingot")
.addInput(IronOre, 7) .addInput(IronOre, 7)
.addInput(Water, 4) .addInput(Water, 4)
.addOutput(IronIngot, 13).createRecipe(); .addOutput(IronIngot, 13).createRecipe();
@ -384,6 +387,11 @@ public class Database {
{ {
// Copper Ingot // Copper Ingot
CopperIngot.add(new RecipeBuilder().setDuration(2).addInput(CopperOre, 1).addOutput(CopperIngot, 1).setBuilding(Buildings.SMELTER).createRecipe()); CopperIngot.add(new RecipeBuilder().setDuration(2).addInput(CopperOre, 1).addOutput(CopperIngot, 1).setBuilding(Buildings.SMELTER).createRecipe());
Recipe alloyIngot = new RecipeBuilder().setName("Coper Alloy Ingot").setDuration(12).setBuilding(Buildings.FOUNDRY)
.addInput(CopperOre,10)
.addInput(IronOre,5)
.addOutput(CopperIngot,20)
.createRecipe();
} }
{ {
// Caterium Ingot // Caterium Ingot
@ -437,6 +445,12 @@ public class Database {
.addInput(IronPlate, 18) .addInput(IronPlate, 18)
.addInput(Screw, 50).createRecipe(); .addInput(Screw, 50).createRecipe();
ReinforcedIronPlate.add(bolted); ReinforcedIronPlate.add(bolted);
Recipe stiched = new RecipeBuilder().setDuration(32).setBuilding(Buildings.ASSEMBLER)
.setName("Stitched Iron Plate")
.addInput(IronPlate,10)
.addInput(Wire,20)
.addOutput(ReinforcedIronPlate,3)
.createRecipe();
ReinforcedIronPlate.setPreference(recipe); ReinforcedIronPlate.setPreference(recipe);
} }
@ -561,6 +575,7 @@ public class Database {
.addInput(Biomass, 5).addOutput(Fabric,1).createRecipe(); .addInput(Biomass, 5).addOutput(Fabric,1).createRecipe();
Fabric.add(recipe); Fabric.add(recipe);
Recipe alt = new RecipeBuilder().setDuration(2).setBuilding(Buildings.REFINERY) Recipe alt = new RecipeBuilder().setDuration(2).setBuilding(Buildings.REFINERY)
.setName("Polyester Fabric")
.addInput(PolymerResin, 1) .addInput(PolymerResin, 1)
.addInput(Water, 1) .addInput(Water, 1)
.addOutput(Fabric, 1).createRecipe(); .addOutput(Fabric, 1).createRecipe();
@ -609,6 +624,11 @@ public class Database {
.addInput(Coal,1) .addInput(Coal,1)
.addInput(Sulfur, 2).addOutput(BlackPowder,1).createRecipe(); .addInput(Sulfur, 2).addOutput(BlackPowder,1).createRecipe();
BlackPowder.add(recipe); BlackPowder.add(recipe);
Recipe alt = new RecipeBuilder().setName("Fine Black Powder").setDuration(16).setBuilding(Buildings.ASSEMBLER)
.addInput(Sulfur,2)
.addInput(CompactedCoal,1)
.addOutput(BlackPowder,4)
.createRecipe();
} }
{ {
// Color Catridge // Color Catridge
@ -635,6 +655,11 @@ public class Database {
.addInput(Quickwire, 28) .addInput(Quickwire, 28)
.addInput(Rubber, 12).addOutput(Computer,1).createRecipe(); .addInput(Rubber, 12).addOutput(Computer,1).createRecipe();
Computer.add(alternative); Computer.add(alternative);
Recipe crystal = new RecipeBuilder().setName("Crystal Computer").setDuration(64).setBuilding(Buildings.ASSEMBLER)
.addInput(CircuitBoard,8)
.addInput(CrystalOscillator, 3)
.addOutput(Computer,3)
.createRecipe();
Computer.setPreference(recipe); Computer.setPreference(recipe);
} }
@ -740,6 +765,11 @@ public class Database {
.addInput(CrudeOil, 6) .addInput(CrudeOil, 6)
.addOutput(PolymerResin, 3, true).createRecipe(); .addOutput(PolymerResin, 3, true).createRecipe();
Fuel.add(recipe); Fuel.add(recipe);
Recipe diluted = new RecipeBuilder().setName("Diluted Fuel").setDuration(6).setBuilding(Buildings.BLENDER)
.addInput(HeavyOilResidue,5)
.addInput(Water,10)
.addOutput(Fuel,10)
.createRecipe();
Fuel.setPreference(recipe); Fuel.setPreference(recipe);
} }
@ -787,6 +817,15 @@ public class Database {
.addInput(Water, 4).createRecipe(); .addInput(Water, 4).createRecipe();
Rubber.add(residualRubber); Rubber.add(residualRubber);
} }
{
// Heavy Oil Residue
Recipe recipe = new RecipeBuilder().setDuration(6).setBuilding(Buildings.REFINERY)
.addInput(CrudeOil, 3)
.addOutput(HeavyOilResidue,4)
.addOutput(PolymerResin,2,true)
.createRecipe();
HeavyOilResidue.add(recipe);
}
{ {
// Petroleum Coke // Petroleum Coke
Recipe recipe = new RecipeBuilder().setDuration(6).setIsHandCraftable(false).setBuilding(Buildings.REFINERY).addOutput(PetroleumCoke,12) Recipe recipe = new RecipeBuilder().setDuration(6).setIsHandCraftable(false).setBuilding(Buildings.REFINERY).addOutput(PetroleumCoke,12)
@ -921,108 +960,147 @@ public class Database {
} }
{ {
//Turbofuel //Turbofuel
Recipe recipe = new RecipeBuilder().setDuration(3).setBuilding(Buildings.REFINERY) Recipe recipe = new RecipeBuilder()
.setDuration(16)
.setBuilding(Buildings.REFINERY)
.addInput(Fuel, 6) .addInput(Fuel, 6)
.addInput(CompactedCoal, 4) .addInput(CompactedCoal, 4)
.addOutput(Turbofuel, 5).createRecipe(); .addOutput(Turbofuel, 5)
.createRecipe();
//TODO: 60/18,75 //TODO: 60/18,75
Turbofuel.add(recipe); Turbofuel.add(recipe);
Recipe packaged = new RecipeBuilder().setDuration(3).setBuilding(Buildings.PACKAGER) Recipe packaged = new RecipeBuilder()
.setDuration(3)
.setBuilding(Buildings.PACKAGER)
.addInput(PackagedTurboFuel, 2) .addInput(PackagedTurboFuel, 2)
.addOutput(Turbofuel, 2) .addOutput(Turbofuel, 2)
.addOutput(EmptyCanister, 2, true).createRecipe(); .addOutput(EmptyCanister, 2, true)
.createRecipe();
Turbofuel.add(packaged); Turbofuel.add(packaged);
} }
{ {
// Packaged Turbofuel // Packaged Turbofuel
Recipe recipe = new RecipeBuilder().setDuration(3).setBuilding(Buildings.PACKAGER) Recipe recipe = new RecipeBuilder()
.setDuration(3)
.setBuilding(Buildings.PACKAGER)
.addInput(Turbofuel, 2) .addInput(Turbofuel, 2)
.addInput(EmptyCanister, 2) .addInput(EmptyCanister, 2)
.addOutput(PackagedTurboFuel, 2).createRecipe(); .addOutput(PackagedTurboFuel, 2)
.createRecipe();
PackagedTurboFuel.add(recipe); PackagedTurboFuel.add(recipe);
} }
{ {
// Compacted Coal // Compacted Coal
Recipe recipe = new RecipeBuilder().setDuration(12).setBuilding(Buildings.ASSEMBLER) Recipe recipe = new RecipeBuilder()
.setDuration(12)
.setBuilding(Buildings.ASSEMBLER)
.addInput(Coal, 5) .addInput(Coal, 5)
.addInput(Sulfur, 5) .addInput(Sulfur, 5)
.addOutput(CompactedCoal, 5).createRecipe(); .addOutput(CompactedCoal, 5)
//TODO: 60/25 .createRecipe();
CompactedCoal.add(recipe); CompactedCoal.add(recipe);
} }
{ {
// Iron Rebar // Iron Rebar
IronRebar.add(new RecipeBuilder().setDuration(4).addInput(IronRod,1).addOutput(IronRebar,1).setBuilding(Buildings.CONSTRUCTOR).createRecipe()); IronRebar.add(new RecipeBuilder()
.setDuration(4)
.addInput(IronRod,1)
.addOutput(IronRebar,1)
.setBuilding(Buildings.CONSTRUCTOR)
.createRecipe());
} }
{ {
// Stun Rebar // Stun Rebar
Recipe recipe = new RecipeBuilder().setDuration(6).setBuilding(Buildings.ASSEMBLER) Recipe recipe = new RecipeBuilder()
.setDuration(6)
.setBuilding(Buildings.ASSEMBLER)
.addInput(IronRebar, 1) .addInput(IronRebar, 1)
.addInput(Quickwire, 5) .addInput(Quickwire, 5)
.addOutput(StunRebar, 1).createRecipe();//TODO , EQUIPMENT_WORKSHOP) .addOutput(StunRebar, 1)
.createRecipe();//TODO , EQUIPMENT_WORKSHOP)
StunRebar.add(recipe); StunRebar.add(recipe);
} }
{ {
// Explosive Rebar // Explosive Rebar
Recipe recipe = new RecipeBuilder().setDuration(12).setBuilding(Buildings.MANUFACTURER) Recipe recipe = new RecipeBuilder()
.setDuration(12)
.setBuilding(Buildings.MANUFACTURER)
.addInput(IronRebar, 1) .addInput(IronRebar, 1)
.addInput(SmokelessPowder, 2) .addInput(SmokelessPowder, 2)
.addInput(SteelPipe, 2) .addInput(SteelPipe, 2)
.addOutput(ExplosiveRebar, 1).createRecipe();//TODO , EQUIPMENT_WORKSHOP) .addOutput(ExplosiveRebar, 1)
.createRecipe();//TODO , EQUIPMENT_WORKSHOP)
ExplosiveRebar.add(recipe); ExplosiveRebar.add(recipe);
} }
{ {
// Rebar Gun // Rebar Gun
Recipe recipe = new RecipeBuilder().setDuration(60).setBuilding(Buildings.EQUIPMENT_WORKSHOP) Recipe recipe = new RecipeBuilder()
.setDuration(60)
.setBuilding(Buildings.EQUIPMENT_WORKSHOP)
.addInput(ReinforcedIronPlate, 6) .addInput(ReinforcedIronPlate, 6)
.addInput(IronRod, 16) .addInput(IronRod, 16)
.addInput(Screw, 100) .addInput(Screw, 100)
.addOutput(RebarGun, 1).createRecipe(); .addOutput(RebarGun, 1)
.createRecipe();
RebarGun.add(recipe); RebarGun.add(recipe);
} }
{ {
// Rifle Ammo // Rifle Ammo
Recipe recipe = new RecipeBuilder().setDuration(12).setBuilding(Buildings.ASSEMBLER) Recipe recipe = new RecipeBuilder()
.setDuration(12)
.setBuilding(Buildings.ASSEMBLER)
.addInput(CopperSheet, 3) .addInput(CopperSheet, 3)
.addInput(SmokelessPowder, 2) .addInput(SmokelessPowder, 2)
.addOutput(RifleAmmo, 15).createRecipe();//TODO , EQUIPMENT_WORKSHOP) .addOutput(RifleAmmo, 15)
.createRecipe();//TODO , EQUIPMENT_WORKSHOP)
RifleAmmo.add(recipe); RifleAmmo.add(recipe);
} }
{ {
// Homing Rifle Ammo // Homing Rifle Ammo
Recipe recipe = new RecipeBuilder().setDuration(12).setBuilding(Buildings.ASSEMBLER) Recipe recipe = new RecipeBuilder()
.setDuration(12)
.setBuilding(Buildings.ASSEMBLER)
.addInput(RifleAmmo, 20) .addInput(RifleAmmo, 20)
.addInput(HighSpeedConnector, 1) .addInput(HighSpeedConnector, 1)
.addOutput(HomingRifleAmmo, 10).createRecipe();//TODO , EQUIPMENT_WORKSHOP) .addOutput(HomingRifleAmmo, 10)
.createRecipe();//TODO , EQUIPMENT_WORKSHOP)
HomingRifleAmmo.add(recipe); HomingRifleAmmo.add(recipe);
} }
{ {
// Rifle // Rifle
Recipe recipe = new RecipeBuilder().setDuration(120).setBuilding(Buildings.EQUIPMENT_WORKSHOP) Recipe recipe = new RecipeBuilder()
.setDuration(120)
.setBuilding(Buildings.EQUIPMENT_WORKSHOP)
.addInput(Motor, 2) .addInput(Motor, 2)
.addInput(Rubber, 10) .addInput(Rubber, 10)
.addInput(SteelPipe, 25) .addInput(SteelPipe, 25)
.addInput(Screw, 250) .addInput(Screw, 250)
.addOutput(Rifle, 1).createRecipe(); .addOutput(Rifle, 1)
.createRecipe();
Rifle.add(recipe); Rifle.add(recipe);
} }
{ {
// Smokeless Powder // Smokeless Powder
Recipe recipe = new RecipeBuilder().setDuration(6).setBuilding(Buildings.REFINERY) Recipe recipe = new RecipeBuilder()
.setDuration(6)
.setBuilding(Buildings.REFINERY)
.addInput(BlackPowder, 2) .addInput(BlackPowder, 2)
.addInput(HeavyOilResidue, 1) .addInput(HeavyOilResidue, 1)
.addOutput(SmokelessPowder, 2).createRecipe(); .addOutput(SmokelessPowder, 2)
.createRecipe();
SmokelessPowder.add(recipe); SmokelessPowder.add(recipe);
} }
{
// Coal
Recipe biocoal = new RecipeBuilder().setName("Biocoal").setBuilding(Buildings.CONSTRUCTOR).setDuration(8)
.addInput(Biomass, 5)
.addOutput(Coal,6)
.createRecipe();
Recipe charcoal = new RecipeBuilder().setName("Charcoal").setBuilding(Buildings.CONSTRUCTOR).setDuration(4)
.addInput(Wood,1)
.addOutput(Coal, 10)
.createRecipe();
} }
public static Item add(Item i) {
//items.add(i);
return i;
}
public static Collection<Item> getItems() {
return new HashSet<>(items);
} }

View File

@ -86,6 +86,7 @@ public class Test {
System.out.println("\ntest"); System.out.println("\ntest");
SumResult.sum(Database.Plastic, 4); SumResult.sum(Database.Plastic, 4);
*/ */
/*
Item a = Database.HeavyOilResidue; Item a = Database.HeavyOilResidue;
Item b = Database.Water; Item b = Database.Water;
Map<Item, Recipe> preferences = Database.preferences; Map<Item, Recipe> preferences = Database.preferences;
@ -133,6 +134,9 @@ public class Test {
planFor("screw", new Production(Database.ReinforcedIronPlate, 1)); planFor("screw", new Production(Database.ReinforcedIronPlate, 1));
planFor("rotor", new Production(Database.Rotor, 1)); planFor("rotor", new Production(Database.Rotor, 1));
planFor("mf", new Production(Database.ModularFrame, 10)); planFor("mf", new Production(Database.ModularFrame, 10));
*/
//planFor("aluminumIngot", new Production(Database.AluminumIngot, 240));
planFor("fusedFrame", new Production(Database.FusedModularFrame, 1.5));
} }
private static void planFor(Item item, int amount, String name) { private static void planFor(Item item, int amount, String name) {

View File

@ -20,7 +20,6 @@ public abstract class Item {
protected Item(String name, Set<Recipe> recipes) { protected Item(String name, Set<Recipe> recipes) {
this.name = name; this.name = name;
this.recipes = recipes; this.recipes = recipes;
Database.add(this);
for (Recipe recipe : recipes) { for (Recipe recipe : recipes) {
add(recipe); add(recipe);
} }

View File

@ -62,8 +62,14 @@ class ItemTest {
} }
@Test @Test
void productionRubberAndPlastic() { void productionRubberAndPlastic(
) {
test("rubberAndPlastic", Database.Rubber, Database.Plastic); test("rubberAndPlastic", Database.Rubber, Database.Plastic);
} }
@Test
void productionAluminumIngot() {
test("aluminumIngot", Database.AluminumIngot);
}
} }

View File

@ -0,0 +1,17 @@
package satisfactory.items;
import org.junit.jupiter.api.Test;
import satisfactory.Database;
import static org.junit.jupiter.api.Assertions.fail;
import static satisfactory.items.TestHelper.test;
class Phase4Test {
@Test
void testPhase4() {
test("phase4", Database.AssemblyDirectorSystem, Database.MagneticFieldGenerator);
fail("Missing items!");
//test("phase4", Database.AssemblyDirectorSystem, Database.MagneticFieldGenerator, Database.ThermalPropulsionRocket, Database.NuclearPasta);
}
}

View File

@ -94,6 +94,19 @@ public class ValidatedValues {
ref.put(item, 1.); ref.put(item, 1.);
values.put(item, ref); values.put(item, ref);
} }
{
Item item = Database.AluminumIngot;
Map<Item, Double> ref = new HashMap<>();
ref.put(Database.AluminumScrap, 1.5);
ref.put(Database.Water, 1.5);
ref.put(Database.RawQuartz, 0.5);
ref.put(Database.Silica, 1.25);
ref.put(Database.AluminaSolution, 1.0);
ref.put(Database.Bauxite, 0.5);
ref.put(Database.Coal, 0.5);
ref.put(item, 1.0);
values.put(item, ref);
}
} }
public static Map<Item, Double> get(Item item) { public static Map<Item, Double> get(Item item) {