Skip to main content

Naming & Keys

By default, MittenLib uses your Java method names directly as config keys. However, you can customize this mapping to match different naming conventions or specific config file requirements.

Default Behavior

If no naming pattern or override is specified, the Java method name is used exactly as defined.

@Config
public interface ServerConfig {
String serverName();
int maxPlayers();
}

Naming Patterns

Apply consistent naming conventions across your entire config interface using @NamingPattern. This is the recommended way to match standard YAML conventions like kebab-case.

import me.bristermitten.mittenlib.config.names.NamingPattern;
import me.bristermitten.mittenlib.config.names.NamingPatterns;

@Config
@NamingPattern(NamingPatterns.LOWER_KEBAB_CASE)
public interface PluginConfig {
String pluginName();
int maxPlayers();
boolean enablePvp();
}

Available Patterns

PatternJava MethodConfig Key
LOWER_SNAKE_CASEhostName()host_name
LOWER_KEBAB_CASEhostName()host-name
UPPER_SNAKE_CASEhostName()HOST_NAME
UPPER_KEBAB_CASEhostName()HOST-NAME
LOWER_CAMEL_CASEhostName()hostName
UPPER_CAMEL_CASEhostName()HostName
DEFAULThostName()hostName

Custom Field Names

For one-off overrides that don't fit a pattern, use @ConfigName on individual methods. This is useful for short aliases or matching legacy configuration files.

import me.bristermitten.mittenlib.config.names.ConfigName;

@Config
public interface DatabaseConfig {
@ConfigName("db-host")
String host();

@ConfigName("db-port")
int port();
}

Priority Hierarchy

When multiple naming strategies apply, the most specific one wins:

  1. @ConfigName on method (highest priority)
  2. @NamingPattern on method
  3. @NamingPattern on interface
  4. Method name as-is (lowest priority)
@Config
@NamingPattern(NamingPatterns.LOWER_SNAKE_CASE)
public interface MixedConfig {
String userName(); // user_name (interface pattern)

@NamingPattern(NamingPatterns.LOWER_KEBAB_CASE)
String displayName(); // display-name (method pattern)

@ConfigName("usr_email")
String userEmail(); // usr_email (explicit override)
}

Nested Configs

Naming patterns are inherited by nested configurations (CascadeToInnerClasses), but can be overridden by adding the annotation again.

@Config
@NamingPattern(NamingPatterns.LOWER_KEBAB_CASE)
public interface RootConfig {
String serverName();
DatabaseConfig database();

@Config // inherits the NamingPattern
interface DatabaseConfig {
String dbHost();
}
}

Next Steps

  • Validation - Add constraints to ensure your configuration data is valid
  • Guice Integration - Automatically load and inject your configs