Posted August 10, 201411 yr So, I am trying to make two different pickaxes that have mirrored crafting recipes (one is YYX and the other is XYY), when I actually craft them, if both instances they make the same pickaxe. Here's the crafting recipe code: GameRegistry.addShapedRecipe(new ItemStack(ModTools.SWWPickaxe, 1), "XYY", " A ", " A ", 'Y', Blocks.planks,'X', Blocks.cobblestone, 'A', Items.stick); GameRegistry.addShapedRecipe(new ItemStack(ModTools.WWSPickaxe, 1), "YYX", " A ", " A ", 'Y', Blocks.planks, 'X', Blocks.cobblestone, 'A', Items.stick); I know I am calling upon the right items because when I try to craft one of them it works, but the YYX one crafts the XYY one and I do not want that. Both of the pickaxes exist in the game, too, so I don't know what's happening.
August 10, 201411 yr did you notice one thing you used same items at both recipes, and it make the same because of that Proud mod developer of: Mob Armor mod Block monster mod Clay Living Dolls mod Much More Spiders mod Elemental cows reborn Mr gorilla mod
August 10, 201411 yr Author did you notice one thing you used same items at both recipes, and it make the same because of that But for the mod I'm doing, I need to use the same items. Is there any way to override the mirroring for that recipe?
August 10, 201411 yr idk, but its not possible only if you like exchange items, for example cobblestone with stone or, oak planks with logs Proud mod developer of: Mob Armor mod Block monster mod Clay Living Dolls mod Much More Spiders mod Elemental cows reborn Mr gorilla mod
August 10, 201411 yr Make your own IRecipe class... I made a similar mod yesterday and I needed the same so I copied the vanilla shaped recipe code and removed one of the match checks. If I helped please press the Thank You button.
August 11, 201411 yr As Kineriderf has said, use your own custom IRecipe class. They are absolutely great for all sorts of complex recipies We all stuff up sometimes... But I seem to be at the bottom of that pot.
August 11, 201411 yr It isn't necessary to make your own IRecipe class, just instantiate a ShapedRecipes with the parameters (3, 3, new ItemStack[]{new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.planks), new ItemStack(Blocks.planks), null, , new ItemStack(Items.stick), null, , new ItemStack(Items.stick), null}, new ItemStack(ModTools.SWWPickaxe, 1)) The array to crafting table looks like this: 012 345 678 Where the index represents the slot in a crafting table. Then to register your recipes do CraftingManager.getInstance().getRecipeList().add(theShapedRecipesInstance); I wrote my own mod to add custom recipes to minecraft and this is how i register the recipes. https://github.com/xandayn/Personalized-Recipes/blob/master/java/common/xandayn/personalrecipes/recipe/handlers/ShapedRecipeHandler.java#L38 ShapedRecipes is in the net.minecraft.item.crafting package. Sorry I actually was incorrect, you do need to make a custom IRecipe, I misunderstood the question when I reread it I realized what you were asking.
August 11, 201411 yr Author Thank you all for your help! I really was stumped on what to do here. How do I do that?
August 11, 201411 yr You'll need to make a class similar to vanilla's ShapedRecipes, I can't post the code here as it's not legal to post vanilla minecraft code but I believe function at line 61 is where the mirror checking happens, all you need to do is loop through the itemstacks in the inventoryCrafting provided by the matches function and make sure that all the slots are equal to the itemstacks in the recipe and if they are the recipe matches, if not then the recipe is different.
August 11, 201411 yr I've gone ahead and written the recipe class you need, you're free to use it if you want. It will only allow the exact recipe to work and not the mirrored version. To add the recipe using this class you just need to call CraftingManager.getInstance().getRecipeList().add(mirrorlessShapedRecipeInstance); import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.world.World; public class MirrorlessShapedRecipe implements IRecipe { private final ItemStack[] recipe; private final ItemStack output; public MirrorlessShapedRecipe(ItemStack output, ItemStack[] recipe){ this.recipe = recipe; this.output = output; } @Override public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) { for(int y = 0; y < 3; ++y){ for(int x = 0; x < 3; ++x){ ItemStack itemInSlot = p_77569_1_.getStackInRowAndColumn(x, y); ItemStack recipeSlot = recipe[y * 3 + x]; if(itemInSlot != null || recipeSlot != null) { if ((itemInSlot == null && recipeSlot != null) || (itemInSlot != null && recipeSlot == null)) { return false; } if (itemInSlot.getItem() != recipeSlot.getItem()) { return false; } if(recipeSlot.getItemDamage() != Short.MAX_VALUE && recipeSlot.getItemDamage() != itemInSlot.getItemDamage()){ return false; } } } } return true; } @Override public ItemStack getCraftingResult(InventoryCrafting p_77572_1_) { return output; } @Override public int getRecipeSize() { return 9; } @Override public ItemStack getRecipeOutput() { return output; } }
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.