Posted June 9, 20178 yr 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?
June 9, 20178 yr 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. 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.
June 9, 20178 yr Author 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 .
June 9, 20178 yr 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. 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.
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.