Jump to content

[1.11] Vanilla 3x3 recipes on larger crafting grids.


wehttam664

Recommended Posts

Long story short, I've got a 5x5 crafting grid that I want to be able to handle 3x3 recipes, much like how 3x3 grids can take 2x2s. The 3x3 recipes work, but only in the upper left 3x3 of the grid, and it seems to completely ignore any items in the remainder of the 5x5, even if those items are a valid shapeless recipe, which work perfectly fine.

Upon further investigation, it seems that ShapedRecipes is the only class at fault. ShapelessRecipes, ShapedOreRecipes, and ShapelessOreRecipes all behave exactly as I want them to, so I investigated and source and discovered the actual issue in the matches(InventoryCrafting, World) method. It seems that the shaped recipes class has hard-coded a 3 into the code, while the other three recipes all utilize the width and height of the given inventory.

The code in question, ShapedRecipes:58:

public boolean matches(InventoryCrafting inv, World worldIn) {
  for (int i = 0; i <= 3 - this.recipeWidth; ++i) {
    for (int j = 0; j <= 3 - this.recipeHeight; ++j) {
      // those 3's are the issue, I assume
      // all the other implementations use inv.getWidth() and inv.getHeight() 
      
      // ...
          

 

I'd like to solve this issue without going through the mess of CoreMods and ASM (primarily because I have no idea how to do that), but I don't mind doing it if I have to.

Is there a solution to this?

Link to comment
Share on other sites

10 hours ago, diesieben07 said:

You would have to first verify that only a 3x3 section of the grid is being used and then create a temporary InventoryCrafting that "simulates" a 3x3 grid using that 3x3 area.

I originally tried this, but the issue because immediately apparent after the crafting completed. There's no real way to distinguish where on the grid the "remaining items" should be placed, and they usually just get placed in the first 9 slots (with is not the upper left 3x3, but rather the first row of five then four from the second row). The "remaining items" do work off the given inventory size and faking it a 3x3 causes it to behave incorrectly.

 

10 hours ago, Jay Avery said:

You can create your own IRecipe implementation, and use it in a custom crafting manager for your 5x5 device - it'll just mean manually re-adding the vanilla recipes you want to keep.

Trying to avoid this, as copying recipes out of the vanilla manager tends to leave several mod recipes behind, since Forge loads mods that do not depend on one-another in a pretty random (and inconsistent) order and I miss recipes loaded after my mod.

 

I'm starting to like the idea of patching this class more and more, but I'm not entirely sure how to do so.

Link to comment
Share on other sites

15 minutes ago, wehttam664 said:

There's no real way to distinguish where on the grid the "remaining items" should be placed

How about where they already are?

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

6 minutes ago, Draco18s said:

How about where they already are?

If I use the simulated InventoryCrafting, "where they already are" is the first nine slots (no matter where the grid they used to be), leading to the issue I described.

Edited by wehttam664
Typo
Link to comment
Share on other sites

Obviously you know--or can determine--which 9 slots you passed into the simulated InventoryCrafting.

Which means you can do the reverse in order to place items.  "Oh, my top-left corner is [0][1] -> pass as input" later "Ok I need to construct output, here's the top-left corner, where does it go again? Oh right my top-left corner for input is [0][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

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.