diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils/title')
3 files changed, 151 insertions, 118 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index d1977470..ac06eb36 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -1,14 +1,31 @@ package me.xmrvizzy.skyblocker.utils.title; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + public class Title { - public String text = ""; - public boolean active = true; - public int color; - public float lastX = 0; - public float lastY = 0; + private MutableText text; + protected float lastX = 0; + protected float lastY = 0; + + public MutableText getText() { + return text; + } + + public void setText(MutableText text) { + this.text = text; + } + + public void setFormatting(Formatting formatting) { + this.text.formatted(formatting); + } + + public Title(String textKey, Formatting formatting) { + this(Text.translatable(textKey).formatted(formatting)); + } - public Title(String text, int color) { + public Title(MutableText text) { this.text = text; - this.color = color; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 14db8d6e..c4908a73 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.utils.title; +import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -12,55 +12,99 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; +import java.util.LinkedHashSet; +import java.util.Set; public class TitleContainer { - public static final MinecraftClient client = MinecraftClient.getInstance(); - public static List<Title> titles = new ArrayList<>(); + /** + * The set of titles which will be rendered. + * + * @see #containsTitle(Title) + * @see #addTitle(Title) + * @see #addTitle(Title, int) + * @see #removeTitle(Title) + */ + private static final Set<Title> titles = new LinkedHashSet<>(); public static void init() { - HudRenderCallback.EVENT.register(TitleContainer::draw); + HudRenderCallback.EVENT.register(TitleContainer::render); ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("titleContainer") .executes(context -> { - client.send(() -> client.setScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config")))); - return 1; + SkyblockerMod.getInstance().scheduler.queueOpenScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config"))); + return Command.SINGLE_SUCCESS; }))))); } - public static void addTitle(Title title) { - title.active = true; - title.lastX = 0; - title.lastY = SkyblockerConfig.get().general.titleContainer.y; - titles.add(title); + + /** + * Returns {@code true} if the title is currently shown. + * + * @param title the title to check + * @return whether the title in currently shown + */ + public static boolean containsTitle(Title title) { + return titles.contains(title); } - public static void addTitleWithDismiss(Title title, int ticks) { - addTitle(title); - SkyblockerMod.getInstance().scheduler.schedule(() -> { - title.active = false; - }, ticks); + + /** + * Adds a title to be shown + * + * @param title the title to be shown + * @return whether the title is already currently being shown + */ + public static boolean addTitle(Title title) { + if (titles.add(title)) { + title.lastX = 0; + title.lastY = SkyblockerConfig.get().general.titleContainer.y; + return true; + } + return false; } - public static void draw(DrawContext context, float tickDelta) { - draw(titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, context, tickDelta, false); + + /** + * Adds a title to be shown for a set number of ticks + * + * @param title the title to be shown + * @param ticks the number of ticks to show the title + * @return whether the title is already currently being shown + */ + public static boolean addTitle(Title title, int ticks) { + if (addTitle(title)) { + SkyblockerMod.getInstance().scheduler.schedule(() -> TitleContainer.removeTitle(title), ticks); + return true; + } + return false; + } + + /** + * Stops showing a title + * + * @param title the title to stop showing + */ + public static void removeTitle(Title title) { + titles.remove(title); } - public static void draw(List<Title> titlesToDraw, int xPos, int yPos, DrawContext context, float tickDelta, boolean example) { + + private static void render(DrawContext context, float tickDelta) { + render(context, titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, tickDelta); + } + + protected static void render(DrawContext context, Set<Title> titles, int xPos, int yPos, float tickDelta) { var client = MinecraftClient.getInstance(); TextRenderer textRenderer = client.textRenderer; - List<Title> toRemove = new ArrayList<>(); - float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; float x = 0; float y; float width = 0; - for (Title title : titlesToDraw) { - width += textRenderer.getWidth(title.text) * scale + 10; + for (Title title : titles) { + width += textRenderer.getWidth(title.getText()) * scale + 10; } - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE) { x = xPos - (width / 2); } @@ -69,51 +113,45 @@ public class TitleContainer { x = xPos; } } - if(alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + if (alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { x = xPos; } y = yPos; - for (Title title : titlesToDraw) { + for (Title title : titles) { context.getMatrices().push(); context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); - float xToUse = 0; - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + float xToUse; + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.text) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : x; } else { xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? - x - (textRenderer.getWidth(title.text) * scale) / 2 : + x - (textRenderer.getWidth(title.getText()) * scale) / 2 : alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.text) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : x; } title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, xToUse); title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { - x += textRenderer.getWidth(title.text) * scale + 10; + x += textRenderer.getWidth(title.getText()) * scale + 10; } if (alignment == SkyblockerConfig.Alignment.RIGHT) { - x -= textRenderer.getWidth(title.text) * scale + 10; + x -= textRenderer.getWidth(title.getText()) * scale + 10; } } else { y += textRenderer.fontHeight * scale + 10; } - context.drawText(textRenderer, title.text, 0, 0, title.color, true); + context.drawTextWithShadow(textRenderer, title.getText(), 0, 0, 0xFFFFFF); context.getMatrices().pop(); - if (!title.active && !example) { - toRemove.add(title); - } - } - if (!example) { - titlesToDraw.removeAll(toRemove); } } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index a035f862..b4f3093f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -2,29 +2,26 @@ package me.xmrvizzy.skyblocker.utils.title; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.input.KeyCodes; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.math.Box; -import org.joml.Vector4i; +import net.minecraft.util.Pair; +import org.joml.Vector2i; import org.lwjgl.glfw.GLFW; import java.awt.*; -import java.awt.event.KeyEvent; -import java.util.List; +import java.util.Set; public class TitleContainerConfigScreen extends Screen { - - private final Title example1 = new Title("Test1", Formatting.RED.getColorValue()); - private final Title example2 = new Title("Test23", Formatting.AQUA.getColorValue()); - private final Title example3 = new Title("Testing1234", Formatting.DARK_GREEN.getColorValue()); + private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); + private final Title example2 = new Title(Text.literal("Test23").formatted(Formatting.AQUA)); + private final Title example3 = new Title(Text.literal("Testing1234").formatted(Formatting.DARK_GREEN)); private int hudX = SkyblockerConfig.get().general.titleContainer.x; private int hudY = SkyblockerConfig.get().general.titleContainer.y; + protected TitleContainerConfigScreen(Text title) { super(title); } @@ -33,25 +30,18 @@ public class TitleContainerConfigScreen extends Screen { public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); - TitleContainer.draw(List.of(example1, example2, example3), hudX, hudY, context, delta, true); - context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment: " + alignment.toString()); - int width2 = client.textRenderer.getWidth("Press R to change Direction: " + direction.toString()); - context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB(), true); - context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB(), true); - - int x1; - int x2; - int y1; - int y2; - - var vec = getSelectionBounding(); - x1 = vec.x; - x2 = vec.y; - y1 = vec.z; - y2 = vec.w; + TitleContainer.render(context, Set.of(example1, example2, example3), hudX, hudY, delta); + SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; + context.drawCenteredTextWithShadow(client.textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(client.textRenderer, "Press R to change Direction: " + direction, width / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, client.textRenderer.fontHeight * 4 + 10, Color.GRAY.getRGB()); + + Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); + int x1 = boundingBox.getLeft().x; + int y1 = boundingBox.getLeft().y; + int x2 = boundingBox.getRight().x; + int y2 = boundingBox.getRight().y; context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); @@ -59,46 +49,39 @@ public class TitleContainerConfigScreen extends Screen { context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); } - public Vector4i getSelectionBounding() - { - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + public Pair<Vector2i, Vector2i> getSelectionBoundingBox() { + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; int midWidth = getSelectionWidth() / 2; - int midHeight = getSelectionHeight() / 2; int x1 = 0; int x2 = 0; - int y1 = 0; - int y2 = 0; - y1 = hudY; - y2 = hudY + midHeight * 2; + int y1 = hudY; + int y2 = hudY + getSelectionHeight(); switch (alignment) { - case RIGHT: + case RIGHT -> { x1 = hudX - midWidth * 2; x2 = hudX; - break; - case MIDDLE: + } + case MIDDLE -> { x1 = hudX - midWidth; x2 = hudX + midWidth; - break; - case LEFT: + } + case LEFT -> { x1 = hudX; x2 = hudX + midWidth * 2; - break; + } } - return new Vector4i(x1, x2, y1, y2); + return new Pair<>(new Vector2i(x1, y1), new Vector2i(x2, y2)); } - public int getSelectionHeight() - { + public int getSelectionHeight() { int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? textRenderer.fontHeight * scale : (textRenderer.fontHeight + 10) * 3 * scale; } - public int getSelectionWidth() - { + public int getSelectionWidth() { int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : @@ -111,16 +94,11 @@ public class TitleContainerConfigScreen extends Screen { int midHeight = getSelectionHeight() / 2; var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int x1; - int x2; - int y1; - int y2; - - var vec = getSelectionBounding(); - x1 = vec.x; - x2 = vec.y; - y1 = vec.z; - y2 = vec.w; + Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); + int x1 = boundingBox.getLeft().x; + int y1 = boundingBox.getLeft().y; + int x2 = boundingBox.getRight().x; + int y2 = boundingBox.getRight().y; if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? @@ -135,31 +113,31 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 1) { hudX = this.width / 2; - hudY = (int) (this.height * 0.6F); + hudY = this.height / 2; } return super.mouseClicked(mouseX, mouseY, button); } @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if(keyCode == GLFW.GLFW_KEY_Q) { - var current = SkyblockerConfig.get().general.titleContainer.alignment; + if (keyCode == GLFW.GLFW_KEY_Q) { + SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment; SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { case LEFT -> SkyblockerConfig.Alignment.MIDDLE; case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; case RIGHT -> SkyblockerConfig.Alignment.LEFT; }; } - if(keyCode == GLFW.GLFW_KEY_E) { - var current = SkyblockerConfig.get().general.titleContainer.alignment; + if (keyCode == GLFW.GLFW_KEY_E) { + SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment; SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { case LEFT -> SkyblockerConfig.Alignment.RIGHT; case MIDDLE -> SkyblockerConfig.Alignment.LEFT; case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; }; } - if(keyCode == GLFW.GLFW_KEY_R) { - var current = SkyblockerConfig.get().general.titleContainer.direction; + if (keyCode == GLFW.GLFW_KEY_R) { + SkyblockerConfig.Direction current = SkyblockerConfig.get().general.titleContainer.direction; SkyblockerConfig.get().general.titleContainer.direction = switch (current) { case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; |