Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

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.

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

  • 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?

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

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.

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.

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.

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.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.