aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java
blob: f7fea4f8c65d73627c46478ca5c59d8132684947 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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;
    private int previewOutlineColour;
    private int previewTextColour;

    public ConfigScreen() {
        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.setChangedListener(text -> {
            try {
                this.previewOutlineColour = Integer.parseInt(text, 16);
            } catch (NumberFormatException ex) {
                // fail silently
            }
        }); 
        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.setChangedListener(text -> {
            try {
                this.previewTextColour = Integer.parseInt(text, 16);
            } catch (NumberFormatException ex) {}
        }); 
        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.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.render(context, mouseX, mouseY, delta);
        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);
    }
}