aboutsummaryrefslogtreecommitdiff
path: root/src/client/java/dev/isxander/yacl/gui/controllers
diff options
context:
space:
mode:
authorXander <xander@isxander.dev>2023-04-25 16:28:41 +0100
committerGitHub <noreply@github.com>2023-04-25 16:28:41 +0100
commit13c7ba45ff201423eb8dba8a40cfb66ebb531439 (patch)
tree1e799aa9da11fbc0833bc6b7c6e6799633c2ec50 /src/client/java/dev/isxander/yacl/gui/controllers
parent8ba7196ae990fe9aa98680aba1b387e385fff99c (diff)
downloadYetAnotherConfigLib-13c7ba45ff201423eb8dba8a40cfb66ebb531439.tar.gz
YetAnotherConfigLib-13c7ba45ff201423eb8dba8a40cfb66ebb531439.tar.bz2
YetAnotherConfigLib-13c7ba45ff201423eb8dba8a40cfb66ebb531439.zip
Architectury! (#61)
Diffstat (limited to 'src/client/java/dev/isxander/yacl/gui/controllers')
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/ActionController.java120
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/BooleanController.java157
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/ColorController.java221
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java170
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java193
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/ListEntryWidget.java133
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/TickBoxController.java120
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java60
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingListController.java79
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/cycling/EnumController.java60
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/cycling/ICyclingController.java38
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/package-info.java12
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/DoubleSliderController.java114
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/FloatSliderController.java114
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/ISliderController.java54
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/IntegerSliderController.java111
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/LongSliderController.java111
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java164
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/slider/package-info.java10
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/IStringController.java44
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/StringController.java40
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java408
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/DoubleFieldController.java104
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/FloatFieldController.java104
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/IntegerFieldController.java109
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/LongFieldController.java109
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/NumberFieldController.java69
-rw-r--r--src/client/java/dev/isxander/yacl/gui/controllers/string/number/package-info.java10
28 files changed, 0 insertions, 3038 deletions
diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/ActionController.java b/src/client/java/dev/isxander/yacl/gui/controllers/ActionController.java
deleted file mode 100644
index e57cdd2..0000000
--- a/src/client/java/dev/isxander/yacl/gui/controllers/ActionController.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package dev.isxander.yacl.gui.controllers;
-
-import com.mojang.blaze3d.platform.InputConstants;
-import dev.isxander.yacl.api.ButtonOption;
-import dev.isxander.yacl.api.Controller;
-import dev.isxander.yacl.api.utils.Dimension;
-import dev.isxander.yacl.gui.AbstractWidget;
-import dev.isxander.yacl.gui.YACLScreen;
-import net.minecraft.network.chat.Component;
-
-import java.util.function.BiConsumer;
-
-/**
- * Simple controller that simply runs the button action on press
- * and renders a {@link} Text on the right.
- */
-public class ActionController implements Controller<BiConsumer<YACLScreen, ButtonOption>> {
- public static final Component DEFAULT_TEXT = Component.translatable("yacl.control.action.execute");
-
- private final ButtonOption option;
- private final Component text;
-
- /**
- * Constructs an action controller
- * with the default formatter of {@link ActionController#DEFAULT_TEXT}
- *
- * @param option bound option
- */
- public ActionController(ButtonOption option) {
- this(option, DEFAULT_TEXT);
- }
-
- /**
- * Constructs an action controller
- *
- * @param option bound option
- * @param text text to display
- */
- public ActionController(ButtonOption option, Component text) {
- this.option = option;
- this.text = text;
-
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ButtonOption option() {
- return option;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Component formatValue() {
- return text;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) {
- return new ActionControllerElement(this, screen, widgetDimension);
- }
-
- public static class ActionControllerElement extends ControllerWidget<ActionController> {
- private final String buttonString;
-
- public ActionControllerElement(ActionController control, YACLScreen screen, Dimension<Integer> dim) {
- super(control, screen, dim);
- buttonString = control.formatValue().getString().toLowerCase();
- }
-
- public void executeAction() {
- playDownSound();
- control.option().action().accept(screen, control.option());
- }
-
- @Override
- public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (isMouseOver(mouseX, mouseY) && isAvailable()) {
- executeAction();
- return true;
- }
- return false;
- }
-
- @Override
- public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (!focused) {
- return false;
- }
-
- if (keyCode == InputConstants.KEY_RETURN || keyCode == InputConstants.KEY_SPACE || keyCode == InputConstants.KEY_NUMPADENTER) {
- executeAction();
- return true;
- }
-
- return false;
- }
-
- @Override
- protected int getHoveredControlWidth() {
- return getUnhoveredControlWidth();
- }
-
- @Override
- public boolean canReset() {
- return false;
- }
-
- @Override
- public boolean matchesSearch(String query) {
- return super.matchesSearch(query) || buttonString.contains(query);
- }
- }
-}
diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/BooleanController.java b/src/client/java/dev/isxander/yacl/gui/controllers/BooleanController.java
deleted file mode 100644
index d7d17d5..0000000
--- a/src/client/java/dev/isxander/yacl/gui/controllers/BooleanController.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package dev.isxander.yacl.gui.controllers;
-
-import com.mojang.blaze3d.platform.InputConstants;
-import com.mojang.blaze3d.vertex.PoseStack;
-import dev.isxander.yacl.api.Controller;
-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.ChatFormatting;
-import net.minecraft.network.chat.CommonComponents;
-import net.minecraft.network.chat.Component;
-
-import java.util.function.Function;
-
-/**
- * This controller renders a simple formatted {@link Component}
- */
-public class BooleanController implements Controller<Boolean> {
-
- public static final Function<Boolean, Component> ON_OFF_FORMATTER = (state) ->
- state
- ? CommonComponents.OPTION_ON
- : CommonComponents.OPTION_OFF;
-
- public static final Function<Boolean, Component> TRUE_FALSE_FORMATTER = (state) ->
- state
- ? Component.translatable("yacl.control.boolean.true")
- : Component.translatable("yacl.control.boolean.false");
-
- public static final Function<Boolean, Component> YES_NO_FORMATTER = (state) ->
- state
- ? CommonComponents.GUI_YES
- : CommonComponents.GUI_NO;
-
- private final Option<Boolean> option;
- private final Function<Boolean, Component> valueFormatter;
- private final boolean coloured;
-
- /**
- * Constructs a tickbox controller
- * with the default value formatter of {@link BooleanController#ON_OFF_FORMATTER}
- *
- * @param option bound option
- */
- public BooleanController(Option<Boolean> option) {
- this(option, ON_OFF_FORMATTER, false);
- }
-
- /**
- * Constructs a tickbox controller
- * with the default value formatter of {@link BooleanController#ON_OFF_FORMATTER}
- *
- * @param option bound option
- * @param coloured value format is green or red depending on the state
- */
- public BooleanController(Option<Boolean> option, boolean coloured) {
- this(option, ON_OFF_FORMATTER, coloured);
- }
-
- /**
- * Constructs a tickbox controller
- *
- * @param option bound option
- * @param valueFormatter format value into any {@link Component}
- * @param coloured value format is green or red depending on the state
- */
- public BooleanController(Option<Boolean> option, Function<Boolean, Component> valueFormatter, boolean coloured) {
- this.option = option;
- this.valueFormatter = valueFormatter;
- this.coloured = coloured;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Option<Boolean> option() {
- return option;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Component formatValue() {
- return valueFormatter.apply(option().pendingValue());
- }
-
- /**
- * Value format is green or red depending on the state
- */
- public boolean coloured() {
- return coloured;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) {
- return new BooleanControllerElement(this, screen, widgetDimension);
- }
-
- public static class BooleanControllerElement extends ControllerWidget<BooleanController> {
- public BooleanControllerElement(BooleanController control, YACLScreen screen, Dimension<Integer> dim) {
- super(control, screen, dim);
- }
-
- @Override
- protected void drawHoveredControl(PoseStack matrices, int mouseX, int mouseY, float delta) {
-
- }
-
- @Override
- public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (!isMouseOver(mouseX, mouseY) || !isAvailable())
- return false;
-
- toggleSetting();
- return true;
- }
-
- @Override
- protected int getHoveredControlWidth() {
- return getUnhoveredControlWidth();
- }
-
- public void toggleSetting() {
- control.option().requestSet(!control.option().pendingValue());
- playDownSound();
- }
-
- @Override
- protected Component getValueText() {
- if (control.coloured()) {
- return super.getValueText().copy().withStyle(control.option().pendingValue() ? ChatFormatting.GREEN : ChatFormatting.RED);
- }
-
- return super.getValueText();
- }
-
- @Override
- public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (!isFocused()) {
- return false;
- }
-
- if (keyCode == InputConstants.KEY_RETURN || keyCode == InputConstants.KEY_SPACE || keyCode == InputConstants.KEY_NUMPADENTER) {
- toggleSetting();
- return true;
- }
-
- return false;
- }
- }
-}
diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/ColorController.java b/src/client/java/dev/isxander/yacl/gui/controllers/ColorController.java
deleted file mode 100644
index 473407b..0000000
--- a/src/client/java/dev/isxander/yacl/gui/controllers/ColorController.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package dev.isxander.yacl.gui.controllers;
-
-import com.google.common.collect.ImmutableList;
-import com.mojang.blaze3d.vertex.PoseStack;
-import dev.isxander.yacl.api.Option;
-import dev.isxander.yacl.api.utils.Dimension;
-import dev.isxander.yacl.api.utils.MutableDimension;
-import dev.isxander.yacl.gui.AbstractWidget;
-import dev.isxander.yacl.gui.YACLScreen;
-import dev.isxander.yacl.gui.controllers.string.IStringController;
-import dev.isxander.yacl.gui.controllers.string.StringControllerElement;
-import net.minecraft.ChatFormatting;
-import net.minecraft.client.gui.GuiComponent;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.MutableComponent;
-
-import java.awt.Color;
-import java.util.List;
-
-/**
- * A color controller that uses a hex color field as input.
- */
-public class ColorController implements IStringController<Color> {
- private final Option<Color> option;
- private final boolean allowAlpha;
-
- /**
- * Constructs a color controller with {@link ColorController#allowAlpha()} defaulting to false
- *
- * @param option bound option
- */
- public ColorController(Option<Color> option) {
- this(option, false);
- }
-
- /**
- * Constructs a color controller
- *
- * @param option bound option
- * @param allowAlpha allows the color input to accept alpha values
- */
- public ColorController(Option<Color> option, boolean allowAlpha) {
- this.option = option;
- this.allowAlpha = allowAlpha;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Option<Color> option() {
- return option;
- }
-
- public boolean allowAlpha() {
- return allowAlpha;
- }
-
- @Override
- public String getString() {
- return formatValue().getString();
- }
-
- @Override
- public Component formatValue() {
- MutableComponent text = Component.literal("#");
- text.append(Component.literal(toHex(option().pendingValue().getRed())).withStyle(ChatFormatting.RED));
- text.append(Component.literal(toHex(option().pendingValue().getGreen())).withStyle(ChatFormatting.GREEN));
- text.append(Component.literal(toHex(option().pendingValue().getBlue())).withStyle(ChatFormatting.BLUE));
- if (allowAlpha()) text.append(toHex(option().pendingValue().getAlpha()));
- return text;
- }
-
- private String toHex(int value) {
- String hex = Integer.toString(value, 16).toUpperCase();
- if (hex.length() == 1)
- hex = "0" + hex;
- return hex;
- }
-
- @Override
- public void setFromString(String value) {
- if (value.startsWith("#"))
- value = value.substring(1);
-
- int red = Integer.parseInt(value.substring(0, 2), 16);
- int green = Integer.parseInt(value.substring(2, 4), 16);
- int blue = Integer.parseInt(value.substring(4, 6), 16);
-
- if (allowAlpha()) {
- int alpha = Integer.parseInt(value.substring(6, 8), 16);
- option().requestSet(new Color(red, green, blue, alpha));
- } else {
- option().requestSet(new Color(red, green, blue));
- }
- }
-
- @Override
- public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) {
- return new ColorControllerElement(this, screen, widgetDimension);
- }
-
- public static class ColorControllerElement extends StringControllerElement {
- private final ColorController colorController;
-
- protected MutableDimension<Integer> colorPreviewDim;
-
- private final List<Character> allowedChars;
-
- public ColorControllerElement(ColorController control, YACLScreen screen, Dimension<Integer> dim) {
- super(control, screen, dim, true);
- this.colorController = control;
- this.allowedChars = ImmutableList.of('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
- }
-
- @Override
- protected void drawValueText(PoseStack matrices, int mouseX, int mouseY, float delta) {
- if (isHovered()) {
- colorPreviewDim.move(-inputFieldBounds.width() - 5, 0);
- super.drawValueText(matrices, mouseX, mouseY, delta);
- }
-
- GuiComponent.fill(matrices, colorPreviewDim.x(), colorPreviewDim.y(), colorPreviewDim.xLimit(), colorPreviewDim.yLimit(), colorController.option().pendingValue().getRGB());
- drawOutline(matrices, colorPreviewDim.x(), colorPreviewDim.y(), colorPreviewDim.xLimit(), colorPreviewDim.yLimit(), 1, 0xFF000000);
- }
-
- @Override
- public void write(String string) {
- if (string.startsWith("0x")) string = string.substring(2);
- for (char chr : string.toCharArray()) {
- if (!allowedChars.contains(Character.toLowerCase(chr))) {
- return;
- }
- }
-
- if (caretPos == 0)
- return;
-
- String trimmed = string.substring(0, Math.min(inputField.length() - caretPos, string.length()));
-
- if (modifyInput(builder -> builder.replace(caretPos, caretPos + trimmed.length(), trimmed))) {
- caretPos += trimmed.length();
- setSelectionLength();
- updateControl();
- }
- }
-
- @Override
- protected void doBackspace() {
- if (caretPos > 1) {
- if (modifyInput(builder -> builder.setCharAt(caretPos - 1, '0'))) {
- caretPos--;
- updateControl();
- }
- }
- }
-
- @Override
- protected void doDelete() {
- if (caretPos >= 1) {
- if (modifyInput(builder -> builder.setCharAt(caretPos, '0'))) {
- updateControl();
- }
- }
- }
-
- @Override
- protected boolean doCut() {
- return false;
- }
-
- @Override
- protected boolean doCopy() {
- return false;
- }
-
- @Override
- protected boolean doSelectAll() {
- return false;
- }
-
- protected void setSelectionLength() {
- selectionLength = caretPos < inputField.length() && caretPos > 0 ? 1 : 0;
- }
-
- @Override
- protected int getDefaultCaretPos() {
- return colorController.allowAlpha() ? 3 : 1;
- }
-
- @Override
- public void setDimension(Dimension<Integer> dim) {
- super.setDimension(dim);
-
- int previewSize = (dim.height() - getYPadding() * 2) / 2;
- colorPreviewDim = Dimension.ofInt(dim.xLimit() - getXPadding() - previewSize, dim.centerY() - previewSize / 2, previewSize, previewSize);
- }
-
- @Override
- public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- int prevSelectionLength = selectionLength;
- selectionLength = 0;
- if (super.keyPressed(keyCode, scanCode, modifiers)) {
- caretPos = Math.max(1, caretPos);
- setSelectionLength();
- return true;
- } else selectionLength = prevSelectionLength;
- return false;
- }
-
- @Override
- public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (super.mouseClicked(mouseX, mouseY, button)) {
- caretPos = Math.max(1, caretPos);
- setSelectionLength();
- return true;
- }
- return false;
- }
- }
-}
diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java b/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
deleted file mode 100644
index 22c469d..0000000
--- a/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package dev.isxander.yacl.gui.controllers;
-
-import com.mojang.blaze3d.vertex.PoseStack;
-import dev.isxander.yacl.api.Controller;
-import dev.isxander.yacl.api.utils.Dimension;
-import dev.isxander.yacl.gui.AbstractWidget;
-import dev.isxander.yacl.gui.YACLScreen;
-import dev.isxander.yacl.gui.utils.GuiUtils;
-import net.minecraft.ChatFormatting;
-import net.minecraft.client.gui.ComponentPath;
-import net.minecraft.client.gui.GuiComponent;
-import net.minecraft.client.gui.components.MultiLineLabel;
-import net.minecraft.client.gui.narration.NarratedElementType;
-import net.minecraft.client.gui.narration.NarrationElementOutput;
-import net.minecraft.client.gui.navigation.FocusNavigationEvent;
-import net.minecraft.network.chat.Component;
-import org.jetbrains.annotations.Nullable;
-
-public abstract class ControllerWidget<T extends Controller<?>> extends AbstractWidget {
- protected final T control;
- protected MultiLineLabel wrappedTooltip;
- protected final YACLScreen screen;
-
- protected boolean focused = false;
- protected boolean hovered = false;
-
- protected final Component modifiedOptionName;
- protected final String optionNameString;
-
- public ControllerWidget(T control, YACLScreen screen, Dimension<Integer> dim) {
- super(dim);
- this.control = control;
- this.screen = screen;
- control.option().addListener((opt, pending) -> updateTooltip());
- updateTooltip();
- this.modifiedOptionName = control.option().name().copy().withStyle(ChatFormatting.ITALIC);
- this.optionNameString = control.option().name().getString().toLowerCase();
- }
-
- @Override
- public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
- hovered = isMouseOver(mouseX, mouseY);
-
- Component name = control.option().changed() ? modifiedOptionName : control.option().name();
- Component shortenedName = Component.literal(GuiUtils.shortenString(name.getString(), textRenderer, getDimension().width() - getControlWidth() - getXPadding() - 7, "...")).setStyle(name.getStyle());
-
- drawButtonRect(matrices, getDimension().x(), getDimension().y(), getDimension().xLimit(), getDimension().yLimit(), isHovered(), isAvailable());
- matrices.pushPose();
- matrices.translate(getDimension().x() + getXPadding(), getTextY(), 0);
- textRenderer.drawShadow(matrices, shortenedName, 0, 0, getValueColor());
- matrices.popPose();
-
- drawValueText(matrices, mouseX, mouseY, delta);
- if (isHovered()) {
- drawHoveredControl(matrices, mouseX, mouseY, delta);
- }
- }
-
- @Override
- public void postRender(PoseStack matrices, int mouseX, int mouseY, float delta) {
- if (hovered || focused) {
- YACLScreen.renderMultilineTooltip(matrices, textRenderer, wrappedTooltip, getDimension().centerX(), getDimension().y() - 5, getDimension().yLimit() + 5, screen.width, screen.height);
- }
- }
-
- protected void drawHoveredControl(PoseStack matrices, int mouseX, int mouseY, float delta) {
-
- }
-
- protected void drawValueText(PoseStack matrices, int mouseX, int mouseY, float delta) {
- Component valueText = getValueText();
- matrices.pushPose();
- matrices.translate(getDimension().xLimit() - textRenderer.width(valueText) - getXPadding(), getTextY(), 0);
- textRenderer.drawShadow(matrices, valueText, 0, 0, getValueColor());
- matrices.popPose();
- }
-
- private void updateTooltip() {
- this.wrappedTooltip = MultiLineLabel.create(textRenderer, control.option().tooltip(), screen.width / 3 * 2 - 10);
- }
-
- protected int getControlWidth() {
- return isHovered() ? getHoveredControlWidth() : getUnhoveredControlWidth();
- }
-
- public boolean isHovered() {
- return isAvailable() && (hovered || focused);
- }
-
- protected abstract int getHoveredControlWidth();
-
- protected int getUnhoveredControlWidth() {
- return textRenderer.width(getValueText());
- }
-
- protected int getXPadding() {
- return 5;
- }
-
- protected int getYPadding() {
- return 2;
- }
-
- protected Component getValueText() {
- return control.formatValue();
- }
-
- protected boolean isAvailable() {
- return control.option().available();
- }
-
- protected int getValueColor() {
- return isAvailable() ? -1 : inactiveColor;
- }
-
- @Override
- public boolean canReset() {
- return true;
- }
-
- protected void drawOutline(PoseStack matrices, int x1, int y1, int x2, int y2, int width, int color) {
- GuiComponent.fill(matrices, x1, y1, x2, y1 + width, color);
- GuiComponent.fill(matrices, x2, y1, x2 - width, y2, color);
- GuiComponent.fill(matrices, x1, y2, x2, y2 - width, color);
- GuiComponent.fill(matrices, x1, y1, x1 + width, y2, color);
- }
-
- protected float getTextY() {
- return getDimension().y() + getDimension().height() / 2f - textRenderer.lineHeight / 2f;
- }
-
- @Nullable
- @Override
- public ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) {
- if (!this.isAvailable())
- return null;
- return !this.isFocused() ? ComponentPath.leaf(this) : null;
- }
-
- @Override
- public boolean isFocused() {
- return focused;
- }
-
- @Override
- public void setFocused(boolean focused) {
- this.focused = focused;
- }
-
- @Override
- public void unfocus() {
- this.focused = false;
- }
-
- @Override
- public boolean matchesSearch(String query) {
- return optionNameString.contains(query.toLowerCase());
- }
-
- @Override
- public NarrationPriority narrationPriority() {
- return focused ? NarrationPriority.FOCUSED : isHovered() ? NarrationPriority.HOVERED : NarrationPriority.NONE;
- }
-
- @Override
- public void updateNarration(NarrationElementOutput builder) {
- builder.add(NarratedElementType.TITLE, control.option().name());
- builder.add(NarratedElementType.HINT, control.option().tooltip());
- }
-}
diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java
deleted file mode 100644
index 1dfae0b..0000000
--- a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package dev.isxander.yacl.gui.controllers;
-
-import com.mojang.blaze3d.vertex.PoseStack;
-import dev.isxander.yacl.api.Controller;
-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.gui.ComponentPath;
-import net.minecraft.client.gui.GuiComponent;
-import net.minecraft.client.gui.components.MultiLineLabel;
-import net.minecraft.client.gui.narration.NarratedElementType;
-import net.minecraft.client.gui.narration.NarrationElementOutput;
-import net.minecraft.client.gui.navigation.FocusNavigationEvent;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.HoverEvent;
-import net.minecraft.network.chat.Style;
-import net.minecraft.util.FormattedCharSequence;
-import net.minecraft.world.item.ItemStack;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Simply renders some text as a label.
- */
-public class LabelController implements Controller<Component> {
- private final Option<Component> option;
- /**
- * Constructs a label controller
- *
- * @param option bound option
- */
- public Label