YetAnotherConfigLib (yacl) is just that. A builder-based configuration library for Minecraft.

Overview

YetAnotherConfigLib

Enviroment Java 17 Discord

Modrinth CurseForge

Ko-fi

Yet Another Config Lib, like, what were you expecting?

Why does this mod even exist?

This mod was made to fill a hole in this area of Fabric modding. The existing main config libraries don't achieve what I want from them:

  • Cloth Config API:
    It's stale. The developer of cloth has clarified that they are likely not going to add any more features. They don't want to touch it.
  • SpruceUI:
    It isn't designed for configuration. In this essence the design feels cluttered. Further details available in this issue.
  • MidnightLib:
    It has cosmetics among other utilities. It may not be large but some players (including me) wouldn't want cosmetics out of nowhere.
  • OwoLib:
    It's content focused. It does a lot of other things as well as config, adding to the size.

As you can see, there's sadly a drawback with all of them and this is where YetAnotherConfigLib comes in.

How is YACL better?

YACL has the favour of hindsight. Whilst developing this fresh library, I can make sure that it does everything right:

  • It's just a config library. YACL contains no other features, just config screen generation.
  • It's lightweight. YACL leaves managing your config up to you, it doesn't contain an alternative to AutoConfig or similar. (Can be paired with my other library, Settxi, for this feature)
  • Easy API. YACL takes inspiration from Sodium's internal configuration library.
  • It's styled to fit in Minecraft. YACL's GUI is designed to fit right in.

Usage

The wiki contains a full documentation on how to use YACL.

Screenshots

License

This mod is under the GNU Lesser General Public License, v3.0.

Comments
  • Values visually reset to original values after saving.

    Values visually reset to original values after saving.

    Setting a value then saving it will cause all values to revert to their original state when the screen was first opened. Closing then reopening the screen will read the updated value.

    https://user-images.githubusercontent.com/19187704/208584816-dbf99a98-10a0-4767-b48a-98c5c2bcc4db.mp4

    MC 1.19.3 YACL 2.1.1

    bug 
    opened by Giggitybyte 10
  • Add translation keys for the

    Add translation keys for the "Close" and "Done" buttons

    In my language, the word "Cancel" has many meanings, and the one that is currently being used does not match the situation in which the mod uses it. 2022-09-12_21 59 42

    The situation is similar with the "Done" (Готово) button: this variant is allowed, but only if you did not need to save changes with a separate button before clicking on it (this is exactly what appears in YACL). 2022-09-12_22 33 08

    bug 
    opened by Felix14-v2 7
  • Server side configuration support

    Server side configuration support

    Hello! I recently noticed this library on Quilt's discord server.

    I would like to use it - but for a server side mod. Your readme says,

    • Client sided library. YACL is built for client mods only, making it a smaller size.

    I would like a lot to use it for my server-side mod. Is it possible? If not, will you add support for it? If not, why?

    I just read the documentation, it seems to me like the readme isn't updated? I can't see what's the problem to use it server-side.

    P.S. the mod is mandatory on the server, and optional on the client - I plan to use the mod's config loading on the server, and saving on client (obviously, I can't have a screen on server) - is there a problem with that?

    opened by DanielGolan-mc 4
  • Support for non-AWT colours in ColorController

    Support for non-AWT colours in ColorController

    It's not that great being forced to use java.awt.Color. Maybe just use ints and accept a java.util.Function to convert back and forth a custom class. When using GSON, it causes some reflection exceptions with AWT colours. I did manage to fix this with an extra class, though.

    enhancement 
    opened by TheKodeToad 4
  • Add Slovenian translation

    Add Slovenian translation

    Wasn't sure about boolean names, as true=prav by the translation, but prav is more used as right (~wrong), that's why I've gone with da (=yes)

    also wasn't sure about the GUI word, slovenian counterpart is GUV which no one uses, though GUI is not really used well. I'd propose using the word meni (=menu), though this differs from original then.

    opened by samolego 4
  • Add a bit more padding to the sides of the menu

    Add a bit more padding to the sides of the menu

    Not sure if this is an issue for YACL or XSO, but maybe add a little bit more padding to the sides of this menu.

    Instead of this:

    image

    It could be like this: (this is done with image editing, so the background is a bit odd but I think you get what I mean)

    image

    This would be great to improve the user experience

    enhancement 
    opened by intergrav 3
  • 2.1.1 has a breaking change - should be 3.0

    2.1.1 has a breaking change - should be 3.0

    I saw you mention on Discord that 2.1.1 is a breaking change that requires downstream changes.

    This should be retracted and re-released as 3.0 so anyone who is using wildcards aren't caught by surprise.

    opened by ccrvincent 2
  • Config Button Missing

    Config Button Missing

    This morning, I installed v2,1,1 on my 1,19.3 Fabric instance. After playing for a while, I noticed something strange: the Configuration button is now missing from Mod Menu!

    For demonstration, here's some screenshots with Cull Less Leaves, which uses Yet Another Config Lib.
    Here's what we got with the previous version of YACL:
    image
    image

    And here's what we get with the latest version of YACL:
    image
    image

    As you can see, the configuration button for Cull Less Leaves is now gone. I don't think I need to explain why this is kinda unhelpful.

    I have confirmed that the only thing that changed was YACL. Nothing else changed. I also rolled back and re-updated my version of YACL and the results are consistent.

    Not sure if this is relevant, but just in case, the version of Mod Menu I'm using is v5.0.2.

    opened by Obscure2020 2
  • Crash on Fabric 0.14.11 1.19.2

    Crash on Fabric 0.14.11 1.19.2

    Incompatible mod set!
    net.fabricmc.loader.impl.FormattedException: Mod resolution encountered an incompatible mod set!
    A potential solution has been determined:
    	 - Replace mod 'YetAnotherConfigLib' (yet-another-config-lib) 2.1.0 with version 1.4.3 or later that is compatible with:
    		 - minecraft 1.19.2
    Unmet dependency listing:
    	 - Mod 'YetAnotherConfigLib' (yet-another-config-lib) 2.1.0 requires any version between 1.19.3 (inclusive) and 1.20- (exclusive) of 'Minecraft' (minecraft), but only the wrong version is present: 1.19.2!
    	at net.fabricmc.loader.impl.FabricLoaderImpl.load(FabricLoaderImpl.java:190)
    	at net.fabricmc.loader.impl.launch.knot.Knot.init(Knot.java:148)
    	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:68)
    	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
    	
    

    Curseforge told me to update, and the website shows tags for 1.19.2 as well, so I was confused as to why this wasn't support

    user error 
    opened by Poke097 2
  • "Simple mode" or something that sounds a bit cooler

    In some mods, there's only one category. It would be nice to hide the sidebar and maybe move the buttons into the centre like with cloth and other libs.

    enhancement 
    opened by TheKodeToad 2
  • [Feature] Lists

    [Feature] 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

    opened by isXander 1
  • Split config API into a separate module

    Split config API into a separate module

    Why?

    I have seen many mods want to make YACL an optional dependency so if the user decides they want to configure with a GUI, they can, if not, they will configure with the config file. This prevents the mod author from utilising YACL's config API, because it is in the same jar.

    How it would work.

    YACL would be split into two modules: gui and config. GUI would depend on the config module and the mod jar would publish with both modules.

    • Client-sided mods would depend on YACL like before, with both modules.
    • Server-sided mods would depend and include on YACL's config API, and depend on YACL's gui.

    Other benefits.

    This will also allow for #41 because split sourcesets will no longer be needed.

    enhancement 
    opened by isXander 0
  • Port to Architectury to achieve Forge support

    Port to Architectury to achieve Forge support

    Why?

    One more obstacle YACL needs to cross before it can become the de facto standard for client modding is cross-compatibility with forge. Countless mods that have showed interest switching to YACL already use Architectury, which limits them to libraries that also have cross-compatibility (unless they want a different UI per loader).

    Problems

    Architectury doesn't support split environment source sets

    A feature of Loom that YACL relies on is split environment source sets. This allows for a clear split between client and common code. YACL utilises this with its config library which is available on all environments for mods that opt for json configuration on the server and a UI configuration on the client.

    Forge's slow updates.

    In the past, Forge has taken days to release a version for a new Minecraft version. On fabric, I'm used to releasing updates to my mods minutes after release. Depending on forge for builds prevents being able to push out Fabric builds because Gradle will fail because it can't find a forge version.

    enhancement 
    opened by isXander 0
Releases(2.2.0)
Owner
Xander
Kotlin Supremacist, FabricMC Modder, Library Developer
Xander
Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.

English | 中文 Apollo - A reliable configuration management system Apollo is a reliable configuration management system. It can centrally manage the con

Apollo 27.6k Jan 5, 2023
Record builder generator for Java records

RecordBuilder What is RecordBuilder Java 16 introduces Records. While this version of records is fantastic, it's currently missing some important feat

Jordan Zimmerman 361 Dec 27, 2022
Relational database project, PC Builder, for the Database Systems Design course.

README: Starting the Progam: This program was built and ran on the Eclipse IDE. To run, first create the database, "ty_daniel_db", using the ty_dani

Daniel Ty 1 Jan 6, 2022
A library that automatically generates and manages configuration files based on classes.

sc-cfg SC-CFG is a simple, yet powerful library that automatically generate configuration files based on your classes. Compatible with Java 8+ and Kot

null 10 Nov 28, 2022
A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.

GupShup About App It is a free online chat android application, enabling user to create a free user account and then log in using the credentials. Aft

Ratik Tiwari 1 May 22, 2022
NotEnoughEnergistics is a port of Just Enough Energistics to Minecraft 1.7.10

中文 Not Enough Energistics NotEnoughEnergistics is a port of Just Enough Energistics to Minecraft 1.7.10 This mod replaces AE2's default NEI integratio

vfyjxf 12 Oct 30, 2022
Literally just adds milk, to act as a bridge for any other mods that want to do the same.

Milk lib Literally just adds milk, to act as a bridge for any other mods that want to do the same. See the Milk class for customisation; It allows for

null 5 Oct 17, 2022
Simple Android app during a coding night. Just Learning Firebase and Android

KUI-App Simple Android app during a coding night. Just Learning Firebase and Android What we learned: Some basics of Android Basic setup of Firebase:

Kibabii University Informatics Club (KUI) 7 Aug 28, 2022
Win32 and DirectX mappings for java using Project Panama. Ignore the C# tag, it's just reference code used for decompilation

JWin32 A Project Panama-based mapping + wrapper generator for win32 headers. IMPORTANT As of 0.5.0, no prebuilt jars will be provided. You must genera

FalsePattern 9 Nov 27, 2022
code to the rat i give to people if u want to change the webhook its in "src/main/java/github/quantizr/autogg/guis/gui" please just dont sell my rat :(

SkyblockRat My rats code join my discord! https://discord.gg/bbK6ndHqN6 i got tired of people asking "is it double hooked?!" so here is my rats code y

null 6 Dec 10, 2022
SecureDB is an extension for Ai2 Appinventor and its distros which stores the data in the form of key and value just like TinyDB but in a more secure manner.

SecureDB SecureDB is an extension for Ai2 Appinventor and its distros which stores data for your app in a secure format locally on user's device. Expl

Akshat Developer 3 Sep 24, 2022
Dynamic Configuration Capability for SpringBoot Application

Spring Boot Dynamic Config Hot-reload your SpringBoot configurations, with just a '@DynamicConfig' annotation, the simplest solution, ever. English 简体

Joey Yang 153 Jan 3, 2023
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)

OpenAPI Generator Master (5.4.x): 6.0.x (6.0.x): ⭐ ⭐ ⭐ If you would like to contribute, please refer to guidelines and a list of open tasks. ⭐ ⭐ ⭐ ‼️

OpenAPI Tools 14.8k Dec 30, 2022
Ethylene is a open-source, lightweight, general-purpose compatibility layer standing between the developer and the chaotic world of configuration file formats.

Ethylene Ethylene is a open-source, lightweight, general-purpose compatibility layer standing between the developer and the chaotic world of configura

Steank 7 Aug 9, 2022
Super Configuration Management System (SCMS)

Super Configuration Management System (SCMS) Intro Este es un servicio web REST que permite administrar la configuración de distintas aplicaciones en

Gastón Pini 1 Feb 5, 2022
This app/widget is based on the work of Anthony (tonesto7), which is in turn based on the earlier work of David Schablowsky

Mustang Mach-E Widget for Android Intro This app/widget is based on the work of Anthony (tonesto7), which is in turn based on the earlier work of Davi

null 25 Nov 15, 2022
Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based system

FRC 2022 Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based s

null 4 Oct 4, 2022
A Text Based, Turn-Based, Strategy Game to be played in console

ConsoleGame A Text Based, Turn-Based, Strategy Game to be played in console. Feel free to fix any retardation in my code (meaning bugs, stupid/spaghet

Bertrahm 2 Jul 17, 2022
This is the VapeCloud project, it is a Minecraft Dynamic CloudSystem based on Nio-Networking.

This is the VapeCloud project, it is a Minecraft Dynamic CloudSystem based on Nio-Networking. IMPORTENT: this Cloudsystem is still in Development Requ

RauchigesEtwas 2 Dec 19, 2022