aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java77
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java2
5 files changed, 65 insertions, 28 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index 9d5f2b0f..ad7d4350 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -203,7 +203,6 @@ public class SkyblockerMod implements ClientModInitializer {
Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20);
Scheduler.INSTANCE.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 200);
- Scheduler.INSTANCE.scheduleCyclic(LividColor::update, 10);
Scheduler.INSTANCE.scheduleCyclic(BackpackPreview::tick, 50);
Scheduler.INSTANCE.scheduleCyclic(DwarvenHud::update, 40);
Scheduler.INSTANCE.scheduleCyclic(CrystalsHud::update, 40);
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
index 017e9186..20e3860c 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
@@ -210,6 +210,14 @@ public class DungeonsCategory {
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox.@Tooltip")))
+ .binding(defaults.dungeons.livid.enableLividColorBoundingBox,
+ () -> config.dungeons.livid.enableLividColorBoundingBox,
+ newValue -> config.dungeons.livid.enableLividColorBoundingBox = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText.@Tooltip")))
.binding(defaults.dungeons.livid.enableLividColorText,
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
index 1a0cad9d..6b46be32 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
@@ -112,7 +112,10 @@ public class DungeonsConfig {
public static class Livid {
@SerialEntry
- public boolean enableLividColorGlow = true;
+ public boolean enableLividColorGlow = false;
+
+ @SerialEntry
+ public boolean enableLividColorBoundingBox = true;
@SerialEntry
public boolean enableLividColorText = true;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
index 42810b60..1032baf4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
@@ -1,6 +1,5 @@
package de.hysky.skyblocker.skyblock.dungeon;
-import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.DungeonsConfig;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
@@ -8,11 +7,16 @@ import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.registry.Registries;
import net.minecraft.text.MutableText;
+import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
@@ -44,37 +48,39 @@ public class LividColor {
);
public static final Set<String> LIVID_NAMES = Set.copyOf(LIVID_TO_FORMATTING.keySet());
public static final DungeonsConfig.Livid CONFIG = SkyblockerConfigManager.get().dungeons.livid;
- private static int tenTicks = 0;
private static Formatting color;
+ private static Block lastColor = Blocks.AIR;
+ private static boolean inBoss = false;
+
+ private static boolean isInitialized = false;
+ private static final long OFFSET_DURATION = 2000;
+ private static long toggleTime = 0;
public static void init() {
- ClientReceiveMessageEvents.GAME.register((message, overlay) -> {
- DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
- if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) {
- tenTicks = 8;
- }
- });
+ ClientReceiveMessageEvents.GAME.register(LividColor::onChatMessage);
+ ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> LividColor.reset());
+ WorldRenderEvents.AFTER_ENTITIES.register(LividColor::update);
}
- public static void update() {
+ private static void update(WorldRenderContext context) {
+ DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
+ if (!(config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow || config.enableLividColorBoundingBox)) return;
+
MinecraftClient client = MinecraftClient.getInstance();
- if (tenTicks != 0) {
- DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
- if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && Utils.isInDungeons() && client.world != null) {
- if (tenTicks == 1) {
- onLividColorFound(client, Blocks.RED_WOOL);
- return;
- }
- Block color = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock();
- if (WOOL_TO_FORMATTING.containsKey(color) && !color.equals(Blocks.RED_WOOL)) {
- onLividColorFound(client, color);
- return;
- }
- tenTicks--;
- } else {
- tenTicks = 0;
- }
+
+ if (!(Utils.isInDungeons() && inBoss && client.player != null && client.world != null)) return;
+
+ Block currentColor = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock();
+ if (!(WOOL_TO_FORMATTING.containsKey(currentColor) && !currentColor.equals(lastColor))) return;
+
+ if (!isInitialized && client.player.hasStatusEffect(StatusEffects.BLINDNESS)) {
+ toggleTime = System.currentTimeMillis();
+ isInitialized = true;
+ } else if (isInitialized && System.currentTimeMillis() - toggleTime >= OFFSET_DURATION) {
+ onLividColorFound(client, currentColor);
+ lastColor = currentColor;
}
+
}
private static void onLividColorFound(MinecraftClient client, Block color) {
@@ -91,7 +97,6 @@ public class LividColor {
client.inGameHud.setDefaultTitleFade();
client.inGameHud.setTitle(message);
}
- tenTicks = 0;
}
public static boolean allowGlow() {
@@ -102,8 +107,28 @@ public class LividColor {
return SkyblockerConfigManager.get().dungeons.livid.enableLividColorGlow && color == LIVID_TO_FORMATTING.get(name);
}
+ public static boolean shouldDrawBoundingBox(String name) {
+ return SkyblockerConfigManager.get().dungeons.livid.enableLividColorBoundingBox && color == LIVID_TO_FORMATTING.get(name);
+ }
+
@SuppressWarnings("DataFlowIssue")
public static int getGlowColor(String name) {
return LIVID_TO_FORMATTING.containsKey(name) ? LIVID_TO_FORMATTING.get(name).getColorValue() : Formatting.WHITE.getColorValue();
}
+
+ private static void reset() {
+ inBoss = false;
+ lastColor = Blocks.AIR;
+ toggleTime = 0;
+ isInitialized = false;
+ }
+
+ private static void onChatMessage(Text text, boolean overlay) {
+ DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
+ if (Utils.isInDungeons() && (config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow || config.enableLividColorBoundingBox) && !inBoss) {
+ String unformatted = Formatting.strip(text.getString());
+
+ inBoss = unformatted.equals("[BOSS] Livid: Welcome, you've arrived right on time. I am Livid, the Master of Shadows.");
+ }
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
index 095c5d10..da6e0226 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.entity;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.dungeon.LividColor;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.FrustumUtils;
import de.hysky.skyblocker.utils.render.RenderHelper;
@@ -31,6 +32,7 @@ public class MobBoundingBoxes {
return switch (entity) {
case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes;
+ case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.shouldDrawBoundingBox(name);
case ArmorStandEntity _armorStand -> false;
// Regular Mobs