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

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.

Using an access transformer.

The *_at.cfg file will be detected by ForgeGradle on setup, and the changes will be applied to the source.

  • Author

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!

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.

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!

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

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!

  • 7 months later...

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).

mnn.getNativeLang() != English

If I helped you please click on the "thank you" button.

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.