June 6, 201510 yr Its good that you are eager to crack this problem. Though I think you shouldn't be sticking to this problem for too long, since the ConfigOptions do work, and are primarily not ment to be changed ingame. I would recommend finnishing up the rest of the mod, and go back to this problem afterwards. Anyway, on to the new problem. are all the customClassMethod Called when they should? (e.g. ConfigHandler - init()method., ModConfiguration - getCategory() method. ) Projects: Discontinued: - N2ConfigAPI - Meachanical Crafting Table Latest: - CollectionUtils Coöperations: - InGameConfigManager
June 6, 201510 yr Author Oooh, some methods in Configuration are still using the default getCategory Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 6, 201510 yr Author I think Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 6, 201510 yr Honestly I dont know if thats is the problem. It wouldnt make sence that your config would be completly empty. I think there should be at least the 'vanilla' configCatagories if it would work this way. Therefore, make sure (with call hiearchy for example) if the methods get called correctly. Otherwise I dont think it will work. Or lex must know what went wrong. Projects: Discontinued: - N2ConfigAPI - Meachanical Crafting Table Latest: - CollectionUtils Coöperations: - InGameConfigManager
June 6, 201510 yr Author I'm really unsure then. Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 6, 201510 yr Author I looked at the code but I don't know why it's not loading the configuration Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 6, 201510 yr My last guese would be, that the init() method in the ConfigHandler Class doesnt get called, otherwise I dont know it anymore. Im sorry. Edit: I would recommend sticking with the forge system for now, and try again later. The only problem is order/ranking, and its not gamebreaking either, fortunatly. So I would focus on (possible)bigger problems. Projects: Discontinued: - N2ConfigAPI - Meachanical Crafting Table Latest: - CollectionUtils Coöperations: - InGameConfigManager
June 6, 201510 yr Author Welp, thanks for trying to help guys. I'll just delete with having the configuration being in a weird order Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Your config is empty because, your private Map<String, Property> properties = new TreeMap<String, Property>(); that is defined in new class is empty... (because fields can't be overrided like methods)... You have 3 options to avoid this: - Override all emthods and fields in order to fill your porperties and not super one - Use reflection to get private field - getValues(), returns this private list without sorting. All you want to do now is convert Map<String, Property> into List<Property>... Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author Now it's not blank but It's still sorting Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Author Oops, forgot to post my code ModConfiguration package common.zeroquest.core.configuration; import java.io.File; import java.util.Map; import java.util.TreeMap; import net.minecraftforge.common.config.Configuration; public class ModConfiguration extends Configuration { private Map<String, ModConfigCategory> categories = new TreeMap<String, ModConfigCategory>(); private boolean changed = false; public ModConfiguration() {} /** * Create a configuration file for the file given in parameter. */ public ModConfiguration(File file) { super(file); } @Override public ModConfigCategory getCategory(String category) { ModConfigCategory ret = categories.get(category); if (ret == null) { if (category.contains(CATEGORY_SPLITTER)) { String[] hierarchy = category.split("\\" + CATEGORY_SPLITTER); ModConfigCategory parent = categories.get(hierarchy[0]); if (parent == null) { parent = new ModConfigCategory(hierarchy[0]); categories.put(parent.getQualifiedName(), parent); changed = true; } for (int i = 1; i < hierarchy.length; i++) { String name = ModConfigCategory.getQualifiedName(hierarchy[i], parent); ModConfigCategory child = categories.get(name); if (child == null) { child = new ModConfigCategory(hierarchy[i], parent); categories.put(name, child); changed = true; } ret = child; parent = child; } } else { ret = new ModConfigCategory(category); categories.put(category, ret); changed = true; } } return ret; } } ModConfigCategory package common.zeroquest.core.configuration; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; import com.google.common.collect.ImmutableList; import net.minecraftforge.common.config.ConfigCategory; import net.minecraftforge.common.config.Property; public class ModConfigCategory extends ConfigCategory { public ModConfigCategory(String name) { super(name); } public ModConfigCategory(String name, ModConfigCategory parent) { super(name, parent); } @Override public List<Property> getOrderedValues() { return ImmutableList.copyOf(getValues().values()); } } ConfigHandler package common.zeroquest.core.handlers; import java.io.File; import java.util.ArrayList; import java.util.List; import net.minecraftforge.common.config.Property; import org.apache.logging.log4j.Logger; import common.zeroquest.ZeroQuest; import common.zeroquest.core.configuration.ModConfiguration; import common.zeroquest.lib.Constants; import common.zeroquest.lib.IDs; public class ConfigHandler { // Add more Categories for GuiFactory\\ public static ModConfiguration config; public static final String CATEGORY_LOAD = "load"; public static final String CATEGORY_FUNCTION = "function"; public static final String CATEGORY_MISC = "miscellaneous"; public static final String CATEGORY_DIMENSION = "dimensions"; public static final String CATEGORY_BIOME = "biomes"; public static void init(File file) { config = new ModConfiguration(file); loadConfig(); } public static void loadConfig() { config.addCustomCategoryComment(CATEGORY_FUNCTION, "Here you can manage all mod and entity functions"); config.addCustomCategoryComment(CATEGORY_LOAD, "Here you can manage what the mod loads into the game"); config.addCustomCategoryComment(CATEGORY_MISC, "Here you can manage the miscellaneous functions of the mod"); config.addCustomCategoryComment(CATEGORY_DIMENSION, "Here you can manage the mod's dimension factors"); config.addCustomCategoryComment(CATEGORY_BIOME, "Here you can manage the mod's biome factors"); //@formatter:off /*=================================Load Configurations==========================================*/ //@formatter:on Constants.DEF_DARKLOAD = config.get(CATEGORY_LOAD, "DarkElements", Constants.DEF_DARKLOAD).setLanguageKey(Constants.guiKey + "DarkElements").setRequiresMcRestart(true).getBoolean(Constants.DEF_DARKLOAD); Constants.DEF_STARTING_ITEMS = config.get(CATEGORY_LOAD, "StartingItems", Constants.DEF_STARTING_ITEMS).setLanguageKey(Constants.guiKey + "StartingItems").getBoolean(Constants.DEF_STARTING_ITEMS); Constants.DEF_MODCHECKER = config.get(CATEGORY_LOAD, "ModCheck", Constants.DEF_MODCHECKER).setLanguageKey(Constants.guiKey + "ModCheck").getBoolean(Constants.DEF_MODCHECKER); //@formatter:off /*=================================Function Configurations==========================================*/ //@formatter:on Constants.DEF_HEALING = config.get(CATEGORY_FUNCTION, "Healing", Constants.DEF_HEALING).setLanguageKey(Constants.guiKey + "Healing").getBoolean(Constants.DEF_HEALING); Constants.DEF_SNOWSTEP = config.get(CATEGORY_FUNCTION, "SnowStep", Constants.DEF_SNOWSTEP).setLanguageKey(Constants.guiKey + "SnowStep").getBoolean(Constants.DEF_SNOWSTEP); Constants.DEF_GRASSSTEP = config.get(CATEGORY_FUNCTION, "GrassStep", Constants.DEF_GRASSSTEP).setLanguageKey(Constants.guiKey + "GrassStep").getBoolean(Constants.DEF_GRASSSTEP); //@formatter:off /*=================================Miscellaneous Configurations==========================================*/ //@formatter:on Constants.DEF_HOWL = config.get(CATEGORY_MISC, "Howl", Constants.DEF_HOWL).setLanguageKey(Constants.guiKey + "Howl").getBoolean(Constants.DEF_HOWL); Constants.DEF_IS_HUNGER_ON = config.get(CATEGORY_MISC, "HungerDecay", Constants.DEF_IS_HUNGER_ON).setLanguageKey(Constants.guiKey + "HungerDecay").getBoolean(Constants.DEF_IS_HUNGER_ON); //@formatter:off /*=================================DimensionsConfigurations==========================================*/ //@formatter:on IDs.Nillax = config.get(CATEGORY_DIMENSION, "NillaxID", IDs.Nillax).setLanguageKey(Constants.guiKey + "NillaxID").setRequiresMcRestart(true).getInt(IDs.Nillax); if (Constants.DEF_DARKLOAD == true) { IDs.Darkax = config.get(CATEGORY_DIMENSION, "DarkaxID", IDs.Darkax).setLanguageKey(Constants.guiKey + "DarkaxID").setRequiresMcRestart(true).getInt(IDs.Darkax); } //@formatter:off /*=================================BiomesConfigurations==========================================*/ //@formatter:on IDs.bioZone = config.get(CATEGORY_BIOME, "BioZoneID", IDs.bioZone).setLanguageKey(Constants.guiKey + "BioZoneID").setRequiresMcRestart(true).getInt(IDs.bioZone); IDs.redSeed = config.get(CATEGORY_BIOME, "RedSeedID", IDs.redSeed).setLanguageKey(Constants.guiKey + "RedSeedID").setRequiresMcRestart(true).getInt(IDs.redSeed); IDs.blueTaiga = config.get(CATEGORY_BIOME, "BlueTaigaID", IDs.blueTaiga).setLanguageKey(Constants.guiKey + "BlueTaigaID").setRequiresMcRestart(true).getInt(IDs.blueTaiga); IDs.blueTaigaHills = config.get(CATEGORY_BIOME, "BlueTaigaHillsID", IDs.blueTaigaHills).setLanguageKey(Constants.guiKey + "BlueTaigaHillsID").setRequiresMcRestart(true).getInt(IDs.blueTaigaHills); IDs.blueColdTaiga = config.get(CATEGORY_BIOME, "BlueColdTaigaID", IDs.blueColdTaiga).setLanguageKey(Constants.guiKey + "BlueColdTaigaID").setRequiresMcRestart(true).getInt(IDs.blueColdTaiga); IDs.blueColdTaigaHills = config.get(CATEGORY_BIOME, "BlueColdTaigaHillsID", IDs.blueColdTaigaHills).setLanguageKey(Constants.guiKey + "BlueColdTaigaHillsID").setRequiresMcRestart(true).getInt(IDs.blueColdTaigaHills); IDs.blueMegaTaiga = config.get(CATEGORY_BIOME, "BlueMegaTaigaID", IDs.blueMegaTaiga).setLanguageKey(Constants.guiKey + "BlueMegaTaigaID").setRequiresMcRestart(true).getInt(IDs.blueMegaTaiga); IDs.blueMegaTaigaHills = config.get(CATEGORY_BIOME, "BlueMegaTaigaHillsID", IDs.blueMegaTaigaHills).setLanguageKey(Constants.guiKey + "BlueMegaTaigaHillsID").setRequiresMcRestart(true).getInt(IDs.blueMegaTaigaHills); IDs.pinkZone = config.get(CATEGORY_BIOME, "PinkZoneID", IDs.pinkZone).setLanguageKey(Constants.guiKey + "PinkZoneID").setRequiresMcRestart(true).getInt(IDs.pinkZone); IDs.destroZone = config.get(CATEGORY_BIOME, "DestroZoneID", IDs.destroZone).setLanguageKey(Constants.guiKey + "DestroZoneID").setRequiresMcRestart(true).getInt(IDs.destroZone); IDs.destroZoneHills = config.get(CATEGORY_BIOME, "DestroZoneHillsID", IDs.destroZoneHills).setLanguageKey(Constants.guiKey + "DestroZoneHillsID").setRequiresMcRestart(true).getInt(IDs.destroZoneHills); IDs.walRockland = config.get(CATEGORY_BIOME, "WalRocklandID", IDs.walRockland).setLanguageKey(Constants.guiKey + "WalRocklandID").setRequiresMcRestart(true).getInt(IDs.walRockland); if (Constants.DEF_DARKLOAD == true) { IDs.darkWasteland = config.get(CATEGORY_BIOME, "DarkaxBiomeID", IDs.darkWasteland).setLanguageKey(Constants.guiKey + "DarkaxBiomeID").setRequiresMcRestart(true).getInt(IDs.darkWasteland); } IDs.nileSavanna = config.get(CATEGORY_BIOME, "NileSavannaID", IDs.nileSavanna).setLanguageKey(Constants.guiKey + "NileSavannaID").setRequiresMcRestart(true).getInt(IDs.nileSavanna); IDs.nileSavannaPlateau = config.get(CATEGORY_BIOME, "NileSavannaPlateauID", IDs.nileSavannaPlateau).setLanguageKey(Constants.guiKey + "NileSavannaPlateauID").setRequiresMcRestart(true).getInt(IDs.nileSavannaPlateau); IDs.nileJungle = config.get(CATEGORY_BIOME, "NileJungleID", IDs.nileJungle).setLanguageKey(Constants.guiKey + "NileJungleID").setRequiresMcRestart(true).getInt(IDs.nileJungle); IDs.nileJungleHills = config.get(CATEGORY_BIOME, "NileJungleHillsID", IDs.nileJungleHills).setLanguageKey(Constants.guiKey + "NileJungleHillsID").setRequiresMcRestart(true).getInt(IDs.nileJungleHills); IDs.nileJungleEdge = config.get(CATEGORY_BIOME, "NileJungleEdgeID", IDs.nileJungleEdge).setLanguageKey(Constants.guiKey + "NileJungleEdgeID").setRequiresMcRestart(true).getInt(IDs.nileJungleEdge); IDs.nileSwampland = config.get(CATEGORY_BIOME, "NileSwamplandID", IDs.nileSwampland).setLanguageKey(Constants.guiKey + "NileSwamplandID").setRequiresMcRestart(true).getInt(IDs.nileSwampland); IDs.nileMesa = config.get(CATEGORY_BIOME, "NileMesaID", IDs.nileMesa).setLanguageKey(Constants.guiKey + "NileMesaID").setRequiresMcRestart(true).getInt(IDs.nileMesa); IDs.nileMesaPlateau_F = config.get(CATEGORY_BIOME, "NileMesaPlateauFID", IDs.nileMesaPlateau_F).setLanguageKey(Constants.guiKey + "NileMesaPlateauFID").setRequiresMcRestart(true).getInt(IDs.nileMesaPlateau_F); IDs.nileMesaPlateau = config.get(CATEGORY_BIOME, "NileMesaPlateauID", IDs.nileMesaPlateau).setLanguageKey(Constants.guiKey + "NileMesaPlateauID").setRequiresMcRestart(true).getInt(IDs.nileMesaPlateau); IDs.nileMountains = config.get(CATEGORY_BIOME, "NileMountainsID", IDs.nileMountains).setLanguageKey(Constants.guiKey + "NileMountainsID").setRequiresMcRestart(true).getInt(IDs.nileMountains); IDs.nileMountainsEdge = config.get(CATEGORY_BIOME, "NileMountainsEdgeID", IDs.nileMountainsEdge).setLanguageKey(Constants.guiKey + "NileMountainsEdgeID").setRequiresMcRestart(true).getInt(IDs.nileMountainsEdge); IDs.nileMountainsPlus = config.get(CATEGORY_BIOME, "NileMountainsPlusID", IDs.nileMountainsPlus).setLanguageKey(Constants.guiKey + "NileMountainsPlusID").setRequiresMcRestart(true).getInt(IDs.nileMountainsPlus); if (config.hasChanged()) { config.save(); } } } Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Same thing applies for Configuration class: fields can not override or be overriden. Categories map in yor config is different from one from Configuration... Again: reflection/complete override... Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author I'm not sure how to use a reflection, but I'm getting an error from eclipse from attempting to use it null org.eclipse.recommenders.calls.rcp Error Sun Jun 07 10:53:25 CDT 2015 Proposal matching failed for [METHOD_REF]{completion:clone(), declSign:[Ljava.lang.annotation.Annotation;, sign:()[Ljava.lang.annotation.Annotation;, declKey:, key:, name:clone, replace:[492,492], token:[492,492], relevance:35}. org.eclipse.recommenders.utils.Logs$LogTraceException at org.eclipse.recommenders.utils.Logs$LogTraceException.newTrace(Logs.java:377) at org.eclipse.recommenders.utils.Logs.log(Logs.java:130) at org.eclipse.recommenders.internal.calls.rcp.CallCompletionSessionProcessor.process(CallCompletionSessionProcessor.java:203) at org.eclipse.recommenders.completion.rcp.processable.IntelligentCompletionProposalComputer.fireProcessProposal(IntelligentCompletionProposalComputer.java:243) at org.eclipse.recommenders.completion.rcp.processable.IntelligentCompletionProposalComputer.computeCompletionProposals(IntelligentCompletionProposalComputer.java:143) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeCompletionProposals(CompletionProposalComputerDescriptor.java:333) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeCompletionProposals(CompletionProposalCategory.java:337) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectProposals(ContentAssistProcessor.java:325) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeCompletionProposals(ContentAssistProcessor.java:282) at org.eclipse.jface.text.contentassist.ContentAssistant$5.run(ContentAssistant.java:1904) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:1902) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:573) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$16(CompletionProposalPopup.java:570) at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:505) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:499) at org.eclipse.jface.text.contentassist.ContentAssistant$2.run(ContentAssistant.java:384) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4147) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) at org.eclipse.equinox.launcher.Main.run(Main.java:1465) Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Show what you have tried. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
June 7, 201510 yr Author Class c = Class.forName("net.minecraftforge.common.config.Configuration"); Field privateStringField = PrivateObject.class.getDeclaredField("privateString"); public ModConfiguration() {} /** * Create a configuration file for the file given in parameter. */ public ModConfiguration(File file) { super(file); } @Override public ModConfigCategory getCategory(String category) { ModConfigCategory ret = c.getMethods()..get(category); Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Author And this also package common.zeroquest.reflection; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionAll { public static void main(String[] args) { try{ Class c = Class.forName("net.minecraftforge.common.config.Configuration"); //Method methodList[] = c.getDeclaredMethods(); Field[] fields = c.getDeclaredFields(); System.out.println(fields); << Error here }catch (Exception e){ System.out.println("ERROR:" + e.getMessage()); } } } Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr In this case, you have to reflect a private field, it s done like so: 1) Get class (by name or in any way). 2) Call class.getDeclaredField(name) method to get private field (getField does not return private fields, but return super defined fields (getDeclaredField does not)). 3) Call field.setAcessible(true), this will make this field value acessible. 4) Now call either: 4.1) get(instance), where instance is instance of object from which you want to get this field (can be null for static fields)... 4.2) set(instance, value), where instance is instance of object from which you want to get this field (can be null for static fields) and value - value you want to set it to... Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author I'm a little confued at step 4, do I get the Configuration class name? I'm using the Reflection class I made like this ModConfiguration package common.zeroquest.core.configuration; import java.io.File; import java.lang.reflect.Field; import java.util.Map; import java.util.TreeMap; import common.zeroquest.reflection.ReflectionConfig; import net.minecraftforge.common.config.Configuration; public class ModConfiguration extends Configuration { public ModConfiguration() {} /** * Create a configuration file for the file given in parameter. */ public ModConfiguration(File file) { super(file); } @Override public ModConfigCategory getCategory(String category) { ModConfigCategory ret = ReflectionConfig.main(Configuration.class.toString()).get(category); if (ret == null) { if (category.contains(CATEGORY_SPLITTER)) { String[] hierarchy = category.split("\\" + CATEGORY_SPLITTER); ModConfigCategory parent = categories.get(hierarchy[0]); if (parent == null) { parent = new ModConfigCategory(hierarchy[0]); categories.put(parent.getQualifiedName(), parent); changed = true; } for (int i = 1; i < hierarchy.length; i++) { String name = ModConfigCategory.getQualifiedName(hierarchy[i], parent); ModConfigCategory child = categories.get(name); if (child == null) { child = new ModConfigCategory(hierarchy[i], parent); categories.put(name, child); changed = true; } ret = child; parent = child; } } else { ret = new ModConfigCategory(category); categories.put(category, ret); changed = true; } } return ret; } } Reflection package common.zeroquest.reflection; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionConfig { public static void main(String[] args) { try{ Class c = Class.forName("net.minecraftforge.common.config.Configuration"); //Method methodList[] = c.getDeclaredMethods(); Field field = c.getDeclaredField("categories"); field.setAccessible(true); field.get(args); System.out.println(field); }catch (Exception e){ System.out.println("ERROR:" + e.getMessage()); } } } Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr field.get(instance) is the equal to instance.fieldName, with one but: You can access private fields like that... Some examples of reflection. These will be true: 1) this.a == getClass().getField("a").get(this); if a is public field 2) this.a == getClass().getDeclaredField("a").get(this); if a is not super field If a is private super field ( SuperClass{private Object a; ChildClass extends SuperClass{} ) , 1ststatement will give compile error, 2nd will throw null pinter, 3rd will throw null pinter, 4th will work: 1) Object b = a; 2) Object b = getClass().getField("a").get(this); 3) Object b = Class.forName("SuperClass").getField("a").get(this); 4) Object b = Class.forName("SuperClass").getDeclaredField("a").get(this); So it total, your method should probably look like this: Get super map with reflection Do all stuff and thigs with this map that you just got (get values, add, remove...) Set set super map using reflection to this changed map (just to be sure it changed) Return needed value Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author I'm still confused. How am I suppose to call if I'm using a separate class with the reflection methods inside? Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr I'm still confused. How am I suppose to call if I'm using a separate class with the reflection methods inside? You don't need that special separate class. Seriously, why do you think it's needed??? Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author I thought it was needed, whenever I put the methods in the class, I get errors from eclipse saying ClassNotFoundExpection Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr I thought it was needed, whenever I put the methods in the class, I get errors from eclipse saying ClassNotFoundExpection Then show how, where and exact error log... And also you don't even need this method! I'm serious! Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
June 7, 201510 yr Author Description Resource Path Location Type Unhandled exception type NoSuchFieldException ModConfiguration.java /Minecraft/src/main/java/common/zeroquest/core/configuration line 13 Java Problem Unhandled exception type ClassNotFoundException ModConfiguration.java /Minecraft/src/main/java/common/zeroquest/core/configuration line 12 Java Problem I can't grab a description about it Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
June 7, 201510 yr Author And my code package common.zeroquest.core.configuration; import java.io.File; import java.lang.reflect.Field; import java.util.Map; import java.util.TreeMap; import net.minecraftforge.common.config.Configuration; public class ModConfiguration extends Configuration { Class c = Class.forName("net.minecraftforge.common.config.Configuration"); <<<Error : ClassNotFoundException Field fieldString = c.getDeclaredField("categories"); <<<Error: NoSuchFieldException Field fieldBoolean = c.getDeclaredField("changed"); <<<<Error:NoSuchFieldException public ModConfiguration() {} /** * Create a configuration file for the file given in parameter. */ public ModConfiguration(File file) { super(file); } @Override public ModConfigCategory getCategory(String category) { fieldString.setAccessible(true); fieldBoolean.setAccessible(true); ModConfigCategory ret = categories.get(category); if (ret == null) { if (category.contains(CATEGORY_SPLITTER)) { String[] hierarchy = category.split("\\" + CATEGORY_SPLITTER); ModConfigCategory parent = categories.get(hierarchy[0]); if (parent == null) { parent = new ModConfigCategory(hierarchy[0]); categories.put(parent.getQualifiedName(), parent); changed = true; } for (int i = 1; i < hierarchy.length; i++) { String name = ModConfigCategory.getQualifiedName(hierarchy[i], parent); ModConfigCategory child = categories.get(name); if (child == null) { child = new ModConfigCategory(hierarchy[i], parent); categories.put(name, child); changed = true; } ret = child; parent = child; } } else { ret = new ModConfigCategory(category); categories.put(category, ret); changed = true; } } return ret; } } Main Developer and Owner of Zero Quest Visit the Wiki for more information If I helped anyone, please give me a applaud and a thank you!
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.