From 6cf1c1476b34dd7984691cdc6972c5edff7a4890 Mon Sep 17 00:00:00 2001 From: inyourwalls Date: Mon, 19 Feb 2024 19:37:30 -0500 Subject: create config screen --- .../customlevelcolour/ConfigScreen.java | 84 +++++++++++++++++++++- 1 file changed, 81 insertions(+), 3 deletions(-) (limited to 'src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java') diff --git a/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java index a901b50..3b7ed18 100644 --- a/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java +++ b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java @@ -2,26 +2,104 @@ package net.inyourwalls.customlevelcolour; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; +import java.util.regex.Pattern; + +import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_HEIGHT; +import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_WIDTH; +import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_WIDTH_SMALL; + public class ConfigScreen extends Screen { private static final Text TITLE = Text.translatable("gui.customlevelcolour.title"); + private static final Text OUTLINE_COLOUR_LABEL = Text.translatable("gui.customlevelcolour.outlineColour"); + private static final Text TEXT_COLOUR_LABEL = Text.translatable("gui.customlevelcolour.textColour"); + private static final Pattern HEX_COLOUR_REGEX = Pattern.compile("[0-9a-fA-F]{0,6}"); private final Screen previous; + private final CustomLevelColourConfig config; public ConfigScreen() { - super(TITLE); - this.previous = null; + this(null); } public ConfigScreen(Screen previous) { super(TITLE); this.previous = previous; + this.config = CustomLevelColour.getConfig(); + } + + @Override + public void init() { + TextFieldWidget outlineField = new TextFieldWidget( + this.textRenderer, + this.width / 2 + 4, + 25, + DEFAULT_WIDTH_SMALL, + DEFAULT_HEIGHT, + OUTLINE_COLOUR_LABEL + ); + outlineField.setTextPredicate(HEX_COLOUR_REGEX.asMatchPredicate()); + outlineField.setText(String.format("%x", config.outlineColour)); + TextFieldWidget textField = new TextFieldWidget( + this.textRenderer, + this.width / 2 + 4, + 55, + DEFAULT_WIDTH_SMALL, + DEFAULT_HEIGHT, + TEXT_COLOUR_LABEL + ); + textField.setTextPredicate(HEX_COLOUR_REGEX.asMatchPredicate()); + textField.setText(String.format("%x", config.textColour)); + + ButtonWidget backButton = ButtonWidget.builder(Text.translatable("gui.back"), thisButton -> this.close()) + .size(DEFAULT_WIDTH, DEFAULT_HEIGHT) + .position(this.width / 2 - DEFAULT_WIDTH - 4, this.height - 28) + .build(); + ButtonWidget saveButton = ButtonWidget.builder(Text.translatable("selectWorld.edit.save"), thisButton -> { + try { + config.outlineColour = Integer.parseInt(outlineField.getText(), 16); + config.textColour = Integer.parseInt(textField.getText(), 16); + } catch (NumberFormatException ex) { + CustomLevelColour.LOGGER.error("Failed to parse colour", ex); + } + CustomLevelColour.saveConfig(); + }) + .size(DEFAULT_WIDTH, DEFAULT_HEIGHT) + .position(this.width / 2 + 4, this.height - 28) + .build(); + + this.addDrawableChild(outlineField); + this.addDrawableChild(textField); + this.addDrawableChild(backButton); + this.addDrawableChild(saveButton); + } + + @Override + public void close() { + this.client.setScreen(this.previous); } @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.renderBackground(context); super.render(context, mouseX, mouseY, delta); - context.drawCenteredTextWithShadow(this.textRenderer, TITLE, this.width / 2, 5, 0xffffff); + context.drawCenteredTextWithShadow(this.textRenderer, TITLE, this.width / 2, 5, 0xffffff); + + int labelX = this.width / 2 - Math.max( + this.textRenderer.getWidth(TEXT_COLOUR_LABEL), + this.textRenderer.getWidth(OUTLINE_COLOUR_LABEL) + ) - 4; + context.drawTextWithShadow(this.textRenderer, OUTLINE_COLOUR_LABEL, labelX, 30, 0xffffff); + context.drawTextWithShadow(this.textRenderer, TEXT_COLOUR_LABEL, labelX, 60, 0xffffff); + + // preview text + int previewX = (this.width / 2) - (this.textRenderer.getWidth("30") / 2); + context.drawText(this.textRenderer, "30", previewX - 1, 90, config.outlineColour, false); + context.drawText(this.textRenderer, "30", previewX + 1, 90, config.outlineColour, false); + context.drawText(this.textRenderer, "30", previewX, 91, config.outlineColour, false); + context.drawText(this.textRenderer, "30", previewX, 89, config.outlineColour, false); + context.drawText(this.textRenderer, "30", previewX, 90, config.textColour, false); } } -- cgit v1.3.1