aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/isxander/yacl/gui')
-rw-r--r--src/main/java/dev/isxander/yacl/gui/OptionListWidget.java14
-rw-r--r--src/main/java/dev/isxander/yacl/gui/RequireRestartScreen.java16
-rw-r--r--src/main/java/dev/isxander/yacl/gui/YACLScreen.java10
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java14
4 files changed, 36 insertions, 18 deletions
diff --git a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
index c1c1f10..804592d 100644
--- a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
+++ b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
@@ -7,6 +7,7 @@ import dev.isxander.yacl.api.OptionGroup;
import dev.isxander.yacl.api.utils.Dimension;
import dev.isxander.yacl.impl.YACLConstants;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.MultilineText;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
@@ -235,7 +236,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
private class GroupSeparatorEntry extends Entry {
private final OptionGroup group;
- private final List<OrderedText> wrappedName;
+ private final MultilineText wrappedName;
private final List<OrderedText> wrappedTooltip;
private final ButtonWidget expandMinimizeButton;
@@ -251,7 +252,8 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
public GroupSeparatorEntry(OptionGroup group, Screen screen) {
this.group = group;
this.screen = screen;
- this.wrappedName = textRenderer.wrapLines(group.name(), getRowWidth() - 45);
+ this.wrappedName = MultilineText.create(textRenderer, group.name(), getRowWidth() - 45);
+ //this.wrappedName = textRenderer.wrapLines(group.name(), getRowWidth() - 45);
this.wrappedTooltip = textRenderer.wrapLines(group.tooltip(), screen.width / 2);
this.groupExpanded = !group.collapsed();
this.expandMinimizeButton = new ButtonWidget(0, 0, 20, 20, Text.empty(), btn -> {
@@ -274,11 +276,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
else
hoveredTicks = 0;
- int i = 0;
- for (OrderedText line : wrappedName) {
- textRenderer.drawWithShadow(matrices, line, x + entryWidth / 2f - textRenderer.getWidth(line) / 2f, y + getYPadding() + i * textRenderer.fontHeight, -1);
- i++;
- }
+ wrappedName.drawCenterWithShadow(matrices, x + entryWidth / 2, y + getYPadding());
if (hoveredTicks >= YACLConstants.HOVER_TICKS) {
screen.renderOrderedTooltip(matrices, wrappedTooltip, x - 6, y + entryHeight / 2 + 6 + (wrappedTooltip.size() * textRenderer.fontHeight) / 2);
@@ -298,7 +296,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
@Override
public int getItemHeight() {
- return wrappedName.size() * textRenderer.fontHeight + getYPadding() * 2;
+ return wrappedName.count() * textRenderer.fontHeight + getYPadding() * 2;
}
private int getYPadding() {
diff --git a/src/main/java/dev/isxander/yacl/gui/RequireRestartScreen.java b/src/main/java/dev/isxander/yacl/gui/RequireRestartScreen.java
new file mode 100644
index 0000000..807292e
--- /dev/null
+++ b/src/main/java/dev/isxander/yacl/gui/RequireRestartScreen.java
@@ -0,0 +1,16 @@
+package dev.isxander.yacl.gui;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.ConfirmScreen;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+
+public class RequireRestartScreen extends ConfirmScreen {
+ protected RequireRestartScreen(Screen parent) {
+ super(option -> {
+ if (option) MinecraftClient.getInstance().scheduleStop();
+ else MinecraftClient.getInstance().setScreen(parent);
+ }, Text.translatable("yacl.restart.title").formatted(Formatting.RED, Formatting.BOLD), Text.translatable("yacl.restart.message"), Text.translatable("yacl.restart.yes"), Text.translatable("yacl.restart.no"));
+ }
+}
diff --git a/src/main/java/dev/isxander/yacl/gui/YACLScreen.java b/src/main/java/dev/isxander/yacl/gui/YACLScreen.java
index ccd3929..986a4f6 100644
--- a/src/main/java/dev/isxander/yacl/gui/YACLScreen.java
+++ b/src/main/java/dev/isxander/yacl/gui/YACLScreen.java
@@ -69,7 +69,12 @@ public class YACLScreen extends Screen {
saveButtonMessage = null;
if (pendingChanges()) {
- OptionUtils.forEachOptions(config, Option::applyValue);
+ AtomicBoolean requiresRestart = new AtomicBoolean(false);
+ OptionUtils.forEachOptions(config, option -> {
+ if (option.requiresRestart())
+ requiresRestart.set(true);
+ option.applyValue();
+ });
OptionUtils.forEachOptions(config, option -> {
if (option.changed()) {
YACLConstants.LOGGER.error("Option '{}' was saved as '{}' but the changes don't seem to have applied.", option.name().getString(), option.pendingValue());
@@ -77,6 +82,9 @@ public class YACLScreen extends Screen {
}
});
config.saveFunction().run();
+ if (requiresRestart.get()) {
+ client.setScreen(new RequireRestartScreen(this));
+ }
} else close();
});
actionDim.expand(-actionDim.width() / 2 - 2, 0).move(-actionDim.width() / 2 - 2, -22);
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
index 07ee8da..13687e0 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
@@ -5,8 +5,8 @@ import dev.isxander.yacl.api.Option;
import dev.isxander.yacl.api.utils.Dimension;
import dev.isxander.yacl.gui.AbstractWidget;
import dev.isxander.yacl.gui.YACLScreen;
+import net.minecraft.client.font.MultilineText;
import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.OrderedText;
import net.minecraft.text.Text;
import org.jetbrains.annotations.ApiStatus;
@@ -46,7 +46,7 @@ public class LabelController implements Controller<Text> {
@ApiStatus.Internal
public class LabelControllerElement extends AbstractWidget {
- private List<OrderedText> wrappedText;
+ private MultilineText wrappedText;
public LabelControllerElement(Dimension<Integer> dim) {
super(dim);
@@ -57,11 +57,7 @@ public class LabelController implements Controller<Text> {
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
updateText();
- int i = 0;
- for (OrderedText text : wrappedText) {
- textRenderer.drawWithShadow(matrices, text, dim.x(), dim.y() + getYPadding() + i * textRenderer.fontHeight, -1);
- i++;
- }
+ wrappedText.drawWithShadow(matrices, dim.x(), dim.y() + getYPadding(), textRenderer.fontHeight, -1);
}
private int getYPadding() {
@@ -69,8 +65,8 @@ public class LabelController implements Controller<Text> {
}
private void updateText() {
- wrappedText = textRenderer.wrapLines(formatValue(), dim.width());
- dim.setHeight(wrappedText.size() * 9 + getYPadding() * 2);
+ wrappedText = MultilineText.create(textRenderer, formatValue(), dim.width());
+ dim.setHeight(wrappedText.count() * textRenderer.fontHeight + getYPadding() * 2);
}
}
}