Skip to content

Commit

Permalink
fix: new bound book of binding recipes do not show up in recipe viewers
Browse files Browse the repository at this point in the history
Closes #1193
  • Loading branch information
klikli-dev committed Aug 17, 2024
1 parent e007687 commit 5e6e726
Show file tree
Hide file tree
Showing 15 changed files with 404 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,18 @@
"title2": ""
},
{
"type": "modonomicon:crafting_recipe",
"type": "occultism:book_binding_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/book_of_binding_bound_foliot",
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
"text": "book.occultism.dictionary_of_spirits.getting_started.books_of_binding.book_of_binding_bound_foliot_recipe.text",
"title1": "",
"title2": ""
"title2": "",
"unbound_book": {
"item": "occultism:book_of_binding_foliot"
}
},
{
"type": "modonomicon:crafting_recipe",
Expand All @@ -93,35 +96,74 @@
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/book_of_binding_djinni",
"recipe_id_2": "occultism:crafting/book_of_binding_bound_djinni",
"text": "",
"title1": "",
"title2": ""
},
{
"type": "occultism:book_binding_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
"text": "",
"title1": "",
"title2": "",
"unbound_book": {
"item": "occultism:book_of_binding_djinni"
}
},
{
"type": "modonomicon:crafting_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/book_of_binding_afrit",
"recipe_id_2": "occultism:crafting/book_of_binding_bound_afrit",
"text": "",
"title1": "",
"title2": ""
},
{
"type": "occultism:book_binding_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
"text": "",
"title1": "",
"title2": "",
"unbound_book": {
"item": "occultism:book_of_binding_afrit"
}
},
{
"type": "modonomicon:crafting_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/book_of_binding_marid",
"recipe_id_2": "occultism:crafting/book_of_binding_bound_marid",
"text": "",
"title1": "",
"title2": ""
},
{
"type": "occultism:book_binding_recipe",
"anchor": "",
"condition": {
"type": "modonomicon:none"
},
"recipe_id_1": "occultism:crafting/bound_book_of_binding",
"text": "",
"title1": "",
"title2": "",
"unbound_book": {
"item": "occultism:book_of_binding_marid"
}
},
{
"type": "occultism:spirit_fire_recipe",
"anchor": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public boolean matches(CraftingContainer input, @NotNull Level level) {
}
}

var boundBook = this.getBoundBookFromBook(bookOfBinding);
var boundBook = getBoundBookFromBook(bookOfBinding);
if (boundBook.isEmpty())
return ItemStack.EMPTY;

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

public ItemStack getBoundBookFromBook(ItemStack book) {
public static ItemStack getBoundBookFromBook(ItemStack book) {
if (book.is(OccultismItems.BOOK_OF_BINDING_FOLIOT.get()))
return new ItemStack(OccultismItems.BOOK_OF_BINDING_BOUND_FOLIOT.get());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,13 @@
import com.klikli_dev.modonomicon.api.datagen.book.condition.BookTrueConditionModel;
import com.klikli_dev.modonomicon.api.datagen.book.page.*;
import com.klikli_dev.occultism.datagen.book.FamiliarRitualsCategory;
import com.klikli_dev.occultism.integration.modonomicon.pages.BookRitualRecipePageModel;
import com.klikli_dev.occultism.integration.modonomicon.pages.BookSpiritFireRecipePageModel;
import com.klikli_dev.occultism.integration.modonomicon.pages.BookSpiritTradeRecipePageModel;
import com.klikli_dev.occultism.integration.modonomicon.pages.*;
import com.klikli_dev.occultism.registry.OccultismBlocks;
import com.klikli_dev.occultism.registry.OccultismItems;
import com.klikli_dev.theurgy.registry.ItemRegistry;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.block.Blocks;
Expand Down Expand Up @@ -1123,34 +1122,45 @@ There is a type of book corresponding to each type (or tier) of spirit.
""".formatted(COLOR_PURPLE));

this.context().page("book_of_binding_bound_foliot_recipe");
var bookOfBindingBoundFoliotRecipe = BookCraftingRecipePageModel.builder()
.withRecipeId1(this.modLoc("crafting/book_of_binding_bound_foliot"))
.withText(this.context().pageText())
.build();
var bookOfBindingBoundFoliotRecipe = BookBindingCraftingRecipePageModel.builder()
.withRecipeId1()
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_FOLIOT.get()))
.withText(this.context().pageText()).build();
this.lang().add(this.context().pageText(),
"""
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.
""");

this.context().page("book_of_binding_djinni_recipe");
var bookOfBindingDjinniRecipe = BookCraftingRecipePageModel.builder()
.withRecipeId1(this.modLoc("crafting/book_of_binding_djinni"))
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_djinni"))
.build();
.withRecipeId1(this.modLoc("crafting/book_of_binding_djinni")).build();

this.context().page("book_of_binding_bound_djinni_recipe");
var bookOfBoundBindingDjinniRecipe = BookBindingCraftingRecipePageModel.builder()
.withRecipeId1()
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_DJINNI.get())).build();
//no text

this.context().page("book_of_binding_afrit_recipe");
var bookOfBindingAfritRecipe = BookCraftingRecipePageModel.builder()
.withRecipeId1(this.modLoc("crafting/book_of_binding_afrit"))
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_afrit"))
.build();
.withRecipeId1(this.modLoc("crafting/book_of_binding_afrit")).build();
//no text

this.context().page("book_of_binding_bound_afrit_recipe");
var bookOfBoundBindingAfritRecipe = BookBindingCraftingRecipePageModel.builder()
.withRecipeId1()
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_AFRIT.get())).build();
//no text

this.context().page("book_of_binding_marid_recipe");
var bookOfBindingMaridRecipe = BookCraftingRecipePageModel.builder()
.withRecipeId1(this.modLoc("crafting/book_of_binding_marid"))
.withRecipeId2(this.modLoc("crafting/book_of_binding_bound_marid"))
.build();
.withRecipeId1(this.modLoc("crafting/book_of_binding_marid")).build();
//no text

this.context().page("book_of_binding_bound_marid_recipe");
var bookOfBoundBindingMaridRecipe = BookBindingCraftingRecipePageModel.builder()
.withRecipeId1()
.withUnboundBook(new ItemStack(OccultismItems.BOOK_OF_BINDING_MARID.get())).build();
//no text

this.context().page("book_of_binding_empty");
Expand Down Expand Up @@ -1182,8 +1192,11 @@ There is a type of book corresponding to each type (or tier) of spirit.
bookOfBindingFoliotRecipe,
bookOfBindingBoundFoliotRecipe,
bookOfBindingDjinniRecipe,
bookOfBoundBindingDjinniRecipe,
bookOfBindingAfritRecipe,
bookOfBoundBindingAfritRecipe,
bookOfBindingMaridRecipe,
bookOfBoundBindingMaridRecipe,
alternativeBooks,
bookOfBindingEmptyRecipe
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ private void crushingMetalRecipe(String metalName, Consumer<FinishedRecipe> cons


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

metalRecipes(consumer);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, OccultismItems.BOOK_OF_BINDING_EMPTY.get())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.klikli_dev.occultism.integration;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.crafting.recipe.BoundBookOfBindingRecipe;
import com.klikli_dev.occultism.registry.OccultismItems;
import net.minecraft.core.NonNullList;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.*;

import java.util.List;

public class BoundBookRecipeMaker {

public static List<CraftingRecipe> createRecipes() {
return List.of(
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_FOLIOT.get())),
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_DJINNI.get())),
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_AFRIT.get())),
makeRecipe(new ItemStack(OccultismItems.BOOK_OF_BINDING_MARID.get()))
);
}

private static CraftingRecipe makeRecipe(ItemStack bookOfBinding) {
String group = "occultism.bound_book_of_binding";
var id = new ResourceLocation(Occultism.MODID, group + bookOfBinding.getDescriptionId());
return new ShapelessRecipe(id, group, CraftingBookCategory.MISC,
BoundBookOfBindingRecipe.getBoundBookFromBook(bookOfBinding),
NonNullList.of(Ingredient.EMPTY, Ingredient.of(OccultismItems.DICTIONARY_OF_SPIRITS.get()), Ingredient.of(bookOfBinding)));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,29 @@
import com.klikli_dev.occultism.crafting.recipe.MinerRecipe;
import com.klikli_dev.occultism.crafting.recipe.RitualRecipe;
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
import com.klikli_dev.occultism.integration.BoundBookRecipeMaker;
import com.klikli_dev.occultism.integration.emi.recipes.CrushingRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.MinerRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.RitualRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.SpiritFireRecipeCategory;
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
import com.klikli_dev.occultism.registry.*;
import com.klikli_dev.occultism.registry.OccultismBlocks;
import com.klikli_dev.occultism.registry.OccultismEntities;
import com.klikli_dev.occultism.registry.OccultismItems;
import com.klikli_dev.occultism.registry.OccultismRecipes;
import dev.emi.emi.api.EmiEntrypoint;
import dev.emi.emi.api.EmiInitRegistry;
import dev.emi.emi.api.EmiPlugin;
import dev.emi.emi.api.EmiRegistry;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiCraftingRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraftforge.registries.ForgeRegistries;
Expand All @@ -34,10 +41,10 @@ public class OccultismEmiPlugin implements EmiPlugin {
public static final EmiStack DIMENSIONAL_MINESHAFT = EmiStack.of(OccultismBlocks.DIMENSIONAL_MINESHAFT.get());
public static final EmiStack GOLDEN_SACRIFICIAL_BOWL = EmiStack.of(OccultismBlocks.GOLDEN_SACRIFICIAL_BOWL.get());
public static final ResourceLocation EMI_WIDGETS = new ResourceLocation(Occultism.MODID, "textures/gui/emi/widgets.png");
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));
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));
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));
public static final EmiRecipeCategory MINER_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "miner"), DIMENSIONAL_MINESHAFT, new EmiTexture(EMI_WIDGETS, 48, 0, 16, 16));
public static final EmiRecipeCategory RITUAL_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "ritual"),GOLDEN_SACRIFICIAL_BOWL , new EmiTexture(EMI_WIDGETS, 64, 0, 16, 16));
public static final EmiRecipeCategory RITUAL_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "ritual"), GOLDEN_SACRIFICIAL_BOWL, new EmiTexture(EMI_WIDGETS, 64, 0, 16, 16));

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

emiRegistry.addCategory(RITUAL_CATEGORY);
emiRegistry.addWorkstation(RITUAL_CATEGORY, GOLDEN_SACRIFICIAL_BOWL);
RecipeManager manager=emiRegistry.getRecipeManager();
for(SpiritFireRecipe recipe: manager.getAllRecipesFor(OccultismRecipes.SPIRIT_FIRE_TYPE.get())) {
RecipeManager manager = emiRegistry.getRecipeManager();
for (SpiritFireRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.SPIRIT_FIRE_TYPE.get())) {
emiRegistry.addRecipe(new SpiritFireRecipeCategory(recipe));
}
for(CrushingRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.CRUSHING_TYPE.get())){
for (CrushingRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.CRUSHING_TYPE.get())) {
emiRegistry.addRecipe(new CrushingRecipeCategory(recipe));
}

for(MinerRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())){
if(recipe.getIngredients().get(0).values.length==1) {
for (MinerRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())) {
if (recipe.getIngredients().get(0).values.length == 1) {
if (recipe.getIngredients().get(0).values[0] instanceof Ingredient.TagValue) {
var tag = ((Ingredient.TagValue) recipe.getIngredients().get(0).values[0]).tag;
if(!MinerRecipeCategory.totalWeights.containsKey(tag))
MinerRecipeCategory.totalWeights.put(tag,0L);
MinerRecipeCategory.totalWeights.put(tag,MinerRecipeCategory.totalWeights.get(tag)+recipe.getWeightedOutput().getWeight().asInt());
if (!MinerRecipeCategory.totalWeights.containsKey(tag))
MinerRecipeCategory.totalWeights.put(tag, 0L);
MinerRecipeCategory.totalWeights.put(tag, MinerRecipeCategory.totalWeights.get(tag) + recipe.getWeightedOutput().getWeight().asInt());


}
}
}
for(MinerRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())){
for (MinerRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())) {
emiRegistry.addRecipe(new MinerRecipeCategory(recipe));
}
for(RitualRecipe recipe:manager.getAllRecipesFor(OccultismRecipes.RITUAL_TYPE.get())){
for (RitualRecipe recipe : manager.getAllRecipesFor(OccultismRecipes.RITUAL_TYPE.get())) {
emiRegistry.addRecipe(new RitualRecipeCategory(recipe));
}

for (CraftingRecipe recipe : BoundBookRecipeMaker.createRecipes()) {
var ingredients = recipe.getIngredients().stream().map(EmiIngredient::of).toList();
emiRegistry.addRecipe(new EmiCraftingRecipe(ingredients, EmiStack.of(recipe.getResultItem(RegistryAccess.EMPTY)), recipe.getId(), true));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package com.klikli_dev.occultism.integration.emi.recipes;

import com.klikli_dev.occultism.common.entity.spirit.FoliotEntity;
import com.klikli_dev.occultism.crafting.recipe.CrushingRecipe;
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
import com.klikli_dev.occultism.integration.emi.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
import com.klikli_dev.occultism.integration.emi.render.SpiritWidget;
import com.klikli_dev.occultism.registry.OccultismEntities;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.DrawableWidget;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -26,7 +22,7 @@ public class CrushingRecipeCategory implements EmiRecipe {
private final List<EmiStack> output;

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

@Override
public @Nullable ResourceLocation getId() {
return id;
return this.id;
}

@Override
Expand All @@ -63,15 +59,15 @@ public int getDisplayHeight() {

@Override
public void addWidgets(WidgetHolder widgetHolder) {
widgetHolder.addSlot(input.get(0), 0, 2);
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW,18,2);
widgetHolder.addSlot(this.input.get(0), 0, 2);
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW, 18, 2);

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

0 comments on commit 5e6e726

Please sign in to comment.