Fzzy Config

Fzzy Config mod changelog

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.

56 of 56 releases

Fzzy Config 0.7.6

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–26.2 (17 versions)

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

  • 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

Fzzy Config 0.7.5

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

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

  • 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

Fzzy Config 0.7.4-fix2

· Fabric, Quilt · Minecraft 1.21.9, 1.21.10, 1.21.11

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

  • 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

Fzzy Config 0.7.4-fix1

· Fabric, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

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

  • 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

Fzzy Config 0.7.4

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

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

  • 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

Fzzy Config 0.7.3

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

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

  • 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.

Fzzy Config 0.7.2

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.10 (12 versions)

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 *

Fzzy Config 0.7.1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.8 (10 versions)

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

  • 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.

Fzzy Config 0.7.0

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.7 (9 versions)

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

  • 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

Fzzy Config 0.6.9

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.5 (7 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.

Fzzy Config 0.6.8

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.5 (7 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.

Fzzy Config 0.6.7

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.

Fzzy Config 0.6.6

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.)

Fzzy Config 0.6.5-fix1

· Forge, NeoForge · Minecraft 1.20.1–1.21.4 (4 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.

Fzzy Config 0.6.5

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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. 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.

Fzzy Config 0.6.4

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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
  • 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

Fzzy Config 0.6.3

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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
  • 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

Fzzy Config 0.6.2

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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

  • None.

Changes

  • Registrar and it's implementations now expect Supplier<? extends T> instead of Supplier<T>

Fixes

  • None.

Fzzy Config 0.6.1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

Reminder of breaking changes in 0.6.x

  • 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

  • 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.

Fzzy Config 0.6.0

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.4 (6 versions)

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

Fzzy Config 0.5.9

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.3 (8 versions)

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

Fzzy Config 0.5.8

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.3 (8 versions)

Additions

  • None.

Changes

  • None.

Fixes

  • Fixed @IgnoreVisibility not handling private classes with non-private members
  • Fixed transient not working properly for de/serialization
  • ConfigSection now properly marks it's internal key as transient.

Fzzy Config 0.5.7

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.3 (8 versions)

Additions

  • 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

Fzzy Config 0.5.6

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.2 (7 versions)

Additions

  • 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)
  • Config actions now respect permissions

Fzzy Config 0.5.5-fix2

· Fabric, Quilt · Minecraft 1.21.2

Additions

  • None.

Changes

  • None.

Fixes

  • make fmj suitable for 1.21.2 *and* 1.21.3...

Fzzy Config 0.5.5-fix1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1, 1.21.2

Additions

  • None.

Changes

  • None.

Fixes

  • make fmj suitable for 1.21.2

Fzzy Config 0.5.5

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.2 (8 versions)

Additions

  • None.

Changes

  • None.

Fixes

  • 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

Fzzy Config 0.5.4

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.2-pre4 (7 versions)

Additions

  • 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.

Fzzy Config 0.5.3

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w40a (8 versions)

Additions

  • 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.
    • Check the wiki article for an example use case.

Changes

  • None.

Fixes

  • Restart screen now properly shows when a restart-causing change is received.
  • Pressing tab on suggestions now properly tabs the result into the setting text field instead of changing focus to the next widget (done button etc.)
  • ValidatedIdentifier.ofRegistryKey now takes ? extends Registry like the other helper method types, instead of just Registry.

Fzzy Config 0.5.2

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w40a (8 versions) · beta

Additions

  • Search field now has a tooltip and shows "Search" when the search query is empty
    • Search also now has several modes, described in the tooltip. Search setting descriptions, negate searches, and more.

Changes

  • ValidatedEnum popups now center the enum buttons on popups with very long enum names
  • Many internal refactors to further move away from referencing version specific MC code outside util classes
  • Further implement Custom widgets and remove more vanilla widget references

Fixes

  • Fixed number widgets sometimes freezing if their allowable range was low (<1.0)
  • Fixed integer type slider left/right button incrementing on ranges <10 min to max
  • Fixed search bar and done button moving strangely on resize
  • Fixed setting entry tooltips appearing for entries "tucked" under the header or footer when hovered over

Fzzy Config 0.5.1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w40a (8 versions) · beta

Additions

  • Port to 24w40a
  • Added a decimal format to ValidatedFloat and Double; the values within will now be formatted like #.##, instead of showing the entire fractional part.
  • Added exception if a ValidatedNumber is provided with a min >= max.
  • Added Item, Block, EntityType, and Fluid as types that can be automatically wrapped with validation without having to specify it yourself.

Changes

  • Using @Translation at the config-level will add the option to use the prefix itself as a lang key for the config title.

Fixes

  • Fixed tooltip alert for the RELOAD_RESOURCES action on config-level alerts
  • Fixed @Translation not working for config sections
  • Inherited config classes fully work again
  • Fixed mapped values not instancing themselves properly; which was breaking mapped lists, maps, and other collection views in the GUI.
  • Restore config ordering from alphabetical to declared-order in the TOML outputs. Superclasses will appear after the direct class fields.

Fzzy Config 0.5.0

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w34a (7 versions) · beta

Additions

  • 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.

Fzzy Config 0.4.3

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w34a (7 versions) · beta

Additions

  • None

Changes

  • None

Fixes

  • 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)

Fzzy Config 0.4.2

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w34a (7 versions) · beta

Additions

  • Added new helper extension functions to FcText.
    • 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.
    • /fzzy_config_reload_resources reloads resources (F3+T)

Changes

  • 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

Fzzy Config 0.4.1-fix1

· Forge, NeoForge · Minecraft 1.20.1–1.21.1 (6 versions) · beta

Additions

  • None

Changes

  • None

Fixes

  • Config screens are registered to the mod list screen as they should be.

Fzzy Config 0.4.1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–24w34a (7 versions) · beta

Additions

  • 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.

Fixes

  • None

Fzzy Config 0.4.0

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.1 (6 versions) · beta

Additions

  • 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

Fzzy Config 0.3.7

· Fabric, Quilt · Minecraft 1.20.1–24w34a (7 versions) · beta

Additions

  • Port 0.3.7 to 1.20.4

Changes

  • None.

Fixes

  • None.

Fzzy Config 0.3.6

· Fabric, Quilt · Minecraft 1.20.1–1.21.1 (5 versions) · beta

Additions

  • None.

Changes

  • 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

Fzzy Config 0.3.5

· Fabric, Quilt · Minecraft 1.20.1–1.21.1 (5 versions) · beta

Additions

  • None.

Changes

  • None.

Fixes

  • ValidatedEnum cycling style widget crashing client with certain kotlin enums.

Fzzy Config 0.3.4

· Fabric, Quilt · Minecraft 1.20.1–1.21 (4 versions) · beta

Additions

  • Port to 1.21
  • 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.

Fixes

  • None.

Fzzy Config 0.3.3

· Fabric, Quilt · Minecraft 1.20.1–1.21-rc1 (14 versions) · beta

Additions

  • None.

Changes

  • 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)

Fzzy Config 0.3.2

· Fabric, Quilt · Minecraft 1.20.1–24w20a (7 versions) · beta

Additions

  • None.

Changes

  • Port to 24w20a (1.21 snapshots).

Fixes

  • None.

Fzzy Config 0.3.1

· Fabric, Quilt · Minecraft 1.20.1, 1.20.5, 1.20.6 · beta

Additions

  • Added ValidatedEntityAttribute for configuring paired EntityAttribute/EntityAttributeModifier instances.
  • Added SuppliedTextWidget, a generic TextWidget that renders text from a Supplier of text rather than a static text input.
  • Added toSet() methods in ValidatedField, allowing for quick wrapping of sets in the same manner as the pre-existing toList() methods.

Changes

  • OnClickTextFieldWidget now renders its displayed text from the beginning, instead of the end.
  • ValidatedString will throw an exception from the Regex constructor if the regex can't match to the default value given
  • ValidatedDouble or ValidatedFloat with small ranges now have better slider scaling with keyboard navigation, instead of sticking to increments of 1.0

Fixes

  • Fixed configure command including all screen subscopes, not just the relevant subscopes
  • PopupWidget fires mouse released on things when dragged out of bounds
  • Fixed ValidatedEnum client crash related to certain types of Enums.
  • Fixed OnClickTextFieldWidget improperly trapping keyboard navigation.
  • 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.