minecraft-src/net/minecraft/world/inventory/RecipeCraftingHolder.java
2025-07-04 02:49:36 +03:00

39 lines
1.2 KiB
Java

package net.minecraft.world.inventory;
import java.util.Collections;
import java.util.List;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.level.GameRules;
import org.jetbrains.annotations.Nullable;
public interface RecipeCraftingHolder {
void setRecipeUsed(@Nullable RecipeHolder<?> recipe);
@Nullable
RecipeHolder<?> getRecipeUsed();
default void awardUsedRecipes(Player player, List<ItemStack> items) {
RecipeHolder<?> recipeHolder = this.getRecipeUsed();
if (recipeHolder != null) {
player.triggerRecipeCrafted(recipeHolder, items);
if (!recipeHolder.value().isSpecial()) {
player.awardRecipes(Collections.singleton(recipeHolder));
this.setRecipeUsed(null);
}
}
}
default boolean setRecipeUsed(ServerPlayer player, RecipeHolder<?> recipe) {
if (!recipe.value().isSpecial()
&& player.serverLevel().getGameRules().getBoolean(GameRules.RULE_LIMITED_CRAFTING)
&& !player.getRecipeBook().contains(recipe.id())) {
return false;
} else {
this.setRecipeUsed(recipe);
return true;
}
}
}