Configurate v3.7
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 the configurate-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
s -
core: 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 node -
core: New
setCommentIfAbsent
method onCommentedConfigurationNode
s -
core: 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 loader -
core: 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.