Every release from 0.2.0 in April 2024 to 0.7.6. A release usually ships as several files, one per loader and Minecraft version; here each release appears once, with everything it shipped for. The notes are the author's own.
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Various documentation updates for the Provider systems, including a wiki update
Changes
ValidatedField.translationProvider, ValidatedField.descriptionProvider, ValidatedField.attachProvider, and the associated Provider types are now static (as well as instance methods) so java users won't have to call .Companion. anymore (but can)
Fixes
Deprecated settings are properly read in from file for handling. They are still ignored in network traffic.
The options in ValidatedChoiceList and similar settings with an "inline" widget layout now properly show the tooltip for the individual options as well as the settings overall tooltip
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Several new utilities added to FcText
Added a basic Provider system to Validated Fields
Use ValidatedField.translationProvider to attach a custom translation provider function to a field.
Use ValidatedField.descriptionProvider to attach a custom description (tooltip) provider function to a field.
Use ValidatedField.attachProvider to attach an arbitrary value provider. This system is experimental and currently largely unused except for some widget names
For validation with titles like "Edit Map..." you can attach a WIDGET_TITLE provider to create custom widget labels
There will be much more work put into this and related systems in 0.8.0 and beyond
New ConfigDeprecated annotation. Use this to mark a setting as deprecated in the config.
It won't appear in GUIs
It won't be serialized to save files or networking
It WILL still be read in from files
This can be used in combination with a Version annotation to update a setting while still being able to use the old setting to update/inform the content of the new one.
Changes
ThreadingUtils (the file watcher utility) now uses kotlin coroutines internally and has more robust startup and shutdown processes
Updated change detection system; may introduce niche regressions. Please open an issue if you encounter any strange behavior with "actions"
Fixes
Fixed restart detection when syncing for mapped settings (ValidatedCondition, ValidatedMapped, etc.)
Fixed action reporting for changes made inside ValidatedAny
(1.20.1) fixed tooltips not showing up in config screens until you "click into" them (or tab in)
(1.20.1) fixed sliders "stealing" input outside their widget bounds
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
For registered events, migrate to the v2 API
New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.
Changes
ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context
Fixes
Fixed desc and prefix keys being broken for Config classes
Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
For registered events, migrate to the v2 API
New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.
Changes
ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context
Fixes
Fixed desc and prefix keys being broken for Config classes
Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
For registered events, migrate to the v2 API
New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.
Changes
ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context
Fixes
Fixed desc and prefix keys being broken for Config classes
Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
Added new CustomWidget interface. This will be used for abstracting all FC widgets away from directly interacting with Element, Widget, etc. to reduce porting headache going forward. Updates related to CustomWidget will be sprinkled into the next versions.
New CustomTextWidget utilizing said CustomWidget interface.
Added syncConfig method to the NetworkApi for manually syncing a server-side config to clients.
Added uk_ua translation
Changes
CustomMultilineTextWidget now has an align-right method
Relevant has gained three new methods for modifier checks, needsCtrl, needsShift, needsAlt
PopupWidget's wrapped LayoutWidget now contributes to re-sizing the popup based on the dimensions it would like.
Fixes
Validated Collections now resolve their contents lazily on serialize, allowing for proper implementation of mapped registry objects (items, blocks, etc.) in loaders that defer their registration.
ConfigGroup now acts properly with nested collapsedByDefault
ConfigApi.buildTranslations can now "see" inside objects that may be wrapping a translated object (such as ValidatedAny)
Configs packet size limit increased to avoid problems with serializing large configs.
(1.21.9) fixed keybinds showing as "Button 70" etc.
ValidationResult.reportTo no longer reports an error context has header information only.
Dependency has been changed to KotlinLangForge temporarily. I intend to revert back if KFF is updated. Or maybe I'll just package the kotlin libs myself, I'm getting tired of Forge kotlin libs.
Breaking changes in 0.7.x
ValidatedEnumMap is removed
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
ValidatedColor has a new presets feature. These presets will be displayed in a "sub-pane" to the right of the main color popup.
There are pre-defined presets based on MC color enums, or you can define your own presets using ValidatedColor#withColorPresets
New ValidatedNumber#setFormat extension function lets you define a custom DecimalFormat for your number settings
PopupWidgets can now have "child" layouts that appear as sub-panes either to the right or below the main popup.
Create a child layout with a pair of pushChildLayout and popChildLayout in the Builder.
This child layout can have completely different spacing, padding, and so on.
All the elements added to this child will be navigable alongside the main popup.
Changes
Configs marked with SaveType.SEPARATE can now be opened out of the world (if it's entries can be) without caring about permissions checking, because the clients version will be considered separately anyway
Deprecated the constructor of LayoutWidget in favor of a builder pattern. Migrate any custom LayoutWidget impls asap; removal scheduled for 0.8.0
Fixes
(1.21.6+) the Changes widget now properly displays its number of changes
(1.21.6+) popups properly blur the underlying screen content again
Fixed ValidatedCondition not passing widget size changes to it's delegate widget *
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
New @IgnoreCommentsForDesc annotation. Use on your config class to have the translation parser ignore @Comment and @TomlComment for in-game descriptions.
Changes
Configs marked with SaveType.SEPARATE can now be opened out of the world (if it's entries can be) without caring about permissions checking, because the clients version will be considered separately anyway
Fixes
Fixed issue with config parser incorrectly ignoring transients in certain cases
Config GUI entries no longer show their tooltips from behind the header/footer
Config groups now scroll correctly when collapsed/opened
Fixed potential concurrency issue with config registration on Neoforge. All versions have the fix just in case.
Expressions now print their constants properly in "plain" format (0.0000003) vs (3E-7) so they properly back-parse their printed version.
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
New Translatable.Name, Translatable.Desc, and Translatable.Prefix annotations for data generation of lang files
Corresponding ConfigApi.buildTranslations and ConfigApiJava.buildTranslations methods for hooking a config into a data generator
Also created a simple registered objects translation builder at ConfigApi.platform().buildRegistryTranslations Used for either RegistrySupplier objects built by a Registrar or Identifier used in a traditional registration system
Added ConfigScreenProvider, allowing for registering of custom screen implementations in place of the Fzzy Config built in
API Call registerScreenProvider added for registering your provider
afterClose event in PopupWidget
isPressed method in Relevant interface (which is used by FzzyKeybind and ValidatedKeybind), which allows for assertive checking for a key state, above the existing reactive response method relevant
Overhauled the error handling system in ValidationResult with a new ErrorEntry system and dramatically improved process flow for building complex errors and passing exceptions and other context information
Also introduced more functional methods like inmap, outmap, and bimap
Changes
Upgraded CustomMultilineTextWidget to handle click and hover events, as well as now implementing a custom MultilineText implementation
ValidatedField bails out of deserialization only on critical errors, now letting correction take its course more often
The Registrar system is no longer marked as experimental. Any further changes to the system will follow the standard released content deprecation and update system
Methods using the old error handling system of string lists are marked for removal 0.8.0
Slight improvements of overall memory footprint
Fixes
ConfigGroup.Pop properly pops multiple times if attached to one setting multiple times
Clicking off of a context menu into a slider properly updates the slider value
Search and Restore Defaults options in the context menu work again
ClickableTextWidget and CustomMultilineTextWidget now properly show hover events
Fzzy Config 0.7.0-fix2
· Fabric · Minecraft 1.21.6, 1.21.7
Stupid semantic versioning... now the fix should work with mods that add dependencies to "0.7.0+1.21.6" specifically
Fzzy Config 0.7.0-fix1
· Fabric, Quilt · Minecraft 1.21.6, 1.21.7
Breaking changes in 0.7.0
ValidatedEnumMap is removed
Removed all methods and properties marked as Deprecated and for removal 0.7.0
SmallSpriteDecoration#<init>
SpriteDecorated#textureSet & textures is now a required override
SpriteDecoration#<init>
CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
Removed ActiveButtonWidget
Removed TextlessActionWidget
DynamicListWidget.EntryPos and implementations made internal
PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
Removed deprecated overrides of PopupController from PopupParentElement
SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
Removed ImmutableRelPos
RenderUtil#renderBlur
Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent
Additions
None
Changes
None
Fixes
Updated fabric-permissions-api to the correct version for 1.21.6
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
Improved average config load time by approx. 10%.
Changes
ValidatedKeybind now stores the keycode in the output file based on a string key, rather than the raw int; but it will still accept the raw int for up-conversion purposes or if the key falls outside the typical set of GLFW keys.
The format for the key is the same as the minecraft one with the key.[type] prefix removed (except for mouse buttons, those start with mouse.)
For example, page down is page.down versus the minecraft key.keyboard.page.down
And right click is mouse.right versus key.mouse.right
ValidatedTriState will now accept boolean inputs from the file, if a user accidentally uses true or false instead of the intended enum form "true" or "false"
"Excess" fields (fields that used to exist in a config but no longer do, for example) are now reported as deserialization errors and removed from the read file.
Fixes
Integer-type text-box number validation no longer accepts decimal inputs, and the text-box in general no longer accepts any characters except numbers, the minus sign, and decimal if it is a floating-point number.
Fixed the search passing text not dynamically updating based on current pass-fail state of the input test.
Validated Any now properly translates basic settings (again, don't know when this broke)
Fixed servers not properly parsing updates sent from the client, introduced in 0.6.7
Config screen managers are now properly invalidated on joining a new world (with potentially new config values to care about)
Narration of the search bar and search bar option buttons works better, and can recover better from being "interrupted"
Deserialization fixes:
Basic validation (plain fields) now properly report their errors, leading to a correction of the config file as needed.
ValidatedAny is now robust against changing the number of fields in the wrapped object. Previously adding fields and then trying to read the pre-existing config file would result in total failure for the object, reverting to defaults.
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
Updated to 1.21.5
Searches now propagate through sub-menus and other "children" results that aren't themselves valid but contain sub-entries that are valid will show a dashed outline and the tooltip will list the valid sub-entries
Searches can now be automatically passed to sub-menus. By default, alt-click will pass the search
The main search bar now has some buttons! A menu button which opens the new search config menu, and a clear button to quickly clear the search bar.
Added new SaveType method in Config
OVERWRITE - Client configs will be overwritten when receiving a sync from a server. Default and previous behavior
SEPARATE - Client configs will not be saved locally when updated from a server. Actions that modify gamestate before sync can't be included in these config type (Action.RESTART and Action.RELOG), as they won't be able to properly sync up this game state if they can't overwrite the local file.
New Translatable.ResultProvider super-class for more nuanced and efficient storage of translation results. Currently, half-wired-in until 0.7.0.
Scope-based Result can be cached with the new Translatable.createScopedResult
New function utilities for suppliers, functions, and predicates that always return the same value
Changes
Translatable.Result now implements Searcher.SearchContent directly, and is now deprecated in favor of the new ResultProvider
In 0.7.0, all Result constructors will be made internal in favor of using Translatable.createResult/Translatable.createScopedResult
ConfigEntry can now process searches using the ContentBuilder.searchResult method. This presents valid "child" search results when the parent list is searched.
ValidatedAny now has its own search bar
ConfigScreenManager passes Config and entry Content misc. context to entry creators
Fixes
Fixed unnecessary re-saving of configs on single player configuration
Fix a variety of edge cases and niche issues involving searching
Popups for settings that are translated with @Translation (or the entire class is marked with @Translation) will now properly render the translated name in the popup header
Search filtering now properly resets when a screen is returned to. The search bar menu has a setting to enable caching behavior where the search will be maintained when the screen is re-opened from a child.
Fixed accidental niche API break of ConfigGroup involving kotlin constructors.
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
Configs now support different save file formats beyond just TOML. Current offerings are TOML, JSON, JSON5, JSONC. Select your desired format by overriding fileType in the config class.
JSON5 and JSONC will automatically carry over comments made with @Comment or @TomlComment
Changes
Broke out PopupController from PopupParentElement, allowing for smoother implementation of popups into existing screens.
Fixes
Fixed unnecessary re-saving of configs on single player configuration.
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
@RootConfig annotation for marking a config as a "root" config. The settings will appear "inline" with the landing page config buttons, instead of in its own sub-GUI. All other aspects of the config interaction remain unchanged; loading, saving, calling from, etc. so an existing config can be marked as root with no breakage.
Added a greyed-out placeholder button for configs that aren't yet loaded but have been promised via the fabric.mod.json or mods.toml.
New ConfigApi.isScreenOpen/ConfigApiJava.isSceenOpen methods for checking if a Config GUI is currently open.
DynamicListWidget has a new scrollToEntry method for scrolling directly to a list element.
ConfigApi.openScreen now supports passing in scope args for scrolling to them and opening them as applicable. If you have a config my_mod:config with a Object setting coolObject, passing my_mod.config.coolObject to openScreen will open the config GUI, scroll to the object setting, and open the object editing popup.
New EntryOpener interface for entries that have something to open on request. This is typically used for validation that has a popup edit menu.
Changes
The networking api methods registerLenient[side] are now ported to all versions for usage parity.
If a config is loaded after screens for a mod have been initialized, the manager will be invalidated and rebuilt (as needed) with the new total loaded config set considered.
ValidatedColor popups now have a submit button for the hex string textbox, and the alpha edit box will be completely missing if the color doesn't support transparency.
Fixes
GUI keys are no longer pressable "past" an open popup, and multiple of the same popup can no longer be opened with keybinds.
ConfigGroup now has an optional constructor parameter to start the config collapsed.
Ingredients and Colors now work as keys/values in validated collections.
Ingredients can no longer be interacted with outside of worlds.
The screen manager now locks while constructing a requested screen to prevent recursive screen building if the construction process somehow calls for opening the same screen.
ValidatedColor properly shows and accepts only 6-digit hex when it doesn't support transparency.
Popups for ValidatedIdentifier and ValidatedTagKey properly focus their textboxes on open again, and their textboxes are aligned properly again.
Fixed Go-to menu scroll bar disappearing if you were dragging it and moved the mouse off of the menu. The scrollbar disappearing when the menu isn't hovered is intended behavior.
Right click menus properly pass clicks "past" themselves, allowing actions to be taken when "clicking off" of them (including "moving" the menu to the newly clicked spot.)
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
New registerLenientS2C and registerLenientC2S methods in the NetworkApi. These methods will be propagated to all versions of Fzzy Config in 0.6.6, though in most versions will have no behavior difference compared to registerS2C/C2S
Changes
Internal Fzzy Config packet registrations now register leniently.
NetworkApi.canSend now checks that one of it's registered methods can in fact send.
Fixes
Fixed clients without Fzzy Config being prevented from joining a server with it. Obviously configs will not be synced in this circumstance, FC will simply pretend that client doesn't exist. Mods that can allow this behavior should of course also handle this circumstance.
Custom[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. Deprecations scheduled for removal 0.7.0
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
Possibly more, I didn't take great notes
As of 0.6.0, 1.20.4 and 1.20.6 will no longer be receiving active updates.
Additions
Fzzy Config's wiki is now hosted with ModdedMC! Check it out:

Added WidgetEntry for easy creation of Dynamic Lists wrapping a collection of widgets.
New widget type SCROLLABLE for ValidatedChoiceList and ValidatedChoice which opens a scrollable and searchable widget list
ValidatedChoice now includes the INLINE widget type previously only available on the list version
ValidatedChoiceList now has its own decorator, distinguishing it from a normal list
Added new TriState utility enum and corresponding ValidatedTriState validation for configs. Like most tri-states, has TRUE, FALSE, and DEFAULT choices, and two different widget options for selecting between them.
Added a FzzyKeybind system that builds on the ContextType system introduced in 0.6.0.
Define basic or compound (multiple choice) keybinds with or without modifiers (ctrl, shift, alt)
ValidatedKeybind validation added for configurable keybind handling.
Keybinds still need to be handled by other Fzzy Config context handling methods, this is a structured method for setting up and configuring context types.
For a robust example, see Fzzy Configs built-in keybind config and ConfigScreen context handler that is used to handle GUI inputs.
Added wdithFunction and heightFunction to PopupWidget, allowing for dynamic sizing based on screen and previous dimension context.
Fzzy Config finally has its own config! keybinds.toml controls the inputs used for interacting with Config GUIs.
Changes
__Registrar System__: RegistrySupplier now implements RegistryEntry directly, as well as passing its reference entry. This includes a breaking experimental change, getKey has changed to getRegistryKey
Improved the narration of ValidatedChoice and ValidatedChoiceList
Improved the memory footprint of DynamicListWidget, deferring several allocations until needed
Shortened in-GUI changelogs related to Validated Object changes.
In-GUI usage information popup updated with a list widget and configurable keybind entries.
The Config GUI info screen has been updated with a list view of the GUI keybinds. These keybinds can be edited (and this list is secretly a custom config GUI for Fzzy Configs built-in Keybinds config)
ConfigScreenManager now caches config GUI templates incrementally, instead of front-loading all screen templates at once. This has some side effects, namely that each screen now has a separate Update Manager, so restoring defaults, reverting changes, etc. is now sectioned off per-config instead of global to the namespace. The "Root" screen update manager can see any loaded children managers, so changes can be managed from the root screen into any child screens that have been loaded and modified.
Fixes
Fixed done button on config screens saying "back" when they should say "done" in certain circumstances
Fixed ValidatedAny popup saying "Revert Changes" for both the revert and restore defaults button
Certain validation types now properly determine their default- and changed-state, namely Validated Objects.
ValidatedCondition now properly considers its conditions when determining default and changed states. A Validated Condition that has failed conditions will always be considered "default"
Fixed various typos and other content issues with some KDoc entries
ConfigScreenNarrator now properly strips out formatting codes before narrating the text content (this also affects the vanilla screen narrator)
Fixed ValidatedIdentifier config widgets not being properly navigable with keyboard.
(NeoForge) fixed network crash involving clients without Fzzy Config trying to join a server with it.
(1.20.1) fixed texture issue with the context and go-to menus.
Custom[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
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
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
New TextureProvider interface for generic provision of textures based on active/hovered state.
Single and Quad variants of TextureSet added for sets with one texture regardless of state, and sets with all four textures different, respectively.
Changes
TextureSet now implements the TextureProvider interface
CustomPressableWidget and therefore CustomButtonWidget now use TextureProvider instead of directly TextureSet in their implementations.
textureSet method of SpriteDecorated is now deprecated and defaulted, with a scheduled removal of 0.7.0.
SpriteDecoration and SmallSpriteDecoration constructors with TextureSet are likewise deprecated, with new overloads taking TextureProvider
The texture sets in TextureIds are now explicitly typed as TextureProvider instead.
Improved the lazy-loading and/or reduced duplicate loading of certain elements in lists and screens. This effort will expand in the future to further FCs goal of only ever loading a resource upon it being needed.
ValidatedChoiceList now shows highlights around "unselected" options to better indicate that they are still active button elements.
Fixes
Fixed ValidatedChoiceList popup widgets being too narrow for the popup with very short choice titles.
Remove stray dev-environment logging from LayoutWidget
Custom[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
As of 0.6.3, ActiveButtonWidget is unused and deprecated, marked for removal by 0.7.0
As of 0.6.3, TextlessActionWidget is unused and deprecated, marked for removal by 0.7.0
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
new validation ValidatedChoiceList. Similar to ValidatedChoice, but the list version allows for enabling/disabling of none to all of the possible options while the Choice is one and always one of the choices from the options.
New toChoiceSet helper method in ValidatedList, ValidatedSet, and ValidatedChoice for creation of choice lists from the backing validation.
Added testVersion method to PlatformApi for platform-agnostic testing of MC or mod version
CustomButtonWidget now accepts an activeSupplier to dynamically update active state, and a messageSupplier to dynamically update the button label. See the builder for details.
Changes
@Validated[Number].Restrict annotations now accept an optional ValidatedNumber.WidgetType with the new third param type
Reimplemented all instances of ActiveButtonWidget as built or extended-from CustomButtonWidget, and ActiveButtonWidget is now deprecated.
Reimplemented all instances of TextlessActionWidget as built CustomButtonWidget, and TextlessActionWidget is now deprecated.
Fixes
Fixed suggestion windows not being properly linked up in the config screen.
Several popups, widgets, and so on have better layout and positioning; fixed several weird overlap and underlap issues among other things.
Top and bottom of scrollable lists now position better.
Fixed searching leading to entries "hiding" above the top of the viewport, needing you to scroll up to find them despite not having a scroll bar potentially
Group collapsing now properly positions the bottom of the setting list at the bottom of the list viewport when applicable
Custom[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
New drawNineSlice and renderBlur methods in RenderUtil for matching method signatures across versions. Part of an ongoing effort to unify the API across all versions.
Added open ContextMenuPopup to Popups for easy third party creation of context menus.
New flatBuild in ContextResultBuilder that flattens the context map groups into one map.
Changes
None.
Fixes
ContextResultBuilder build and other utility methods no longer accidentally internal.
(1.21.4) fixed the included version of Fabric Permissions API being outdated.
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 removed
Custom[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 implementation DynamicListWidget. 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 method ValidatedPair.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 a prefix 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 override hasPrefix, prefix, and prefixKey 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 in PopupWidget. 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 implements Supplier
Overhauled the Decoration system, now Decorated, 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 in PlatformApi 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.
Added onRegisteredClient and onRegisteredServer to the EventApi for listening to config registrations and only acting after the config has been successfully registered.
New version of ValidatedField.validateAndSet, validateAndSetFlagged that accepts EntryFlag.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 change
EntryFlag.Flag.STRONG: field validateAndSet/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 of ConfigApi.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 and EntityAttributeInstanceHolder
New ConfigScreenWidget for easily creating a textless 20x20 widget to open your config from another screen.
Pass in your config's base scope (mod_id usually)
Define a position absolutely, or choose a corner to anchor the widget to, and an optional padding (default 4px)
Remember to add your new widget to the screens drawable children!
Changes
TextlessButtonWidget is no longer final; make a custom implementation if you want!
Fixes
Fixed ValidatedField.toSet(collection) returning a list, not a set.
WARNING: This may potentially be a breaking change, if any mods have used toSet and accepted that it returns a ValidatedList instead, rather than raising an issue with me. Their field will now not match the type returned.
Not marking this as a major patch since any mods that did this were working with broken state, not stable API
Added a flag system EntryFlag to ValidatedField and ConfigAction. Currently only has one flag REQUIRES_WORLD. A field marked with REQUIRES_WORLD marks that the player needs to be in-game for the setting to work properly. The config screen will show Not in Game instead of the setting, when not in game.
Added ofDynamicKey builder methods to ValidatedIdentifier. Use of ofRegistryKey for non-synced dynamic registries (Loot registries, or modded dynamic registries that don't sync, primarily) is now deprecated and will log a warning. ofDynamicKey handles synchronization of predicated registry lists more robustly.
Added zh_tw translations
Changes
ValidatedIdentifier now automatically applies REQUIRES_WORLD to validation for dynamic registries, which require the world to be loaded. They will now not be available out of game.
Validation wrappers (lists, ValidatedCondition, etc.) will inherit their delegates flags automatically
ConfigActions based on ClickAction.RUN_COMMAND or ClickAction.SUGGEST_COMMAND now automatically apply REQUIRES_WORLD
Fixes
ValidatedIdentifier without validation no longer tries to "force" you to use the minecraft namespace in the text box
Enums revert to their proper default when automatically validated (plain field in the config)
ValidatedIdentifier.ofRegistryKey now works properly with the three types of tables that apparently aren't in the normal dynamic registry manager (loot, functions, predicates)
ValidatedMaps have better popup error reporting
Error catching overall improved
Fixed class-level @Translation negation not being respected
ValidatedAny recognizes and prioritizes Translatable entries like normal config settings do
new ValdiatedCondition validation wrapper. Gate the wrapped value behind conditional checks added via withCondition when get is called. If checks fail, a fallback will be supplied instead of the stored "live" value, and the setting will be locked in-GUI.
New methods toCondition in ValidatedField to convert one to a ValidatedCondition
Text.isEmpty() and Text.isNotEmpty() extension functions in FcText
toLinebreakText in FcText to convert a list of text into one text split by newlines
Changes
Config settings with names that don't fit into the row (truncated with ellipses) will now have the full name appear in the tooltip
Archived documentation versions below 0.4.0. If you need to reference a specific older version for some reason, feel free to contact me.
Fixes
Translatable things now properly have their translations respected if they are wrapped with automatic validation.
Fixed context menu (right click menu) showing under text in some cases
Config entries ('rows') are better at compositing their tooltip information onto any native tooltip the containing widget wants to render.
Improved narration of config entry tooltips; stacking action narrations after the tooltip narration as needed.
New _experimental_ Result Provider api; providing a framework for reflectively accessing any config value via string scopes
Create result providers for any configurable type, providers soft fail to fallbacks given during creation
Results are dynamically updated as the config changes, no need for relogging, reloading, etc.
Built in argument handling system for performing actions on the scope requested - check the size of a list, check if a list contains a value, scale a result, anything you can dream up.
Added ValidatedField mapping. Validation can be mapped to validation of any other convertible type with the new map methods.
New helper class ValidatedRegistryType maps ValidatedIdentifier to registry objects, allowing for easy direct implmentation of setting based on registry objects (Items, Blocks, etc) without having to later map the identifiers yourself.
ValidatedField now has a helper codec method for generating a Codec of the underlying type.
ValidatedField now has a listener system that triggers on any set of the field. This listener is a Consumer<ValidatedField<T>> and is added with withListener
Added EventApi and corresponding direct implementations in the Config class
like other sub-apis, access this Api through the ConfigApi
onSyncClient - fires when a config is synced to a client
onUpdateClient - fires when a config is updated in-game on the client side
onUpdateServer - fires when a config is updated in-game on the server side
Added ConfigAction, which can be used to add arbitrary on-click buttons in the Config GUI. Use them to link to your wiki, open a patchouli guide book, give the player an item, etc.
Added extremely basic PlatformApi for simple cross-loader tasks like checking if the game state is client-sided or not.
Changes
Specialized widgets no longer internally extend PressableWidget or ButtonWidget, which was causing issues with Visual Overhaul or any other mod that leaks the constructor of the widget. It is recommended to use the Custom variants of those classes for any custom validation implementation.
Fixes
ValidatedIdentifier can now bind to dynamic registries using the ofRegistryKey initializer methods.
Fix syncing on login not working.
Fixed updates on client-only configs sometimes blasting the log with the full config contents.
Revert @JvmStatic addition in ConfigApi that accidentally breaks code using the previous way, thanks to Kotlins assertion of an "additional" static simply being false (it replaces with a static)
MutableText#command cleanly defines a Run Command click action
MutableText#tooltip adds a hovered tooltip to text
MutableText#underline underlines the text
MutableText#bold bolds the text
MutableText#italic italicizes the text
MutableText#strikethrough strikes through the text
MutableText#colored colors the text with any RGB color
Any#transSupplied translates the receiver, with a supplied fallback literal if necessary. Useful if the fallback is computationally intensive
Any#descSupplied describes the receiver, with a supplied fallback literal if necessary. Useful if the fallback is computationally intensive
Added new Translation annotation. Yet another way to translate your in-game config settings!
If applied to a config, section, or object, all the settings within will use the prefix provided in their translation keys instead of the normal class-path based one.
If applied to a setting, that setting will use the specified prefix. It can also be used to turn off translation for a setting if you want the normal translation scheme to apply for all settings except the negation-annotated ones.
With a prefix, your settings will have a lang key of prefix.[fieldName] and prefix.[fieldName].desc. This applies to all instances of the field, so repeating units of the same setting will share a lang key!
Added new "Not in Game" uneditable setting to better show that you need to connect to a world to access it.
Added new client commands that technically can be used in-game or for other purposes. Mostly they are "internal" for use with the changed action messages.
/fzzy_config_restart shuts down the client
/fzzy_config_leave_game disconnects you from the current game and returns you to the proper title screen.
Action chat messages now include a click event with commands corresponding to the needed action (RELOG will have a leave game click action, and so on)
Fixes
Config screens properly understand when you are not in a game, or when the config is client-only. Configs accessed outside a game should more accurately display the settings you have access to
Documentation mod links point to the mod pages now instead of the Modrinth/CF homepage.
Fixed missing docs and @JvmStatic for ConfigApi#network
Created new networking API for facilitating cross-platform play phase networking.
added new configure_update list command to list the current quarantined updates, to help get the proper id names now that the argument for the command is a simple string.
Changes
The configure_update command now uses a string argument to avoid needing to serialize a custom argument. Fzzy config should work with vanilla clients again.
Added @WithCustomPerms and @AdminLevel for definition of user permissions using LuckPerms/Forge Permissions API "Node" style permissions
Added new update quarantine. If an update is suspect, Fzzy Config will quarantine it instead of applying it or outright deleting it. Admins will be notified and have the opportunity to inspect it with a new /configure_update command, accepting or denying the update as needed.
Added new @RequiresAction annotation that supplants the functionality of the now-deprecated RequiresRestart
RESTART - same functionality from RequiresRestart
RELOG - prompts the user to disconnect and reconnect from the world or server
RELOAD_BOTH - prompts a reload of both datapacks and resource packs
RELOAD_DATA - prompts a reload of datapacks
RELOAD_RESOURCES - prompts a reload of resource packs
New icons for the new Actions alert system that will appear on the left side of the config, replacing the one "!" symbol
Added ValidatedString#fromValues for creation of a Validated string with a vararg set of allowable strings, no list wrapper needed.
Changes
Deprecated @RequiresRestart
Permission checks are better at ignoring single player games.
Tooltips for required actions are now presented when hovering over the icons themselves, rather than as a header in the main setting tooltip. The tooltip when using keyboard navigation now appends action alerts after the setting description, not before, to avoid having to sit through a bunch of alerts before learning what the setting even does.
Internally refactored all fabric-related code into common access points.
If a setting forward fails, Fzzy Config now alerts the sender of the problem.
Removed environment annotations. Modders pay attention to your source sets! This is to facilitate multiloader more effectively.
Updated or tweaked KDoc in many places
Fixes
ValidatedChoice now properly updates its tooltip after each selection change.
Added ConfigApiJava into the most recent versions.
Added missing widget and translationProvider optional parameters in ValidatedSet#toChoices
ValidatedChoice now has the params translationProvider and descriptionProvider, BiFunctions that let you convert the choices base translation key and an instance of the choice into a Text instance. Useful for creating translations/Descriptions for strings or other choices that aren't Translatable.
ValidatedList.toChoices now lets the user define translation and widget behavior.
Fixes
Clean up code internally. No external change in behavior
Added new (undocumented) cast and nullCast extension functions for functional programming style of type casting. Ex: val thing: MyType2 = myType1.cast<MyType2>().withThing().doAnotherThing()
Changes
Optimized Expression with pre-compiled shortcuts for many situations; optimized constant usage.
Expressions now have hashcode and equals methods for direct comparison.
Updated the ValidatedIngredient interface to a new popup with two list editors, list viewers, and "Clear" buttons.
Added a supplyTooltipOnOverflow method to SuppliedTextWidget that allows for provision of a tooltip in case the text widget overflows and "trims" the input. This can be identical to the text supplier (can be the text supplier instance itself), or can be a separate supplier with, for example, newlines instead of commas separating text elements
Fixes
ValidatedIngredient now supports both tags and item IDs, instead of just item ids. The constructor now accepts Set<Object>, which can be composed of TagKeys and Identifiers (for tags and items, respectively)
Polished fabric.mod.json file to be more accurate to the mod requirements.
Fzzy Config 0.3.0
· Fabric, Quilt · Minecraft 1.20.1, 1.20.5 · beta
Additions
IgnoreVisiblity annotation. A config marked with ignore visibility can have private/protected etc. fields/props. This was added for backwards compatibility with configs that may be using restricted visibility to store non-config information.
Changes
The changes button narration was changed from "Manage Changes" to "(Number of changes) Changes Made Button"
The main de/serializers will now access-widen fields when applicable based on IgnoreVisiblity state
try/catch blocks of the main de/serializers expanded to catch more issues without crashing
Config list entries will narrate their name on hover as well as focus
Increased max character length of the search box in case of needing to search for long names
API BREAK - OnClickTextFieldWidget now takes an OnInteractAction instance instead of a Consumer<OnClickTextFieldWidget>. This lets the text field pass key presses to whatever the widget desires (generally a newly pushed PopupWidget element)
Fixes
Permission level is now rechecked on GUI opening, preventing you from being locked out of a config if you opened a server config while in the main menu.
Tab now completes suggestions as it should.
Changes button now narrates the number of changes made as it should have
Fixed lang issue with the default descriptions for min- and max-bounded numbers
The Narrator now properly narrates config list entry tooltips
Fixed the search bar "trapping" arrow based keyboard navigation even when the search box is empty. Now will pass navigation when it's empty
Fzzy Config 0.2.8
· Fabric, Quilt · Minecraft 1.20.1, 1.20.5 · beta
Additions
Translatable now has a hasTranslation() and hasDescription method in case an inheritor can have valid descriptions or translations other than via the typical I18n key check.
Entry Widget has gained the method widgetAndTooltipEntry, which attempts to apply a description tooltip to a widget, if applicable.
Changes
Number settings now have a default description that describes the valid range for the selection.
EntryWidget is no longer a functional interface
Fixes
Fixed blank line at top of description tooltips.
Fixed MapListWidget not properly firing mouseReleased on its children when the mouse is released out of that child's bounds.
Fixed suggestion lists not being scrollable or clickable in certain situations.
Maps, Sets, Lists, and Ingredients properly display their widgets descriptions, if any.
PopupWidgetScreen now correctly shows tooltips on screen even when popups are open.
Fzzy Config 0.2.7
· Fabric, Quilt · Minecraft 1.20.1, 1.20.5 · beta
Additions
None.
Changes
None.
Fixes
Fixed new ValidatedString methods not returning a ValidatedString as intended.
Fzzy Config 0.2.6
· Fabric, Quilt · Minecraft 1.20.1, 1.20.5 · beta
Additions
Added ValidatedString.fromList() for easy construction of a ValidatedString from a known list of options or a supplier of potential options.
Added new Entry interface EntrySuggester which has the SAM getSuggestions.
Added AllowableStrings utility, much like AllowableIdentifiers. Implements EntryChecker and the new EntrySuggester.
ValidatedString now utilizes SuggestionBackedTextFieldWidget if an AllowableStrings is passed as its EntryChecker. Using the new fromList() automatically does this.
Added ValidatedIdentifier.ofSuppliedList() to construct validation with lists that aren't tags/registries but may not be fully known at validation time.
Changes
AllowableIdentifiers now implements EntryValidator and the new EntrySuggester.
Fixes
None.
Fzzy Config 0.2.5
· Fabric, Quilt · Minecraft 1.20.1, 1.20.5 · beta
Additions
Initial release of 1.20.5 version
Changes
Validated fields are no longer final classes, allowing for custom impl as needed.
Fixes
Fixed Typo in lang.
Fixed single player clients getting multiplayer restart message.
Fzzy Config 0.2.4
· Fabric, Quilt · Minecraft 1.20.1 · beta
Additions
None
Changes
Validated numbers lock to textbox widgets if either bound is a MAX or MIN value
Fixes
Fixed ValidatedAny crashing on an object without a 0-arg constructor.
Fzzy Config 0.2.3
· Fabric, Quilt · Minecraft 1.20.1 · beta
Additions
RequiresRestart annotation now applicable to classes. Not transitive through Sections yet.
Changes
None.
Fixes
Fixed RequiresRestart and NonSync not being able to target java fields
Fzzy Config 0.2.2
· Fabric, Quilt · Minecraft 1.20.1 · beta
Additions
RequiresRestart annotation now applicable to classes. Not transitive through Sections yet.
Changes
None.
Fixes
Fixed RequiresRestart and NonSync not being able to target java fields
Fzzy Config 0.2.1
· Fabric, Quilt · Minecraft 1.20.1 · beta
Additions
RequiresRestart annotation now applicable to classes. Not transitive through Sections yet.
Changes
None.
Fixes
Fixed RequiresRestart and NonSync not being able to target java fields
Fzzy Config 0.2.0
· Fabric, Quilt · Minecraft 1.20.1 · beta
Additions
Initial release.
Changes
None.
Fixes
None.
No release matches that. Try a version number or a class name.