55import net .blay09 .mods .cookingforblockheads .api .KitchenItemProcessor ;
66import net .blay09 .mods .cookingforblockheads .api .KitchenItemProvider ;
77import net .blay09 .mods .cookingforblockheads .api .KitchenRecipeProvider ;
8- import net .blay09 .mods .cookingforblockheads .capability .ModCapabilities ;
98import net .blay09 .mods .cookingforblockheads .kitchen .ContainerKitchenItemProvider ;
109import net .blay09 .mods .cookingforblockheads .mixin .RecipeManagerAccessor ;
1110import net .blay09 .mods .cookingforblockheads .network .message .KitchenFeedbackMessage ;
1211import net .blay09 .mods .cookingforblockheads .recipe .KitchenProvidedRecipe ;
1312import net .blay09 .mods .cookingforblockheads .recipe .ModRecipes ;
1413import net .blay09 .mods .cookingforblockheads .registry .CookingForBlockheadsRegistry ;
15- import net .blay09 .mods .cookingforblockheads .tag .ModBlockTags ;
16- import net .minecraft .core .BlockPos ;
17- import net .minecraft .core .Direction ;
1814import net .minecraft .resources .Identifier ;
1915import net .minecraft .server .level .ServerLevel ;
2016import net .minecraft .world .entity .player .Player ;
2117import net .minecraft .world .item .ItemStack ;
2218import net .minecraft .world .item .crafting .RecipeHolder ;
2319import net .minecraft .world .level .Level ;
24- import net .minecraft .world .level .block .entity .BlockEntity ;
25- import net .minecraft .world .level .block .state .BlockState ;
2620import org .jspecify .annotations .Nullable ;
2721
2822import java .util .*;
@@ -38,64 +32,33 @@ public class KitchenImpl implements Kitchen {
3832 */
3933 @ Deprecated
4034 private final boolean allowCrafting ;
41- private final Set <BlockPos > checkedPos = new HashSet <>();
42- private final List <KitchenItemProvider > itemProviderList = new ArrayList <>();
43- private final List <KitchenRecipeProvider > recipeProviderList = new ArrayList <>();
44- private final List <KitchenItemProcessor > itemProcessorList = new ArrayList <>();
35+ private final List <KitchenItemProvider > itemProviders ;
36+ private final List <KitchenRecipeProvider > recipeProviders ;
37+ private final List <KitchenItemProcessor > itemProcessors ;
4538
4639 public KitchenImpl (Level level , boolean allowCrafting ) {
47- this .level = level ;
48- this .allowCrafting = allowCrafting ;
49- }
50-
51- public void findNeighbourCraftingBlocks (Level level , BlockPos pos ) {
52- findNeighbourCraftingBlocks (level , pos , true );
40+ this (level , allowCrafting , List .of (), List .of (), List .of ());
5341 }
5442
55- public void findNeighbourCraftingBlocks (Level level , BlockPos pos , boolean extendedUpSearch ) {
56- for (Direction direction : Direction .values ()) {
57- int upSearch = (extendedUpSearch && direction == Direction .UP ) ? 2 : 1 ;
58- for (int n = 1 ; n <= upSearch ; n ++) {
59- BlockPos position = pos .relative (direction , n );
60- if (!checkedPos .contains (position )) {
61- checkedPos .add (position );
62-
63- BlockState state = level .getBlockState (position );
64- BlockEntity blockEntity = level .getBlockEntity (position );
65- if (blockEntity != null ) {
66- var itemProvider = Balm .capabilities ().getCapability (blockEntity , ModCapabilities .KITCHEN_ITEM_PROVIDER );
67- if (itemProvider != null ) {
68- itemProviderList .add (itemProvider );
69- }
70-
71- final var recipeProvider = Balm .capabilities ().getCapability (blockEntity , ModCapabilities .KITCHEN_RECIPE_PROVIDER );
72- if (recipeProvider != null ) {
73- recipeProviderList .add (recipeProvider );
74- }
75-
76- final var itemProcessor = Balm .capabilities ().getCapability (blockEntity , ModCapabilities .KITCHEN_ITEM_PROCESSOR );
77- if (itemProcessor != null ) {
78- itemProcessorList .add (itemProcessor );
79- }
80-
81- if (itemProvider != null || recipeProvider != null || itemProcessor != null || state .is (ModBlockTags .KITCHEN_CONNECTORS )) {
82- findNeighbourCraftingBlocks (level , position , true );
83- }
84- } else if (state .is (ModBlockTags .KITCHEN_CONNECTORS )) {
85- findNeighbourCraftingBlocks (level , position , false );
86- }
87- }
88- }
89- }
43+ public KitchenImpl (Level level ,
44+ boolean allowCrafting ,
45+ List <KitchenItemProvider > itemProviders ,
46+ List <KitchenRecipeProvider > recipeProviders ,
47+ List <KitchenItemProcessor > itemProcessors ) {
48+ this .level = level ;
49+ this .allowCrafting = allowCrafting ;
50+ this .itemProviders = itemProviders ;
51+ this .recipeProviders = recipeProviders ;
52+ this .itemProcessors = itemProcessors ;
9053 }
9154
9255 @ Override
9356 public CraftingContext createCraftingContext (@ Nullable Player player ) {
94- final var itemProviders = new ArrayList <>(itemProviderList );
57+ final var itemProviders = new ArrayList <>(this . itemProviders );
9558 if (player != null ) {
9659 itemProviders .addFirst (new ContainerKitchenItemProvider (player .getInventory ()));
9760 }
98- return new CraftingContext (itemProviders , itemProcessorList , allowCrafting ).addListener (operation -> {
61+ return new CraftingContext (itemProviders , itemProcessors , allowCrafting ).addListener (operation -> {
9962 if (player != null ) {
10063 final var feedback = operation .getFeedback ();
10164 feedback .ifPresent (component -> Balm .networking ().sendTo (player , new KitchenFeedbackMessage (component )));
@@ -141,7 +104,7 @@ private Collection<RecipeHolder<KitchenProvidedRecipe>> getProvidedRecipes(Level
141104
142105 private Set <Identifier > getAvailableRecipeSources () {
143106 final var result = new HashSet <Identifier >();
144- for (final var craftableProvider : recipeProviderList ) {
107+ for (final var craftableProvider : recipeProviders ) {
145108 result .addAll (craftableProvider .getKitchenRecipeSources ());
146109 }
147110 return result ;
0 commit comments