aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java46
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java36
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java13
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java82
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json4
11 files changed, 224 insertions, 22 deletions
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<Title> 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
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 20c2c27f..4686c31a 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -240,6 +240,9 @@
"text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableSteakStakeIndicator": "Enable Steak Stake Indicator",
"text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency": "Steak Stake Indicator Update Frequency (Ticks)",
"text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.",
+ "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableManiaIndicator": "Enable Mania Block Indicator",
+ "text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency": "Mania Indicator Update Frequency (Ticks)",
+ "text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.",
"skyblocker.update.update_message": "§b[§6Skyblocker§b] §2There is a new version available!",
"skyblocker.update.update_link": " §2§nClick here§r",
@@ -255,6 +258,7 @@
"skyblocker.fishing.reelNow": "Reel in now!",
"skyblocker.rift.healNow": "Heal now!",
"skyblocker.rift.iceNow": "Ice now!",
+ "skyblocker.rift.mania": "Mania!",
"skyblocker.rift.stakeNow": "Stake now!",
"skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found",
"skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing"