diff options
| author | inyourwalls <inyourwalls@tutanota.com> | 2024-01-28 20:47:36 -0500 |
|---|---|---|
| committer | inyourwalls <inyourwalls@tutanota.com> | 2024-01-28 20:47:36 -0500 |
| commit | 037db74c048b66e20d62bde7a35e85f579661552 (patch) | |
| tree | d95362323073b18bd0fc1ef11337afd4266b5a1d | |
| parent | f25401cdcecfe67e484173d68653a90eff446ba6 (diff) | |
make all the fancy dials works
3 files changed, 119 insertions, 32 deletions
diff --git a/src/main/java/net/inyourwalls/frank/ModMenuIntegration.java b/src/main/java/net/inyourwalls/frank/ModMenuIntegration.java index e28fd5f..053e871 100644 --- a/src/main/java/net/inyourwalls/frank/ModMenuIntegration.java +++ b/src/main/java/net/inyourwalls/frank/ModMenuIntegration.java @@ -9,7 +9,7 @@ public class ModMenuIntegration implements ModMenuApi { @Override public ConfigScreenFactory<?> getModConfigScreenFactory() { return parent -> { - return new ConfigScreen(parent); + return new ConfigScreen(parent, Frank.getConfig()); }; } } diff --git a/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java b/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java index 3217f6e..f074f9a 100644 --- a/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java +++ b/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java @@ -2,13 +2,16 @@ package net.inyourwalls.frank.config; import net.inyourwalls.frank.Frank; +import net.minecraft.client.font.TextRenderer; 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 net.minecraft.util.Identifier; import java.io.IOException; +import java.util.stream.IntStream; import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_WIDTH_SMALL; import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_HEIGHT; @@ -17,13 +20,14 @@ public class ConfigScreen extends Screen { private static final Identifier FURNACE_UI_TEXTURE = new Identifier("textures/gui/container/furnace.png"); private static final int FURNACE_TEXTURE_WIDTH = 176; private static final int FURNACE_TEXTURE_HEIGHT = 166; - private final FrankConfig modifiedConfig; + private final FrankConfig modifiedConfig = new FrankConfig(); private final Screen previousScreen; - public ConfigScreen(Screen previous) { + public ConfigScreen(Screen previous, FrankConfig currentConfig) { super(Text.translatable("ui.frank.config")); this.previousScreen = previous; - this.modifiedConfig = Frank.getConfig(); + modifiedConfig.setDisplayMode(currentConfig.getDisplayMode()); + modifiedConfig.setTextColour(currentConfig.getTextColour()); } @Override @@ -48,8 +52,47 @@ public class ConfigScreen extends Screen { .position(this.width / 2, exitButtonY) .build(); + ButtonWidget modeToggleButton = ButtonWidget.builder( + Text.translatable(modifiedConfig.getDisplayMode().translationKey()), + thisButton -> { + int ordinal = modifiedConfig.getDisplayMode().ordinal(); + FrankConfig.InfoDisplayMode[] infoDisplayModes = FrankConfig.InfoDisplayMode.values(); + if (++ordinal >= infoDisplayModes.length) { + ordinal = 0; + } + + modifiedConfig.setDisplayMode(infoDisplayModes[ordinal]); + thisButton.setMessage(Text.translatable(modifiedConfig.getDisplayMode().translationKey())); + } + ) + .size(DEFAULT_WIDTH_SMALL, DEFAULT_HEIGHT) + .position(this.width / 2 - DEFAULT_WIDTH_SMALL, 15) + .build(); + + TextFieldWidget colourField = new TextFieldWidget( + this.textRenderer, + this.width / 2 - DEFAULT_WIDTH_SMALL, + 35, + DEFAULT_WIDTH_SMALL, + DEFAULT_HEIGHT, + Text.translatable("ui.frank.config.text_colour") + ); + colourField.setChangedListener(input -> { + try { + int newColour = Integer.parseInt(input, 16); + modifiedConfig.setTextColour(newColour); + } catch (NumberFormatException ex) { /* how */ } + }); + colourField.setTextPredicate(text -> + text.length() <= 6 && text.chars().allMatch(c -> + (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || (c >= '0' && c <= '9') + ) + ); + this.addDrawableChild(backButton); this.addDrawableChild(saveButton); + this.addDrawableChild(modeToggleButton); + this.addDrawableChild(colourField); } @Override @@ -63,48 +106,87 @@ public class ConfigScreen extends Screen { context.drawCenteredTextWithShadow(this.textRenderer, Text.translatable("ui.frank.config"), this.width / 2, 5, 0xffffff); int x = (this.width / 2) - (FURNACE_TEXTURE_WIDTH / 2); - int y = this.height / 2; + int y = this.height / 2 - (FURNACE_TEXTURE_HEIGHT / 2); renderPreview(context, x, y); } private void renderPreview(DrawContext context, int x, int y) { - context.drawCenteredTextWithShadow( + context.drawTexture(FURNACE_UI_TEXTURE, x, y, 0, 0, FURNACE_TEXTURE_WIDTH, FURNACE_TEXTURE_HEIGHT); + drawCenteredText( + context, this.textRenderer, Text.translatable("ui.frank.config.preview"), x + (FURNACE_TEXTURE_WIDTH / 2), - y - 10, - 0xffffff + y + 6, + 0x404040 ); - context.drawTexture(FURNACE_UI_TEXTURE, x, y, 0, 0, FURNACE_TEXTURE_WIDTH, FURNACE_TEXTURE_HEIGHT); int infoX = x + FURNACE_TEXTURE_WIDTH + 2; int infoY = y + 3; - for (FrankConfig.InfoLine infoLine : modifiedConfig.getActiveInfoLines()) { - switch (infoLine) { - case TIME_LEFT -> { - context.drawTextWithShadow( - this.textRenderer, - Text.translatable("ui.frank.time_left", 0, 0), - infoX, - infoY, - modifiedConfig.getTextColour() - ); - break; - } + switch (modifiedConfig.getDisplayMode()) { + case TIME_LEFT_FIRST -> { + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.time_left", 0, 0), + infoX, + infoY, + modifiedConfig.getTextColour() + ); + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.smeltable", 0), + infoX, + infoY + 10, + modifiedConfig.getTextColour() + ); + break; + } - case SMELTABLE -> { - context.drawTextWithShadow( - this.textRenderer, - Text.translatable("ui.frank.smeltable", 0), - infoX, - infoY, - modifiedConfig.getTextColour() - ); - break; - } + case TIME_LEFT_ONLY -> { + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.time_left", 0, 0), + infoX, + infoY, + modifiedConfig.getTextColour() + ); + break; } - infoY += 10; + case ITEMS_SMELTABLE_FIRST -> { + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.smeltable", 0), + infoX, + infoY, + modifiedConfig.getTextColour() + ); + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.time_left", 0, 0), + infoX, + infoY + 10, + modifiedConfig.getTextColour() + ); + break; + } + + case ITEMS_SMELTABLE_ONLY -> { + context.drawTextWithShadow( + this.textRenderer, + Text.translatable("ui.frank.smeltable", 0), + infoX, + infoY, + modifiedConfig.getTextColour() + ); + break; + } + + case DISABLED -> {} } } + + private void drawCenteredText(DrawContext context, TextRenderer renderer, Text text, int centerX, int y, int colour) { + context.drawText(renderer, text, centerX - renderer.getWidth(text) / 2, y, colour, false); + } } diff --git a/src/main/resources/assets/frank/lang/en_us.json b/src/main/resources/assets/frank/lang/en_us.json index bdb1422..0a4e82f 100644 --- a/src/main/resources/assets/frank/lang/en_us.json +++ b/src/main/resources/assets/frank/lang/en_us.json @@ -4,6 +4,11 @@ "ui.frank.config": "Configuration - Frank", "ui.frank.config.preview": "Preview", + "ui.frank.config.time_left_first": "Time Left First", + "ui.frank.config.time_left_only": "Time Left Only", + "ui.frank.config.items_smeltable_first": "Items Smeltable First", + "ui.frank.config.items_smeltable_only": "Items Smeltable Only", + "ui.frank.config.disabled": "Disabled", "frank.matrix": "Matrix" } |
