From 64e1de1f4f857d4c126b7610b008120a61f118d2 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:19:40 -0400 Subject: New Slayer Stuff Implement TitleContainer for stacking titles. Implement Mania Indicator to show the player when they are standing on green terracotta during mania. --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 4 ++ .../skyblock/rift/HealingMelonIndicator.java | 26 +++++-- .../skyblocker/skyblock/rift/ManiaIndicator.java | 46 ++++++++++++ .../skyblocker/skyblock/rift/StakeIndicator.java | 25 +++++-- .../xmrvizzy/skyblocker/skyblock/rift/TheRift.java | 1 + .../skyblock/rift/TwinClawsIndicator.java | 36 +++++++--- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 7 ++ .../me/xmrvizzy/skyblocker/utils/title/Title.java | 13 ++++ .../skyblocker/utils/title/TitleContainer.java | 82 ++++++++++++++++++++++ 10 files changed, 220 insertions(+), 22 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java (limited to 'src/main/java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index a629f851..4688d90f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -20,6 +20,7 @@ import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.loader.api.FabricLoader; @@ -84,6 +85,7 @@ public class SkyblockerMod implements ClientModInitializer { TabHud.init(); DungeonMap.init(); TheRift.init(); + TitleContainer.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 26e59b40..ab4149fc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -399,6 +399,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.BoundedDiscrete(min = 1, max = 10) @ConfigEntry.Gui.Tooltip() public int steakStakeUpdateFrequency = 5; + public boolean enableManiaIndicator = true; + @ConfigEntry.BoundedDiscrete(min = 1, max = 10) + @ConfigEntry.Gui.Tooltip() + public int maniaUpdateFrequency = 5; } public static class Messages { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index f98c17e7..050c300f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -3,19 +3,33 @@ package me.xmrvizzy.skyblocker.skyblock.rift; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class HealingMelonIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; public static void updateHealth(MinecraftClient client) { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; + if(title == null) + new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { + title.active = false; + return; + } + title.active = true; ClientPlayerEntity player = client.player; - if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F && System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(15, 5, "skyblocker.rift.healNow", Formatting.DARK_RED); + if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { + title.active = true; + if(!TitleContainer.titles.contains(title)) + RenderHelper.displayInTitleContainerAndPlaySound(title); + } + else { + title.active = false; } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java new file mode 100644 index 00000000..7d5a1cb4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java @@ -0,0 +1,46 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.SlayerUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.util.Formatting; + +public class ManiaIndicator { + private static Title title = null; + public static void updateMania() { + if(title == null) + title = new Title("b", Formatting.RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } + + Entity slayerEntity = SlayerUtils.getSlayerEntity(); + if (slayerEntity == null) return; + + boolean anyMania = false; + for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { + if (entity.getDisplayName().toString().contains("MANIA")) { + anyMania = true; + title.active = true; + var pos = MinecraftClient.getInstance().player.getBlockPos().down(); + var isGreen = MinecraftClient.getInstance().world.getBlockState(pos).getBlock() == Blocks.GREEN_TERRACOTTA; + title.color = isGreen ? Formatting.GREEN.getColorValue() : Formatting.RED.getColorValue(); + if(!TitleContainer.titles.contains(title)) { + title.text = I18n.translate("skyblocker.rift.mania"); + RenderHelper.displayInTitleContainerAndPlaySound(title); + } + } + } + if(!anyMania) + title.active = false; + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java index d1132be8..01b6b738 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -4,18 +4,31 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class StakeIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; public static void updateStake() { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) return; + if (title == null) + title = new Title("b", Formatting.RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } Entity slayerEntity = SlayerUtils.getSlayerEntity(); - if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉") && System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(25, 5, "skyblocker.rift.stakeNow", Formatting.RED); + if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉")) { + title.active = true; + title.text = I18n.translate("skyblocker.rift.stakeNow"); + if(!TitleContainer.titles.contains(title)) + RenderHelper.displayInTitleContainerAndPlaySound(title); } + else + title.active = false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java index 91b727e2..5ca89dcf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java @@ -15,6 +15,7 @@ public class TheRift { WorldRenderEvents.AFTER_TRANSLUCENT.register(EffigyWaypoints::render); SkyblockerMod.getInstance().scheduler.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency); SkyblockerMod.getInstance().scheduler.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency); + SkyblockerMod.getInstance().scheduler.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfig.get().slayer.vampireSlayer.maniaUpdateFrequency); SkyblockerMod.getInstance().scheduler.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java index 7e1d6605..a062f7b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -5,28 +5,44 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class TwinClawsIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; + public static boolean scheduling = false; public static void updateIce() { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) return; + if(title == null) + title = new Title("b", Formatting.AQUA.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } Entity slayerEntity = SlayerUtils.getSlayerEntity(); if (slayerEntity == null) return; + boolean anyClaws = false; for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { if (entity.getDisplayName().toString().contains("TWINCLAWS")) { - SkyblockerMod.getInstance().scheduler.schedule(() -> { - if (System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(40, 5, "skyblocker.rift.iceNow", Formatting.AQUA); - } - }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + anyClaws = true; + title.active = true; + if(!TitleContainer.titles.contains(title) && !scheduling) { + scheduling = true; + SkyblockerMod.getInstance().scheduler.schedule(() -> { + title.text = I18n.translate("skyblocker.rift.iceNow"); + RenderHelper.displayInTitleContainerAndPlaySound(title); + scheduling = false; + }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + } } } - + if(!anyClaws) + title.active = false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index a7e1fc99..e75538f6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.utils; import me.x150.renderer.render.Renderer3d; import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; @@ -51,6 +53,11 @@ public class RenderHelper { playNotificationSound(); } + public static void displayInTitleContainerAndPlaySound(Title title) { + TitleContainer.addTitle(title); + 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 new file mode 100644 index 00000000..44a636d7 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -0,0 +1,13 @@ +package me.xmrvizzy.skyblocker.utils.title; + +public class Title { + public String text = ""; + public boolean active = true; + public int color; + public float lastX = 0; + + public Title(String text, int color) { + 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 new file mode 100644 index 00000000..c8747596 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -0,0 +1,82 @@ +package me.xmrvizzy.skyblocker.utils.title; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.FairySouls; +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.entity.decoration.DisplayEntity; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class TitleContainer { + public static List titles = new ArrayList<>(); + private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + public static void init() { + HudRenderCallback.EVENT.register(TitleContainer::draw); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) + .then(literal("title") + .then(literal("ice").executes(context -> { + titles.add(new Title(Text.translatable("skyblocker.rift.iceNow").getString(), Formatting.AQUA.getColorValue())); + return 1; + })) + .then(literal("stake").executes(context -> { + titles.add(new Title("Stake", Formatting.RED.getColorValue())); + return 1; + })) + .then(literal("heal").executes(context -> { + titles.add(new Title("Heal", Formatting.DARK_RED.getColorValue())); + return 1; + })) + ))); + } + public static void addTitle(Title title) + { + title.active = true; + title.lastX = 0; + titles.add(title); + } + public static void draw(DrawContext context, float tickDelta) { + var client = MinecraftClient.getInstance(); + TextRenderer textRenderer = client.textRenderer; + + List<Title> toRemove = new ArrayList<>(); + + float x; + float width = 0; + context.getMatrices().push(); + context.getMatrices().scale(3.0F, 3.0F, 3.0F); + for (Title title : titles) { + width += textRenderer.getWidth(title.text) * 3F + 10; + } + context.getMatrices().pop(); + + x = (client.getWindow().getScaledWidth() / 2) - width / 2; + + for (Title title : titles) { + context.getMatrices().push(); + context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.6F, 0); + context.getMatrices().scale(3.0F, 3.0F, 3.0F); + + title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); + x += textRenderer.getWidth(title.text) * 3F + 10; + context.drawText(textRenderer, title.text, 0, 0, title.color, true + ); + context.getMatrices().pop(); + if (!title.active) { + toRemove.add(title); + } + } + titles.removeAll(toRemove); + } +} \ No newline at end of file -- cgit From 77fe811d2347b7fb21da028ffe32205459804e3d Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:21:03 -0400 Subject: Change Position --- src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java') 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 c8747596..472c39fd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -65,7 +65,7 @@ public class TitleContainer { for (Title title : titles) { context.getMatrices().push(); - context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.6F, 0); + context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0); context.getMatrices().scale(3.0F, 3.0F, 3.0F); title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); -- cgit From 83b5d6152bc73b8d550a45a46792c2ee2523d4fa Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:31:44 -0400 Subject: oopsie daisy --- .../me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index 050c300f..63cd2b7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -15,7 +15,7 @@ public class HealingMelonIndicator { private static Title title = null; public static void updateHealth(MinecraftClient client) { if(title == null) - new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); + title = new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { title.active = false; -- cgit From f5eca35862beee810c4761a51f274bb89e726e55 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:37:27 -0400 Subject: remove debug stuff --- .../skyblocker/skyblock/rift/HealingMelonIndicator.java | 1 - .../skyblocker/skyblock/rift/StakeIndicator.java | 1 - .../skyblocker/skyblock/rift/TwinClawsIndicator.java | 1 - .../xmrvizzy/skyblocker/utils/title/TitleContainer.java | 17 ----------------- 4 files changed, 20 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index 63cd2b7e..d1657d67 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -8,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class HealingMelonIndicator { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java index 01b6b738..d946df6d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -8,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class StakeIndicator { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java index a062f7b7..706aa95e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -9,7 +9,6 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class TwinClawsIndicator { 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 472c39fd..8eaf45a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.utils.title; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.skyblock.FairySouls; 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.entity.decoration.DisplayEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; @@ -24,21 +22,6 @@ public class TitleContainer { private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); public static void init() { HudRenderCallback.EVENT.register(TitleContainer::draw); - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) - .then(literal("title") - .then(literal("ice").executes(context -> { - titles.add(new Title(Text.translatable("skyblocker.rift.iceNow").getString(), Formatting.AQUA.getColorValue())); - return 1; - })) - .then(literal("stake").executes(context -> { - titles.add(new Title("Stake", Formatting.RED.getColorValue())); - return 1; - })) - .then(literal("heal").executes(context -> { - titles.add(new Title("Heal", Formatting.DARK_RED.getColorValue())); - return 1; - })) - ))); } public static void addTitle(Title title) { -- cgit From e393d6f9fa44b0314734ce54927ebf3bf0551d47 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Wed, 5 Jul 2023 17:07:44 -0400 Subject: Make Changes + Add scaling --- .../skyblocker/config/SkyblockerConfig.java | 10 ++++++++ .../skyblocker/utils/title/TitleContainer.java | 28 +++++++--------------- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index ab4149fc..d461dbfe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -175,6 +175,11 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Hitbox hitbox = new Hitbox(); + @ConfigEntry.Gui.Tooltip() + @ConfigEntry.Category("titleContainer") + @ConfigEntry.Gui.CollapsibleObject() + public TitleContainer titleContainer = new TitleContainer(); + @ConfigEntry.Gui.Excluded public List<Integer> lockedSlots = new ArrayList<>(); } @@ -247,6 +252,11 @@ public class SkyblockerConfig implements ConfigData { public boolean oldLeverHitbox = false; } + public static class TitleContainer { + @ConfigEntry.BoundedDiscrete(min = 30, max = 140) + public float titleContainerScale = 100; + } + public static class RichPresence { public boolean enableRichPresence = false; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) 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 8eaf45a3..9728e1eb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,30 +1,22 @@ package me.xmrvizzy.skyblocker.utils.title; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; 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.Formatting; import net.minecraft.util.math.MathHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - public class TitleContainer { public static List<Title> titles = new ArrayList<>(); - private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + public static void init() { HudRenderCallback.EVENT.register(TitleContainer::draw); } - public static void addTitle(Title title) - { + public static void addTitle(Title title) { title.active = true; title.lastX = 0; titles.add(title); @@ -35,26 +27,24 @@ public class TitleContainer { List<Title> toRemove = new ArrayList<>(); + float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); + float x; float width = 0; - context.getMatrices().push(); - context.getMatrices().scale(3.0F, 3.0F, 3.0F); for (Title title : titles) { - width += textRenderer.getWidth(title.text) * 3F + 10; + width += textRenderer.getWidth(title.text) * scale + 10; } - context.getMatrices().pop(); x = (client.getWindow().getScaledWidth() / 2) - width / 2; for (Title title : titles) { context.getMatrices().push(); context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0); - context.getMatrices().scale(3.0F, 3.0F, 3.0F); + context.getMatrices().scale(scale, scale, scale); title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); - x += textRenderer.getWidth(title.text) * 3F + 10; - context.drawText(textRenderer, title.text, 0, 0, title.color, true - ); + x += textRenderer.getWidth(title.text) * scale + 10; + context.drawText(textRenderer, title.text, 0, 0, title.color, true); context.getMatrices().pop(); if (!title.active) { toRemove.add(title); -- cgit From a4917d92ab77bc980b68017721adac2091a51f3e Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:00:58 -0400 Subject: 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. --- .../skyblocker/config/SkyblockerConfig.java | 34 ++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 5 ++ .../me/xmrvizzy/skyblocker/utils/title/Title.java | 1 + .../skyblocker/utils/title/TitleContainer.java | 81 ++++++++++++++++-- .../utils/title/TitleContainerConfigScreen.java | 95 ++++++++++++++++++++++ 5 files changed, 207 insertions(+), 9 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java (limited to 'src/main/java') 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(); + } +} -- cgit From 558bb3c1b3a52cc4a8ec3610fa88b9552a063433 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:31:19 -0400 Subject: Proper Movement Menu --- .../skyblocker/utils/title/TitleContainer.java | 51 ++++---- .../utils/title/TitleContainerConfigScreen.java | 141 +++++++++++++++++++-- 2 files changed, 159 insertions(+), 33 deletions(-) (limited to 'src/main/java') 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 e888fbda..14db8d6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -60,25 +60,18 @@ public class TitleContainer { 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); - } - } + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + x = xPos - (width / 2); } } else { - if (alignment == SkyblockerConfig.Alignment.LEFT) { + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { x = xPos; - } else { - if (titlesToDraw.size() > 0) { - x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) * scale); - } } } + if(alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + x = xPos; + } y = yPos; for (Title title : titlesToDraw) { @@ -86,22 +79,30 @@ public class TitleContainer { context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); - title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); + float xToUse = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? + x - (textRenderer.getWidth(title.text) * scale) : + x; + } else { + xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? + x - (textRenderer.getWidth(title.text) * scale) / 2 : + alignment == SkyblockerConfig.Alignment.RIGHT ? + x - (textRenderer.getWidth(title.text) * 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) { - 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; + if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { + 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)); + + if (alignment == SkyblockerConfig.Alignment.RIGHT) { + x -= textRenderer.getWidth(title.text) * scale + 10; } + } else { y += textRenderer.fontHeight * scale + 10; } 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 5a693ddb..41734dcb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -20,7 +20,7 @@ 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 final Title example3 = new Title("Testing1234", Formatting.DARK_GREEN.getColorValue()); private int hudX = SkyblockerConfig.get().general.titleContainer.x; private int hudY = SkyblockerConfig.get().general.titleContainer.y; protected TitleContainerConfigScreen(Text title) { @@ -33,17 +33,142 @@ public class TitleContainerConfigScreen extends Screen { 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); + 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.GRAY.getRGB(), true); + context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + + int midWidth = getSelectionWidth() / 2; + int midHeight = getSelectionHeight() / 2; + int x1 = 0; + int x2 = 0; + int y1 = 0; + int y2 = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } else { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY; + y2 = hudY + midHeight; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY; + y2 = hudY + midHeight; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY; + y2 = hudY + midHeight; + break; + } + } + context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); + context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); + context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); + context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); + } + + 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() + { + 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 : + textRenderer.getWidth("Testing1234") * scale; } @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); + int midWidth = getSelectionWidth() / 2; + int midHeight = getSelectionHeight() / 2; + var direction = SkyblockerConfig.get().general.titleContainer.direction; + var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + int x1 = 0; + int x2 = 0; + int y1 = 0; + int y2 = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } else { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { + hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? + (int) mouseX + midWidth : + (int) mouseX - (midWidth / 2); + hudY = (int) mouseY - (midHeight); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } -- cgit From b6cc175f8782ee94f5aeaef877466f9c81564cf6 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:48:32 -0400 Subject: Remove Duplicate Code --- .../utils/title/TitleContainerConfigScreen.java | 89 +++++++++------------- 1 file changed, 37 insertions(+), 52 deletions(-) (limited to 'src/main/java') 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 41734dcb..cf59ff66 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -10,6 +10,8 @@ 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 org.lwjgl.glfw.GLFW; import java.awt.*; @@ -40,6 +42,28 @@ public class TitleContainerConfigScreen extends Screen { context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.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; + + context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); + context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); + context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); + 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; + int midWidth = getSelectionWidth() / 2; int midHeight = getSelectionHeight() / 2; int x1 = 0; @@ -89,10 +113,7 @@ public class TitleContainerConfigScreen extends Screen { break; } } - context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); - context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); - context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); - context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); + return new Vector4i(x1, x2, y1, y2); } public int getSelectionHeight() @@ -115,55 +136,19 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { int midWidth = getSelectionWidth() / 2; int midHeight = getSelectionHeight() / 2; - var direction = SkyblockerConfig.get().general.titleContainer.direction; var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int x1 = 0; - int x2 = 0; - int y1 = 0; - int y2 = 0; - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case LEFT: - x1 = hudX; - x2 = hudX + midWidth * 2; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - } - } else { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; -