package net.minecraft.world.item; import com.mojang.logging.LogUtils; import java.util.ArrayList; import java.util.List; import java.util.Optional; import net.minecraft.core.component.DataComponents; import net.minecraft.resources.ResourceLocation; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.Level; import org.slf4j.Logger; public class KnowledgeBookItem extends Item { private static final Logger LOGGER = LogUtils.getLogger(); public KnowledgeBookItem(Item.Properties properties) { super(properties); } @Override public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { ItemStack itemStack = player.getItemInHand(usedHand); List list = itemStack.getOrDefault(DataComponents.RECIPES, List.of()); itemStack.consume(1, player); if (list.isEmpty()) { return InteractionResultHolder.fail(itemStack); } else { if (!level.isClientSide) { RecipeManager recipeManager = level.getServer().getRecipeManager(); List> list2 = new ArrayList(list.size()); for (ResourceLocation resourceLocation : list) { Optional> optional = recipeManager.byKey(resourceLocation); if (!optional.isPresent()) { LOGGER.error("Invalid recipe: {}", resourceLocation); return InteractionResultHolder.fail(itemStack); } list2.add((RecipeHolder)optional.get()); } player.awardRecipes(list2); player.awardStat(Stats.ITEM_USED.get(this)); } return InteractionResultHolder.sidedSuccess(itemStack, level.isClientSide()); } } }