Mods
Resource Packs
Data Packs
Modpacks
Shaders
Plugins
Mods Resource Packs Data Packs Plugins Shaders Modpacks
Get Modrinth App Upgrade to Modrinth+
Sign in
ModsPluginsData PacksShadersResource PacksModpacks
Sign in
Settings
YetAnotherConfigLib (YACL)

YetAnotherConfigLib (YACL)

A builder-based configuration library for Minecraft.

23.92M
5,028
Library
Management
Utility

Compatibility

Minecraft: Java Edition

1.21.x
1.20.x
1.19.x

Platforms

Fabric
Forge
NeoForge
Quilt

Supported environments

Client-side
Server-side
Client and server

90% of ad revenue goes to creators

Support creators and Modrinth ad-free with Modrinth+

Links

Report issues View source Visit wiki Join Discord server
Donate on Patreon

Creators

isxander
isxander Owner

Details

Licensed LGPL-3.0-or-later
Published 2 years ago
Updated last month
DescriptionGalleryChangelogVersions

Show all versions

1
9
10
11

2.3.0

by isxander on Mar 15, 2023
Download
  • Update to 1.19.4

2.3.0+beta.3

by isxander on Feb 22, 2023
Download

2.3.0+beta.2

by isxander on Feb 8, 2023
Download

2.3.0+beta.1

by isxander on Feb 8, 2023
Download

2.2.0 for 1.19.2

by isxander on Jan 23, 2023
Download

Backported YACL 2.2.0 to 1.19.2

Due to breaking JAR compatibility in an earlier version of YACL, mods that support YACL for 1.19.3 can no longer support 1.19.2. This is a backport of YACL 2.2.0 to 1.19.2 to allow mods to support it.

My stance on backporting

Personally, I hate to backport my mods. When breaking changes are made in Minecraft between versions, the code of the mod has to be changed to support the new version, making the older version of MC incompatible. If you want to support multiple versions of Minecraft, you have to maintain multiple branches of the mod, which is a lot of work for just one person, and I don't have the time to do that.

This is a one-off backport, and I will not be backporting any future versions of YACL to 1.19.2. If you want to support and use new features of YACL in your mod, you will have to drop support for 1.19.2.

2.2.0

by isxander on Dec 25, 2022
Download

User Changes

  • New List is empty text when lists are empty
  • Fix category buttons sometimes not being clickable when you can scroll
  • Fix the list add button not disabling when lists are disabled
  • Fix the option list background not quite reaching the edge of the screen.

Developer Changes

  • New LabelOption for shorthand to making labels!
  • Log when option bindings don't match up after using their save function
  • Internally move YACLScreen button actions into separate methods for future features :o
  • Fully publish sources jar & javadoc jar now that the loom plugin is fixed.

2.1.1

by isxander on Dec 14, 2022
Download
  • 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

2.1.0

by isxander on Dec 11, 2022
Download

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

screenshot

String improvements

  • Allow StringControllerElement to have unlimited text length
  • When pressing Delete in a text field whilst text is highlighted, it will act like Backspace like it should.

Other changes

  • Slightly compacted elements

2.0.0

by isxander on Dec 7, 2022
Download
  • 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

1.7.1

by isxander on Nov 14, 2022
Download
  • Breaking change: GsonConfigInstance now only serializes fields annotated with @ConfigEntry to prevent strange GSON problem.

1.7.0

by isxander on Nov 13, 2022
Download

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 Dimension into Dimension and MutableDimension
  • Make dim private in AbstractWidget so mods can't change the dimension without setDimension
  • New Option API method isPendingValueDefault to check if pending value is equal to default value of binding
  • Fix Option#requestSetDefault and Option#forgetPendingValue implementations weren't notifying listeners

1.6.0

by isxander on Oct 20, 2022
Download
  • Expanded option cycling capability, now allowing any list to be cycled, not just enums.

1.5.0

by isxander on Sep 23, 2022
Download
  • Make controller names go italic when there are pending changes
  • Allow availableValues to be passed to EnumController
  • More validation for slider controllers

1.4.5

by isxander on Sep 23, 2022
Download
  • Remove debug logging

1.4.4

by isxander on Sep 23, 2022
Download
  • Fix search not behaving properly with default collapsed option groups
  • Minor refactors

1.4.3

by isxander on Sep 22, 2022
Download
  • Cache search query results for huge performance gains
  • Allow some StringControllerElement methods to be inheritable

1.4.2

by isxander on Sep 20, 2022
Download
  • Improve search performance (even when empty) by a LOT
  • API to add listeners before building
  • Fix cancel/reset button tooltip going off-screen

1.4.1

by isxander on Sep 20, 2022
Download
  • Fix slider tooltip showing when not hovering

1.4.0

by isxander on Sep 19, 2022
Download
  • 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
  • ButtonOption now consumes itself, so you can access it when building.
  • Make Option#available mutable with Option#setAvailable

1.3.0

by isxander on Sep 18, 2022
Download
  • Option tooltips now have access to the pending value to dynamically change
  • PlaceholderCategory: A category that when selected, just opens a screen
  • instant property for option builders: makes the option apply instantly instead of when pressing "Apply"
1
9
10
11

Modrinth is open source.

main@016c3d7

© Rinth, Inc.

Company

TermsPrivacyRulesCareers

Resources

SupportBlogDocsStatus

Interact

Discord X (Twitter) Mastodon Crowdin
Get Modrinth App Settings
NOT AN OFFICIAL MINECRAFT SERVICE. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.