Paladin Posted June 9, 2017 Posted June 9, 2017 Hello, I'm creating a mod in which I'd like to adjust a value of one private variables in the Minecraft's original MapGenVillage.class. The variables I'm trying to change: private int distance; I made an attempts using the Reflection Helper to access and modify these values but: ReflectionHelper.setPrivateValue(MapGenVillage.class, null, 8, 2); Doesn't solve the problem at all (I think it throws a NullPointerException). Is there a way I can change the value without an instance of the class? Quote
Choonster Posted June 9, 2017 Posted June 9, 2017 No, it's an instance field so you need to specify which instance to change the field's value for. If you get/set the value of a field or call a method with reflection more than once, you should use ReflectionHelper.findField/findMethod to look up the Field/Method object, store it in a private static field and then use it whenever you need to interact with the field/method. Looking up the Field/Method object is relatively slow, so you should only do it once. 1 Quote Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
Paladin Posted June 9, 2017 Author Posted June 9, 2017 Thanks for the response, but the problem is that I want to edit that private value so that it allows villages to spawn closer together when vanilla minecraft generates them... I don't need to reference the value in my own mod's code. But if I need an instance, I might as well create my own custom MapGenVillage.class. I wasn't planning on doing this simply because I thought that'll be a lot of effort when I could just to change one private variable in vanilla minecraft's code to solve my problem . Quote
Choonster Posted June 9, 2017 Posted June 9, 2017 InitMapGen is fired when ChunkProviderOverworld/ChunkProviderHell initialise their MapGenBase instances, you can use this to replace or modify them. InitMapGenEvent#getType will return InitMapGenEvent.EventType.VILLAGE when the MapGenBase being initialised (InitMapGenEvent#getOriginalGen) is a MapGenVillage. Quote Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
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.