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.
- Java
- YAML
@Config
public interface ServerConfig {
String serverName();
int maxPlayers();
}
serverName: "My Minecraft Server"
maxPlayers: 100
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.
- Java
- YAML
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();
}
plugin-name: "MyPlugin"
max-players: 100
enable-pvp: true
Available Patterns
| Pattern | Java Method | Config Key |
|---|---|---|
LOWER_SNAKE_CASE | hostName() | host_name |
LOWER_KEBAB_CASE | hostName() | host-name |
UPPER_SNAKE_CASE | hostName() | HOST_NAME |
UPPER_KEBAB_CASE | hostName() | HOST-NAME |
LOWER_CAMEL_CASE | hostName() | hostName |
UPPER_CAMEL_CASE | hostName() | HostName |
DEFAULT | hostName() | 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.
- Java
- YAML
import me.bristermitten.mittenlib.config.names.ConfigName;
@Config
public interface DatabaseConfig {
@ConfigName("db-host")
String host();
@ConfigName("db-port")
int port();
}
db-host: "localhost"
db-port: 3306
Priority Hierarchy
When multiple naming strategies apply, the most specific one wins:
@ConfigNameon method (highest priority)@NamingPatternon method@NamingPatternon interface- Method name as-is (lowest priority)
- Java
- YAML
@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)
}
user_name: "jeb_"
display-name: "Jeb"
usr_email: "jeb@mojang.com"
Nested Configs
Naming patterns are inherited by nested configurations (CascadeToInnerClasses),
but can be overridden by adding the annotation again.
- Java
- YAML
@Config
@NamingPattern(NamingPatterns.LOWER_KEBAB_CASE)
public interface RootConfig {
String serverName();
DatabaseConfig database();
@Config // inherits the NamingPattern
interface DatabaseConfig {
String dbHost();
}
}
server-name: "My Server"
database:
db-host: "localhost"
Next Steps
- Validation - Add constraints to ensure your configuration data is valid
- Guice Integration - Automatically load and inject your configs