package net.minecraft.world.item.crafting; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; public abstract class CustomRecipe implements CraftingRecipe { private final CraftingBookCategory category; public CustomRecipe(CraftingBookCategory p_249010_) { this.category = p_249010_; } @Override public boolean isSpecial() { return true; } @Override public CraftingBookCategory category() { return this.category; } @Override public PlacementInfo placementInfo() { return PlacementInfo.NOT_PLACEABLE; } @Override public abstract RecipeSerializer getSerializer(); public static class Serializer implements RecipeSerializer { private final MapCodec codec; private final StreamCodec streamCodec; public Serializer(CustomRecipe.Serializer.Factory p_361018_) { this.codec = RecordCodecBuilder.mapCodec( p_362686_ -> p_362686_.group( CraftingBookCategory.CODEC.fieldOf("category").orElse(CraftingBookCategory.MISC).forGetter(CraftingRecipe::category) ) .apply(p_362686_, p_361018_::create) ); this.streamCodec = StreamCodec.composite(CraftingBookCategory.STREAM_CODEC, CraftingRecipe::category, p_361018_::create); } @Override public MapCodec codec() { return this.codec; } @Override public StreamCodec streamCodec() { return this.streamCodec; } @FunctionalInterface public interface Factory { T create(CraftingBookCategory p_369875_); } } }