Configurate v3.7 Release Notes
Release Date: 2020-05-26 // almost 4 years ago-
๐ After a long wait, v3.7 is finally here. The biggest feature in this release is the
ConfigurationReference
system and associated ability to automatically reload configurations, but it also contains a variety of bug fixes and deprecates some methods in preparation for 4.0. There is now also a collection of idiomatic Configurate examples included in the repository, under theconfigurate-examples
folder that can be referenced for inspiration on how to effectively use the library.โ Additionally, up-to-data Javadocs are now published at https://configurate.aoeu.xyz! It's been a while since javadocs were last updated, so the new revision brings a lot of improvements.
๐ Thanks to @kashike for contributions to this release
๐ Deprecations
- ๐ง All
set*
methods inConfigurationOptions
have been deprecated, to be replaced with equivalent methods starting withwith___
. - Accessors in
TypeSerializers
have been moved toTypeSerializerCollection
, andregister ____
methods have been renamed toregister
- ๐ง Modifying the global
TypeSerializerCollection
is deprecated behaviour. Any configurations that need custom type serializers should create their own child of the default collection and add to that. - ๐ง
ConfigurationNode.getAppendedChild()
should be replaced withConfigurationNode.appendListNode()
hasListChildren()
andhasMapChildren()
should be replaced withisList()
andisMap()
to more effectively express that they reflect the type of the node, not whether it has contents.- ๐ฆ As root node creation methods have been moved to the node interface, usage of the
Simple*
nod implementation classes is deprecated. They will be made package-private in 4.0. - ๐ง
ConfigurationNodeWalker
has been deprecated, to be replaced with the new more structuredConfigurationVisitor
API. - ๐
ValueType
will be removed in 4.0. Its functionality is already covered by existing methods.
โ Added
๐ New configuration and value reference system for automatically reloading configurations
๐ New module
configurate-ext-kotlin
with some basic utilities for using Configurate in Kotlin๐ New module
configurate-tool
is a CLI tool to inspect configurations loaded through Configurate loaders`๐ New module:
configurate-bom
can be imported to centralize Configurate version declaration across a project๐ง loader: Automatically create parent directories when trying to write a configuration
๐ง objectmapping: New
TypeSerializer
s for arrays,char
s,Set
s, andConfigurationNode
score: New method
isEmpty()
to determine if a node has contents, or exists but with an empty value.๐ง core: New
act
method on nodes that takes aConsumer<ConfigurationNode>
to perform an action on the nodecore: New
setCommentIfAbsent
method onCommentedConfigurationNode
score: Abstract
TypeSerializer
implementations added forScalar
s and objects read from list nodes๐ loader: Added functional helper methods for changing options and options'
TypeSerializerCollection
when building a loadercore: New
getNode(Iterable<?>)
method will work the same asgetNode(Object...)
, but allow looking up nodes without having to convert existing collections to arrays.core:
AttributedConfigurationNode
now extendsCommentedConfigurationNode
xml: Load and save comments
๐ง all: Configurate jars now include their license for easier compliance
๐ Fixed
- objectmapping: Preserve comments on map keys when round-tripping data through the type serializer for
Map
s - ๐ง gson: Correctly ignore null values in JSON files loaded from the Gson configuration loader
- objectmapping: Resolve type parameters in fields. For example, in a class
class MyConfig<T> { @Setting private List<T> items;
, the list will be appropriately resolved as long as new object mapper factory methods that acceptTypeToken
s are used. - ๐ป objectmapping: Correctly reject interface types from being passed to
ObjectMappers
rather than throwing an exception - ๐ง objectmapping: Preserve configuration options when deserializing map keys
- hocon: Read empty lists as empty lists, to match behaviour when reading maps.
- loader: Don't read whole line to determine if file contains header. Resolves issues exceeding the mark limit on extremely long first lines, or files without line breaks (minified JSON, for example)
- ๐ง objectmapping: The
TypeSerializer
for subclasses ofNumber
will now attempt to coerce values to types native to the destination configuration when serializing. - core:
AttributedConfigurationNodes
will now be attached as soon as attributes are set on them. - ๐ง core: The root configuration node's path is the empty array, and
getPath()
has been corrected to return this.
๐ Releases are available on the Sponge maven repo, and all configurate components are contained within the
configurate-tool
distribution attached to this release. - ๐ง All