From e869f8709fdc31ae5031dd154fd106983c27dbcb Mon Sep 17 00:00:00 2001 From: sylvxa Date: Thu, 12 Jun 2025 18:21:57 -0500 Subject: [PATCH 1/3] add createSmithingTransformRecipe --- .../smithing/SmithingTransformParameters.java | 37 +++++++++++ .../SmithingTransformRecipeCreator.java | 43 +++++++++++++ .../smithing/RecipeGeneratorMixin.java | 55 ++++++++++++++++ ...ithingTransformRecipeJsonBuilderMixin.java | 62 +++++++++++++++++++ .../fabric-data-generation-api-v1.mixins.json | 4 +- .../src/main/resources/fabric.mod.json | 4 +- .../recipes/misc/stick_smithing.json | 32 ++++++++++ .../recipe/stick_smithing.json | 12 ++++ .../datagen/DataGeneratorTestEntrypoint.java | 3 + 9 files changed, 250 insertions(+), 2 deletions(-) create mode 100644 fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java create mode 100644 fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java create mode 100644 fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java create mode 100644 fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java create mode 100644 fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/advancement/recipes/misc/stick_smithing.json create mode 100644 fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/recipe/stick_smithing.json diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java new file mode 100644 index 0000000000..f2d780fa88 --- /dev/null +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.impl.datagen.smithing; + +import net.minecraft.component.ComponentChanges; + +public interface SmithingTransformParameters { + default ComponentChanges getComponentChanges() { + throw new UnsupportedOperationException("Implemented via mixin"); + } + + default int getCount() { + throw new UnsupportedOperationException("Implemented via mixin"); + } + + default void setComponentChanges(ComponentChanges componentChanges) { + throw new UnsupportedOperationException("Implemented via mixin"); + } + + default void setCount(int count) { + throw new UnsupportedOperationException("Implemented via mixin"); + } +} diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java new file mode 100644 index 0000000000..b3f3fa4e62 --- /dev/null +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.impl.datagen.smithing; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.component.ComponentChanges; +import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; +import net.minecraft.item.Item; +import net.minecraft.recipe.Ingredient; +import net.minecraft.recipe.book.RecipeCategory; + +public interface SmithingTransformRecipeCreator { + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { + throw new UnsupportedOperationException("Implemented via mixin"); + } + + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Item template, Item input, Item addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { + return createSmithingTransformRecipe(Ingredient.ofItem(template), Ingredient.ofItem(input), Ingredient.ofItem(addition), category, result, count, componentChanges); + } + + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count) { + return createSmithingTransformRecipe(template, input, addition, category, result, count, null); + } + + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, @Nullable ComponentChanges componentChanges) { + return createSmithingTransformRecipe(template, input, addition, category, result, 1, componentChanges); + } +} diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java new file mode 100644 index 0000000000..85a0ea586e --- /dev/null +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.datagen.smithing; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; + +import net.minecraft.component.ComponentChanges; +import net.minecraft.data.recipe.RecipeExporter; +import net.minecraft.data.recipe.RecipeGenerator; +import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; +import net.minecraft.item.Item; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Ingredient; +import net.minecraft.recipe.book.RecipeCategory; + +import net.fabricmc.fabric.impl.datagen.smithing.SmithingTransformRecipeCreator; + +@Mixin(RecipeGenerator.class) +public abstract class RecipeGeneratorMixin implements SmithingTransformRecipeCreator { + @Shadow + @Final + protected RecipeExporter exporter; + + @Shadow + public static String getItemPath(ItemConvertible item) { + return null; + } + + @Override + @Unique + public SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { + SmithingTransformRecipeJsonBuilder builder = SmithingTransformRecipeJsonBuilder.create(template, input, addition, category, result); + builder.setCount(count); + builder.setComponentChanges(componentChanges != null ? componentChanges : ComponentChanges.EMPTY); + return builder; + } +} diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java new file mode 100644 index 0000000000..4b3ac38d15 --- /dev/null +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.datagen.smithing; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import net.minecraft.component.ComponentChanges; +import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; +import net.minecraft.recipe.TransmuteRecipeResult; + +import net.fabricmc.fabric.impl.datagen.smithing.SmithingTransformParameters; + +@Mixin(SmithingTransformRecipeJsonBuilder.class) +public class SmithingTransformRecipeJsonBuilderMixin implements SmithingTransformParameters { + @Unique + private int count = 1; + + @Unique + private ComponentChanges componentChanges = ComponentChanges.EMPTY; + + @ModifyArg(method = "offerTo(Lnet/minecraft/data/recipe/RecipeExporter;Lnet/minecraft/registry/RegistryKey;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/SmithingTransformRecipe;(Ljava/util/Optional;Lnet/minecraft/recipe/Ingredient;Ljava/util/Optional;Lnet/minecraft/recipe/TransmuteRecipeResult;)V"), index = 3) + private TransmuteRecipeResult editResultParameters(TransmuteRecipeResult result) { + return new TransmuteRecipeResult(result.itemEntry(), getCount(), getComponentChanges()); + } + + @Override + public ComponentChanges getComponentChanges() { + return componentChanges; + } + + @Override + public int getCount() { + return count; + } + + @Override + public void setComponentChanges(ComponentChanges componentChanges) { + this.componentChanges = componentChanges; + } + + @Override + public void setCount(int count) { + this.count = count; + } +} diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json index 1007a40a43..694b9d883d 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json +++ b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json @@ -14,7 +14,9 @@ "loot.BlockLootTableGeneratorAccessor", "loot.BlockLootTableGeneratorMixin", "loot.EntityLootTableGeneratorAccessor", - "loot.EntityLootTableGeneratorMixin" + "loot.EntityLootTableGeneratorMixin", + "smithing.RecipeGeneratorMixin", + "smithing.SmithingTransformRecipeJsonBuilderMixin" ], "server": [ "server.MainMixin" diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json index 9142bf07fe..c5ec28a35f 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json @@ -33,7 +33,9 @@ "loom:injected_interfaces": { "net/minecraft/class_7788": ["net/fabricmc/fabric/api/datagen/v1/loot/FabricBlockLootTableGenerator"], "net/minecraft/class_7789": ["net/fabricmc/fabric/api/datagen/v1/loot/FabricEntityLootTableGenerator"], - "net/minecraft/class_11389": ["net/fabricmc/fabric/api/datagen/v1/provider/FabricProvidedTagBuilder"] + "net/minecraft/class_11389": ["net/fabricmc/fabric/api/datagen/v1/provider/FabricProvidedTagBuilder"], + "net/minecraft/class_8074": ["net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters"], + "net/minecraft/class_2446": ["net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator"] } } } diff --git a/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/advancement/recipes/misc/stick_smithing.json b/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/advancement/recipes/misc/stick_smithing.json new file mode 100644 index 0000000000..bef0415776 --- /dev/null +++ b/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/advancement/recipes/misc/stick_smithing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:book" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "minecraft:stick_smithing" + } + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_book" + ] + ], + "rewards": { + "recipes": [ + "minecraft:stick_smithing" + ] + } +} \ No newline at end of file diff --git a/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/recipe/stick_smithing.json b/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/recipe/stick_smithing.json new file mode 100644 index 0000000000..40d1d12f3f --- /dev/null +++ b/fabric-data-generation-api-v1/src/testmod/generated/data/fabric-data-gen-api-v1-testmod/recipe/stick_smithing.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "minecraft:experience_bottle", + "base": "minecraft:stick", + "result": { + "components": { + "minecraft:enchantment_glint_override": true + }, + "id": "minecraft:stick" + }, + "template": "minecraft:book" +} \ No newline at end of file diff --git a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java index a4d0124bf0..4ff3b1bd5b 100644 --- a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java +++ b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java @@ -174,6 +174,9 @@ protected RecipeGenerator getRecipeGenerator(RegistryWrapper.WrapperLookup regis @Override public void generate() { offerPlanksRecipe2(SIMPLE_BLOCK, ItemTags.ACACIA_LOGS, 1); + createSmithingTransformRecipe(Items.BOOK, Items.STICK, Items.EXPERIENCE_BOTTLE, RecipeCategory.MISC, Items.STICK, 1, ComponentChanges.builder().add(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true).build()) + .criterion("has_book", conditionsFromItem(Items.BOOK)) + .offerTo(this.exporter, getItemPath(Items.STICK) + "_smithing"); createShapeless(RecipeCategory.MISC, Items.DIAMOND_ORE, 4).input(Items.ITEM_FRAME) .criterion("has_frame", conditionsFromItem(Items.ITEM_FRAME)) From 72d78d5204ddee5ab07489adf1220c07b6fb67a2 Mon Sep 17 00:00:00 2001 From: sylvxa Date: Thu, 12 Jun 2025 18:50:59 -0500 Subject: [PATCH 2/3] rename interfaces and move them to api package --- .../v1/smithing/FabricRecipeGenerator.java} | 4 ++-- ...bricSmithingTransformRecipeJsonBuilder.java} | 4 ++-- .../datagen/smithing/RecipeGeneratorMixin.java | 17 ++--------------- ...SmithingTransformRecipeJsonBuilderMixin.java | 4 ++-- .../src/main/resources/fabric.mod.json | 4 ++-- 5 files changed, 10 insertions(+), 23 deletions(-) rename fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/{impl/datagen/smithing/SmithingTransformRecipeCreator.java => api/datagen/v1/smithing/FabricRecipeGenerator.java} (95%) rename fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/{impl/datagen/smithing/SmithingTransformParameters.java => api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java} (90%) diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java similarity index 95% rename from fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java rename to fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java index b3f3fa4e62..b0b94921a3 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.fabricmc.fabric.impl.datagen.smithing; +package net.fabricmc.fabric.api.datagen.v1.smithing; import org.jetbrains.annotations.Nullable; @@ -24,7 +24,7 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.book.RecipeCategory; -public interface SmithingTransformRecipeCreator { +public interface FabricRecipeGenerator { default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { throw new UnsupportedOperationException("Implemented via mixin"); } diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java similarity index 90% rename from fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java rename to fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java index f2d780fa88..932db5cafb 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package net.fabricmc.fabric.impl.datagen.smithing; +package net.fabricmc.fabric.api.datagen.v1.smithing; import net.minecraft.component.ComponentChanges; -public interface SmithingTransformParameters { +public interface FabricSmithingTransformRecipeJsonBuilder { default ComponentChanges getComponentChanges() { throw new UnsupportedOperationException("Implemented via mixin"); } diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java index 85a0ea586e..3f7c7fdf44 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java @@ -17,33 +17,20 @@ package net.fabricmc.fabric.mixin.datagen.smithing; import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import net.minecraft.component.ComponentChanges; -import net.minecraft.data.recipe.RecipeExporter; import net.minecraft.data.recipe.RecipeGenerator; import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.book.RecipeCategory; -import net.fabricmc.fabric.impl.datagen.smithing.SmithingTransformRecipeCreator; +import net.fabricmc.fabric.api.datagen.v1.smithing.FabricRecipeGenerator; @Mixin(RecipeGenerator.class) -public abstract class RecipeGeneratorMixin implements SmithingTransformRecipeCreator { - @Shadow - @Final - protected RecipeExporter exporter; - - @Shadow - public static String getItemPath(ItemConvertible item) { - return null; - } - +public abstract class RecipeGeneratorMixin implements FabricRecipeGenerator { @Override @Unique public SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java index 4b3ac38d15..5faf8b3781 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java @@ -25,10 +25,10 @@ import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; import net.minecraft.recipe.TransmuteRecipeResult; -import net.fabricmc.fabric.impl.datagen.smithing.SmithingTransformParameters; +import net.fabricmc.fabric.api.datagen.v1.smithing.FabricSmithingTransformRecipeJsonBuilder; @Mixin(SmithingTransformRecipeJsonBuilder.class) -public class SmithingTransformRecipeJsonBuilderMixin implements SmithingTransformParameters { +public class SmithingTransformRecipeJsonBuilderMixin implements FabricSmithingTransformRecipeJsonBuilder { @Unique private int count = 1; diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json index c5ec28a35f..9e968da546 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json @@ -34,8 +34,8 @@ "net/minecraft/class_7788": ["net/fabricmc/fabric/api/datagen/v1/loot/FabricBlockLootTableGenerator"], "net/minecraft/class_7789": ["net/fabricmc/fabric/api/datagen/v1/loot/FabricEntityLootTableGenerator"], "net/minecraft/class_11389": ["net/fabricmc/fabric/api/datagen/v1/provider/FabricProvidedTagBuilder"], - "net/minecraft/class_8074": ["net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformParameters"], - "net/minecraft/class_2446": ["net/fabricmc/fabric/impl/datagen/smithing/SmithingTransformRecipeCreator"] + "net/minecraft/class_8074": ["net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder"], + "net/minecraft/class_2446": ["net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator"] } } } From c417d9ac0a9df08dd9607f4e6c22198935b3380a Mon Sep 17 00:00:00 2001 From: sylvxa Date: Fri, 13 Jun 2025 08:35:01 -0500 Subject: [PATCH 3/3] switch to itemstack for overloads & add basic docstrings --- .../v1/smithing/FabricRecipeGenerator.java | 18 ++++++++++-------- ...bricSmithingTransformRecipeJsonBuilder.java | 5 +++++ .../datagen/smithing/RecipeGeneratorMixin.java | 2 +- ...mithingTransformRecipeJsonBuilderMixin.java | 2 +- .../datagen/DataGeneratorTestEntrypoint.java | 3 ++- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java index b0b94921a3..4374b91de6 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricRecipeGenerator.java @@ -21,23 +21,25 @@ import net.minecraft.component.ComponentChanges; import net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.book.RecipeCategory; +/** + * Fabric-provided extensions for {@link net.minecraft.data.recipe.RecipeGenerator}. + * + *

Adds recipe types that the vanilla class does not implement. + */ public interface FabricRecipeGenerator { default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { throw new UnsupportedOperationException("Implemented via mixin"); } - default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Item template, Item input, Item addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { - return createSmithingTransformRecipe(Ingredient.ofItem(template), Ingredient.ofItem(input), Ingredient.ofItem(addition), category, result, count, componentChanges); - } - - default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count) { - return createSmithingTransformRecipe(template, input, addition, category, result, count, null); + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, ItemStack result) { + return createSmithingTransformRecipe(template, input, addition, category, result.getItem(), result.getCount(), result.getComponentChanges()); } - default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, @Nullable ComponentChanges componentChanges) { - return createSmithingTransformRecipe(template, input, addition, category, result, 1, componentChanges); + default SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Item template, Item input, Item addition, RecipeCategory category, ItemStack result) { + return createSmithingTransformRecipe(Ingredient.ofItem(template), Ingredient.ofItem(input), Ingredient.ofItem(addition), category, result); } } diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java index 932db5cafb..4a045463b3 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/smithing/FabricSmithingTransformRecipeJsonBuilder.java @@ -18,6 +18,11 @@ import net.minecraft.component.ComponentChanges; +/** + * Fabric-provided extensions for {@link net.minecraft.data.recipe.SmithingTransformRecipeJsonBuilder}. + * + *

Allows specification of the transform recipe result item count and component changes. + */ public interface FabricSmithingTransformRecipeJsonBuilder { default ComponentChanges getComponentChanges() { throw new UnsupportedOperationException("Implemented via mixin"); diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java index 3f7c7fdf44..2c9c8434e7 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/RecipeGeneratorMixin.java @@ -30,7 +30,7 @@ import net.fabricmc.fabric.api.datagen.v1.smithing.FabricRecipeGenerator; @Mixin(RecipeGenerator.class) -public abstract class RecipeGeneratorMixin implements FabricRecipeGenerator { +abstract class RecipeGeneratorMixin implements FabricRecipeGenerator { @Override @Unique public SmithingTransformRecipeJsonBuilder createSmithingTransformRecipe(Ingredient template, Ingredient input, Ingredient addition, RecipeCategory category, Item result, int count, @Nullable ComponentChanges componentChanges) { diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java index 5faf8b3781..fdb258303a 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/smithing/SmithingTransformRecipeJsonBuilderMixin.java @@ -28,7 +28,7 @@ import net.fabricmc.fabric.api.datagen.v1.smithing.FabricSmithingTransformRecipeJsonBuilder; @Mixin(SmithingTransformRecipeJsonBuilder.class) -public class SmithingTransformRecipeJsonBuilderMixin implements FabricSmithingTransformRecipeJsonBuilder { +class SmithingTransformRecipeJsonBuilderMixin implements FabricSmithingTransformRecipeJsonBuilder { @Unique private int count = 1; diff --git a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java index 4ff3b1bd5b..dab5d368ad 100644 --- a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java +++ b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestEntrypoint.java @@ -52,6 +52,7 @@ import net.minecraft.data.recipe.RecipeGenerator; import net.minecraft.entity.EntityType; import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.loot.LootPool; import net.minecraft.loot.LootTable; @@ -174,7 +175,7 @@ protected RecipeGenerator getRecipeGenerator(RegistryWrapper.WrapperLookup regis @Override public void generate() { offerPlanksRecipe2(SIMPLE_BLOCK, ItemTags.ACACIA_LOGS, 1); - createSmithingTransformRecipe(Items.BOOK, Items.STICK, Items.EXPERIENCE_BOTTLE, RecipeCategory.MISC, Items.STICK, 1, ComponentChanges.builder().add(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true).build()) + createSmithingTransformRecipe(Items.BOOK, Items.STICK, Items.EXPERIENCE_BOTTLE, RecipeCategory.MISC, new ItemStack(Items.STICK.getRegistryEntry(), 1, ComponentChanges.builder().add(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true).build())) .criterion("has_book", conditionsFromItem(Items.BOOK)) .offerTo(this.exporter, getItemPath(Items.STICK) + "_smithing");