aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorFuturemappermydud <54294576+Futuremappermydud@users.noreply.github.com>2023-07-07 18:00:58 -0400
committerFuturemappermydud <54294576+Futuremappermydud@users.noreply.github.com>2023-07-07 18:00:58 -0400
commita4917d92ab77bc980b68017721adac2091a51f3e (patch)
treee417198494cdc022c4c3af4b83d1a84fee726673 /src/main/java
parente393d6f9fa44b0314734ce54927ebf3bf0551d47 (diff)
downloadSkyblocker-a4917d92ab77bc980b68017721adac2091a51f3e.tar.gz
Skyblocker-a4917d92ab77bc980b68017721adac2091a51f3e.tar.bz2
Skyblocker-a4917d92ab77bc980b68017721adac2091a51f3e.zip
WIP Title Container movement + Duration methods
Added a WIP configuration screen under /Skyblocker hud titleContainer that allows you to move, change alignment, and reorient the titles inside. Added methods(TitleContainer.addTitleWithDismiss, and RenderHelper.displayInTitleContainerWDismissAndPlaySound) that will display the given title and after a set amount of ticks will disable that title.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java34
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java81
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java95
5 files changed, 207 insertions, 9 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index d461dbfe..1aeee35e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -255,6 +255,40 @@ public class SkyblockerConfig implements ConfigData {
public static class TitleContainer {
@ConfigEntry.BoundedDiscrete(min = 30, max = 140)
public float titleContainerScale = 100;
+ public int x = 540;
+ public int y = 10;
+ @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
+ public Direction direction = Direction.HORIZONTAL;
+ @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
+ public Alignment alignment = Alignment.MIDDLE;
+ }
+
+ public enum Direction {
+ HORIZONTAL,
+ VERTICAL;
+
+ @Override
+ public String toString() {
+ return switch (this) {
+ case HORIZONTAL -> "Horizontal";
+ case VERTICAL -> "Vertical";
+ };
+ }
+ }
+
+ public enum Alignment {
+ LEFT,
+ RIGHT,
+ MIDDLE;
+
+ @Override
+ public String toString() {
+ return switch (this) {
+ case LEFT -> "Left";
+ case RIGHT -> "Right";
+ case MIDDLE -> "Middle";
+ };
+ }
}
public static class RichPresence {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java
index e75538f6..4a151129 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java
@@ -58,6 +58,11 @@ public class RenderHelper {
playNotificationSound();
}
+ public static void displayInTitleContainerWDismissAndPlaySound(Title title, int ticks) {
+ TitleContainer.addTitleWithDismiss(title, ticks);
+ playNotificationSound();
+ }
+
private static void playNotificationSound() {
if (MinecraftClient.getInstance().player != null) {
MinecraftClient.getInstance().player.playSound(SoundEvent.of(new Identifier("entity.experience_orb.pickup")), 100f, 0.1f);
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 44a636d7..d1977470 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java
@@ -5,6 +5,7 @@ public class Title {
public boolean active = true;
public int color;
public float lastX = 0;
+ public float lastY = 0;
public Title(String text, int color) {
this.text = text;
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 9728e1eb..e888fbda 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java
@@ -1,27 +1,50 @@
package me.xmrvizzy.skyblocker.utils.title;
+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;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
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;
public class TitleContainer {
+ public static final MinecraftClient client = MinecraftClient.getInstance();
public static List<Title> titles = new ArrayList<>();
public static void init() {
HudRenderCallback.EVENT.register(TitleContainer::draw);
+ 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;
+ })))));
}
public static void addTitle(Title title) {
title.active = true;
title.lastX = 0;
+ title.lastY = SkyblockerConfig.get().general.titleContainer.y;
titles.add(title);
}
+ public static void addTitleWithDismiss(Title title, int ticks) {
+ addTitle(title);
+ SkyblockerMod.getInstance().scheduler.schedule(() -> {
+ title.active = false;
+ }, ticks);
+ }
public static void draw(DrawContext context, float tickDelta) {
+ draw(titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, context, tickDelta, false);
+ }
+ public static void draw(List<Title> titlesToDraw, int xPos, int yPos, DrawContext context, float tickDelta, boolean example) {
var client = MinecraftClient.getInstance();
TextRenderer textRenderer = client.textRenderer;
@@ -29,27 +52,67 @@ public class TitleContainer {
float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F);
- float x;
+ var direction = SkyblockerConfig.get().general.titleContainer.direction;
+ var alignment = SkyblockerConfig.get().general.titleContainer.alignment;
+ float x = 0;
+ float y;
float width = 0;
- for (Title title : titles) {
+ for (Title title : titlesToDraw) {
width += textRenderer.getWidth(title.text) * scale + 10;
}
+ if (alignment == SkyblockerConfig.Alignment.MIDDLE) {
+ if(direction == SkyblockerConfig.Direction.HORIZONTAL) {
+ x = xPos - width / 2;
+ } else {
+ if (titlesToDraw.size() > 0) {
+ if (titlesToDraw.size() > 0) {
+ x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) / 2 * scale);
+ }
+ }
+ }
+ } else {
+ if (alignment == SkyblockerConfig.Alignment.LEFT) {
+ x = xPos;
+ } else {
+ if (titlesToDraw.size() > 0) {
+ x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) * scale);
+ }
+ }
+ }
+ y = yPos;
- x = (client.getWindow().getScaledWidth() / 2) - width / 2;
-
- for (Title title : titles) {
+ for (Title title : titlesToDraw) {
context.getMatrices().push();
- context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0);
+ context.getMatrices().translate(title.lastX, title.lastY, 200);
context.getMatrices().scale(scale, scale, scale);
title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x);
- x += textRenderer.getWidth(title.text) * scale + 10;
+ title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y);
+
+ if(direction == SkyblockerConfig.Direction.HORIZONTAL) {
+ switch (alignment) {
+ case LEFT -> x += textRenderer.getWidth(title.text) * scale + 10;
+ case RIGHT -> x -= (textRenderer.getWidth(title.text) * scale + 10);
+ case MIDDLE -> x += textRenderer.getWidth(title.text) * scale + 10;
+ }
+ y = yPos;
+ } else {
+ switch (alignment) {
+ case LEFT -> x = xPos;
+ case RIGHT -> x = xPos - (textRenderer.getWidth(title.text) * scale);
+ case MIDDLE -> x = xPos - ((textRenderer.getWidth(title.text) * scale));
+ }
+ y += textRenderer.fontHeight * scale + 10;
+ }
+
context.drawText(textRenderer, title.text, 0, 0, title.color, true);
context.getMatrices().pop();
- if (!title.active) {
+ if (!title.active && !example) {
toRemove.add(title);
}
}
- titles.removeAll(toRemove);
+ 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
new file mode 100644
index 00000000..5a693ddb
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java
@@ -0,0 +1,95 @@
+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 org.lwjgl.glfw.GLFW;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+import java.util.List;
+
+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("Testing123456", Formatting.DARK_GREEN.getColorValue());
+ private int hudX = SkyblockerConfig.get().general.titleContainer.x;
+ private int hudY = SkyblockerConfig.get().general.titleContainer.y;
+ protected TitleContainerConfigScreen(Text title) {
+ super(title);
+ }
+
+ @Override
+ 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());
+ int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment");
+ int width2 = client.textRenderer.getWidth("Press R to change Direction");
+ context.drawText(client.textRenderer, "Press Q/E to change Alignment", (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true);
+ context.drawText(client.textRenderer, "Press R to change Direction", (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true);
+ }
+
+ @Override
+ public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
+ if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX - 100, hudY - 20, hudX + 110, hudY + 30) && button == 0) {
+ hudX = (int) Math.max(Math.min(mouseX, this.width - 100), 110);
+ hudY = (int) Math.max(Math.min(mouseY, this.height - 30), 0);
+ }
+ return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
+ }
+
+ @Override
+ public boolean mouseClicked(double mouseX, double mouseY, int button) {
+ if (button == 1) {
+ hudX = this.width / 2;
+ hudY = (int) (this.height * 0.6F);
+ }
+ 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;
+ 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;
+ 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;
+ SkyblockerConfig.get().general.titleContainer.direction = switch (current) {
+ case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL;
+ case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL;
+ };
+ }
+ return super.keyPressed(keyCode, scanCode, modifiers);
+ }
+
+ @Override
+ public void close() {
+ SkyblockerConfig.get().general.titleContainer.x = hudX;
+ SkyblockerConfig.get().general.titleContainer.y = hudY;
+ AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
+ super.close();
+ }
+}