Skip to Content
Easy ConfigExternally managed settings

Screens for external settings

Controls are generated from annotated classes. @Translation supplies a label key, an optional tooltip key, and an optional prefix for lowercase enum value names. Nested classes create sections; typed value wrappers supply defaults and bounds.

@Config(name = "flight", side = Side.CLIENT) public class FlightConfig { @Translation(value = "my_mod.lift", tooltip = "my_mod.lift.tooltip") public final FloatValue lift = FloatValue.of(.15f, 0f, 1f); } var tab = new ConfigScreenTab<>(title, ConfigIntrospector.inspect(draft), this::saveSettings, () -> ConfigIntrospector.inspect(loadDraft())); var screen = new ConfigScreen(parent, title, List.of(tab));

Use an independent draft when changes must wait for Save. The save callback receives the current draft; reload replaces it. validation(config -> Optional<Component>) can reject relationships between fields, and editable(() -> allowed) disables editing and saving for read-only views. File storage and networking remain with the consumer when using these callbacks. Normal ConfigBuilder registration continues to use EasyConfig’s file-backed manager.

Last updated on