Skip to content

Commit 5e6e726

Browse files
committed
fix: new bound book of binding recipes do not show up in recipe viewers
Closes #1193
1 parent e007687 commit 5e6e726

15 files changed

+404
-53
lines changed

src/generated/resources/data/occultism/modonomicon/books/dictionary_of_spirits/entries/getting_started/books_of_binding.json

+48-6
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,18 @@
7676
"title2": ""
7777
},
7878
{
79-
"type": "modonomicon:crafting_recipe",
79+
"type": "occultism:book_binding_recipe",
8080
"anchor": "",
8181
"condition": {
8282
"type": "modonomicon:none"
8383
},
84-
"recipe_id_1": "occultism:crafting/book_of_binding_bound_foliot",
84+
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
8585
"text": "book.occultism.dictionary_of_spirits.getting_started.books_of_binding.book_of_binding_bound_foliot_recipe.text",
8686
"title1": "",
87-
"title2": ""
87+
"title2": "",
88+
"unbound_book": {
89+
"item": "occultism:book_of_binding_foliot"
90+
}
8891
},
8992
{
9093
"type": "modonomicon:crafting_recipe",
@@ -93,35 +96,74 @@
9396
"type": "modonomicon:none"
9497
},
9598
"recipe_id_1": "occultism:crafting/book_of_binding_djinni",
96-
"recipe_id_2": "occultism:crafting/book_of_binding_bound_djinni",
9799
"text": "",
98100
"title1": "",
99101
"title2": ""
100102
},
103+
{
104+
"type": "occultism:book_binding_recipe",
105+
"anchor": "",
106+
"condition": {
107+
"type": "modonomicon:none"
108+
},
109+
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
110+
"text": "",
111+
"title1": "",
112+
"title2": "",
113+
"unbound_book": {
114+
"item": "occultism:book_of_binding_djinni"
115+
}
116+
},
101117
{
102118
"type": "modonomicon:crafting_recipe",
103119
"anchor": "",
104120
"condition": {
105121
"type": "modonomicon:none"
106122
},
107123
"recipe_id_1": "occultism:crafting/book_of_binding_afrit",
108-
"recipe_id_2": "occultism:crafting/book_of_binding_bound_afrit",
109124
"text": "",
110125
"title1": "",
111126
"title2": ""
112127
},
128+
{
129+
"type": "occultism:book_binding_recipe",
130+
"anchor": "",
131+
"condition": {
132+
"type": "modonomicon:none"
133+
},
134+
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
135+
"text": "",
136+
"title1": "",
137+
"title2": "",
138+
"unbound_book": {
139+
"item": "occultism:book_of_binding_afrit"
140+
}
141+
},
113142
{
114143
"type": "modonomicon:crafting_recipe",
115144
"anchor": "",
116145
"condition": {
117146
"type": "modonomicon:none"
118147
},
119148
"recipe_id_1": "occultism:crafting/book_of_binding_marid",
120-
"recipe_id_2": "occultism:crafting/book_of_binding_bound_marid",
121149
"text": "",
122150
"title1": "",
123151
"title2": ""
124152
},
153+
{
154+
"type": "occultism:book_binding_recipe",
155+
"anchor": "",
156+
"condition": {
157+
"type": "modonomicon:none"
158+
},
159+
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
160+
"text": "",
161+
"title1": "",
162+
"title2": "",
163+
"unbound_book": {
164+
"item": "occultism:book_of_binding_marid"
165+
}
166+
},
125167
{
126168
"type": "occultism:spirit_fire_recipe",
127169
"anchor": "",

src/main/java/com/klikli_dev/occultism/crafting/recipe/BoundBookOfBindingRecipe.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public boolean matches(CraftingContainer input, @NotNull Level level) {
7979
}
8080
}
8181

82-
var boundBook = this.getBoundBookFromBook(bookOfBinding);
82+
var boundBook = getBoundBookFromBook(bookOfBinding);
8383
if (boundBook.isEmpty())
8484
return ItemStack.EMPTY;
8585

@@ -93,7 +93,7 @@ public boolean matches(CraftingContainer input, @NotNull Level level) {
9393
return boundBook;
9494
}
9595

96-
public ItemStack getBoundBookFromBook(ItemStack book) {
96+
public static ItemStack getBoundBookFromBook(ItemStack book) {
9797
if (book.is(OccultismItems.BOOK_OF_BINDING_FOLIOT.get()))
9898
return new ItemStack(OccultismItems.BOOK_OF_BINDING_BOUND_FOLIOT.get());
9999

src/main/java/com/klikli_dev/occultism/datagen/OccultismBookProvider.java

+29-16
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@
1414
import com.klikli_dev.modonomicon.api.datagen.book.condition.BookTrueConditionModel;
1515
import com.klikli_dev.modonomicon.api.datagen.book.page.*;
1616
import com.klikli_dev.occultism.datagen.book.FamiliarRitualsCategory;
17-
import com.klikli_dev.occultism.integration.modonomicon.pages.BookRitualRecipePageModel;
18-
import com.klikli_dev.occultism.integration.modonomicon.pages.BookSpiritFireRecipePageModel;
19-
import com.klikli_dev.occultism.integration.modonomicon.pages.BookSpiritTradeRecipePageModel;
17+
import com.klikli_dev.occultism.integration.modonomicon.pages.*;
2018
import com.klikli_dev.occultism.registry.OccultismBlocks;
2119
import com.klikli_dev.occultism.registry.OccultismItems;
2220
import com.klikli_dev.theurgy.registry.ItemRegistry;
2321
import net.minecraft.data.PackOutput;
2422
import net.minecraft.resources.ResourceLocation;
23+
import net.minecraft.world.item.ItemStack;
2524
import net.minecraft.world.item.Items;
2625
import net.minecraft.world.item.crafting.Ingredient;
2726
import net.minecraft.world.level.block.Blocks;
@@ -1123,34 +1122,45 @@ There is a type of book corresponding to each type (or tier) of spirit.
11231122
""".formatted(COLOR_PURPLE));
11241123

11251124
this.context().page("book_of_binding_bound_foliot_recipe");
1126-
var bookOfBindingBoundFoliotRecipe = BookCraftingRecipePageModel.builder()
1127-
.withRecipeId1(this.modLoc("crafting/book_of_binding_bound_foliot"))
1128-
.withText(this.context().pageText())
1129-
.build();
1125+
var bookOfBindingBoundFoliotRecipe = BookBindingCraftingRecipePageModel.builder()
1126+
.withRecipeId1()
1127+
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_FOLIOT.get()))
1128+
.withText(this.context().pageText()).build();
11301129
this.lang().add(this.context().pageText(),
11311130
"""
11321131
Add the name of the spirit to summon to your book of binding by crafting it with the Dictionary of Spirits. The Dictionary will not be used up.
11331132
""");
11341133

11351134
this.context().page("book_of_binding_djinni_recipe");
11361135
var bookOfBindingDjinniRecipe = BookCraftingRecipePageModel.builder()
1137-
.withRecipeId1(this.modLoc("crafting/book_of_binding_djinni"))
1138-
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_djinni"))
1139-
.build();
1136+
.withRecipeId1(this.modLoc("crafting/book_of_binding_djinni")).build();
1137+
1138+
this.context().page("book_of_binding_bound_djinni_recipe");
1139+
var bookOfBoundBindingDjinniRecipe = BookBindingCraftingRecipePageModel.builder()
1140+
.withRecipeId1()
1141+
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_DJINNI.get())).build();
11401142
//no text
11411143

11421144
this.context().page("book_of_binding_afrit_recipe");
11431145
var bookOfBindingAfritRecipe = BookCraftingRecipePageModel.builder()
1144-
.withRecipeId1(this.modLoc("crafting/book_of_binding_afrit"))
1145-
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_afrit"))
1146-
.build();
1146+
.withRecipeId1(this.modLoc("crafting/book_of_binding_afrit")).build();
1147+
//no text
1148+
1149+
this.context().page("book_of_binding_bound_afrit_recipe");
1150+
var bookOfBoundBindingAfritRecipe = BookBindingCraftingRecipePageModel.builder()
1151+
.withRecipeId1()
1152+
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_AFRIT.get())).build();
11471153
//no text
11481154

11491155
this.context().page("book_of_binding_marid_recipe");
11501156
var bookOfBindingMaridRecipe = BookCraftingRecipePageModel.builder()
1151-
.withRecipeId1(this.modLoc("crafting/book_of_binding_marid"))
1152-
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_marid"))
1153-
.build();
1157+
.withRecipeId1(this.modLoc("crafting/book_of_binding_marid")).build();
1158+
//no text
1159+
1160+
this.context().page("book_of_binding_bound_marid_recipe");
1161+
var bookOfBoundBindingMaridRecipe = BookBindingCraftingRecipePageModel.builder()
1162+
.withRecipeId1()
1163+
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_MARID.get())).build();
11541164
//no text
11551165

11561166
this.context().page("book_of_binding_empty");
@@ -1182,8 +1192,11 @@ There is a type of book corresponding to each type (or tier) of spirit.
11821192
bookOfBindingFoliotRecipe,
11831193
bookOfBindingBoundFoliotRecipe,
11841194
bookOfBindingDjinniRecipe,
1195+
bookOfBoundBindingDjinniRecipe,
11851196
bookOfBindingAfritRecipe,
1197+
bookOfBoundBindingAfritRecipe,
11861198
bookOfBindingMaridRecipe,
1199+
bookOfBoundBindingMaridRecipe,
11871200
alternativeBooks,
11881201
bookOfBindingEmptyRecipe
11891202
);

src/main/java/com/klikli_dev/occultism/datagen/recipes/OccultismRecipeProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ private void crushingMetalRecipe(String metalName, Consumer<FinishedRecipe> cons
232232

233233

234234
private void craftingRecipes(Consumer<FinishedRecipe> consumer) {
235-
SpecialRecipeBuilder.special(BoundBookOfBindingRecipe.SERIALIZER).save(consumer,Occultism.MODID + "crafting/bound_book_of_binding");
235+
SpecialRecipeBuilder.special(BoundBookOfBindingRecipe.SERIALIZER).save(consumer,Occultism.MODID + ":crafting/bound_book_of_binding");
236236

237237
metalRecipes(consumer);
238238
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, OccultismItems.BOOK_OF_BINDING_EMPTY.get())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.klikli_dev.occultism.integration;
2+
3+
import com.klikli_dev.occultism.Occultism;
4+
import com.klikli_dev.occultism.crafting.recipe.BoundBookOfBindingRecipe;
5+
import com.klikli_dev.occultism.registry.OccultismItems;
6+
import net.minecraft.core.NonNullList;
7+
import net.minecraft.resources.ResourceLocation;
8+
import net.minecraft.world.item.ItemStack;
9+
import net.minecraft.world.item.crafting.*;
10+
11+
import java.util.List;
12+
13+
public class BoundBookRecipeMaker {
14+
15+
public static List<CraftingRecipe> createRecipes() {
16+
return List.of(
17+
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_FOLIOT.get())),
18+
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_DJINNI.get())),
19+
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_AFRIT.get())),
20+
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_MARID.get()))
21+
);
22+
}
23+
24+
private static CraftingRecipe makeRecipe(ItemStack bookOfBinding) {
25+
String group = "occultism.bound_book_of_binding";
26+
var id = new ResourceLocation(Occultism.MODID, group + bookOfBinding.getDescriptionId());
27+
return new ShapelessRecipe(id, group, CraftingBookCategory.MISC,
28+
BoundBookOfBindingRecipe.getBoundBookFromBook(bookOfBinding),
29+
NonNullList.of(Ingredient.EMPTY, Ingredient.of(OccultismItems.DICTIONARY_OF_SPIRITS.get()), Ingredient.of(bookOfBinding)));
30+
}
31+
32+
}

src/main/java/com/klikli_dev/occultism/integration/emi/OccultismEmiPlugin.java

+26-14
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,29 @@
66
import com.klikli_dev.occultism.crafting.recipe.MinerRecipe;
77
import com.klikli_dev.occultism.crafting.recipe.RitualRecipe;
88
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
9+
import com.klikli_dev.occultism.integration.BoundBookRecipeMaker;
910
import com.klikli_dev.occultism.integration.emi.recipes.CrushingRecipeCategory;
1011
import com.klikli_dev.occultism.integration.emi.recipes.MinerRecipeCategory;
1112
import com.klikli_dev.occultism.integration.emi.recipes.RitualRecipeCategory;
1213
import com.klikli_dev.occultism.integration.emi.recipes.SpiritFireRecipeCategory;
1314
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
14-
import com.klikli_dev.occultism.registry.*;
15+
import com.klikli_dev.occultism.registry.OccultismBlocks;
16+
import com.klikli_dev.occultism.registry.OccultismEntities;
17+
import com.klikli_dev.occultism.registry.OccultismItems;
18+
import com.klikli_dev.occultism.registry.OccultismRecipes;
1519
import dev.emi.emi.api.EmiEntrypoint;
1620
import dev.emi.emi.api.EmiInitRegistry;
1721
import dev.emi.emi.api.EmiPlugin;
1822
import dev.emi.emi.api.EmiRegistry;
19-
import dev.emi.emi.api.recipe.EmiRecipe;
23+
import dev.emi.emi.api.recipe.EmiCraftingRecipe;
2024
import dev.emi.emi.api.recipe.EmiRecipeCategory;
2125
import dev.emi.emi.api.render.EmiTexture;
26+
import dev.emi.emi.api.stack.EmiIngredient;
2227
import dev.emi.emi.api.stack.EmiStack;
28+
import net.minecraft.core.RegistryAccess;
2329
import net.minecraft.resources.ResourceLocation;
2430
import net.minecraft.world.item.ItemStack;
31+
import net.minecraft.world.item.crafting.CraftingRecipe;
2532
import net.minecraft.world.item.crafting.Ingredient;
2633
import net.minecraft.world.item.crafting.RecipeManager;
2734
import net.minecraftforge.registries.ForgeRegistries;
@@ -34,10 +41,10 @@ public class OccultismEmiPlugin implements EmiPlugin {
3441
public static final EmiStack DIMENSIONAL_MINESHAFT = EmiStack.of(OccultismBlocks.DIMENSIONAL_MINESHAFT.get());
3542
public static final EmiStack GOLDEN_SACRIFICIAL_BOWL = EmiStack.of(OccultismBlocks.GOLDEN_SACRIFICIAL_BOWL.get());
3643
public static final ResourceLocation EMI_WIDGETS = new ResourceLocation(Occultism.MODID, "textures/gui/emi/widgets.png");
37-
public static final EmiRecipeCategory SPIRIT_FIRE_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "spirit_fire"),SPIRIT_FIRE, new EmiTexture(EMI_WIDGETS, 0, 0, 16, 16));
44+
public static final EmiRecipeCategory SPIRIT_FIRE_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "spirit_fire"), SPIRIT_FIRE, new EmiTexture(EMI_WIDGETS, 0, 0, 16, 16));
3845
public static final EmiRecipeCategory CRUSHING_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "crushing"), new SpiritRenderable<FoliotEntity>(OccultismEntities.FOLIOT.get()), new EmiTexture(EMI_WIDGETS, 32, 0, 16, 16));
3946
public static final EmiRecipeCategory MINER_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "miner"), DIMENSIONAL_MINESHAFT, new EmiTexture(EMI_WIDGETS, 48, 0, 16, 16));
40-
public static final EmiRecipeCategory RITUAL_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "ritual"),GOLDEN_SACRIFICIAL_BOWL , new EmiTexture(EMI_WIDGETS, 64, 0, 16, 16));
47+
public static final EmiRecipeCategory RITUAL_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "ritual"), GOLDEN_SACRIFICIAL_BOWL, new EmiTexture(EMI_WIDGETS, 64, 0, 16, 16));
4148

4249
@Override
4350
public void initialize(EmiInitRegistry registry) {
@@ -59,31 +66,36 @@ public void register(EmiRegistry emiRegistry) {
5966

6067
emiRegistry.addCategory(RITUAL_CATEGORY);
6168
emiRegistry.addWorkstation(RITUAL_CATEGORY, GOLDEN_SACRIFICIAL_BOWL);
62-
RecipeManager manager=emiRegistry.getRecipeManager();
63-
for(SpiritFireRecipe recipe: manager.getAllRecipesFor(OccultismRecipes.SPIRIT_FIRE_TYPE.get())) {
69+
RecipeManager manager = emiRegistry.getRecipeManager();
70+
for (SpiritFireRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.SPIRIT_FIRE_TYPE.get())) {
6471
emiRegistry.addRecipe(new SpiritFireRecipeCategory(recipe));
6572
}
66-
for(CrushingRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.CRUSHING_TYPE.get())){
73+
for (CrushingRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.CRUSHING_TYPE.get())) {
6774
emiRegistry.addRecipe(new CrushingRecipeCategory(recipe));
6875
}
6976

70-
for(MinerRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())){
71-
if(recipe.getIngredients().get(0).values.length==1) {
77+
for (MinerRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())) {
78+
if (recipe.getIngredients().get(0).values.length == 1) {
7279
if (recipe.getIngredients().get(0).values[0] instanceof Ingredient.TagValue) {
7380
var tag = ((Ingredient.TagValue) recipe.getIngredients().get(0).values[0]).tag;
74-
if(!MinerRecipeCategory.totalWeights.containsKey(tag))
75-
MinerRecipeCategory.totalWeights.put(tag,0L);
76-
MinerRecipeCategory.totalWeights.put(tag,MinerRecipeCategory.totalWeights.get(tag)+recipe.getWeightedOutput().getWeight().asInt());
81+
if (!MinerRecipeCategory.totalWeights.containsKey(tag))
82+
MinerRecipeCategory.totalWeights.put(tag, 0L);
83+
MinerRecipeCategory.totalWeights.put(tag, MinerRecipeCategory.totalWeights.get(tag) + recipe.getWeightedOutput().getWeight().asInt());
7784

7885

7986
}
8087
}
8188
}
82-
for(MinerRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())){
89+
for (MinerRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())) {
8390
emiRegistry.addRecipe(new MinerRecipeCategory(recipe));
8491
}
85-
for(RitualRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.RITUAL_TYPE.get())){
92+
for (RitualRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.RITUAL_TYPE.get())) {
8693
emiRegistry.addRecipe(new RitualRecipeCategory(recipe));
8794
}
95+
96+
for (CraftingRecipe recipe : BoundBookRecipeMaker.createRecipes()) {
97+
var ingredients = recipe.getIngredients().stream().map(EmiIngredient::of).toList();
98+
emiRegistry.addRecipe(new EmiCraftingRecipe(ingredients, EmiStack.of(recipe.getResultItem(RegistryAccess.EMPTY)), recipe.getId(), true));
99+
}
88100
}
89101
}

src/main/java/com/klikli_dev/occultism/integration/emi/recipes/CrushingRecipeCategory.java

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
package com.klikli_dev.occultism.integration.emi.recipes;
22

3-
import com.klikli_dev.occultism.common.entity.spirit.FoliotEntity;
43
import com.klikli_dev.occultism.crafting.recipe.CrushingRecipe;
5-
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
64
import com.klikli_dev.occultism.integration.emi.OccultismEmiPlugin;
7-
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
85
import com.klikli_dev.occultism.integration.emi.render.SpiritWidget;
96
import com.klikli_dev.occultism.registry.OccultismEntities;
107
import dev.emi.emi.api.recipe.EmiRecipe;
118
import dev.emi.emi.api.recipe.EmiRecipeCategory;
129
import dev.emi.emi.api.render.EmiTexture;
1310
import dev.emi.emi.api.stack.EmiIngredient;
1411
import dev.emi.emi.api.stack.EmiStack;
15-
import dev.emi.emi.api.widget.DrawableWidget;
1612
import dev.emi.emi.api.widget.WidgetHolder;
1713
import net.minecraft.client.Minecraft;
1814
import net.minecraft.resources.ResourceLocation;
@@ -26,7 +22,7 @@ public class CrushingRecipeCategory implements EmiRecipe {
2622
private final List<EmiStack> output;
2723

2824
public CrushingRecipeCategory(CrushingRecipe recipe) {
29-
id=recipe.getId();
25+
this.id = recipe.getId();
3026
this.input = List.of(EmiIngredient.of(recipe.getIngredients().get(0)));
3127
this.output = List.of(EmiStack.of(recipe.getResultItem(Minecraft.getInstance().level.registryAccess())));
3228
}
@@ -38,7 +34,7 @@ public EmiRecipeCategory getCategory() {
3834

3935
@Override
4036
public @Nullable ResourceLocation getId() {
41-
return id;
37+
return this.id;
4238
}
4339

4440
@Override
@@ -63,15 +59,15 @@ public int getDisplayHeight() {
6359

6460
@Override
6561
public void addWidgets(WidgetHolder widgetHolder) {
66-
widgetHolder.addSlot(input.get(0), 0, 2);
67-
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW,18,2);
62+
widgetHolder.addSlot(this.input.get(0), 0, 2);
63+
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW, 18, 2);
6864

69-
SpiritWidget widget= new SpiritWidget(53,0, OccultismEntities.FOLIOT.get());
65+
SpiritWidget<?> widget = new SpiritWidget<>(53, 0, OccultismEntities.FOLIOT.get());
7066
widgetHolder.add(widget);
71-
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW,64,2);
67+
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW, 64, 2);
7268
// Adds an output slot on the right
7369
// Note that output slots need to call `recipeContext` to inform EMI about their recipe context
7470
// This includes being able to resolve recipe trees, favorite stacks with recipe context, and more
75-
widgetHolder.addSlot(output.get(0), 90, 2).recipeContext(this);
71+
widgetHolder.addSlot(this.output.get(0), 90, 2).recipeContext(this);
7672
}
7773
}

0 commit comments

Comments
 (0)