Config library with GUI based on the YAML format.
YAML Config is a powerful Minecraft configuration mod that enables mod developers to create and manage configuration settings using the YAML file format. It offers a user-friendly GUI, extensive support for data types, and robust networking for client-server synchronization.
YAML File Format: YAML Config utilizes the YAML file format, known for its readability and ease of use.
GUI Interface: A well-designed GUI allows players to easily navigate and edit their configuration settings.
Extensive Data Type Support: The mod supports a wide range of data types, including:
boolean, int, float, double, String, ResourceLocation, RegistryList, Map LocalDateTimeServer-Client Synchronization: Changes made to configurations on the server are automatically synchronized to clients, ensuring consistency across the gameplay experience.
Modpack Support: The mod is designed to work seamlessly with existing modpacks, offering a flexible and expandable configuration system.
Validation and Error Handling: The mod includes robust validation and error handling, ensuring that configurations meet the expected requirements.
Open the Configs Screen: Press "F12" on your keyboard to open the Configs screen.
Navigate to the Config: The Configs Screen displays a list of available configurations. Select the mod whose configuration you want to modify.
Edit Config Entries: The Config Screen displays the available settings. Each entry includes:
Save Changes: Click the "Save Changes" button to save your modifications. The mod will automatically save the changes to the configuration file and synchronize them with other players on the server (if applicable).
1. Define a Config Class:
public class MyModConfig {
public static IConfig config;
public static IConfigEntry<Boolean> debug;
public static void init() {
ConfigBuilder builder = new ConfigBuilder(MyMod.MOD_ID, "mymod-config", ConfigExtension.YAML, ConfigType.CLIENT);
}
}
2. Define Config Entries:
ConfigBuilder class to define the settings for your configuration. define* methods.// Example of defining a boolean entry:
debug = builder.defineBoolean("debug", false);
// Example of defining an integer entry with range:
intEntry = builder.defineInteger("intEntry", 10, 0, 100); // Min 0, Max 100
// Example of defining a string entry with pattern:
stringEntry = builder.defineString("stringEntry", "test", "test\\d+");
// Example of defining a registry entry:
registryEntry = builder.defineRegistry("registryEntry", Blocks.GRASS_BLOCK, BuiltInRegistries.BLOCK);
// Example of defining a list:
stringListEntry = builder.defineStringList("stringListEntry", List.of("test1", "test2", "test3"), 3, 10); // Min 3, Max 10
// Example of defining a map:
integerMapEntry = builder.defineIntegerMap("integerMapEntry", Map.of("test1", 1, "test2", 2, "test3", 3), 3, 10); // Min 3, Max 10
3. Build the Configuration:
build() method on the ConfigBuilder to create your configuration. public MyModConfig() {
ConfigBuilder builder = new ConfigBuilder("mymod", "mymod-config", ConfigExtension.YAML, ConfigType.CLIENT);
// ... define config entries
config = builder.build();
}
4. Access Config Values in Your Code:
get() method to retrieve the current value of a config entry.set() method to modify the value of a config entry.// Example:
boolean debugEnabled = MyModConfig.debug.get(); // Retrieve the current value of the "debug" setting
if (debugEnabled) {
// Perform debug-related actions
}
MyModConfig.intEntry.set(25); // Set the value of the "intEntry" to 25
ConfigType.CLIENT: Client-side configurations are specific to the client who has installed the mod. They are not shared with other players on the server.ConfigType.SERVER: Server-side configurations are specific to dedicated servers. They will not be used on single player worlds and are not synced to the players on the server.ConfigType.COMMON: Common configurations are shared between both clients and the server. They can be edited on the server by editing the config file directly and restarting the server or by editing the values using the in-game GUI and saving the changes.IConfigEntryType interface to register custom data types with the YAML Config mod. // Example: Basic client-side configuration
public class MyModConfig {
public static IConfig config;
public static IConfigEntry<Boolean> debug;
public static IConfigEntry<Integer> testInt;
public static void init() {
ConfigBuilder builder = new ConfigBuilder("mymod", "mymod-config", ConfigExtension.YAML, ConfigType.CLIENT);
debug = builder.defineBoolean("debug", false) // default false.
.withComments("Whether debug mode is enabled for the mod.");
testInt = builder.defineInteger("testInt", 10, 0, 100); // default 10, min 0 and max 100.
config = builder.build();
}
}