Jump to content

Conditional crafting recipes?


Alekseyev

Recommended Posts

Hi all, I have a question.

 

Let's say I want to have some crafting recipes that either give a different result are simply unavailable depending on a variable. (The question is not how to store/read this variable, but how to hijack the vanilla crafting process.)

 

Two simple completely arbitrary examples:

 

1. Standard crafting recipe is 4 sand becomes 1 sandstone. Now I want to check some data stored on the player and if variable A = 3, putting 4 sand into the crafting box gives 4 sandstone instead of 1.

2. Usually, putting one piece of sand into the crafting box does nothing. If variable A = 4, it should be able to be crafted into glass.

 

The idea is that this variable can be different for each player, so some should get these crafting options and others not.

 

Is it even possible with vanilla crafting? I know that Thaumcraft has crafting recipes that you have to unlock first and per player, but those use a special custom crafting table.

 

Regards :)

Link to comment
Share on other sites

Yes, see Choonster's TestMod3

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

You'll need to read this variable from the crafting player (ForgeHooks.getCraftingPlayer) in the appropriate methods to determine the return value. You can either hardcode the variable, value and result or allow them to be specified via the JSON recipe file (possibly via the existing recipe conditions system, like I do in the class Draco18s linked).

 

For a dynamic input item, you'll need to create your own Ingredient implementation and override Ingredient#apply to check the variable and return true or false depending on its value and the ItemStack argument.


For a dynamic output item, you'll need to create your own IRecipe implementation (probably extending an existing one like ShapedOreRecipe/ShapelessOreRecipe) and implement IRecipe#getCraftingResult to check the variable and return the appropriate item.

 

For a dynamically unlocked recipe, you'll need to create your own IRecipe implementation and implement IRecipe#matches to check the variable and return false if it's not the right value.

 

7 hours ago, Draco18s said:

Yes, see Choonster's TestMod3

 

That class allows for load-time conditions to enable/disable an Ingredient, which isn't quite what the OP wants.

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

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.