chylex Posted January 12, 2014 Share Posted January 12, 2014 Hey, in 1.6.4, it was possible to access private/protected fields and methods because Forge would make them all public on runtime, but I can't quite get it working in 1.7.2 because it's harder to edit Minecraft sources. Here's what I have got so far - I setup Forge using gradlew.bat setupDecompWorkspace eclipse, extracted the sources from Gradle cache (forge-1.7.2-10.12.0.998-src.jar) and put it in Eclipse. Now, it works fine when I run it in Eclipse, but not when I try to build it. I built a jar file with changed Minecraft sources, but I'm not quite sure how to force Gradle to use it instead of the original one - if I replace one of the jars in cache, Gradle notices and replaces it. I've never worked with Gradle before, and the ability to change accessibility is very important, so if anyone has figured out how to get it working, please let me know . Also, don't suggest reflection, that would be the very last resort. Quote Link to comment Share on other sites More sharing options...
GotoLink Posted January 12, 2014 Share Posted January 12, 2014 Using an access transformer. The *_at.cfg file will be detected by ForgeGradle on setup, and the changes will be applied to the source. Quote Link to comment Share on other sites More sharing options...
chylex Posted January 12, 2014 Author Share Posted January 12, 2014 Using an access transformer. The *_at.cfg file will be detected by ForgeGradle on setup, and the changes will be applied to the source. That's pretty fancy, got it working. Thanks! Quote Link to comment Share on other sites More sharing options...
Kukipett Posted January 12, 2014 Share Posted January 12, 2014 You also can use reflexion to access private or protected variables or methods. I had to do it to acces a protected variable in the block class and it works fine. In fact it's easy to achieve. Quote Link to comment Share on other sites More sharing options...
GotoLink Posted January 12, 2014 Share Posted January 12, 2014 OP specifically said he didn't want someone to suggest reflection. Quote Link to comment Share on other sites More sharing options...
Tyron Posted January 13, 2014 Share Posted January 13, 2014 You also can use reflexion to access private or protected variables or methods. I had to do it to acces a protected variable in the block class and it works fine. In fact it's easy to achieve. When I do that I get the Exception Message: Class [mymod] can not access a member of class net.minecraft.entity.monster.EntityEnderman with modifiers "private static" When using Reflection, are the sources also required as chylex instructed? If yes, where the gradle cache? Any help is very appreciated! Quote Link to comment Share on other sites More sharing options...
Kukipett Posted January 13, 2014 Share Posted January 13, 2014 For private or protected methods anf fields you have to specify for your field or method that you allows acces by adding field.setAccessible(true); or method.setAccessible(true); Quote Link to comment Share on other sites More sharing options...
Tyron Posted January 14, 2014 Share Posted January 14, 2014 For private or protected methods anf fields you have to specify for your field or method that you allows acces by adding field.setAccessible(true); or method.setAccessible(true); Thanks for your answer, that worked! Quote Link to comment Share on other sites More sharing options...
mnn Posted August 15, 2014 Share Posted August 15, 2014 Always keep in mind though that reflection gives quite a performance penalty. The penalty is not always high as shown for example here. Also if reflection is used not that often (e.g. few calls after an entity spawn or after world is created) it really doesn't matter what technique is used (but ATs are more difficult to setup and can change a lot in future versions, just as changed now with gradle). Quote mnn.getNativeLang() != English If I helped you please click on the "thank you" button. 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.