diff --git a/build.gradle.kts b/build.gradle.kts index 7b3ae468..c716f105 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,11 +14,17 @@ repositories { // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. + mavenCentral() maven { name = "Terraformers" url = uri("https://maven.terraformersmc.com/") } + + maven { + name = "Modrinth" + url = uri("https://api.modrinth.com/maven") + } } dependencies { @@ -41,6 +47,8 @@ dependencies { include("org.atteo.classindex:classindex:3.13") implementation("org.atteo.classindex:classindex:3.13") annotationProcessor("org.atteo.classindex:classindex:3.13") + + compileOnly("maven.modrinth:the-rettington-companion:2.0.0") } tasks.processResources { diff --git a/src/main/java/de/rettichlp/ucutils/UCUtils.java b/src/main/java/de/rettichlp/ucutils/UCUtils.java index 9ede6244..479a3564 100644 --- a/src/main/java/de/rettichlp/ucutils/UCUtils.java +++ b/src/main/java/de/rettichlp/ucutils/UCUtils.java @@ -107,7 +107,6 @@ public void onInitialize() { if (isUnicaCity) { client.execute(() -> { this.registry.registerListeners(); - renderService.initializeWidgets(); utilService.delayedAction(syncService::syncFactionSpecificData, 10000); utilService.delayedAction(syncService::checkForUpdates, 15000); }); diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MainOptionsScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MainOptionsScreen.java index 2262efad..823c1647 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MainOptionsScreen.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/MainOptionsScreen.java @@ -1,5 +1,6 @@ package de.rettichlp.ucutils.common.gui.screens.options; +import de.rettichlp.therettingtoncompanion.gui.screens.TRCOptionsScreen; import de.rettichlp.ucutils.common.configuration.options.Options; import de.rettichlp.ucutils.common.gui.screens.OptionsScreen; import net.minecraft.client.gui.components.Button; @@ -47,7 +48,7 @@ public void initBody() { directionalLayoutWidget2.addChild(Button.builder(TEXT_SOUNDS, button -> this.minecraft.setScreen(new SoundOptionsScreen(this))).width(150).build()); LinearLayout directionalLayoutWidget3 = directionalLayoutWidget.addChild(horizontal().spacing(8)); - directionalLayoutWidget3.addChild(Button.builder(TEXT_WIDGETS, button -> this.minecraft.setScreen(new WidgetOptionsScreen(this))).width(150).build()); + directionalLayoutWidget3.addChild(Button.builder(TEXT_WIDGETS, button -> this.minecraft.setScreen(new TRCOptionsScreen("widgets", this, true))).width(150).build()); directionalLayoutWidget3.addChild(Button.builder(TEXT_NOTIFICATIONS, button -> this.minecraft.setScreen(new NotificationOptionsScreen(this))).width(150).build()); LinearLayout directionalLayoutWidget4 = directionalLayoutWidget.addChild(horizontal().spacing(8)); diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NotificationOptionsScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NotificationOptionsScreen.java index b9fe79c8..b01c2a19 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NotificationOptionsScreen.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NotificationOptionsScreen.java @@ -3,14 +3,12 @@ import de.rettichlp.ucutils.common.configuration.options.NotificationOptions; import de.rettichlp.ucutils.common.gui.screens.OptionsScreen; import de.rettichlp.ucutils.common.gui.screens.components.ToggleButtonWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.layouts.GridLayout; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.renderService; import static net.minecraft.network.chat.Component.translatable; public class NotificationOptionsScreen extends OptionsScreen { @@ -29,12 +27,6 @@ public NotificationOptionsScreen(Screen parent) { super(parent, TEXT_NOTIFICATIONS); } - @Override - public void doOnClose() { - renderService.getWidgets().forEach(AbstractUCUtilsWidget::saveConfiguration); - super.doOnClose(); - } - @Override public void initBody() { GridLayout gridLayout = this.layout.addToContents(new GridLayout()); diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsPositionScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsPositionScreen.java deleted file mode 100644 index 7436183e..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsPositionScreen.java +++ /dev/null @@ -1,151 +0,0 @@ -package de.rettichlp.ucutils.common.gui.screens.options; - -import com.mojang.blaze3d.platform.Window; -import de.rettichlp.ucutils.common.gui.screens.UCUtilsScreen; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.layouts.LinearLayout; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.input.MouseButtonEvent; -import net.minecraft.network.chat.Component; -import org.jspecify.annotations.NonNull; - -import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.renderService; -import static de.rettichlp.ucutils.common.services.RenderService.TEXT_BOX_PADDING; -import static java.awt.Color.BLACK; -import static java.awt.Color.BLUE; -import static java.awt.Color.GRAY; -import static java.awt.Color.GREEN; -import static java.util.Objects.isNull; -import static java.util.Objects.nonNull; -import static net.minecraft.client.gui.layouts.LinearLayout.horizontal; -import static net.minecraft.network.chat.CommonComponents.GUI_CANCEL; -import static net.minecraft.network.chat.CommonComponents.GUI_DONE; -import static net.minecraft.network.chat.Component.empty; -import static net.minecraft.network.chat.Component.literal; - -public class WidgetOptionsPositionScreen extends UCUtilsScreen { - - private AbstractUCUtilsWidget selectedWidget; - private double oldMouseX; - private double oldMouseY; - - public WidgetOptionsPositionScreen(Screen parent) { - super(empty(), empty(), parent, false); - } - - @Override - public void initBody() { - LinearLayout directionalLayoutWidget = this.layout.addToContents(horizontal().spacing(8), positioner -> positioner.paddingTop(this.minecraft.getWindow().getGuiScaledHeight() / 4)); - - directionalLayoutWidget.addChild(Button.builder(GUI_DONE, button -> { - renderService.getWidgets().forEach(AbstractUCUtilsWidget::saveConfiguration); - back(); - }).width(150).build()); - - directionalLayoutWidget.addChild(Button.builder(GUI_CANCEL, button -> { - // restore configurations from the configuration file - renderService.getWidgets().forEach(AbstractUCUtilsWidget::loadConfiguration); - back(); - }).width(150).build()); - - directionalLayoutWidget.visitWidgets(this::addRenderableWidget); - } - - @Override - public void doOnClose() { - configuration.saveToFile(); - } - - @Override - public void extractRenderState(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) { - super.extractRenderState(graphics, mouseX, mouseY, a); - - // draw center help lines - Window window = this.minecraft.getWindow(); - int scaledWidth = window.getGuiScaledWidth(); - int scaledHeight = window.getGuiScaledHeight(); - graphics.horizontalLine(0, scaledWidth, scaledHeight / 2 - 1, GREEN.getRGB()); - graphics.verticalLine(scaledWidth / 2 - 1, 0, scaledHeight, GREEN.getRGB()); - - // draw widget help lines - renderService.getWidgets().forEach(abstractUCUtilsWidget -> { - double xTopLeft = abstractUCUtilsWidget.getWidgetConfiguration().getX(); - double yTopLeft = abstractUCUtilsWidget.getWidgetConfiguration().getY(); - double xBottomRight = xTopLeft + abstractUCUtilsWidget.getWidth(); - double yBottomRight = yTopLeft + abstractUCUtilsWidget.getHeight(); - - graphics.horizontalLine(0, scaledWidth, (int) yTopLeft, GRAY.getRGB()); - graphics.horizontalLine(0, scaledWidth, (int) yBottomRight - 1, GRAY.getRGB()); - graphics.verticalLine((int) xTopLeft, 0, scaledHeight, GRAY.getRGB()); - graphics.verticalLine((int) xBottomRight - 1, 0, scaledHeight, GRAY.getRGB()); - }); - - if (isNull(this.selectedWidget)) { - return; - } - - int textX = mouseX + 10; - int textY = mouseY + 10; - - UCUtilsWidgetConfiguration widgetConfiguration = this.selectedWidget.getWidgetConfiguration(); - - // draw border around the selected widget - double x = widgetConfiguration.getX(); - double y = widgetConfiguration.getY(); - - // draw widget location text box - Component widgetLocationText = literal("X: " + x + " Y: " + y + " (W: " + this.selectedWidget.getWidth() + " H: " + this.selectedWidget.getHeight() + ")"); - graphics.fill(textX - TEXT_BOX_PADDING, textY - TEXT_BOX_PADDING, textX + this.font.width(widgetLocationText) + TEXT_BOX_PADDING, textY + this.font.lineHeight + TEXT_BOX_PADDING, renderService.getSecondaryColor(BLACK).getRGB()); - graphics.text(this.font, widgetLocationText, textX, textY, 0xFFFFFFFF, false); - - // draw widget center lines - double centerX = x + (this.selectedWidget.getWidth() / 2.0); - double centerY = y + (this.selectedWidget.getHeight() / 2.0); - graphics.horizontalLine(0, scaledWidth, (int) centerY, BLUE.getRGB()); - graphics.verticalLine((int) centerX, 0, scaledHeight, BLUE.getRGB()); - } - - // disable background rendering to see overlay better - @Override - public void extractBackground(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {} - - @Override - public void mouseMoved(double mouseX, double mouseY) { - super.mouseMoved(mouseX, mouseY); - - double deltaX = mouseX - this.oldMouseX; - double deltaY = mouseY - this.oldMouseY; - - this.oldMouseX = mouseX; - this.oldMouseY = mouseY; - - if (nonNull(this.selectedWidget)) { - UCUtilsWidgetConfiguration widgetConfiguration = this.selectedWidget.getWidgetConfiguration(); - widgetConfiguration.setX(widgetConfiguration.getX() + deltaX); - widgetConfiguration.setY(widgetConfiguration.getY() + deltaY); - } - } - - @Override - public boolean mouseClicked(@NonNull MouseButtonEvent event, boolean doubleClick) { - boolean mouseClicked = super.mouseClicked(event, doubleClick); - - renderService.getWidgets().stream() - .filter(abstractUCUtilsWidget -> abstractUCUtilsWidget.isMouseOver(event.x(), event.y())) - .findFirst() - .ifPresent(abstractUCUtilsWidget -> this.selectedWidget = abstractUCUtilsWidget); - - return mouseClicked; - } - - @Override - public boolean mouseReleased(@NonNull MouseButtonEvent event) { - boolean mouseReleased = super.mouseReleased(event); - this.selectedWidget = null; - return mouseReleased; - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsScreen.java deleted file mode 100644 index 3d13b7c3..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/WidgetOptionsScreen.java +++ /dev/null @@ -1,83 +0,0 @@ -package de.rettichlp.ucutils.common.gui.screens.options; - -import de.rettichlp.ucutils.common.gui.screens.OptionsScreen; -import de.rettichlp.ucutils.common.gui.screens.components.ToggleButtonWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.IOptionWidget; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.StringWidget; -import net.minecraft.client.gui.components.Tooltip; -import net.minecraft.client.gui.layouts.GridLayout; -import net.minecraft.client.gui.layouts.LayoutSettings; -import net.minecraft.client.gui.layouts.LinearLayout; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import org.jspecify.annotations.NonNull; - -import static de.rettichlp.ucutils.UCUtils.renderService; -import static net.minecraft.client.gui.layouts.LinearLayout.vertical; -import static net.minecraft.network.chat.Component.translatable; - -public class WidgetOptionsScreen extends OptionsScreen { - - private static final Component TEXT_WIDGETS = translatable("ucutils.options.text.widgets"); - private static final Component TEXT_GENERAL = translatable("ucutils.options.text.general"); - private static final Component TEXT_POSITION = translatable("ucutils.options.text.position"); - - public WidgetOptionsScreen(Screen parent) { - super(parent, TEXT_WIDGETS, false); - } - - @Override - public void doOnClose() { - renderService.getWidgets().forEach(AbstractUCUtilsWidget::saveConfiguration); - super.doOnClose(); - } - - @Override - public void initBody() { - LinearLayout directionalLayoutWidget = this.layout.addToContents(vertical().spacing(4)); - - // general - directionalLayoutWidget.addChild(new StringWidget(TEXT_GENERAL, this.font), LayoutSettings::alignHorizontallyCenter); - - directionalLayoutWidget.addChild(Button.builder(TEXT_POSITION, button -> this.minecraft.setScreen(new WidgetOptionsPositionScreen(this))).width(308).build()); - - // general - enable status - GridLayout gridLayout = this.layout.addToContents(new GridLayout()); - gridLayout.columnSpacing(8).rowSpacing(4); - GridLayout.RowHelper gridLayoutRowHelper = gridLayout.createRowHelper(2); - - renderService.getWidgets().forEach(abstractUCUtilsWidget -> { - Component displayName = abstractUCUtilsWidget.getDisplayName(); - ToggleButtonWidget toggleButton = new ToggleButtonWidget(displayName, value -> abstractUCUtilsWidget.getWidgetConfiguration().setEnabled(value), abstractUCUtilsWidget.getWidgetConfiguration().isEnabled()); - toggleButton.setTooltip(Tooltip.create(abstractUCUtilsWidget.getTooltip())); - gridLayoutRowHelper.addChild(toggleButton); - }); - - gridLayout.arrangeElements(); - gridLayout.visitWidgets(this::addRenderableWidget); - - // options section per widget - renderService.getWidgets().stream() - .filter(abstractUCUtilsWidget -> abstractUCUtilsWidget.getWidgetConfiguration() instanceof IOptionWidget) - .forEach(abstractUCUtilsWidget -> { - IOptionWidget iOptionWidget = (IOptionWidget) abstractUCUtilsWidget.getWidgetConfiguration(); - - // section title - Component text = abstractUCUtilsWidget.getDisplayName(); - directionalLayoutWidget.addChild(new StringWidget(text, this.font), positioner -> positioner.alignHorizontallyCenter().paddingTop(16)); - - // options widget - directionalLayoutWidget.addChild(iOptionWidget.optionsWidget(), LayoutSettings::alignHorizontallyCenter); - }); - - directionalLayoutWidget.visitWidgets(this::addRenderableWidget); - } - - // disable background rendering to see overlay better - - @Override - public void extractBackground(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {} -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CarLockedWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CarLockedWidget.java index c54a0c77..f2415dea 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CarLockedWidget.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CarLockedWidget.java @@ -1,32 +1,32 @@ package de.rettichlp.ucutils.common.gui.widgets; -import de.rettichlp.ucutils.common.gui.screens.components.CyclingButtonEntry; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.IOptionWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; +import de.rettichlp.therettingtoncompanion.gui.ICycleButtonValue; +import de.rettichlp.therettingtoncompanion.gui.options.list.TRCOptionsList; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.AbstractTRCTextWidget; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.WidgetConfiguration; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; -import net.minecraft.client.gui.components.CycleButton; import net.minecraft.client.gui.components.Tooltip; -import net.minecraft.client.gui.layouts.LayoutElement; import net.minecraft.network.chat.Component; -import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Contract; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import static de.rettichlp.ucutils.UCUtils.storage; import static de.rettichlp.ucutils.common.gui.widgets.CarLockedWidget.Style.MINIMALISTIC; +import static java.util.Arrays.asList; import static net.minecraft.ChatFormatting.DARK_GRAY; import static net.minecraft.ChatFormatting.GOLD; import static net.minecraft.ChatFormatting.GRAY; import static net.minecraft.ChatFormatting.GREEN; +import static net.minecraft.client.gui.components.Tooltip.create; import static net.minecraft.network.chat.Component.empty; import static net.minecraft.network.chat.Component.literal; import static net.minecraft.network.chat.Component.translatable; -@UCUtilsWidget(registryName = "car_locked", defaultX = 110.0, defaultY = 4.0) -public class CarLockedWidget extends AbstractUCUtilsTextWidget { +public class CarLockedWidget extends AbstractTRCTextWidget { private static final Component WIDGETS_CAR_LOCKED_OPTIONS_NAME = translatable("ucutils.options.widgets.car_locked.options.name"); private static final Component WIDGETS_CAR_LOCKED_OPTIONS_TOOLTIP = translatable("ucutils.options.widgets.car_locked.options.tooltip"); @@ -43,7 +43,12 @@ public Component text() { } @Override - public Component getDisplayName() { + public @Nullable String getRegistryName() { + return "car_locked"; + } + + @Override + public Component getLabel() { return WIDGETS_CAR_LOCKED_OPTIONS_NAME; } @@ -52,9 +57,14 @@ public Component getTooltip() { return WIDGETS_CAR_LOCKED_OPTIONS_TOOLTIP; } + @Override + public void addOptions(@NonNull TRCOptionsList optionsList) { + optionsList.addCycleButton(WIDGETS_CAR_LOCKED_OPTIONS_STYLE_NAME, create(WIDGETS_CAR_LOCKED_OPTIONS_TOOLTIP), getWidgetConfiguration().getStyle(), asList(Style.values()), (_, value) -> getWidgetConfiguration().setStyle(value)); + } + @Getter @AllArgsConstructor - public enum Style implements CyclingButtonEntry { + public enum Style implements ICycleButtonValue { DEFAULT(translatable("ucutils.options.widgets.car_locked.options.style.value.default.name"), translatable("ucutils.options.widgets.car_locked.options.style.value.default.tooltip")), MINIMALISTIC(translatable("ucutils.options.widgets.car_locked.options.style.value.minimalistic.name"), translatable("ucutils.options.widgets.car_locked.options.style.value.minimalistic.tooltip")); @@ -63,28 +73,21 @@ public enum Style implements CyclingButtonEntry { private final Component tooltip; @Override - public @NotNull Component getDisplayName() { + public Component value() { return this.name; } + @Contract(value = " -> new", pure = true) @Override - public @NotNull Tooltip getTooltip() { - return Tooltip.create(this.tooltip); + public @NonNull Tooltip tooltip() { + return create(this.tooltip); } } @Data @EqualsAndHashCode(callSuper = false) - public static class Configuration extends UCUtilsWidgetConfiguration implements IOptionWidget { + public static class Configuration extends WidgetConfiguration { private Style style = MINIMALISTIC; - - @Override - public LayoutElement optionsWidget() { - return CycleButton.builder(Style::getDisplayName, this.style) - .withValues(Style.values()) - .withTooltip(Style::getTooltip) - .create(WIDGETS_CAR_LOCKED_OPTIONS_STYLE_NAME, (_, style) -> this.style = style); - } } } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CountdownWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CountdownWidget.java deleted file mode 100644 index 15fb3e45..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/CountdownWidget.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsProgressTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import lombok.RequiredArgsConstructor; -import net.minecraft.network.chat.Component; - -import java.time.LocalDateTime; - -import static java.time.LocalDateTime.now; -import static java.time.temporal.ChronoUnit.MILLIS; -import static net.minecraft.network.chat.Component.empty; - -@RequiredArgsConstructor -@UCUtilsWidget(registryName = "countdown") -public class CountdownWidget extends AbstractUCUtilsProgressTextWidget { - - private final Component text; - private final LocalDateTime creationTime; - private final long durationInMillis; - - @Override - public Component text() { - return this.text; - } - - @Override - public double progress() { - return calculateProgress(this.creationTime, this.durationInMillis); - } - - @Override - public Component getDisplayName() { - return empty(); - } - - @Override - public Component getTooltip() { - return empty(); - } - - @Override - public boolean isVisible() { - return this.creationTime.plus(this.durationInMillis, MILLIS).isAfter(now()); - } - - public static class Configuration extends UCUtilsWidgetConfiguration {} -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/DateTimeWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/DateTimeWidget.java deleted file mode 100644 index 4ed2de69..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/DateTimeWidget.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import net.minecraft.network.chat.Component; - -import static de.rettichlp.ucutils.UCUtils.messageService; -import static java.time.LocalDateTime.now; -import static net.minecraft.network.chat.Component.literal; -import static net.minecraft.network.chat.Component.translatable; - -@UCUtilsWidget(registryName = "date_time", defaultX = 4.0, defaultY = 4.0) -public class DateTimeWidget extends AbstractUCUtilsTextWidget { - - @Override - public Component text() { - return literal(messageService.dateTimeToFriendlyString(now())); - } - - @Override - public Component getDisplayName() { - return translatable("ucutils.options.widgets.date_time.options.name"); - } - - @Override - public Component getTooltip() { - return translatable("ucutils.options.widgets.date_time.options.tooltip"); - } - - public static class Configuration extends UCUtilsWidgetConfiguration {} -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/HearthWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/HearthWidget.java deleted file mode 100644 index 206abaca..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/HearthWidget.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import lombok.AllArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; - -import java.awt.Color; - -import static java.lang.String.format; -import static net.minecraft.ChatFormatting.GRAY; -import static net.minecraft.ChatFormatting.RED; -import static net.minecraft.ChatFormatting.YELLOW; -import static net.minecraft.network.chat.Component.literal; -import static net.minecraft.network.chat.Component.translatable; - -@UCUtilsWidget(registryName = "hearth", defaultX = 4.0, defaultY = 4.0, defaultEnabled = false) -public class HearthWidget extends AbstractUCUtilsTextWidget { - - @Override - public Component text() { - LocalPlayer player = Minecraft.getInstance().player; - assert player != null; // cannot be null at this point - - float absorptionAmount = player.getAbsorptionAmount(); - float overallAmount = player.getHealth() + absorptionAmount; - - String overallAmountString = format("%.1f", overallAmount / 2).replaceAll(",0$", ""); - MutableComponent text = literal(overallAmountString).withStyle(absorptionAmount > 0 ? YELLOW : GRAY); - return text.append(literal("❤").withStyle(RED)); - } - - @Override - public Color getBorderColor() { - return new Color(0, 0, 0, 0); - } - - @Override - public Color getBackgroundColor() { - return new Color(0, 0, 0, 0); - } - - @Override - public Component getDisplayName() { - return translatable("ucutils.options.widgets.hearth.options.name"); - } - - @Override - public Component getTooltip() { - return translatable("ucutils.options.widgets.hearth.options.tooltip"); - } - - @AllArgsConstructor - public static class Configuration extends UCUtilsWidgetConfiguration {} -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/MoneyWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/MoneyWidget.java index a587149f..0d30d91d 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/MoneyWidget.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/MoneyWidget.java @@ -1,19 +1,21 @@ package de.rettichlp.ucutils.common.gui.widgets; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; +import de.rettichlp.therettingtoncompanion.gui.options.list.TRCOptionsList; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.AbstractTRCTextWidget; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.WidgetConfiguration; import lombok.AllArgsConstructor; import net.minecraft.network.chat.Component; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import static de.rettichlp.ucutils.UCUtils.configuration; +import static de.rettichlp.ucutils.common.services.RenderService.keyValue; import static java.awt.Color.RED; import static java.lang.System.currentTimeMillis; import static net.minecraft.network.chat.Component.empty; import static net.minecraft.network.chat.Component.translatable; -@UCUtilsWidget(registryName = "money", defaultX = 4.0, defaultY = 23.0) -public class MoneyWidget extends AbstractUCUtilsTextWidget { +public class MoneyWidget extends AbstractTRCTextWidget { @Override public Component text() { @@ -28,7 +30,12 @@ public Component text() { } @Override - public Component getDisplayName() { + public @Nullable String getRegistryName() { + return "money"; + } + + @Override + public Component getLabel() { return translatable("ucutils.options.widgets.money.options.name"); } @@ -37,6 +44,9 @@ public Component getTooltip() { return translatable("ucutils.options.widgets.money.options.tooltip"); } + @Override + public void addOptions(@NonNull TRCOptionsList optionsList) {} + @AllArgsConstructor - public static class Configuration extends UCUtilsWidgetConfiguration {} + public static class Configuration extends WidgetConfiguration {} } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/NotificationWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/NotificationWidget.java deleted file mode 100644 index 8b2b3d83..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/NotificationWidget.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsProgressTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import lombok.RequiredArgsConstructor; -import net.minecraft.network.chat.Component; - -import java.awt.Color; -import java.time.LocalDateTime; - -import static java.time.LocalDateTime.now; -import static java.time.temporal.ChronoUnit.MILLIS; -import static net.minecraft.network.chat.Component.empty; - -@RequiredArgsConstructor -@UCUtilsWidget(registryName = "notification") -public class NotificationWidget extends AbstractUCUtilsProgressTextWidget { - - private final Component text; - private final Color borderColor; - private final LocalDateTime creationTime; - private final long durationInMillis; - - @Override - public Component text() { - return this.text; - } - - @Override - public double progress() { - return calculateProgress(this.creationTime, this.durationInMillis); - } - - @Override - public Color getBorderColor() { - return this.borderColor; - } - - @Override - public Component getDisplayName() { - return empty(); - } - - @Override - public Component getTooltip() { - return empty(); - } - - @Override - public boolean isVisible() { - return this.creationTime.plus(this.durationInMillis, MILLIS).isAfter(now()); - } - - public static class Configuration extends UCUtilsWidgetConfiguration {} -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/PayDayWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/PayDayWidget.java index dbc8ef29..a20775eb 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/PayDayWidget.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/PayDayWidget.java @@ -1,31 +1,30 @@ package de.rettichlp.ucutils.common.gui.widgets; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.IOptionWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; +import de.rettichlp.therettingtoncompanion.gui.options.list.TRCOptionsList; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.AbstractTRCTextWidget; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.WidgetConfiguration; import lombok.Data; import lombok.EqualsAndHashCode; -import net.minecraft.client.gui.layouts.LayoutElement; -import net.minecraft.client.gui.layouts.LinearLayout; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import java.awt.Color; +import static de.rettichlp.therettingtoncompanion.gui.OnOffCycleButtonEntry.ON; import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.renderService; +import static de.rettichlp.ucutils.common.services.RenderService.keyValue; import static java.awt.Color.RED; import static java.lang.String.valueOf; import static java.lang.System.currentTimeMillis; import static net.minecraft.ChatFormatting.DARK_GRAY; -import static net.minecraft.client.gui.layouts.LinearLayout.horizontal; +import static net.minecraft.client.gui.components.Tooltip.create; import static net.minecraft.network.chat.Component.empty; import static net.minecraft.network.chat.Component.literal; import static net.minecraft.network.chat.Component.translatable; -@UCUtilsWidget(registryName = "payday", defaultX = 126.0, defaultY = 4.0) -public class PayDayWidget extends AbstractUCUtilsTextWidget { +public class PayDayWidget extends AbstractTRCTextWidget { private static final Component WIDGETS_PAYDAY_OPTIONS_NAME = translatable("ucutils.options.widgets.payday.options.name"); private static final Component WIDGETS_PAYDAY_OPTIONS_TOOLTIP = translatable("ucutils.options.widgets.payday.options.tooltip"); @@ -49,19 +48,20 @@ public Component text() { payDayInfoText.append(" ").append(keyValue("Exp", valueOf(configuration.getPredictedPayDayExp()))); } - return payDayInfoText; + Color fontColor = configuration.getMinutesSinceLastPayDay() >= 55 && configuration.getMoneyBankAmount() > 100000 && (currentTimeMillis() / 500 % 2 == 0) + ? RED + : getWidgetConfiguration().getColor(); + + return payDayInfoText.withColor(fontColor.getRGB()); } @Override - public Color getBackgroundColor() { - // with over 100.000$ on bank and PayDay within next 5 minutes, animate background - return configuration.getMinutesSinceLastPayDay() >= 55 && configuration.getMoneyBankAmount() > 100000 && (currentTimeMillis() / 500 % 2 == 0) - ? RED - : super.getBackgroundColor(); + public @Nullable String getRegistryName() { + return "payday"; } @Override - public Component getDisplayName() { + public Component getLabel() { return WIDGETS_PAYDAY_OPTIONS_NAME; } @@ -70,19 +70,17 @@ public Component getTooltip() { return WIDGETS_PAYDAY_OPTIONS_TOOLTIP; } + @Override + public void addOptions(@NonNull TRCOptionsList optionsList) { + optionsList.addToggleButton(WIDGETS_PAYDAY_OPTIONS_SALARY_NAME, create(WIDGETS_PAYDAY_OPTIONS_SALARY_TOOLTIP), getWidgetConfiguration().isShowSalary(), (_, value) -> getWidgetConfiguration().setShowSalary(value == ON)); + optionsList.addToggleButton(WIDGETS_PAYDAY_OPTIONS_EXPERIENCE_NAME, create(WIDGETS_PAYDAY_OPTIONS_EXPERIENCE_TOOLTIP), getWidgetConfiguration().isShowExperience(), (_, value) -> getWidgetConfiguration().setShowExperience(value == ON)); + } + @Data @EqualsAndHashCode(callSuper = false) - public static class Configuration extends UCUtilsWidgetConfiguration implements IOptionWidget { + public static class Configuration extends WidgetConfiguration { private boolean showSalary = true; private boolean showExperience = true; - - @Override - public LayoutElement optionsWidget() { - LinearLayout directionalLayoutWidget = horizontal().spacing(8); - renderService.addToggleButton(directionalLayoutWidget, WIDGETS_PAYDAY_OPTIONS_SALARY_NAME, WIDGETS_PAYDAY_OPTIONS_SALARY_TOOLTIP, (options, value) -> this.showSalary = value, options -> this.showSalary, 150); - renderService.addToggleButton(directionalLayoutWidget, WIDGETS_PAYDAY_OPTIONS_EXPERIENCE_NAME, WIDGETS_PAYDAY_OPTIONS_EXPERIENCE_TOOLTIP, (options, value) -> this.showExperience = value, options -> this.showExperience, 150); - return directionalLayoutWidget; - } } } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/ServiceCountWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/ServiceCountWidget.java index bc3ce753..e372dd2d 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/ServiceCountWidget.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/ServiceCountWidget.java @@ -1,37 +1,35 @@ package de.rettichlp.ucutils.common.gui.widgets; -import de.rettichlp.ucutils.common.gui.screens.options.WidgetOptionsPositionScreen; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsTextWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import net.minecraft.client.Minecraft; +import de.rettichlp.therettingtoncompanion.gui.options.list.TRCOptionsList; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.AbstractTRCTextWidget; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.WidgetConfiguration; import net.minecraft.network.chat.Component; - -import java.awt.Color; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import static de.rettichlp.ucutils.UCUtils.storage; +import static de.rettichlp.ucutils.common.services.RenderService.keyValue; import static java.awt.Color.RED; import static java.lang.String.valueOf; import static net.minecraft.network.chat.Component.translatable; -@UCUtilsWidget(registryName = "service_count", defaultX = 4.0, defaultY = 42.0) -public class ServiceCountWidget extends AbstractUCUtilsTextWidget { +public class ServiceCountWidget extends AbstractTRCTextWidget { private static final Component WIDGETS_SERVICE_COUNT_OPTIONS_NAME = translatable("ucutils.options.widgets.service_count.options.name"); private static final Component WIDGETS_SERVICE_COUNT_OPTIONS_TOOLTIP = translatable("ucutils.options.widgets.service_count.options.tooltip"); @Override public Component text() { - return keyValue("Services", valueOf(storage.getActiveServices())); + return keyValue("Services", valueOf(storage.getActiveServices())).withColor(RED.getRGB()); } @Override - public Color getBorderColor() { - return RED; + public @Nullable String getRegistryName() { + return "service_count"; } @Override - public Component getDisplayName() { + public Component getLabel() { return WIDGETS_SERVICE_COUNT_OPTIONS_NAME; } @@ -40,11 +38,14 @@ public Component getTooltip() { return WIDGETS_SERVICE_COUNT_OPTIONS_TOOLTIP; } + @Override + public void addOptions(@NonNull TRCOptionsList optionsList) {} + @Override public boolean isVisible() { // visible if in the position options screen to allow positioning - return storage.getActiveServices() > 0 || Minecraft.getInstance().screen instanceof WidgetOptionsPositionScreen; + return super.isVisible() && (storage.getActiveServices() > 0 || isWidgetPositionScreen()); } - public static class Configuration extends UCUtilsWidgetConfiguration {} + public static class Configuration extends WidgetConfiguration {} } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignHorizontalWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignHorizontalWidget.java deleted file mode 100644 index 654d46e4..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignHorizontalWidget.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.alignment; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.network.chat.Component; -import org.jetbrains.annotations.NotNull; - -import static net.minecraft.network.chat.Component.empty; - -public class AlignHorizontalWidget extends AlignWidget> { - - @Override - public void add(AbstractUCUtilsWidget entry) { - this.ucUtilsWidgets.add(entry); - } - - @Override - public Component getDisplayName() { - return empty(); - } - - @Override - public Component getTooltip() { - return empty(); - } - - @Override - public int getWidth() { - return this.ucUtilsWidgets.stream().map(AbstractUCUtilsWidget::getWidth).reduce(0, Integer::sum); - } - - @Override - public int getHeight() { - return this.ucUtilsWidgets.stream().map(AbstractUCUtilsWidget::getHeight).max(Integer::compareTo).orElse(0); - } - - @Override - public void draw(@NotNull GuiGraphicsExtractor graphics, int x, int y, AbstractUCUtilsWidget.Alignment alignment) { - int xOffset = x; - - for (AbstractUCUtilsWidget ucUtilsWidget : this.ucUtilsWidgets) { - ucUtilsWidget.draw(graphics, xOffset, y, alignment); - xOffset += ucUtilsWidget.getWidth(); - } - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignVerticalWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignVerticalWidget.java deleted file mode 100644 index 4225a760..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignVerticalWidget.java +++ /dev/null @@ -1,54 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.alignment; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.network.chat.Component; -import org.jetbrains.annotations.NotNull; - -import static net.minecraft.network.chat.Component.empty; - -public class AlignVerticalWidget extends AlignWidget> { - - @Override - public void add(AbstractUCUtilsWidget entry) { - this.ucUtilsWidgets.add(entry); - } - - @Override - public Component getDisplayName() { - return empty(); - } - - @Override - public Component getTooltip() { - return empty(); - } - - @Override - public int getWidth() { - return this.ucUtilsWidgets.stream().map(AbstractUCUtilsWidget::getWidth).max(Integer::compareTo).orElse(0); - } - - @Override - public int getHeight() { - return this.ucUtilsWidgets.stream().map(AbstractUCUtilsWidget::getHeight).reduce(0, Integer::sum); - } - - @Override - public void draw(@NotNull GuiGraphicsExtractor graphics, int x, int y, AbstractUCUtilsWidget.Alignment alignment) { - int yOffset = y; - - for (AbstractUCUtilsWidget ucUtilsWidget : this.ucUtilsWidgets) { - // apply alignment - int alignmentXModifier = switch (alignment) { - case LEFT -> 0; - case CENTER -> (getWidth() - ucUtilsWidget.getWidth()) / 2; - case RIGHT -> getWidth() - ucUtilsWidget.getWidth(); - }; - - ucUtilsWidget.draw(graphics, x + alignmentXModifier, yOffset, alignment); - yOffset += ucUtilsWidget.getHeight(); - } - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignWidget.java deleted file mode 100644 index af160c1f..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/alignment/AlignWidget.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.alignment; - -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidgetConfiguration; - -import java.util.ArrayList; -import java.util.Collection; - -public abstract class AlignWidget extends AbstractUCUtilsWidget { - - protected final Collection> ucUtilsWidgets = new ArrayList<>(); - protected boolean disableMargin = false; - - public abstract void add(T entry); - - public void clear() { - this.ucUtilsWidgets.clear(); - } - - public AlignWidget disableMargin() { - this.disableMargin = true; - return this; - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsProgressTextWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsProgressTextWidget.java deleted file mode 100644 index a0d66b6a..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsProgressTextWidget.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.network.chat.Component; -import org.jetbrains.annotations.NotNull; - -import java.time.temporal.Temporal; - -import static de.rettichlp.ucutils.common.services.RenderService.TEXT_BOX_PADDING; -import static java.lang.Math.clamp; -import static java.time.Duration.between; -import static java.time.LocalDateTime.now; - -public abstract class AbstractUCUtilsProgressTextWidget extends AbstractUCUtilsTextWidget { - - @Override - public abstract Component text(); - - @Override - public void draw(@NotNull GuiGraphicsExtractor graphics, int x, int y, Alignment alignment) { - graphics.fill(x, y, x + getWidth(), y + getHeight(), getBackgroundColor().getRGB()); - graphics.text(getFont(), text(), x + TEXT_BOX_PADDING, y + TEXT_BOX_PADDING, 0xFFFFFFFF, false); - - int maxProgressWidth = getWidth() - TEXT_BOX_PADDING * 2; - int xProgressStart = (int) (x + TEXT_BOX_PADDING + maxProgressWidth * progress()); - int xProgressEnd = x + getWidth() - TEXT_BOX_PADDING; - - graphics.horizontalLine(xProgressStart, xProgressEnd, y + getHeight() - 3, getBorderColor().getRGB()); - } - - public abstract double progress(); - - protected double calculateProgress(Temporal creationTime, long durationInMillis) { - long elapsedMillis = between(creationTime, now()).toMillis(); - double progress = (double) elapsedMillis / durationInMillis; - return clamp(progress, 0.0, 1.0); - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsTextWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsTextWidget.java deleted file mode 100644 index a8126125..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsTextWidget.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import org.jetbrains.annotations.NotNull; - -import java.awt.Color; - -import static de.rettichlp.ucutils.UCUtils.renderService; -import static de.rettichlp.ucutils.common.services.RenderService.TEXT_BOX_PADDING; -import static java.awt.Color.WHITE; -import static net.minecraft.ChatFormatting.DARK_GRAY; -import static net.minecraft.ChatFormatting.GRAY; -import static net.minecraft.network.chat.Component.empty; -import static net.minecraft.network.chat.Component.literal; - -public abstract class AbstractUCUtilsTextWidget extends AbstractUCUtilsWidget { - - public abstract Component text(); - - @Override - public int getWidth() { - int fontWidth = getFont().width(text()); - return fontWidth + 2 * TEXT_BOX_PADDING; - } - - @Override - public int getHeight() { - return getFont().lineHeight + 2 * TEXT_BOX_PADDING; - } - - @Override - public void draw(@NotNull GuiGraphicsExtractor graphics, int x, int y, Alignment alignment) { - graphics.fill(x, y, x + getWidth(), y + getHeight(), getBackgroundColor().getRGB()); - graphics.text(getFont(), text(), x + TEXT_BOX_PADDING, y + TEXT_BOX_PADDING, 0xFFFFFFFF, false); - } - - public Color getBorderColor() { - return WHITE; - } - - public Color getBackgroundColor() { - return renderService.getSecondaryColor(getBorderColor()); - } - - protected MutableComponent keyValue(String key, String value) { - return keyValue(key, literal(value)); - } - - protected MutableComponent keyValue(String key, Component value) { - return empty() - .append(literal(key).withStyle(GRAY)) - .append(literal(":").withStyle(DARK_GRAY)).append(" ") - .append(value); - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsWidget.java deleted file mode 100644 index 9f7b2385..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/AbstractUCUtilsWidget.java +++ /dev/null @@ -1,187 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import com.google.common.reflect.TypeToken; -import lombok.Getter; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.network.chat.Component; -import org.jetbrains.annotations.NotNull; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.Map; - -import static de.rettichlp.ucutils.UCUtils.LOGGER; -import static de.rettichlp.ucutils.UCUtils.api; -import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.notificationService; -import static de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget.Alignment.CENTER; -import static de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget.Alignment.LEFT; -import static de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget.Alignment.RIGHT; -import static java.util.Objects.isNull; -import static java.util.Optional.ofNullable; -import static net.minecraft.network.chat.Component.translatable; - -@Getter -public abstract class AbstractUCUtilsWidget { - - private static final Type MAP_TYPE = new TypeToken>() {}.getType(); - - private final Font font = Minecraft.getInstance().font; - - private C widgetConfiguration; - - public abstract Component getDisplayName(); - - public abstract Component getTooltip(); - - public abstract int getWidth(); - - public abstract int getHeight(); - - public abstract void draw(@NotNull GuiGraphicsExtractor graphics, int x, int y, Alignment alignment); - - public void init() { - loadConfiguration(); - } - - public void draw(@NotNull GuiGraphicsExtractor graphics) { - if (!isVisible() || !this.widgetConfiguration.isEnabled() || Minecraft.getInstance().options.hideGui) { - return; - } - - int x = (int) this.widgetConfiguration.getX(); - int y = (int) this.widgetConfiguration.getY(); - draw(graphics, x, y, getAlignment()); - } - - public boolean isMouseOver(double mouseX, double mouseY) { - double x = this.widgetConfiguration.getX(); - double y = this.widgetConfiguration.getY(); - boolean mouseOverX = mouseX >= x && mouseX <= x + getWidth(); - boolean mouseOverY = mouseY >= y && mouseY <= y + getHeight(); - return mouseOverX && mouseOverY; - } - - public boolean isVisible() { - return true; - } - - public String getRegistryName() { - return ofNullable(this.getClass().getAnnotation(UCUtilsWidget.class)) - .map(UCUtilsWidget::registryName) - .orElseThrow(() -> new IllegalStateException("Widget class " + this.getClass().getName() + " has no registry name")); - } - - public void loadConfiguration() { - String registryName = getRegistryName(); - - if (isNull(registryName)) { - LOGGER.warn("Widget {} is missing registry name and therefore has no configuration", this.getClass().getName()); - return; - } - - Class widgetConfigurationClass = getConfigurationClass(); - // load configuration from the configuration file - not from the cache - Object widgetConfigurationObject = configuration.loadFromFile().getWidgets().get(registryName); - - if (isNull(widgetConfigurationObject)) { - LOGGER.info("No configuration found for widget {}, using default configuration", registryName); - - try { - this.widgetConfiguration = widgetConfigurationClass.getConstructor().newInstance(); - this.widgetConfiguration.setEnabled(getDefaultEnabled()); - this.widgetConfiguration.setX(getDefaultX()); - this.widgetConfiguration.setY(getDefaultY()); - } catch (Exception e) { - notificationService.sendErrorNotification(translatable("ucutils.notification.error.configuration")); - LOGGER.error("Could not load configuration for widget {}", registryName, e); - } - - return; - } - - String widgetConfigurationJson = api.getGson().toJson(widgetConfigurationObject); - - this.widgetConfiguration = api.getGson().fromJson(widgetConfigurationJson, widgetConfigurationClass); - } - - public void saveConfiguration() { - String registryName = getRegistryName(); - - if (isNull(registryName)) { - LOGGER.warn("Widget {} is missing registry name and therefore has no configuration", this.getClass().getName()); - return; - } - - C widgetConfiguration = getWidgetConfiguration(); - widgetConfiguration.setX(roundToNearestHalf(widgetConfiguration.getX())); - widgetConfiguration.setY(roundToNearestHalf(widgetConfiguration.getY())); - - String widgetConfigurationJson = api.getGson().toJson(widgetConfiguration); - Map widgetConfigurationMap = api.getGson().fromJson(widgetConfigurationJson, MAP_TYPE); - configuration.getWidgets().put(registryName, widgetConfigurationMap); - } - - private Alignment getAlignment() { - int scaledWidth = Minecraft.getInstance().getWindow().getGuiScaledWidth(); - int widthSegment = scaledWidth / 3; - - Alignment alignment; - - double x = this.widgetConfiguration.getX(); - if (x <= widthSegment) { - alignment = LEFT; - } else if (x <= widthSegment * 2) { - alignment = CENTER; - } else { - alignment = RIGHT; - } - - return alignment; - } - - private boolean getDefaultEnabled() { - return ofNullable(this.getClass().getAnnotation(UCUtilsWidget.class)) - .map(UCUtilsWidget::defaultEnabled) - .orElse(false); - } - - private double getDefaultX() { - return ofNullable(this.getClass().getAnnotation(UCUtilsWidget.class)) - .map(UCUtilsWidget::defaultX) - .orElse(0.0); - } - - private double getDefaultY() { - return ofNullable(this.getClass().getAnnotation(UCUtilsWidget.class)) - .map(UCUtilsWidget::defaultY) - .orElse(0.0); - } - - @SuppressWarnings("unchecked") - private Class getConfigurationClass() { - Type type = getClass().getGenericSuperclass(); - - if (type instanceof ParameterizedType) { - Type[] typeArgs = ((ParameterizedType) type).getActualTypeArguments(); - if (typeArgs.length > 0 && typeArgs[0] instanceof Class) { - return (Class) typeArgs[0]; - } - } - - throw new IllegalStateException("Widget class must be generic: AbstractUCUtilsWidget"); - } - - private double roundToNearestHalf(double value) { - return Math.round(value * 2) / 2.0; - } - - public enum Alignment { - - LEFT, - CENTER, - RIGHT - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/IOptionWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/IOptionWidget.java deleted file mode 100644 index 20ba27af..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/IOptionWidget.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import net.minecraft.client.gui.layouts.LayoutElement; - -public interface IOptionWidget { - - LayoutElement optionsWidget(); -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidget.java deleted file mode 100644 index 1c7a84f6..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidget.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import org.atteo.classindex.IndexAnnotated; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -@Retention(RetentionPolicy.RUNTIME) -@IndexAnnotated -public @interface UCUtilsWidget { - - String registryName(); - - double defaultX() default 0.0; - - double defaultY() default 0.0; - - boolean defaultEnabled() default true; -} diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidgetConfiguration.java b/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidgetConfiguration.java deleted file mode 100644 index 01c100c7..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/widgets/base/UCUtilsWidgetConfiguration.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.rettichlp.ucutils.common.gui.widgets.base; - -import lombok.Data; - -@Data -public class UCUtilsWidgetConfiguration { - - private boolean enabled; - private double x; - private double y; -} diff --git a/src/main/java/de/rettichlp/ucutils/common/integrations/TheRettingtonCompanionIntegration.java b/src/main/java/de/rettichlp/ucutils/common/integrations/TheRettingtonCompanionIntegration.java new file mode 100644 index 00000000..11084b4f --- /dev/null +++ b/src/main/java/de/rettichlp/ucutils/common/integrations/TheRettingtonCompanionIntegration.java @@ -0,0 +1,32 @@ +package de.rettichlp.ucutils.common.integrations; + +import de.rettichlp.therettingtoncompanion.TheRettingtonCompanionApi; +import de.rettichlp.therettingtoncompanion.gui.widgets.base.AbstractTRCWidget; +import de.rettichlp.therettingtoncompanion.models.Notification; +import de.rettichlp.ucutils.common.gui.widgets.CarLockedWidget; +import de.rettichlp.ucutils.common.gui.widgets.MoneyWidget; +import de.rettichlp.ucutils.common.gui.widgets.PayDayWidget; +import de.rettichlp.ucutils.common.gui.widgets.ServiceCountWidget; + +import java.util.List; +import java.util.Set; + +import static de.rettichlp.ucutils.UCUtils.notificationService; + +public class TheRettingtonCompanionIntegration implements TheRettingtonCompanionApi { + + @Override + public Set getNotifications() { + return notificationService.getNotifications(); + } + + @Override + public List> getWidgets() { + return List.of( + new CarLockedWidget(), + new MoneyWidget(), + new PayDayWidget(), + new ServiceCountWidget() + ); + } +} diff --git a/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java b/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java index cb046b1f..5959e824 100644 --- a/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java +++ b/src/main/java/de/rettichlp/ucutils/common/models/Countdown.java @@ -1,14 +1,15 @@ package de.rettichlp.ucutils.common.models; -import de.rettichlp.ucutils.common.gui.widgets.CountdownWidget; +import de.rettichlp.therettingtoncompanion.models.Notification; import lombok.Getter; import lombok.RequiredArgsConstructor; -import net.minecraft.network.chat.Component; import java.time.Duration; import java.time.LocalDateTime; import static de.rettichlp.ucutils.UCUtils.messageService; +import static de.rettichlp.ucutils.UCUtils.notificationService; +import static de.rettichlp.ucutils.UCUtils.storage; import static de.rettichlp.ucutils.UCUtils.utilService; import static java.time.Duration.between; import static java.time.LocalDateTime.now; @@ -29,25 +30,24 @@ public Countdown(String title, Duration duration, Runnable runAfter) { this.title = title; this.duration = duration; - utilService.delayedAction(runAfter, this.duration.toMillis()); - } + Notification countdownNotification = Notification.builder() + .componentSupplier(() -> { + String millisToFriendlyString = messageService.millisToFriendlyString(getRemainingDuration().toMillis()); - public boolean isActive() { - return getRemainingDuration().isPositive(); + return empty() + .append(literal(this.title).withStyle(WHITE)) + .append(literal(":").withStyle(GRAY)).append(" ") + .append(literal(millisToFriendlyString)); + }) + .displayDuration(duration) + .build(); + + storage.getCountdowns().add(this); + notificationService.getNotifications().add(countdownNotification); + utilService.delayedAction(runAfter, this.duration.toMillis()); } public Duration getRemainingDuration() { return between(now(), this.startTime.plus(this.duration)); } - - public CountdownWidget toWidget() { - String millisToFriendlyString = messageService.millisToFriendlyString(getRemainingDuration().toMillis()); - - Component text = empty() - .append(literal(this.title).withStyle(WHITE)) - .append(literal(":").withStyle(GRAY)).append(" ") - .append(literal(millisToFriendlyString)); - - return new CountdownWidget(text, this.startTime, this.duration.toMillis()); - } } diff --git a/src/main/java/de/rettichlp/ucutils/common/models/Job.java b/src/main/java/de/rettichlp/ucutils/common/models/Job.java index cb91cccf..f3873a57 100644 --- a/src/main/java/de/rettichlp/ucutils/common/models/Job.java +++ b/src/main/java/de/rettichlp/ucutils/common/models/Job.java @@ -46,6 +46,6 @@ public enum Job { } public void startCountdown() { - storage.getCountdowns().add(new Countdown(this.displayName, this.cooldown, () -> {})); + new Countdown(this.displayName, this.cooldown, () -> {}); } } diff --git a/src/main/java/de/rettichlp/ucutils/common/services/NotificationService.java b/src/main/java/de/rettichlp/ucutils/common/services/NotificationService.java index 941c93d6..fe78357b 100644 --- a/src/main/java/de/rettichlp/ucutils/common/services/NotificationService.java +++ b/src/main/java/de/rettichlp/ucutils/common/services/NotificationService.java @@ -1,16 +1,12 @@ package de.rettichlp.ucutils.common.services; -import de.rettichlp.ucutils.common.gui.widgets.NotificationWidget; -import lombok.Data; +import de.rettichlp.therettingtoncompanion.models.Notification; +import lombok.Getter; import net.minecraft.network.chat.Component; import java.awt.Color; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.HashSet; +import java.util.Set; import static de.rettichlp.ucutils.UCUtils.configuration; import static de.rettichlp.ucutils.UCUtils.utilService; @@ -19,17 +15,12 @@ import static java.awt.Color.GREEN; import static java.awt.Color.ORANGE; import static java.awt.Color.RED; -import static java.awt.Color.WHITE; -import static java.time.LocalDateTime.now; -import static java.util.Comparator.comparing; -import static java.util.Objects.hash; -import static java.util.Objects.nonNull; -import static java.util.UUID.randomUUID; -import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.time.Duration.ofMillis; public class NotificationService { - private final Collection notifications = new ArrayList<>(); + @Getter + private final Set notifications = new HashSet<>(); public void sendSuccessNotification(Component text) { sendNotification(text, GREEN, 5000); @@ -48,17 +39,13 @@ public void sendErrorNotification(Component text) { } public void sendNotification(Component text, Color color, long durationInMillis) { - Notification notification = new Notification(text, durationInMillis); - notification.setColor(color); - this.notifications.add(notification); - } + Notification notification = Notification.builder() + .componentSupplier(() -> text) + .color(color) + .displayDuration(ofMillis(durationInMillis)) + .build(); - public List getActiveNotifications() { - return this.notifications.stream() - .filter(Objects::nonNull) - .filter(notification -> now().isBefore(notification.getTimestamp().plus(notification.getDurationInMillis(), MILLISECONDS.toChronoUnit()))) - .sorted(comparing(Notification::getTimestamp)) - .toList(); + this.notifications.add(notification); } public void notificationSound(int repeating) { @@ -70,28 +57,4 @@ public void notificationSound(int repeating) { utilService.delayedAction(() -> NOTIFICATION.play(1, 2), i * 150L); } } - - @Data - public static class Notification { - - private final UUID id = randomUUID(); - private final Component text; - private final long durationInMillis; - private final LocalDateTime timestamp = now(); - private Color color = WHITE; - - @Override - public int hashCode() { - return hash(this.id, this.text, this.durationInMillis, this.timestamp, this.color); - } - - @Override - public boolean equals(Object o) { - return nonNull(o) && o instanceof Notification that && Objects.equals(this.id, that.id); - } - - public NotificationWidget toWidget() { - return new NotificationWidget(this.text, this.color, this.timestamp, this.durationInMillis); - } - } } diff --git a/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java b/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java index 36ba3963..dcf57390 100644 --- a/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java +++ b/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java @@ -3,53 +3,32 @@ import de.rettichlp.ucutils.common.configuration.options.Options; import de.rettichlp.ucutils.common.gui.screens.components.CyclingButtonEntry; import de.rettichlp.ucutils.common.gui.screens.components.ToggleButtonWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; -import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; -import lombok.Getter; import net.minecraft.client.gui.components.CycleButton; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.layouts.LinearLayout; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; import java.awt.Color; -import java.util.LinkedHashSet; -import java.util.Objects; import java.util.function.BiConsumer; import java.util.function.Function; import static de.rettichlp.ucutils.UCUtils.configuration; -import static java.util.Comparator.comparing; -import static java.util.stream.Collectors.toCollection; -import static java.util.stream.StreamSupport.stream; -import static org.atteo.classindex.ClassIndex.getAnnotated; +import static net.minecraft.ChatFormatting.DARK_GRAY; +import static net.minecraft.ChatFormatting.GRAY; +import static net.minecraft.network.chat.Component.empty; +import static net.minecraft.network.chat.Component.literal; public class RenderService { public static final int TEXT_BOX_PADDING = 3; - @Getter - private LinkedHashSet> widgets = new LinkedHashSet<>(); - public Color getSecondaryColor(@NotNull Color color) { return new Color(color.getRed() / 2, color.getGreen() / 2, color.getBlue() / 2, 100); } - public void initializeWidgets() { - this.widgets = stream(getAnnotated(UCUtilsWidget.class).spliterator(), false) - .map(ucUtilsWidgetClass -> { - try { - return (AbstractUCUtilsWidget) ucUtilsWidgetClass.getConstructor().newInstance(); - } catch (Exception e) { - return null; - } - }) - .filter(Objects::nonNull) - .peek(AbstractUCUtilsWidget::init) - .sorted(comparing(AbstractUCUtilsWidget::getRegistryName)) - .collect(toCollection(LinkedHashSet::new)); - } - public void addCyclingButton(@NotNull LinearLayout widget, Component name, E[] values, @@ -79,4 +58,15 @@ public void addToggleButton(@NotNull LinearLayout widget, widget.addChild(toggleButton); } + + public static @NonNull MutableComponent keyValue(String key, String value) { + return keyValue(key, literal(value)); + } + + public static @NonNull MutableComponent keyValue(String key, Component value) { + return empty() + .append(literal(key).withStyle(GRAY)) + .append(literal(":").withStyle(DARK_GRAY)).append(" ") + .append(value); + } } diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java index 3dc86dde..9e5da05d 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java @@ -105,7 +105,7 @@ public boolean onMessageReceive(Component text, String message) { Matcher jailMatcher = JAIL_PATTERN.matcher(message); if (jailMatcher.find()) { int minutes = parseInt(jailMatcher.group("minutes")); - storage.getCountdowns().add(new Countdown("Gefängnis", ofMinutes(minutes))); + new Countdown("Gefängnis", ofMinutes(minutes)); return true; } diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/MedicListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/MedicListener.java index 724e110d..2cf21315 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/MedicListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/MedicListener.java @@ -63,7 +63,7 @@ public class MedicListener implements IMessageReceiveListener { public boolean onMessageReceive(Component text, String message) { Matcher medicBandageMatcher = MEDIC_BANDAGE_PATTERN.matcher(message); if (medicBandageMatcher.find()) { - storage.getCountdowns().add(new Countdown("Bandage", MEDIC_BANDAGE_DURATION)); + new Countdown("Bandage", MEDIC_BANDAGE_DURATION); return true; } @@ -76,7 +76,7 @@ public boolean onMessageReceive(Component text, String message) { Matcher medicPillMatcher = MEDIC_PILL_PATTERN.matcher(message); if (medicPillMatcher.find()) { - storage.getCountdowns().add(new Countdown("Schmerzpille", MEDIC_PILL_DURATION)); + new Countdown("Schmerzpille", MEDIC_PILL_DURATION); return true; } @@ -96,7 +96,7 @@ public boolean onMessageReceive(Component text, String message) { Matcher laborTransportStartedMatcher = LABOR_TRANSPORT_STARTED_PATTERN.matcher(message); if (laborTransportStartedMatcher.find()) { Duration duration = ofMinutes(5).plusSeconds(56); // please don't ask why it is like this - storage.getCountdowns().add(new Countdown("Labor Transport", duration, () -> {})); + new Countdown("Labor Transport", duration, () -> {}); return true; } diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java index 10eb76bd..d8de1912 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/job/JobListener.java @@ -68,7 +68,7 @@ public boolean onMessageReceive(Component text, String message) { : now.plusSeconds(seconds); storage.getCountdowns().removeIf(countdown -> countdown.getTitle().equals(MINING_BOOSTER_COUNTDOWN_TITLE)); - storage.getCountdowns().add(new Countdown(MINING_BOOSTER_COUNTDOWN_TITLE, between(now, this.miningBoosterExpirationTime), () -> {})); + new Countdown(MINING_BOOSTER_COUNTDOWN_TITLE, between(now, this.miningBoosterExpirationTime), () -> {}); return true; } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/GuiMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/GuiMixin.java index 838ba2ba..5dd01ca8 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/GuiMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/GuiMixin.java @@ -2,9 +2,6 @@ import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.platform.NativeImage; -import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsProgressTextWidget; -import de.rettichlp.ucutils.common.models.Countdown; -import de.rettichlp.ucutils.common.services.NotificationService; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; @@ -24,17 +21,13 @@ import java.io.InputStream; import java.nio.file.Path; -import java.util.ArrayList; import static com.mojang.blaze3d.platform.NativeImage.read; import static de.rettichlp.ucutils.UCUtils.LOGGER; import static de.rettichlp.ucutils.UCUtils.MOD_ID; import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.notificationService; import static de.rettichlp.ucutils.UCUtils.player; -import static de.rettichlp.ucutils.UCUtils.renderService; import static de.rettichlp.ucutils.UCUtils.storage; -import static de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget.Alignment.RIGHT; import static java.lang.Math.ceil; import static java.lang.Math.clamp; import static java.lang.Math.round; @@ -86,21 +79,6 @@ public abstract class GuiMixin { graphics.blit(GUI_TEXTURED, CAPTCHA_IDENTIFIER, x, y, 0, 0, side, side, side, side); } - @Inject(method = "extractHotbarAndDecorations", at = @At("TAIL")) - private void ucutils$extractHotbarAndDecorationsTail(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker, CallbackInfo ci) { - Profiler.get().popPush("notification"); - extractNotifications(graphics); - Profiler.get().pop(); - - if (!storage.isUnicaCity()) { - return; - } - - Profiler.get().popPush("widget"); - extractWidgets(graphics); - Profiler.get().pop(); - } - @Inject(method = "extractPlayerHealth", at = @At( value = "INVOKE", @@ -123,30 +101,6 @@ public abstract class GuiMixin { Profiler.get().pop(); } - @Unique - private void extractNotifications(GuiGraphicsExtractor graphics) { - ArrayList> widgets = new ArrayList<>(); - widgets.addAll(storage.getCountdowns().stream() - .filter(Countdown::isActive) - .map(Countdown::toWidget) - .toList()); - widgets.addAll(notificationService.getActiveNotifications().stream() - .map(NotificationService.Notification::toWidget) - .toList()); - - for (int i = 0; i < widgets.size(); i++) { - AbstractUCUtilsProgressTextWidget abstractUCUtilsProgressTextWidget = widgets.get(i); - int x = Minecraft.getInstance().getWindow().getGuiScaledWidth() - abstractUCUtilsProgressTextWidget.getWidth() - 4; - int y = 19 * i + 4; - abstractUCUtilsProgressTextWidget.draw(graphics, x, y, RIGHT); - } - } - - @Unique - private void extractWidgets(GuiGraphicsExtractor graphics) { - renderService.getWidgets().forEach(ucUtilsWidgetInstance -> ucUtilsWidgetInstance.draw(graphics)); - } - @Unique private void renderHydration(GuiGraphicsExtractor context, int yLineAir, int xRight) { double maxHydrated = 20; diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 34783bd1..65458075 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,6 +27,9 @@ ], "modmenu": [ "de.rettichlp.ucutils.integrations.ModMenuIntegration" + ], + "the-rettington-companion": [ + "de.rettichlp.ucutils.common.integrations.TheRettingtonCompanionIntegration" ] }, "mixins": [ @@ -39,6 +42,7 @@ "fabric-api": "*" }, "recommends": { - "modmenu": ">=18.0.0" + "modmenu": ">=18.0.0", + "the-rettington-companion": ">=2.0.0" } }