Jump to content

Recommended Posts

Posted

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.

Posted

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

Posted

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?

Posted

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

Posted

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.

Posted

As Kineriderf has said, use your own custom IRecipe class. They are absolutely great for all sorts of complex recipies :D

We all stuff up sometimes... But I seem to be at the bottom of that pot.

Posted

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.

Posted

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.

Posted

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.

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.

Announcements



×
×
  • Create New...

Important Information

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