Jump to content

[1.7.2] Turn Off Pickaxe Recipe Mirroring?


doctortab

Recommended Posts

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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;
    }
}

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.