Thorius Posted January 11, 2021 Share Posted January 11, 2021 (edited) Hi, i'm trying to create a special recipe for a custom recipe type. The problem is that while the recipe exists, the recipe doesn't seem to have any information stored. I made it so that the function matches(CraftingInventory inv, World worldIn) outputs a text to the console if it is called. The recipe is registered the same way as a SpecialRecipe, which works fine for me. However, even though the recipe is in the RecipeManager and it does extend my recipe class, calling matches(CraftingInventory inv, World worldIn) manually does not output anything to the console. I can't find the root of this behaviour, because i checked explicitly that the recipe extends my class. The only thing i can think of are the Sides. Maybe the server side doesn't get the required data. But then again it works for the SpecialRecipe and the SpecialRecipeSerializer is defined for IRecipe, which my custom recipe also implements. So is it inevitable to create a new recipeSerializer or does the problem lie elsewhere? Thanks in advance Edited January 11, 2021 by Thorius Problem solved Quote Link to comment Share on other sites More sharing options...
Thorius Posted January 11, 2021 Author Share Posted January 11, 2021 RecipeInit: package com.thoriuslight.professionsmod.init; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.SpecialRecipeSerializer; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import com.thoriuslight.professionsmod.ProfessionsMod; import com.thoriuslight.professionsmod.item.crafting.DoughRecipe; import com.thoriuslight.professionsmod.item.crafting.SmithChainArmorRecipe; import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; @Mod.EventBusSubscriber(modid = ProfessionsMod.MODID, bus = Bus.MOD) public class RecipeInit { public static final IRecipeSerializer<DoughRecipe> DOUGH_CRAFTING = null; public static final IRecipeSerializer<SmithChainArmorRecipe> CHAINMAIL_CRAFTING = null; @SubscribeEvent public static void registerRecipes(final RegistryEvent.Register<IRecipeSerializer<?>> event) { System.out.println("RECIPE_INITIALIZATION"); event.getRegistry().register(new SpecialRecipeSerializer<>(DoughRecipe::new).setRegistryName(ProfessionsMod.MODID, "dough_crafting")); event.getRegistry().register(new SpecialRecipeSerializer<>(SmithChainArmorRecipe::new).setRegistryName(ProfessionsMod.MODID, "chainmail_crafting")); } } DoughRecipe is the normal SpecialRecipe SmithChainArmorRecipe: (kind of a mess right now, because i'm focusing on getting it to work) package com.thoriuslight.professionsmod.item.crafting; import java.util.List; import com.google.common.collect.Lists; import com.thoriuslight.professionsmod.init.ItemInit; import com.thoriuslight.professionsmod.init.RecipeInit; import com.thoriuslight.professionsmod.init.SkillInit; import com.thoriuslight.professionsmod.item.ButtedChainArmorItem; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; public class SmithChainArmorRecipe implements ISmithRecipe{ private final ItemStack recipeOutput; private final ResourceLocation id; private final int requiredSkills; public SmithChainArmorRecipe(ResourceLocation id){ this.id = id; this.requiredSkills = SkillInit.WEAK_CHAIN_ARMOR.getId(); this.recipeOutput = new ItemStack(ItemInit.COPPER_BUTTED_CHAIN_BOOTS.get()); } @Override public boolean matches(CraftingInventory inv, World worldIn) { System.out.print("its working"); List<ItemStack> list = Lists.newArrayList(); boolean chainArmor = false; boolean chain = false; for(int i = 0; i < inv.getSizeInventory(); ++i) { ItemStack itemstack = inv.getStackInSlot(i); if (!itemstack.isEmpty()) { list.add(itemstack); if(itemstack.getItem() instanceof ButtedChainArmorItem) chainArmor = true; if(itemstack.getItem() == ItemInit.COPPER_CHAIN.get()) chain = true; } } if (list.size() == 2 && chain && chainArmor) { ItemStack stack = null; for(int j = 0; j < 2; ++j) { if(list.get(j).getItem() instanceof ButtedChainArmorItem) { stack = list.get(j); break; } } if(stack != null) { if(stack.getDamage() != 0) return true; } } return false; } @Override public boolean isUnlocked(int skillList) { skillList &= this.requiredSkills; return skillList == this.requiredSkills; } @Override public ItemStack getCraftingResult(CraftingInventory inv) { return this.recipeOutput.copy(); } @Override public boolean canFit(int width, int height) { return width * height >= 2; } @Override public ItemStack getRecipeOutput() { return ItemStack.EMPTY; } @Override public ResourceLocation getId() { return this.id; } @Override public IRecipeSerializer<?> getSerializer() { return RecipeInit.CHAINMAIL_CRAFTING; } @Override public Ingredient getInput() { return null; } @Override public NonNullList<Ingredient> getIngredients() { return null; } public int getRequirements() { return this.requiredSkills; } @Override public boolean isDynamic() { return true; } } ISmithRecipe: package com.thoriuslight.professionsmod.item.crafting; import javax.annotation.Nonnull; import com.thoriuslight.professionsmod.ProfessionsMod; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; public interface ISmithRecipe extends IRecipe<CraftingInventory>{ ResourceLocation RECIPE_TYPE_ID = new ResourceLocation(ProfessionsMod.MODID, "smith"); @Nonnull @Override default IRecipeType<?> getType() { return Registry.RECIPE_TYPE.getValue(RECIPE_TYPE_ID).get(); } @Override default boolean canFit(int width, int height) { return false; } Ingredient getInput(); boolean isUnlocked(int skillList); } Other SmithRecipes specified elsewhere with json files are working fine. Quote Link to comment Share on other sites More sharing options...
Thorius Posted January 11, 2021 Author Share Posted January 11, 2021 Thanks for your reply, it seems i made the wrong assumptions because of some mistakes on my part. The function is called properly but i wrote print instead of println and it is also fine for another function to return null. So the remaining problems are unrelated to this topic and i can manage them by myself. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.