diff options
author | Yasin <a.piri@hotmail.de> | 2024-06-30 14:25:40 +0200 |
---|---|---|
committer | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2024-07-26 15:09:00 +0800 |
commit | 28d82396b363ddd82e138614727dd8c71a28bbb4 (patch) | |
tree | f7edf4d51ce303c91f97130bc3517ef203a65909 /src/main/java | |
parent | cb6a665d28e704f4e6f1949750b82947d0c2e932 (diff) | |
download | Skyblocker-28d82396b363ddd82e138614727dd8c71a28bbb4.tar.gz Skyblocker-28d82396b363ddd82e138614727dd8c71a28bbb4.tar.bz2 Skyblocker-28d82396b363ddd82e138614727dd8c71a28bbb4.zip |
fixes #539 #538
The logic of the livid code has been changed.
The system checks whether the current color is the same as the last found livid color. The initial color is detected after the first blindness effect + 2 seconds.
I also added the bounding box option for livid to make it easier to recognize the correct enemy. I changed default mob glow option to false by and bounding box option to true.
Diffstat (limited to 'src/main/java')
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 |