Jump to content

[1.16] Removing Brewing Recipes From The Registry


OberonPuck

Recommended Posts

I have been doing some research to figure out how to remove recipes from the BrewingRecipeRegistry. Most of the results I have found pertain to crafting recipes and are all from 1.12.2. I have tried to use the information for my mod, which is in 1.16, but it doesn't work. I am assuming this is because I am either missing some key concept or I botched the code. Regardless, one of the solutions I found was using IForgeRegistryModifiable#remove, but I am having trouble casting BrewingRecipeRegistry to make it modifiable and am not even sure if that is the correct way to go about this.

But essentially what I want to do is this:

BrewingRecipeRegistry.getEntries().remove(1);

I know that is not the actual syntax and that it doesn't work because getEntries() returns an immutable list, but I hope you catch my gist.

I have found ways to add brewing recipes, and this is the next logical step in my mod.

Edited by OberonPuck
Link to comment
Share on other sites

BrewingRecipeRegistry isn't a Forge registry, you need to use reflection to access the underlying array object.

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

Okay, so I attempted to do as you said, but I think I went about it incorrectly. The crash log says that I cannot cast an ArrayList to an AccessibleObject. However, I do not know how to make the ArrayList accessible in another way.

Here is my code. If you know a way to correct it, I would appreciate the help:

private static List<IBrewingRecipe> recipeRegistryArray;

@SuppressWarnings("unchecked")
	private static List<IBrewingRecipe> recipes()
	{
		if(recipeRegistryArray == null)
		{
			try {
				recipeRegistryArray = (List<IBrewingRecipe>)((ObfuscationReflectionHelper.findField(BrewingRecipeRegistry.class, "recipes").get(null)));
			} catch (IllegalArgumentException | IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			((AccessibleObject) recipeRegistryArray).setAccessible(true);
		}
		return recipeRegistryArray;
	}

 

Link to comment
Share on other sites

5 minutes ago, OberonPuck said:

ArrayList to an AccessibleObject

I agree. Trying to set something as accessible when ObfuscationReflectionHelper::findField already does that for you makes no sense. Also casting an object to another with no relation also is bonkers.

 

Just remove you trying to set accessible. Also, if you want to remove individual vanilla brewing recipes, you will need to access the data in PotionBrewing.

Link to comment
Share on other sites

Also also, you need to pass in the SRG name, not the MCP name.

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

8 hours ago, Draco18s said:

Also also, you need to pass in the SRG name, not the MCP name.

So, I don't know how to do that, but removing the .setAccessible worked like a charm. Thank you so much @ChampionAsh5357, and @Draco18s as well. Though, I have another issue that is tangentially related to potion brewing. Should I just ask it here or create a new thread?

Link to comment
Share on other sites

1 hour ago, ChampionAsh5357 said:

I thought Forge classes are not obfuscated?

Forge classes aren't, you are correct. I thought that BrewingRecipeRegistry was a Vanilla class.

Good catch.

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.

Announcements



×
×
  • Create New...

Important Information

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