Hi
I did something similar with another mod I was working on, you might find some inspiration in there.
https://github.com/TheGreyGhost/dragonmounts2-1.12.2/tree/configurable-checkpoint2
See the classes:
DragonVariantTag
DragonVariants
DragonVariantsReader
Typical usage is a config file like :
dragon1.json
{
"breedinternalname": "fire",
"lifestage": {
"size5adult": 5, // size of the adult in metres
"healthbase": 50.0, // base health of the adult
"armorbase": 10.0 // base armour of the adult
},
"egg": {
"size": 1.0, //the size (width and height) of the egg in metres
"particlesname": "townaura" //what particle effect does the egg produce while incubating? as per the /particle command
}
}
with code that looks like this:
private static final DragonVariantTag EGG_SIZE_METRES = DragonVariantTag.addTag("size", 0.5, 0.05, 2.0,
"the size (width and height) of the egg in metres").categories(Category.EGG);
private static final DragonVariantTag EGG_INCUBATION_DAYS = DragonVariantTag.addTag("incubationduration", 1.0, 0.1, 10.0,
"the number of days that the egg will incubate until it hatches").categories(Category.EGG);
private static final DragonVariantTag EGG_WIGGLE = DragonVariantTag.addTag("wiggle", true,
"should the egg wiggle when it gets near to hatching?").categories(Category.EGG);
private static final DragonVariantTag EGG_GLOW = DragonVariantTag.addTag("glow", false,
"should the egg glow when it gets near to hatching?").categories(Category.EGG);
and
final String TEST_FOLDER = "testdata/testdvr1";
DragonVariantsReader dragonVariantsReader = new DragonVariantsReader(
Minecraft.getMinecraft().getResourceManager(), TEST_FOLDER);
Map<String, DragonVariants> allVariants = dragonVariantsReader.readAllVariants();
DragonVariants dragonVariantsFire = allVariants.get("fire");
double eggSizeMetres = (double)dragonVariantsFire.getValueOrDefault(modifiedCategory, EGG_SIZE_METRES);
I don't have a standalone test harness at the moment unfortunately, but the classes are reasonably self-contained and (hopefully) fairly intuitive to figure out.
The code also includes functionality for "modifiers" and "ariantTagValidator" to check for config tag problems and/or initialise resources based on the tags, but those are optional.
Cheers
TGG