Add PathLocker class that allows locks for each path currently being worked on, without the need to call system file locks.
Rename ConfigurationLoader to ConfigurationManager (deprecating the previous one), and use PathLocker to lock configuration files while being loaded.
ConfigurationManager will load the configurations concurrently in a parallel stream.
ConfigurationHolder method names were simplified, deprecating the older ones.
Downloader Runnable class was deprecated in favor of using a Callable Downloader class.
Downloader class redirect resolver will now detect redirect loops, too many redirects and relative URLs.
Version class was deprecated in favor of using maven-artifact's ComparableVersion.
Add TaskFactory interface and BukkitTaskFactory, FoliaTaskFactory and SpongeTaskFactory implementations, to simplify use of schedulers across platforms.
Deprecate GitHubUpdateChecker and SpigotUpdateChecker in favor of a new GitHubUpdateChecker and a new SpigotUpdateChecker that use TaskFactory for its HTTP requests.
Use LURE instead of DURABILITY for GUI item glowing effect.
Fix circular static initialization when using PackageType before ReflectionUtil.
Add NMSVersion class.
Classes extending Command can now be registered in CommandManager.
Make isNumeric accept decimal numbers. Full Changelog: 2.7...3.0
Yaml-Handler changelog:
Add support for comments.
Add support for custom serializers.
Add support for spigot's ConfigurationSerializable.
Add support for NULL values.
Rewrite most of the node getting/setting code.
Move YamlConfigurationLoader to loaders package.
Remove constructor that used the parameter YamlConfigurationLoader from Configuration class, and add one that uses ConfigurationLoader interface instead.
Maps will be automatically converted to configuration sections on set.
Equals and hashCode from ConfigurationSection will no longer use the Configuration root, and the ones from Configuration will no longer take the file path into account.
Add compat module, for plugins that depend on an older version of yaml-handler.
Add EpicPluginLib.Platform#isFolia method, to check is server is Folia/a fork of Folia.
Fix a vulnerability that would allow players to steal items from GUIs if InventoryOpenEvent was cancelled by another plugin while a GUI was already open. Now every time InventoryCloseEvent is called for EpicPluginLib's GUIs, Player#closeInventory will be called again to ensure the inventory is closed.
Clean open GUI inventories once the plugin disables, to prevent players from taking items from anvils (or other inventories that takes items on close) once the server disables/reloads.
Move breakLore method to core StringUtils and deprecate breakLore in bukkit InventoryUtils due to no need for bukkit API.
Key not found message will actually tell you the key that was not found.
Item Lore lines can also be broken with \n now. You can use this example for a more clear lore in your configuration.
Code (YAML):
Item:
Lore: |-
This is the new way to set
an item's lore. It's much
easier and you don't need
to keep adding '<line>'
everytime you break a line
anymore.
Developers:
Add InventoryUtils#breakLore method, for automatically breaking lines when the words don't fit in a single line.
Add EpicPluginLib.Platform#isPaper method, to check if server is Paper/a fork of Paper.
Add InputGetterUtils class, for helping to retrieve input from a player when using GUIs.
Add PathUtils#getDirectory to get a path to a created directory, if a regular file exists in this path, then a different path is used to create a directory.
Bukkit's Logger#setLogger now accepts null parameter, to default to bukkit's logger.
Optimize PathUtils#getUniquePath.
Update available message will go away if you disable "Check for updates" boolean in config.
Warning: This updates breaks the plugins depending on the previous version, make sure they support this version before updating.
Changes:
Added an updater that will check for updates when your server starts, if you don't wanna check for updates, you can disable this feature in configuration.
Added Version checking API: You can now check for versions greater, lower or equal instead of just greater.
Fixed Downloader not redirecting to the final page before downloading, resulting in a corrupted download.
Fixed error that configurations could not have defaults before having comments.