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

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 by LogicTechCorp

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

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.