Skip to content

Draylar/omega-config

Repository files navigation

Omega Config Ω

A configuration library by Draylar


ΩConfig is a hyper-minimal config library based on Auto Config. It aims to achieve the following goals:

  • Be lightweight (<25 KB) for JIJ usage
  • Exceedingly simple design & API for developers
  • Intuition and usability for players
  • Bonus annotations for advanced config options (syncing values)

The following is an example of a simple ΩConfig setup:

public class TestConfig implements Config {

    @Comment(value = "Hello!")
    boolean value = false;

    @Syncing
    @Comment(value = "This value will sync to the client!")
    boolean syncableValue = false;

    @Override
    public String getFileName() {
        return "test-config";
    }
}
public class MyModInitializer {

    public static final TestConfig CONFIG = OmegaConfig.register(TestConfig.class);

    @Override
    public void onInitialize() {
        System.out.printf("Config value: %s%n", CONFIG.value);
    }
}

Looking for a simple config screen? Talk about easy!

public class ClientInitializer implements ClientModInitializer {

    @Override
    public void onInitializeClient() {
        // Make sure you implement getModid in your config class!
        OmegaConfigGui.registerConfigScreen(MainInitializer.CONFIG);
    }
}

Pulling Omega Config into Development

To use Omega Config, you will have to add it to your build.gradle file.

What you pull in depends on whether you want GUI functionality. For basic config files using the base module (~20KB), you can use the following gradle declarations:

repositories {
    maven { url 'https://maven.draylar.dev/releases' }
}

// 1.19.2 version: 1.3.0+1.19.2
dependencies {
    modImplementation include("dev.draylar.omega-config:omega-config-base:${project.omega_config_version}")
}

Easy - you now have a bundled configuration library. Use the examples in the first section to implement your config.

If you want to add GUI functionality (most likely Mod Menu support), you can pull in the GUI module (~25 KB):

repositories {
    ...

    // Needed to retrieve Cloth Config Lite for Omega Config in development environments.
    maven {
        name = "Shedaniel's Maven"
        url = "https://maven.shedaniel.me/"
    }

    // Optional dependency for Mod Menu - recommended for viewing your screen in development
    maven {
        name = "TerraformersMC"
        url = "https://maven.terraformersmc.com/releases/"
    }
}

dependencies {
    ... (including the base declarations)
    
    modImplementation include("dev.draylar.omega-config:omega-config-gui:${project.omega_config_version}")
    modRuntimeOnly ("com.terraformersmc:modmenu:${project.modmenu_version}") // 3.0.1 for 1.18.1
}

Extra API Utilities

ΩConfig provides several utility methods for developers.

save() - saves a modified configuration instance to disk

MyModInitializer.CONFIG.value = false;
MyModInitializer.CONFIG.save(); // writes the new value to disk

@Syncing - configuration options marked with this annotation will automatically sync to the client when they join a server.


License

ΩConfig is available under MIT. Omega Config will bundle the MIT license inside the jar you pull as a dependency, which means you can distribute it as a bundled dependency without any additional steps.