From 23537e09f398caf1e816454857d4e602a76318ec Mon Sep 17 00:00:00 2001 From: Uko Koknevics Date: Sun, 3 Nov 2024 19:29:57 +0200 Subject: Support Chipped fully. --- src/main/java/lv/enes/mc/eris_alchemy/Emc.java | 50 ++++++++++++++++++++-- .../mc/eris_alchemy/recipe/SimplifiedRecipe.java | 20 ++++++--- 2 files changed, 59 insertions(+), 11 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/Emc.java b/src/main/java/lv/enes/mc/eris_alchemy/Emc.java index d278bcc..cb782e5 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/Emc.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/Emc.java @@ -64,10 +64,9 @@ public final class Emc { return get(itemId) .stream() .map(value -> { - if (item instanceof BlockItem blockItem) { - if (blockItem.getBlock() instanceof EmcStorageBlock block) { - return value + block.getStoredEmc(stack); - } + if (item instanceof BlockItem blockItem + && blockItem.getBlock() instanceof EmcStorageBlock block) { + return value + block.getStoredEmc(stack); } return value; @@ -220,11 +219,54 @@ public final class Emc { sortedItems.stream() .filter(id -> !VALUES.containsKey(id)) .forEach(id -> calcEmc(id, recipes).ifPresent(v -> VALUES.put(id, OptionalDouble.of(v)))); + + if (ForeignUtils.isClassAvailable("earth.terrarium.chipped.common.recipes.ChippedRecipe")) { + reinitForChipped(sortedItems, recipes); + } + ErisAlchemy.LOGGER.info("Done calculating EMC values..."); sync(); } + private static void reinitForChipped( + Set items, + HashMap> recipes + ) { + items.stream() + .filter(id -> !VALUES.containsKey(id)) + .forEach(item -> { + var myRecipes = recipes.getOrDefault(item, List.of()) + .stream() + .filter(SimplifiedRecipe::fromChipped) + .toList(); + + if (myRecipes.size() != 1) { + if (!myRecipes.isEmpty()) { + ErisAlchemy.LOGGER.warn("Item {} has multiple chipped recipes, skipping...", item); + } + return; + } + + var recipe = myRecipes.get(0); + if (recipe.input().size() != 1) { + ErisAlchemy.LOGGER.warn("Chipped recipe for {} has multiple inputs, skipping...", item); + return; + } + + var stacks = recipe.input().get(0).get().getItems(); + if (stacks.length != 1) { + ErisAlchemy.LOGGER.warn("Chipped recipe for {} has multiple stack inputs, skipping...", item); + return; + } + + var inputId = ItemUtils.getId(stacks[0]); + if (VALUES.containsKey(inputId)) { + VALUES.put(item, VALUES.get(inputId)); + } + }); + } + private static void sortDps( Set permSorted, ConsList tmpSorted, diff --git a/src/main/java/lv/enes/mc/eris_alchemy/recipe/SimplifiedRecipe.java b/src/main/java/lv/enes/mc/eris_alchemy/recipe/SimplifiedRecipe.java index 518cf89..b63e4c5 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/recipe/SimplifiedRecipe.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/recipe/SimplifiedRecipe.java @@ -28,7 +28,12 @@ import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Stream; -public record SimplifiedRecipe(ItemStack output, List remainder, List> input) { +public record SimplifiedRecipe( + ItemStack output, + List remainder, + List> input, + boolean fromChipped +) { public static List of(Recipe recipe, RegistryAccess registryAccess) { if (ForeignUtils.isClassAvailable("earth.terrarium.chipped.common.recipes.ChippedRecipe") && recipe instanceof ChippedRecipe chippedRecipe) { @@ -46,10 +51,10 @@ public record SimplifiedRecipe(ItemStack output, List remainder, List .toList(); var outputs = items.stream().filter(isOutput).map(Item::getDefaultInstance).toList(); return outputs.stream() - .flatMap( - output -> - inputs.stream() - .map(input -> new SimplifiedRecipe(output, remainder, input)) + .flatMap(output -> + inputs.stream() + .map(input -> + new SimplifiedRecipe(output, remainder, input, true)) ); }) .toList(); @@ -62,7 +67,8 @@ public record SimplifiedRecipe(ItemStack output, List remainder, List .stream() .filter(ingredient -> !ingredient.isEmpty()) .map(x -> (Supplier)() -> x) - .toList() + .toList(), + false )); } @@ -110,7 +116,7 @@ public record SimplifiedRecipe(ItemStack output, List remainder, List var output = parseOutputOrRemainder(obj.get("output")); var remainder = parseRemainders(obj.get("remainder")); var input = parseInputs(obj.get("input")); - return new SimplifiedRecipe(output, remainder, input); + return new SimplifiedRecipe(output, remainder, input, false); } private List> parseInputs(JsonElement el) { -- cgit v1.2.3