diff options
Diffstat (limited to 'src/main/java/de/hysky')
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 |