diff --git a/.gitignore b/.gitignore index 8117b8f..1395c2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .idea/ out/ -*.iml diff --git a/satisfactory.iml b/satisfactory.iml new file mode 100644 index 0000000..fe704ad --- /dev/null +++ b/satisfactory.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Database.java b/src/Database.java index 7b8e72d..b1c92ba 100644 --- a/src/Database.java +++ b/src/Database.java @@ -64,7 +64,7 @@ public class Database { public static final Item VersatileFrameWork = new Part("Versatile Framework"); public static final Item Nobelisk = new Part("Nobelisk"); public static final Item Water = new RawFluid("Water"); - public static final Item CrudeOil = 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 LiquidBiofuel = new ProcessedFluid("Liquid Biofuel"); diff --git a/src/Test.java b/src/Test.java index e314dcc..c52fe2c 100644 --- a/src/Test.java +++ b/src/Test.java @@ -1,8 +1,28 @@ +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import items.Item; +import items.Recipe; + import java.util.Map; public class Test { - public static void main(String[] args) { + public static void main(String[] args) throws JsonProcessingException { //System.out.println(Database.AdaptiveControlUnit); - System.out.println(Database.HeavyModularFrame.getRecipes().stream().findFirst().get().getTotalRequirements()); + Map totalRequirements = Database.HeavyModularFrame.getRecipes().stream().findFirst().get().getTotalRequirements(); + System.out.println(totalRequirements); + + ObjectMapper om = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); + + String json = om.writeValueAsString(totalRequirements); + System.out.println(json); + + Map rawOnly = Database.HeavyModularFrame.getRecipes().iterator().next().getRawOnly(); + String json2 = om.writeValueAsString(rawOnly); + + String json3 = om.writeValueAsString(Recipe.getInputs(rawOnly)); + System.out.println(json2); + System.out.println(json3); + System.out.println(om.writeValueAsString(Database.AdaptiveControlUnit.getRecipes().iterator().next().getRawOnly())); } } diff --git a/src/items/Item.java b/src/items/Item.java index 2788510..517bd8a 100644 --- a/src/items/Item.java +++ b/src/items/Item.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; public class Item { + protected boolean isRaw = false; private String name; private Set recipes; @@ -24,9 +25,10 @@ public class Item { } public void add(Recipe recipe) { - add(recipe,1); + add(recipe, 1); } - public void add(Recipe recipe, int amount){ + + public void add(Recipe recipe, int amount) { recipes.add(recipe); recipe.checkOutput(this, amount); } @@ -35,10 +37,14 @@ public class Item { return name; } - public Set getRecipes(){ + public Set getRecipes() { return recipes; } + public boolean isRaw() { + return isRaw; + } + @Override public String toString() { return "Item{" + diff --git a/src/items/Recipe.java b/src/items/Recipe.java index ebbdf8b..6641478 100644 --- a/src/items/Recipe.java +++ b/src/items/Recipe.java @@ -2,6 +2,7 @@ package items; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; public class Recipe { private Map inputs; @@ -37,6 +38,14 @@ public class Recipe { this.isHandCraftable = isHandCraftable; } + public static Map getInputs(Map values) { + Map names = new HashMap<>(); + for (Item item : values.keySet()) { + names.put(item.getName(), values.get(item)); + } + return names; + } + public void addInput(Item item, int amount) { inputs.put(item, amount); } @@ -78,20 +87,29 @@ public class Recipe { for (Item i : inputs.keySet()) { queue.put(i, inputs.get(i)); } - while (!queue.isEmpty()){ + while (!queue.isEmpty()) { Item i = queue.keySet().iterator().next(); int amount = queue.remove(i); - total.put(i, total.getOrDefault(i,0)+ amount); - if (i.getRecipes().isEmpty()){ + total.put(i, total.getOrDefault(i, 0) + amount); + if (i.getRecipes().isEmpty()) { continue; } Recipe r = i.getRecipes().iterator().next(); Map subRequirements = r.getTotalRequirements(); for (Item subItem : subRequirements.keySet()) { int subAmount = subRequirements.get(subItem); - total.put(subItem, total.getOrDefault(subItem, 0) + subAmount*amount); + total.put(subItem, total.getOrDefault(subItem, 0) + subAmount * amount); } } return total; } + + public Map getRawOnly() { + Map totals = getTotalRequirements(); + Map raws = new HashMap<>(); + for (Item item : totals.keySet().stream().filter(Item::isRaw).collect(Collectors.toList())) { + raws.put(item, totals.get(item)); + } + return raws; + } } diff --git a/src/items/type/Ore.java b/src/items/type/Ore.java index 2cc22ff..af6e5c5 100644 --- a/src/items/type/Ore.java +++ b/src/items/type/Ore.java @@ -8,13 +8,20 @@ import java.util.Set; public class Ore extends Item { public Ore(String name, Set recipes) { super(name, recipes); + setIsRaw(); } public Ore(String name, Recipe... recipes) { super(name, recipes); + setIsRaw(); } public Ore(String name) { super(name); + setIsRaw(); + } + + private void setIsRaw() { + isRaw = true; } } diff --git a/src/items/type/ProcessedFluid.java b/src/items/type/ProcessedFluid.java index 0ae19d3..8cec3d8 100644 --- a/src/items/type/ProcessedFluid.java +++ b/src/items/type/ProcessedFluid.java @@ -4,7 +4,7 @@ import items.Recipe; import java.util.Set; -public class ProcessedFluid extends Fluid{ +public class ProcessedFluid extends Fluid { public ProcessedFluid(String name, Set recipes) { super(name, recipes); } diff --git a/src/items/type/RawFluid.java b/src/items/type/RawFluid.java index 8ed7460..25d2a39 100644 --- a/src/items/type/RawFluid.java +++ b/src/items/type/RawFluid.java @@ -4,16 +4,23 @@ import items.Recipe; import java.util.Set; -public class RawFluid extends Fluid{ +public class RawFluid extends Fluid { public RawFluid(String name, Set recipes) { super(name, recipes); + setIsRaw(); } public RawFluid(String name, Recipe... recipes) { super(name, recipes); + setIsRaw(); } public RawFluid(String name) { super(name); + setIsRaw(); + } + + private void setIsRaw() { + isRaw = true; } }