Jump to content

[1.12] Add crafting recipes


JimiIT92

Recommended Posts

I have this json recipe in assets/modid/recipes folder

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "AAA",
    "ASA",
    "AAA"
  ],
  "key": {
    "S": {
      "item": "mw:ruby"
    },
    "A": [
      {
        "item": "minecraft:stone",
      },
    ]
  },
  "result": {
    "item": "mw:ruby_ore",
    "data": 0
  }
}



But in game is not working, so i guess i have to register it. So how can i register a crafting recipe in 1.12? :)

  • Like 1

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

2 minutes ago, JimiIT92 said:

assets/modid/recipes

Does the path actually contain "modid"? Because it should be the actual modid of your mod.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Yes, i said "modid" to be generic, but the actual path is assets/mw/recipes (since mw is my mod id). Other things like blocks and items works as well so i guess is not a wrong folder path

Edited by JimiIT92

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

Do you get any errors about recipes when loading the game? I'm asking because JSONLint gives an error at 

"A": [
      {
        "item": "minecraft:stone",
      },
    ]

as you have a spare comma after the "item" tag. Other than that, I can't see anything wrong.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

1 hour ago, IceMetalPunk said:

Can you actually register recipes from the JSON files? I've been using GameRegistry.addShapedRecipe / GameRegistry.addShapelessRecipe in 1.12, and it works just fine...

Yes. Json files is the 1.12 way.

  • Like 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

2 minutes ago, Draco18s said:

Yes. Json files is the 1.12 way.

 

I wonder if this is the cause of my previous crashing problem I asked about in another topic that was never answered. If I were to have a recipe in its .json form and also register it through addShapedRecipe / addShapelessRecipe, would that cause a conflict and crash? (The error message received is a generic JVM one, so I didn't know where the problem was other than it only happened when I added the advancement and recipe .json files.)

Edited by IceMetalPunk
Added quote

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

10 hours ago, larsgerrits said:

Do you get any errors about recipes when loading the game? I'm asking because JSONLint gives an error at 


"A": [
      {
        "item": "minecraft:stone",
      },
    ]

as you have a spare comma after the "item" tag. Other than that, I can't see anything wrong.

Woops. By the way that comma was not the problem, i removed that but the recipe is still not working. I guess i must register it before but can't figure out how

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

The recipe should be registered automatically if your json is being loaded properly.

Do you actually get nothing in the output slot when trying to craft the recipe in-game? or is the recipe just not showing up in the recipe book in-game?

To get the recipe to show in the book, you should do the command: /recipe give @p <name of your recipe> in-game.

Link to comment
Share on other sites

Hi there,

 

I was on the outlook for beginners information about "how to add a recipe" and started worrying about not finding beginner-friendly information about itemStacks and shapeless registries, when passing by this topic. And I can confirm the error you are observing.

 

The idea just to add a recipe.json in a designated folder and having all the magic done by forge did sound fabulous. So I copied your json file from the very first post, removed the comma-errors (why do you have an array containing the minecraft-stone?) and replaced all with stuff from my mod. And it worked perfectly. That is what it does look alike. 

Spoiler

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "ASA",
    "A A",
    "ASA"
  ],
  "key": {
    "S": {
      "item": "ianusinchq:tutorial_ingot"
    },
    "A": [
      {
        "item": "ianusinchq:tutorial_nugget"
      }
    ]
  },
  "result": {
    "item": "ianusinchq:tutorial_ore",
    "data": 0
  }
}

 

More or less the same as you did, but with mod-exclusive items only. 

 

Than I added another part into it (attention, in relation to the attached picture, it was minecraft:stone what was there at the moment of screenshot)

Spoiler

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "ASA",
    "ACA",
    "ASA"
  ],
  "key": {
    "S": {
      "item": "ianusinchq:tutorial_ingot"
    },
    "A":
      {
        "item": "ianusinchq:tutorial_nugget"
      },
    "C":
    {
      "item": "minecraft:sand"
    }

  },
  "result": {
    "item": "ianusinchq:tutorial_ore",
    "data": 0
  }
}

 

But this didn't work after all. As you might see I added two pictures from both recipes..... and I think I might need some online space to share pictures, because having them fully expanded at the end of my posts might be irritating to some. 

Next I was like "maybe its not called "stone" any more, which made me seek out one of the jars and... moron I am I looked inside the 1.11.2.jar. Waitaminute... no, its the same in 1.12.jar: there is a stone.json as a block and an item too, so that should not be the error. 

Next step was replacing stone with somethig else... like sand. My crafting table is situated at a beach (and it was the only blockItem I could identify shortly). With the same result: does not work.

 

And then I went to the logfiles. 

latestLog doesn't know any recipe. 

fml-junk does know one of the recipes: the one that contains just the mod items

fml-client-latest finally offered some insight, aaaand... I'll be so bold to assume, that this may be something that comes from forge itself, isn't it? Have a look: 

Spoiler

13:50:53] [main/DEBUG] [FML/]: Bar Finished: Rendering Setup took 6.572s
[13:50:54] [main/ERROR] [FML/]: Parsing error loading recipe ianusinchq:tutorial_recipe2
com.google.gson.JsonParseException: Missing data for item 'minecraft:sand'
    at net.minecraftforge.common.crafting.CraftingHelper.getItemStackBasic(CraftingHelper.java:256) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.lambda$init$37(CraftingHelper.java:531) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.getIngredient(CraftingHelper.java:201) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.lambda$init$35(CraftingHelper.java:468) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.getRecipe(CraftingHelper.java:402) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.lambda$loadRecipes$42(CraftingHelper.java:702) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.findFiles(CraftingHelper.java:790) ~[CraftingHelper.class:?]
    at net.minecraftforge.common.crafting.CraftingHelper.loadRecipes(CraftingHelper.java:659) ~[CraftingHelper.class:?]
    at java.util.ArrayList.forEach(ArrayList.java:1249) [?:1.8.0_66]
    at net.minecraftforge.common.crafting.CraftingHelper.loadRecipes(CraftingHelper.java:614) [CraftingHelper.class:?]
    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:779) [Loader.class:?]
    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:343) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:576) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:416) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_66]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_66]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_66]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_66]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_66]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_66]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
[13:50:54] [main/TRACE] [minecraft/minecraft]: Sending event FMLInitializationEvent to mod minecraft
[13:50:54] [main/TRACE] [minecraft/minecraft]: Sent event FMLInitializationEvent to mod minecraft

Well... I cannot say if the number (tutorial_recipe2) is legal... okay, renamed it to "tutorial_stuff.json" and... no, same error.

 

 

It didn't recognize the minecraft:sand item (or stone)... so aren't they available at the moment of parsing, or do we use a wrong naming scheme for them?

 

EDIT: I thing I rember some post with a link inside where the chief developers told that there where some changes made in 1.12 which aren't included into forge at the moment, and all we could do was being patient. Is this error about this, or is it something else?

 

Greetings, ConfusedMerlin

working.png

notworking.png

Edited by ConfusedMerlin
did remember something
Link to comment
Share on other sites

I don't know what causes it, or if it is blocks only because for me, it works fine for vanilla items. Here's my json file...

{
  "result": {
    "item": "am:line_button"
  },
  "pattern": [
    " s ",
    "sbs",
    "sss"
  ],
  "type": "minecraft:crafting_shaped",
  "key": {
    "s": {
      "item": "am:steel_ingot"
    },
	"b": {
		"item": "minecraft:stone_button"
	}
  }
}

Let me try changing it to stone...

Nope, doesn't work for stone... Maybe it has something to do with the block metadata? Because sand and stone both have other blocks using meta...

Jup, that was it.. Actually looking at the code printing the error in the console that's exactly the thing... Take a look:

        if (item.getHasSubtypes() && !json.has("data"))
            throw new JsonParseException("Missing data for item '" + itemName + "'");

So, you need to add "data": 0 to your file.

Classes: 94

Lines of code: 12173

Other files: 206

Github repo: https://github.com/KokkieBeer/DeGeweldigeMod

Link to comment
Share on other sites

Oh, someone found the cure for that error already?

 

4 minutes ago, Kokkie said:

 

So, you need to add "data": 0 to your file.

 

Ehm... and where does it need to go to? *thinking*

...

Oh, like this: 

Spoiler

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "ASA",
    "ACA",
    "ASA"
  ],
  "key": {
    "S": {
      "item": "ianusinchq:tutorial_ingot"
    },
    "A":
      {
        "item": "ianusinchq:tutorial_nugget"
      },
    "C":
    {
      "item": "minecraft:sand",
      "data": 0
    }

  },
  "result": {
    "item": "ianusinchq:tutorial_ore",
    "data": 0
  }
}

 

observe the changes I made below minecraft:sand

 

Still, what does this do to make the error message I found in one of my logs go away completely? 

 

Anyway, thanks for finding a solution,

 

Greetings, Confused Merlin

Link to comment
Share on other sites

4 minutes ago, ConfusedMerlin said:

Still, what does this do to make the error message I found in one of my logs go away completely? 

Forge checks if the block/item has a subitem, if it has it looks for the data you provided in the json file.

 

16 minutes ago, Kokkie said:

if (item.getHasSubtypes() && !json.has("data"))

If you didn't provide any data, instead of just passing 0 which would be logical to do, it ignores the whole file and throws an exception.

 

16 minutes ago, Kokkie said:

throw new JsonParseException("Missing data for item '" + itemName + "'");

But if you do provide the data it doesn't throw any exception and just continues, so it (obviously) doesn't show up in the logs/console.

Anyway, great to see I could help. :D

Classes: 94

Lines of code: 12173

Other files: 206

Github repo: https://github.com/KokkieBeer/DeGeweldigeMod

Link to comment
Share on other sites

Ok, so if a block has a variant but you don't want to use a specific one you still need to specify it? That means, if the block has 10 variants, that you have to specify 10 recipes changing the data value every time? :/

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

Thank you. Infact having this file 

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "AAA",
    "ASA",
    "AAA"
  ],
  "key": {
    "S": {
      "item": "mw:ruby"
    },
    "A": 
      {
        "item": "minecraft:stone",
        "data": 0
      }
  },
  "result": {
    "item": "mw:ruby_ore",
    "data": 0
  }
}



Now the recipe work. But i've noticed is not going in the proper tab on the recipe book. For example, this recipe refers to a building block, how can i display it in that tab and not only in the "all recipes" tab?

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

4 hours ago, Kokkie said:

Indeed.

Wow. That  is  bad. So the old ore dictionary wildcarding is no longer a thing for input ingredients? What about custom IRecipe implementations? (sorry I've not started 1.12 porting yet but I'm trying to keep track of all the gotchas others seem to be having...)

Link to comment
Share on other sites

5 hours ago, JimiIT92 said:

Ok, so if a block has a variant but you don't want to use a specific one you still need to specify it? That means, if the block has 10 variants, that you have to specify 10 recipes changing the data value every time? :/

According to the vanilla recipe files, no; you can specify an array of items for any of the ingredient keys, and any item which is included in that array will match for your recipe. That's how the bed recipe checks for all the different planks, at least; I'd hope Forge is able to handle it, too :)

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

I hope I'm not "hijacking" this topic (if I am, let me know and I'll post my own topic for this), but I'm having a very similar problem now that I'm trying to transition to recipe .json files instead of using the #add[X]Recipe methods. I'm testing the transition with just one item, and although the recipe works (I can craft it), it's not showing up in the recipe book. I have, in fact, called /recipe give @a * to make sure I've unlocked the recipe; then I even specified the item in that command and it told me I already have the recipe for it. And yet, it's not anywhere in the recipe book. (I've tried searching for its name, and also just looking through every page of the book to the end, and it's not there.)

 

The JSON file (which I assume is okay, since the recipe itself works) contains this:

 

{
  "type": "minecraft:crafting_shaped",
  "group": "redplusplus:diamond_pressure_plate",
  "pattern": [
    "DD"
  ],
  "key": {
    "D": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "redplusplus:diamond_pressure_plate",
	"data":0
  }
}

If the recipe is properly loading, shouldn't it also be properly added to the recipe book? (Note: I tried removing the group and it didn't change anything.)

Whatever Minecraft needs, it is most likely not yet another tool tier.

Link to comment
Share on other sites

8 hours ago, The_Wabbit said:

Wow. That  is  bad. So the old ore dictionary wildcarding is no longer a thing for input ingredients? What about custom IRecipe implementations? (sorry I've not started 1.12 porting yet but I'm trying to keep track of all the gotchas others seem to be having...)

 

You can still use OreDictionary.WILDCARD_VALUE (32767) as the metadata of an ingredient to match any metadata value.

 

You can create custom IRecipe and Ingredient implementations by creating an IRecipeFactory or IIngredientFactory and specifying them in your _factories.json file.

 

You can see some examples here and here.

  • Like 2

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

19 hours ago, electrohedric said:

Seems like when you set the item's creative tab to CreativeTabs.BUILDING_BLOCKS, it shows up in the blocks tab of the crafting book as well as the building blocks tab of the creative inventory.

That's unfortunate, i hope there will be a way to specify the Recipe Book tab too soon for any block/item that is not in the vanilla creative tabs

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

  • 4 weeks later...

Sorry, can't understand...

I made a new json file in src/main/resource/(MymodID)/recipes. I made it copy-paste the one u had shared, put my things ("MymodID" : "myCostumItem") instead yours. But when I run the game and put all the elements in the crafting table in the right order it doesn't work. Why? Have I to call the Json file somewhere?


Thnx for help

Edited by IlTosaerba
Link to comment
Share on other sites

1 hour ago, IlTosaerba said:

Sorry, can't understand...

I made a new json file in src/main/resource/(MymodID). I made it copy-paste the one u had shared, put my things ("MymodID" : "myCostumItem") instead yours. But when I run the game and put all the elements in the crafting table in the right order it doesn't work. Why? Have I to call the Json file somewhere?


Thnx for help

 

Recipe files need to be in src/main/resources/assets/<modid>/recipes.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

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