Posted July 25, 20178 yr In my mod, I have a custom world generation system that allows the player to define their own generators per biome via json files. The system works fine, but I am trying to allow other mod developers to define their own custom generator class that the player can use. To define a custom generator, a class must extend my AbstractGenerator class. The AbstractGenerator class is abstract and it provides two abstract methods, one to generate blocks in the world and the other to deserialize a json file into the custom generator. The mod developers have to register their custom generator class and a string to identify the class with my mod. To start the deserialization process, I search the json for the string identifier that the generator class was registered with and then I use it to lookup the class it was registered with. Once the class has been found, I call GeneratorClass.newInstance().deserialize(jsonConfig) to deserialize the json file into a new instance of the generator. I know that this is not the most ideal way of handling it and that it can lead to a crash if the mod developer does not provide a no argument constructor. My question is, how I can improve this system to make it better? Sorry if my post is confusing, hopefully the provided files clear up any questions. Generator Registry: https://github.com/LogicTechCorp/NetherEx/blob/b7375eb2fd89d122ceaa312eb3cb5766a66ec72f/src/main/java/nex/init/NetherExBiomeFeatures.java#L34 Generator Json File: https://github.com/LogicTechCorp/NetherEx/blob/b7375eb2fd89d122ceaa312eb3cb5766a66ec72f/src/main/resources/assets/nex/biome_configs/NetherEx/Hell/feature_scatter_fire_nex_hell.json#L3 Generator Class Lookup: https://github.com/LogicTechCorp/NetherEx/blob/b7375eb2fd89d122ceaa312eb3cb5766a66ec72f/src/main/java/nex/world/gen/BiomeFeatureManager.java#L48 Generator Class: https://github.com/LogicTechCorp/NetherEx/blob/b7375eb2fd89d122ceaa312eb3cb5766a66ec72f/src/main/java/nex/world/gen/feature/BiomeFeatureScatter.java#L35 Abstract Generator Class: https://github.com/LogicTechCorp/NetherEx/blob/b7375eb2fd89d122ceaa312eb3cb5766a66ec72f/src/main/java/nex/world/gen/feature/BiomeFeature.java#L30 Edited July 26, 20178 yr by LogicTechCorp
July 26, 20178 yr Author I ended up changing the abstract BiomeGenerator class into an interface which mod developers can implement. I also changed the how custom generators are registered. The registry now requires an instance of the custom generator. I use this instance to invoke the deserialize method that the interface provides. Updated classes if anyone is interested: Generator Interface: https://github.com/LogicTechCorp/NetherEx/blob/279a3f40294c5cb347a6ef308babfd2001272231/src/main/java/nex/api/world/gen/feature/IBiomeFeature.java#L27 Generator Registry: https://github.com/LogicTechCorp/NetherEx/blob/279a3f40294c5cb347a6ef308babfd2001272231/src/main/java/nex/world/gen/feature/BiomeFeatureManager.java#L33
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.