aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinyourwalls <inyourwalls@tutanota.com>2024-01-28 20:47:36 -0500
committerinyourwalls <inyourwalls@tutanota.com>2024-01-28 20:47:36 -0500
commit037db74c048b66e20d62bde7a35e85f579661552 (patch)
treed95362323073b18bd0fc1ef11337afd4266b5a1d
parentf25401cdcecfe67e484173d68653a90eff446ba6 (diff)
make all the fancy dials works
-rw-r--r--src/main/java/net/inyourwalls/frank/ModMenuIntegration.java2
-rw-r--r--src/main/java/net/inyourwalls/frank/config/ConfigScreen.java144
-rw-r--r--src/main/resources/assets/frank/lang/en_us.json5
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"
}