minecraft-src/net/minecraft/data/recipes/RecipeBuilder.java
2025-07-04 02:49:36 +03:00

51 lines
1.9 KiB
Java

package net.minecraft.data.recipes;
import net.minecraft.advancements.Criterion;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.ItemLike;
import org.jetbrains.annotations.Nullable;
public interface RecipeBuilder {
ResourceLocation ROOT_RECIPE_ADVANCEMENT = ResourceLocation.withDefaultNamespace("recipes/root");
RecipeBuilder unlockedBy(String name, Criterion<?> criterion);
RecipeBuilder group(@Nullable String groupName);
Item getResult();
void save(RecipeOutput output, ResourceKey<Recipe<?>> resourceKey);
default void save(RecipeOutput recipeOutput) {
this.save(recipeOutput, ResourceKey.create(Registries.RECIPE, getDefaultRecipeId(this.getResult())));
}
default void save(RecipeOutput recipeOutput, String id) {
ResourceLocation resourceLocation = getDefaultRecipeId(this.getResult());
ResourceLocation resourceLocation2 = ResourceLocation.parse(id);
if (resourceLocation2.equals(resourceLocation)) {
throw new IllegalStateException("Recipe " + id + " should remove its 'save' argument as it is equal to default one");
} else {
this.save(recipeOutput, ResourceKey.create(Registries.RECIPE, resourceLocation2));
}
}
static ResourceLocation getDefaultRecipeId(ItemLike itemLike) {
return BuiltInRegistries.ITEM.getKey(itemLike.asItem());
}
static CraftingBookCategory determineBookCategory(RecipeCategory category) {
return switch (category) {
case BUILDING_BLOCKS -> CraftingBookCategory.BUILDING;
case TOOLS, COMBAT -> CraftingBookCategory.EQUIPMENT;
case REDSTONE -> CraftingBookCategory.REDSTONE;
default -> CraftingBookCategory.MISC;
};
}
}