From 2671e4a9104965aee155ad65d49ddc4a220bf1f8 Mon Sep 17 00:00:00 2001 From: Siphalor Date: Sat, 8 Nov 2025 13:01:19 +0100 Subject: [PATCH] fix(coat-bridge): Improve some validation and docs --- .../bridge/api/ConfigScreenCreateParams.java | 13 +++++++-- .../impl/TweedCoatBridgeExtensionImpl.java | 29 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/api/ConfigScreenCreateParams.java b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/api/ConfigScreenCreateParams.java index ee5667c..acce450 100644 --- a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/api/ConfigScreenCreateParams.java +++ b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/api/ConfigScreenCreateParams.java @@ -4,16 +4,23 @@ import de.siphalor.tweed5.core.api.entry.ConfigEntry; import lombok.Builder; import lombok.Getter; import net.minecraft.network.chat.Component; +import org.jspecify.annotations.Nullable; import java.util.function.Consumer; @Builder @Getter -public class ConfigScreenCreateParams { +public class ConfigScreenCreateParams { private final ConfigEntry rootEntry; private final T currentValue; private final T defaultValue; - private final Component title; + /** + * The title of the screen, defaults to {@code translationKeyPrefix + ".title"} + */ + private final @Nullable Component title; + /** + * The translation key prefix for all entries without a trailing dot. + */ private final String translationKeyPrefix; - private final Consumer saveHandler; + private final @Nullable Consumer saveHandler; } diff --git a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatBridgeExtensionImpl.java b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatBridgeExtensionImpl.java index a4d9a3f..5ad776f 100644 --- a/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatBridgeExtensionImpl.java +++ b/tweed5-minecraft/coat-bridge/src/main/java/de/siphalor/tweed5/coat/bridge/impl/TweedCoatBridgeExtensionImpl.java @@ -12,11 +12,14 @@ import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.extension.TweedExtensionSetupContext; import de.siphalor.tweed5.patchwork.api.PatchworkPartAccess; import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static de.siphalor.tweed5.coat.bridge.api.TweedCoatMappingUtils.translatableComponent; + public class TweedCoatBridgeExtensionImpl implements TweedCoatBridgeExtension { private final PatchworkPartAccess customDataAccess; private final List> mappers = new ArrayList<>(); @@ -32,6 +35,8 @@ public class TweedCoatBridgeExtensionImpl implements TweedCoatBridgeExtension { @Override public ConfigScreen createConfigScreen(ConfigScreenCreateParams params) { + validateCreateParams(params); + Minecraft minecraft = Minecraft.getInstance(); TweedCoatEntryMappingContext mappingContext = TweedCoatEntryMappingContext.rootBuilder( @@ -56,13 +61,29 @@ public class TweedCoatBridgeExtensionImpl implements TweedCoatBridgeExtension { throw new IllegalStateException("Failed to create root content widget"); } - ConfigScreen configScreen = new ConfigScreen( - minecraft.screen, params.title(), Collections.singletonList(contentWidget) - ); - configScreen.setOnSave(() -> params.saveHandler().accept(value)); + Component title; + if (params.title() != null) { + title = params.title(); + } else { + title = translatableComponent(params.translationKeyPrefix() + ".title"); + } + ConfigScreen configScreen = new ConfigScreen(minecraft.screen, title, Collections.singletonList(contentWidget)); + if (params.saveHandler() != null) { + configScreen.setOnSave(() -> params.saveHandler().accept(value)); + } return configScreen; } + @SuppressWarnings("ConstantValue") + private void validateCreateParams(ConfigScreenCreateParams params) { + if (params.rootEntry() == null) { + throw new IllegalArgumentException("Root entry must not be null"); + } + if (params.translationKeyPrefix() == null) { + throw new IllegalArgumentException("Translation key prefix must not be null"); + } + } + private TweedCoatEntryMappingResult mapEntry( ConfigEntry entry, TweedCoatEntryMappingContext context