Basically, I’m developing this Menu plugin, and at the moment it’s very WIP, but I’m trying to follow all the fancy Sponge conventions, so I want to convert the three enums currently in the plugin to CatalogTypes (especially since I want users to have the ability to add to these enums). I tried converting one, but I’m unsure if it’s set up properly, or if it’s written conventionally (in sponge’s eyes), so I was wondering if someone who knows about catalog types could look it over and verify that it’s conventionally correct and won’t break anything (and, at the moment, I don’t have time to test on a server… which is annoying, and I’ll do that some later, but having a second opinion is always helpful). Anyways, the relevant code is:
The actual catalog type:
The enum-imitation interface with fields and stuff:
The registry module:
The data translator:
and the registration:
Thanks for any help!
(and if I have no idea what I’m doing, please point that out )
- Rather than an interface,
InputTypes should be a final class, with a private no-args constructor that does nothing. This ensures the impossibility of instantiation.
InputType should be not only static but final.
@DelayedRegistration goes on
registerDefaults so as to make sure its registration phase is after the module is added (and for that reason module registration should probably go in pre-initialization).
- You may want to do a final field in
CatalogDataTranslator for the
TypeToken, since it only needs to be constructed once.
Other than that, though, looks fantastic.
Actually, I think Sponge already auto-serializes all
CatalogTypes by ID only. I could be wrong, but try not registering the translator and see what happens.
Thanks very much! And it does indeed appear that sponge handles catalog types (albeit, not with a DataTranslator…)
Edit: also, is the registerDefaults called by sponge? And what Registration Phase should I put in the value? I have the module registration in preinit now, so I put in the init phase, but I’m not sure that’s correct
I did some testing, and If I don’t include the annotation, I can just register them myself. At the moment, I think that’s the safest… especially if I want to be able to say "The plugin will be available after phase X)