package net.minecraft.world.item.crafting; import com.mojang.serialization.Codec; import java.util.List; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.display.RecipeDisplay; import net.minecraft.world.level.Level; public interface Recipe { Codec> CODEC = BuiltInRegistries.RECIPE_SERIALIZER.byNameCodec().dispatch(Recipe::getSerializer, RecipeSerializer::codec); StreamCodec> STREAM_CODEC = ByteBufCodecs.registry(Registries.RECIPE_SERIALIZER) .dispatch(Recipe::getSerializer, RecipeSerializer::streamCodec); boolean matches(T input, Level level); ItemStack assemble(T input, HolderLookup.Provider registries); /** * If true, this recipe does not appear in the recipe book and does not respect recipe unlocking (and the doLimitedCrafting gamerule) */ default boolean isSpecial() { return false; } default boolean showNotification() { return true; } default String group() { return ""; } RecipeSerializer> getSerializer(); RecipeType> getType(); PlacementInfo placementInfo(); default List display() { return List.of(); } RecipeBookCategory recipeBookCategory(); }