From 48997066ad2a8e084fcf95c7096dc2ffd64883bd Mon Sep 17 00:00:00 2001 From: zenfyr Date: Mon, 6 Jul 2026 14:44:05 +0700 Subject: [PATCH] recipe_advancements_generation: skip if a recipe advancement already exists --- .../AdvancementGenerationMain.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/zenfyr/andromeda/modules/misc/recipe_advancements_generation/AdvancementGenerationMain.java b/src/main/java/dev/zenfyr/andromeda/modules/misc/recipe_advancements_generation/AdvancementGenerationMain.java index 75c68d4f..9a9f64d5 100644 --- a/src/main/java/dev/zenfyr/andromeda/modules/misc/recipe_advancements_generation/AdvancementGenerationMain.java +++ b/src/main/java/dev/zenfyr/andromeda/modules/misc/recipe_advancements_generation/AdvancementGenerationMain.java @@ -26,6 +26,7 @@ public final class AdvancementGenerationMain { new HashMap<>(); private static final List>> FILTERS = Collections.synchronizedList(new ArrayList<>()); + private static final Identifier ROOT = Identifier.withDefaultNamespace("recipes/root"); public static Function basicConsumer( String typeName, AdvancementGeneration.Config config) { @@ -60,6 +61,16 @@ public final class AdvancementGenerationMain { public static void generateRecipeAdvancements( MinecraftServer server, AdvancementGeneration module, AdvancementGeneration.Config config) { Map advancementBuilders = new ConcurrentHashMap<>(); + Set>> exists = new HashSet<>(); + + for (AdvancementHolder holder : server.getAdvancements().getAllAdvancements()) { + var parent = holder.value().parent(); + if (parent.isEmpty()) continue; + if (!ROOT.equals(parent.get())) continue; + + var rewards = holder.value().rewards(); + exists.addAll(rewards.recipes()); + } List> futures = server.getRecipeManager().getRecipes().stream() .filter(recipe -> { @@ -70,6 +81,8 @@ public final class AdvancementGenerationMain { }) .map(recipe -> CompletableFuture.runAsync( () -> { + if (exists.contains(recipe.id())) return; + var handler = RECIPE_TYPE_HANDLERS.get(recipe.value().getType()); if (handler != null) { var r = handler.apply(new Context(recipe.value(), recipe.id())); @@ -98,7 +111,7 @@ public final class AdvancementGenerationMain { AdvancementGeneration.Config config, ResourceKey> id, Ingredient... ingredients) { MakeSure.notEmpty(ingredients); // shouldn't really happen var builder = Advancement.Builder.recipeAdvancement(); - builder.parent(Identifier.tryBuild("minecraft", "recipes/root")); + builder.parent(ROOT); List names = new ArrayList<>(); Set elements = new HashSet<>(); -- 2.51.2