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

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

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.

  • Author
1 hour ago, Draco18s said:

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

Thanks, I will attempt to do so and let you know what ends up happening.

  • Author

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;
	}

 

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.

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.

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

8 hours ago, Draco18s said:

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

I thought Forge classes are not obfuscated?

 

And if it still relates back to the original topic then sure.

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.

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.