ATTENTION: Quester API is now fully revamped, but nowhere near complete. It is being ported on over to Kotlin/JVM right now. If you would like to see it, the repo is the same, but it's in a branch called "kotlin-refactor".
Quester Questing System API
About:
Quester is a modding "sub-API" (an API for an API) that will allow Forge modders to easily add in quests to Minecraft without having to create their own system.
> Quests must inherit from the **QuestBase** interface, which you can then add to the **IForgeRegistry.Register\<QuestBase>** event to register a quest.
> Before modloader preinit of forge, the quests will be loaded into the system, which they will then be stored in sets to keep them cached until the world's construction
> During the world construction, the *quests.data* file will be read from, if it doesn't exist, it'll be created, through kotlin
> During game play, the player tick event will be checking if any of the currently incomplete quests have been triggered, which return a boolean value, which that value will be checked if true, which will then move that quest to the completed set, and then the *quests.dat* file will be updated.
Changes as of late:
* Started the mirgration to kotlin
* Rewrote the entire API to be smaller, and to write to a file rather than save to NBT (See *Reasons for NBT Deprecation*)
* Replaced registry system with reflection and the use of forge's IForgeRegistry to register all quests, and by using the IForgeRegistry.Register<QuestBase> event.
Reasons for NBT Deprecation
When I implemented this API using capabilties and NBT (see master branch), I had this bug where every time you load up the game and play a world, all the quests and their statuses that were saved into NBT would all be read during the world's construction. I had it set to display on the screen when a quest was completed, and every time the NBT would be read, the quests that were completed would be read and passed through the registry system and then displayed onto the screen, but the last quest to be read and parsed would be displayed onto screen. There was also the bug where some quest statuses would be reset, and sometimes the reset command wouldn't actually reset the quests to "incomplete". I haven't figured out what those were but I don't really care anymore because I literally just rewrote the whole entire API so it doesn't matter anymore.