- Remove padding between list items
- No longer hide add and reset buttons when lists are collapsed, but automatically expand them when clicked
- Fix removing items from lists didn't update up and down buttons
- Fix lists not updating properly when removing the final item from a list
- Refactor some gui list code to abstract all list functionality from main gui classes
- Fix option entries sometimes overlapping due to the reset button
- Fix string elements cropping 1px off the top of the text
- Abstracted builders to restrict API usage
Lists
Implements mutable list options where you can create, remove and shift entries in a list.
API
Lists hack option groups with their own implementation for this, so each individual list takes form as a whole option group.
ListOption.createBuilder(String.class)
.name(Text.of("List Option"))
.binding(/* gets and sets a List, requires list field to be not final, does not manipulate the list */)
.controller(StringController::new) // usual controllers, passed to every entry
.initial("") // when adding a new entry to the list, this is the initial value it has
.build()
Implementation details
When implementing this, it was vital to me that all controllers work with lists, not ones specifically designed for list entries. This was achieved quite easily by having each entry being its own option with an empty name and tooltip with its own controller, that pairs with its list "parent" to actually modify the option.
Option groups were taken advantage of and hacked into its own option, only minor changes had to be made to get this to work with value application.
Applicable controllers have been modified to expand their inputs to near full width when no name is present.
Screenshots

String improvements
- Allow
StringControllerElementto have unlimited text length - When pressing
Deletein a text field whilst text is highlighted, it will act likeBackspacelike it should.
Other changes
- Slightly compacted elements
- Update to 1.19.3
- Colour field controllers
- Better carot positioning when clicking in text fields
- Better text selection for text fields
- Smooth scrolling for category list
- Fix category list scrollbar appearing under option list background in-game
- Fix tick box name text length limiting
End-user changes
- Smooth category scrolling
- Individual reset buttons for every option
- Fix bug where option lists that just went over into scrolling scrolled extremely slow.
Developer API changes
- Actual Config API to save and load fields in a class automatically (documentation)
- Separate
DimensionintoDimensionandMutableDimension - Make
dimprivate inAbstractWidgetso mods can't change the dimension withoutsetDimension - New Option API method
isPendingValueDefaultto check if pending value is equal to default value of binding - Fix
Option#requestSetDefaultandOption#forgetPendingValueimplementations weren't notifying listeners
- Improve tooltips a lot:
- They now never get cut off by the edge of the screen
- They never overlap the hovered option/group/category
- They don't take half a second to appear
- They don't disappear when you move your mouse
ButtonOptionnow consumes itself, so you can access it when building.- Make
Option#availablemutable withOption#setAvailable
- Improved search - Now searches every category rather than the currently selected one
- Option Flags - Add flags to options that when changed, the flag is executed once per the whole config.
- Deprecated "Require Restart" in favour of option flags.
- Fix search field overlapping undo and cancel at some GUI scales
- Fix scrollbar appearing in the wrong place at some GUI scales
- Fix option entries not extending to fill the list's width at some GUI scales
- Fix tooltips rendering below the scrollbar


