Posted July 20, 20205 yr 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 July 20, 20205 yr by OberonPuck
July 20, 20205 yr 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.
July 20, 20205 yr 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.
July 20, 20205 yr 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; }
July 20, 20205 yr 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.
July 20, 20205 yr 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.
July 21, 20205 yr 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?
July 21, 20205 yr 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.
July 21, 20205 yr 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.