Version 0.6.0 implements several breaking changes, please update implementations as needed, and feel free to reach out to discuss issues that come up.
ValidatedEntityAttribute
is removedCustom[Widgets]
are moved from the internal widget package to the custom package- Several widgets and other classes have been deleted
PopupWidget
has many deprecations, and probably at least one breaking change despite my best efforts- Possibly more, I didn't take great notes
Registrar is still marked experimental with anticipated stability by 0.7.0
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
- Created a ground-up list widget system with
CustomListWidget
and the built-in implementationDynamicListWidget
. This new list is more powerful than the vanilla lists, allowing for varying heights for each element, hiding/unhiding individual entries, built in searching of entries, and more. - Created
Searcher
system for building simple search implementations from a collection of elements. ValidatedPair
and corresponding methodValidatedPair.pairWith
. This new validation joins two settings into one, and displays their widgets side-by-side. This is convenient for number ranges and so on.- Validated numbers now have a third widget type,
TEXTBOX_WITH_BUTTONS
. The standard entrybox also has a small up and down button with this layout. - Added custom ScreenNarrator implementation for config screens with several improvements and bug fixes over the vanilla narrator.
Translatable Updates
Translatable
now includes aprefix
element. Add a lang key for a setting, section, or config to add inline "prefix text" that appears above the setting or at the top of the setting list, respectively. This pairs well with the next addition- For implementations of
Translatable
, be sure to overridehasPrefix
,prefix
, andprefixKey
as needed.
Config Groups
- Added new Config Group system. Groups are inline, collapsible collections of settings. Groups are an excellent place to add a prefix, to provide a general description of what the settings inside the group do.
- Groups can be nested, though this is probably not needed in most circumstances
Screen Anchors
- Configs, Sections, and Groups are now Anchors, much like anchors in a web page.
- A new go-to menu in the bottom left (accessible by pressing Ctrl + E also) allows you to quickly navigate between all the anchors of the current config namespace.
Context Action System
- Created new keybind-like
ContextAction
system that allows for powerful handling of context actions and key presses. - Automatically builds context menus as applicable to the right-clicked element.
- Handles complex keybinds like ctrl-shift-C, etc.
- Handles inputs in a layered manner, allowing each layer to only capture the inputs it cares about, passing the input
- Added several new keybinds
- F1: Opens info screen
- Ctrl + E: Opens goto menu
- Backspace: Return to the previous config screen
- Home: Scrolls to the top of the config list
- End: Scrolls to the bottom of the config list
- (Context menu): You can now fully clear collection settings with the Clear command.
EntryCreator
- New system for creating list entries in an orderly manner
ValidatedField
now has several helper methods for easily creating custom entries without needing to fully re-implement the base design.
LayoutWidget
LayoutWidget
added, a generalization and improvement of the system inPopupWidget
. This widget can be used to create automatically laid out collections of widgets using a DOM-like layout model.- Entry creators and several other systems in FC now use these layouts.
Changes
- The Result Provider API is promoted to stable
- The
Pos
system now implementsSupplier
- Overhauled the
Decoration
system, nowDecorated
, a simple Drawable-like interface that allows passing of different types of icons to various FC systems, dynamically rendered, animated, etc. - Most custom widget implementations now use a
TextureSet
system for defining textures to use in various hovered and focused states
Fixes
- Fix apparent concurrent modification problem with screen scope registration.
- Moved catalogue compat back to somewhere that Catalogue can actually find it.
- Fix crash on suggestion windows trying to substring empty suggestions.
- Fix config objects that don't implement
equals
not mapping properly between de/serializations, which improperly caused resets of data. - Fixed bug with update de/serialization not working properly on nested config sections
Scheduled API removal in 0.6.0: ValidatedEntityAttribute
. Reimplement usages of this class as needed.
Additions
- New
isDev
method inPlatformApi
for checking if the instance is running in a development environment. - Implemented a barebones
Registrar
system for platform-agnostic registration of objects. This API is experimental, with scheduled stability by 0.6.0.- Registers objects into
RegistrySupplier
instances, much like the (Neo)Forge deferred registry system.
- Registers objects into
- Added
onRegisteredClient
andonRegisteredServer
to theEventApi
for listening to config registrations and only acting after the config has been successfully registered. - New version of
ValidatedField.validateAndSet
,validateAndSetFlagged
that acceptsEntryFlag.Flag
(and inspects the field own flags) and changes set behavior based on flags present.EntryFlag.Flag.QUIET
: flagged field won't call listeners on changeEntryFlag.Flag.STRONG
: fieldvalidateAndSet
/validateAndSetFlagged
will use strong validation. Weak validation is standard.EntryFlag.Flag.UPDATE
: field will update its current sync state when the value is set.
- Added overload to
ValidationResult.report
that takes a string consumer directly for immediate reporting of issues. - New
Codecs
helper class in PortingUtils for handling version-agnostic Packet Codecs. Thanks Mojang.
Changes
ConfigApi.isConfigLoaded(scope)
has been deprecated in favor ofConfigApi.isConfigLoaded(scope, type)
. This new overload can check for client configs; the now-deprecated method only checked synced ones.- Also consider the new register event instead of trying to check for config load yourself.
- Scheduled
ValidatedEntityAttribute
for removal in 0.6.0. It is completely unused as far as I can tell with a github-wide search, and quite an unstable concept in general. If needed, a similar validation can be built for your own usage.
Fixes
- Fixed inaccurate docs in
ValidatedEntityAttribute.Builder
andEntityAttributeInstanceHolder