Bedrock_Miner Posted March 19, 2015 Share Posted March 19, 2015 Hello everyone! Its me again.. I recently thought about whether its possible to get the obfuscated name for a method or a field at runtime. This would mean you wouldn't have to write two statements to get the fields "field_71428_T" and "timer" from the class Minecraft.class, but you can just write getFieldName("timer", Minecraft.class) and you would automatically have the right field name. Would this be possible? Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Draco18s Posted March 19, 2015 Share Posted March 19, 2015 There's a way of detecting if you're in a deobf environment (I don't use reflection often enough to be using that method, or remember what it's called) and you can do an if(obf) { str = "p_1234_0_" } else { str = "theThing" } and do the reflection with the str variable. Quote 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 More sharing options...
Bedrock_Miner Posted March 19, 2015 Author Share Posted March 19, 2015 Apparently I didnt say clearly what I meant. I wanted to know whether there is a method to find out which obfuscated name belongs to a non-obfuscated name in a special class. For instance, I have a method for this, I insert the class and the unobfuscated name and it returns the obfuscated one. getObfuscatedName(Minecraft.class, "timer") returns: "field_71428_T" Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Draco18s Posted March 19, 2015 Share Posted March 19, 2015 Oh that. Not that I know of. All that info is stored in a CSV file: C:\Users\[username]\.gradle\caches\minecraft\net\minecraftforge\forge\[forge version]\unpacked\conf You want fields.csv and methods.csv and be aware that same-name objects in different classes have different obfuscated names. Quote 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 More sharing options...
Bedrock_Miner Posted March 19, 2015 Author Share Posted March 19, 2015 Basically it would be possible to do the same with a mapping from MCP->SRG. The only problem would be that for some special variables more than one name would be returned. For these variables a special test would be needed which of the names exist in the given class. If you do it right, this method would be as fast as direct reflection. But anyway, I think this is possible, or do I miss something? EDIT: Btw, is there a way to get the csv files for the mapping at runtime in eclipse as well as in the compiled mod somehow without copying them manually? Or do I need to copy them for every minecraft version that has a new mapping? Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Anon10W1z Posted March 20, 2015 Share Posted March 20, 2015 Look at ReflectionHelper.java. It allows you to put the SRG and dev names for fields and find them automatically. Quote Maker of the Craft++ mod. Link to comment Share on other sites More sharing options...
Bedrock_Miner Posted March 20, 2015 Author Share Posted March 20, 2015 I know that there is the possibility to modify a field when providing two possible names, but I want to get the Srg name from the Mcp one.. I think I'll include the mapping files in my library mod and create a class which loads them and acts like a dictionary. Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Bedrock_Miner Posted March 20, 2015 Author Share Posted March 20, 2015 This is a bad idea for several reasons. But oh well, go ahead. Your mod. Why do you think this is a bad idea? And what are the reasons therefore? Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Bedrock_Miner Posted March 20, 2015 Author Share Posted March 20, 2015 I know how I could solve the problem with the non-unique names. On the other hand the copyright is a heavy argument. Didnt know that the data is protected. I think I can forget this idea now if no one has another idea. How unfortunate. Quote http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS Link to comment Share on other sites More sharing options...
Recommended Posts
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.