Reworking the way inventories are declared and registered. Introducing an InventoryDescriptor interface which is responsible for declaring inventory properties (providers, placeholders, hooks, config file, etc.). As this is an interface, it will not provide any behavior like the old way. It is then be used to create and register a new InventoryProvider in an InventoryService. By using this, we separate what is provided by the developer and what is provided by the library. The interface also has default methods with no implementation that developers can redefine if they needs to. See the wiki for more information about this new way to register inventories.
Reworking the way pagination are provided to be able to dynamically retrieve paginated values depending on the current context. Technically, instead of using a Supplier<List<T>>, using a Function<CraftVentory, List<T>> with the currently opened inventory and all its data as context. This enables to retrieve paginated data depending on the viewer / some inventory properties.
Reworking the way item action loaders are registered by using an enum instead of manually adding each loader one by one. This is an internal change to improve the code and has no impact on the behavior of the library.