diff --git a/shared/src/main/java/net/blay09/mods/cookingforblockheads/CookingForBlockheads.java b/shared/src/main/java/net/blay09/mods/cookingforblockheads/CookingForBlockheads.java index 5027716a..135544f9 100644 --- a/shared/src/main/java/net/blay09/mods/cookingforblockheads/CookingForBlockheads.java +++ b/shared/src/main/java/net/blay09/mods/cookingforblockheads/CookingForBlockheads.java @@ -32,8 +32,7 @@ public class CookingForBlockheads { - // TODO everything is nofilter right now - // TODO Received invalid craft request, unprocessable recipe minecraft:bread should be blocked clientside + // TODO preservation upgrade and ice unit for fridge public static final String MOD_ID = "cookingforblockheads"; public static final Logger logger = LogManager.getLogger(MOD_ID); diff --git a/shared/src/main/java/net/blay09/mods/cookingforblockheads/crafting/KitchenImpl.java b/shared/src/main/java/net/blay09/mods/cookingforblockheads/crafting/KitchenImpl.java index 8916e436..85d45d20 100644 --- a/shared/src/main/java/net/blay09/mods/cookingforblockheads/crafting/KitchenImpl.java +++ b/shared/src/main/java/net/blay09/mods/cookingforblockheads/crafting/KitchenImpl.java @@ -4,7 +4,9 @@ import net.blay09.mods.cookingforblockheads.api.Kitchen; import net.blay09.mods.cookingforblockheads.api.KitchenItemProcessor; import net.blay09.mods.cookingforblockheads.api.KitchenItemProvider; +import net.blay09.mods.cookingforblockheads.block.CookingTableBlock; import net.blay09.mods.cookingforblockheads.block.ModBlocks; +import net.blay09.mods.cookingforblockheads.block.entity.CookingTableBlockEntity; import net.blay09.mods.cookingforblockheads.item.ModItems; import net.blay09.mods.cookingforblockheads.kitchen.ContainerKitchenItemProvider; import net.blay09.mods.cookingforblockheads.tag.ModBlockTags; @@ -12,6 +14,8 @@ import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; @@ -25,6 +29,7 @@ public class KitchenImpl implements Kitchen { private final ItemStack activatingItemStack; private final BlockState activatingBlockState; + private final BlockEntity activatingBlockEntity; private final Set checkedPos = new HashSet<>(); private final List itemProviderList = new ArrayList<>(); private final List itemProcessorList = new ArrayList<>(); @@ -32,11 +37,13 @@ public class KitchenImpl implements Kitchen { public KitchenImpl(ItemStack itemStack) { activatingItemStack = itemStack; activatingBlockState = Blocks.AIR.defaultBlockState(); + activatingBlockEntity = null; } public KitchenImpl(Level level, BlockPos pos) { activatingBlockState = level.getBlockState(pos); activatingItemStack = ItemStack.EMPTY; + activatingBlockEntity = level.getBlockEntity(pos); findNeighbourCraftingBlocks(level, pos, true); } @@ -95,4 +102,12 @@ public boolean canProcess(RecipeType recipeType) { return itemProcessorList.stream().anyMatch(it -> it.canProcess(recipeType)); } + public boolean isRecipeAvailable(RecipeHolder> recipe, CraftingOperation operation) { + final var isNoFilter = activatingItemStack.is(ModItems.noFilterBook) || (activatingBlockEntity instanceof CookingTableBlockEntity cookingTable && cookingTable.hasNoFilterBook()); + if (isNoFilter) { + return true; + } + + return operation.canCraft(); + } } diff --git a/shared/src/main/java/net/blay09/mods/cookingforblockheads/menu/KitchenMenu.java b/shared/src/main/java/net/blay09/mods/cookingforblockheads/menu/KitchenMenu.java index e04bbe63..3e377b5b 100644 --- a/shared/src/main/java/net/blay09/mods/cookingforblockheads/menu/KitchenMenu.java +++ b/shared/src/main/java/net/blay09/mods/cookingforblockheads/menu/KitchenMenu.java @@ -4,7 +4,6 @@ import net.blay09.mods.balm.api.container.DefaultContainer; import net.blay09.mods.cookingforblockheads.CookingForBlockheads; import net.blay09.mods.cookingforblockheads.api.Kitchen; -import net.blay09.mods.cookingforblockheads.api.KitchenItemProcessor; import net.blay09.mods.cookingforblockheads.crafting.CraftingContext; import net.blay09.mods.cookingforblockheads.crafting.KitchenImpl; import net.blay09.mods.cookingforblockheads.crafting.RecipeWithStatus; @@ -27,7 +26,6 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeHolder; -import net.minecraft.world.item.crafting.RecipeType; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -249,6 +247,10 @@ public List getAvailableCraftables() { } final var operation = context.createOperation(recipe).prepare(); + if (!kitchen.isRecipeAvailable(recipe, operation)) { + continue; + } + final var recipeWithStatus = new RecipeWithStatus(recipe.id(), resultItem, operation.getMissingIngredients(),