From 54b1127efb5f7bfb84ac1d249968ffb035aec72a Mon Sep 17 00:00:00 2001 From: Hazem <79111320+7azeemm@users.noreply.github.com> Date: Sat, 15 Feb 2025 03:15:11 +0100 Subject: Fixed Vampire Features not working (#1169) * Fixed Vampire features not working * improved checks --- .../skyblocker/config/configs/SlayersConfig.java | 2 +- .../de/hysky/skyblocker/events/SkyblockEvents.java | 13 +++++++++++ .../skyblocker/skyblock/slayers/SlayerManager.java | 26 +++++++++++----------- .../boss/demonlord/FirePillarAnnouncer.java | 4 ++-- .../slayers/boss/vampire/ManiaIndicator.java | 4 ++-- .../slayers/boss/vampire/StakeIndicator.java | 4 ++-- .../slayers/boss/vampire/TwinClawsIndicator.java | 4 ++-- .../slayers/boss/voidgloom/BeaconHighlighter.java | 4 +++- .../slayers/boss/voidgloom/LazerTimer.java | 1 - src/main/java/de/hysky/skyblocker/utils/Area.java | 1 + src/main/java/de/hysky/skyblocker/utils/Utils.java | 21 +++++++++-------- 11 files changed, 49 insertions(+), 35 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java index 6bf315a2..362b76cc 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java @@ -71,7 +71,7 @@ public class SlayersConfig { public boolean enableHolyIceIndicator = true; @SerialEntry - public int holyIceIndicatorTickDelay = 10; + public int holyIceIndicatorTickDelay = 5; @SerialEntry public int holyIceUpdateFrequency = 5; diff --git a/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java b/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java index 6add9fb6..4df22fe3 100644 --- a/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java +++ b/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.events; +import de.hysky.skyblocker.utils.Area; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.purse.PurseChangeCause; import net.fabricmc.api.EnvType; @@ -27,6 +28,12 @@ public final class SkyblockEvents { } }); + public static final Event AREA_CHANGE = EventFactory.createArrayBacked(SkyblockAreaChange.class, callbacks -> area -> { + for (SkyblockAreaChange callback : callbacks) { + callback.onSkyblockAreaChange(area); + } + }); + /** * Called when the player's Skyblock profile changes. * @@ -74,6 +81,12 @@ public final class SkyblockEvents { void onSkyblockLocationChange(Location location); } + @Environment(EnvType.CLIENT) + @FunctionalInterface + public interface SkyblockAreaChange { + void onSkyblockAreaChange(Area area); + } + @Environment(EnvType.CLIENT) @FunctionalInterface public interface ProfileChange { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/SlayerManager.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/SlayerManager.java index 7e1fbf73..de1290b7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/SlayerManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/SlayerManager.java @@ -7,6 +7,7 @@ import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.skyblock.slayers.boss.vampire.ManiaIndicator; import de.hysky.skyblocker.skyblock.slayers.boss.vampire.StakeIndicator; import de.hysky.skyblocker.skyblock.slayers.boss.vampire.TwinClawsIndicator; +import de.hysky.skyblocker.utils.Area; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.mayor.MayorUtils; @@ -56,20 +57,26 @@ public class SlayerManager { public static void init() { ClientReceiveMessageEvents.GAME.register(SlayerManager::onChatMessage); SkyblockEvents.LOCATION_CHANGE.register(SlayerManager::onLocationChange); + SkyblockEvents.AREA_CHANGE.register(SlayerManager::onAreaChange); Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfigManager.get().slayers.vampireSlayer.holyIceUpdateFrequency); Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfigManager.get().slayers.vampireSlayer.maniaUpdateFrequency); Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfigManager.get().slayers.vampireSlayer.steakStakeUpdateFrequency); } - private static void onLocationChange(Location location) { - if (isBossSpawned()) { - slayerQuest = null; - bossFight = null; + private static void onAreaChange(Area area) { + if (area.equals(Area.CHATEAU)) { + getSlayerBossInfo(false); } } + private static void onLocationChange(Location location) { + slayerQuest = null; + bossFight = null; + Scheduler.INSTANCE.schedule(() -> getSlayerBossInfo(false), 20 * 2); + } + private static void onChatMessage(Text text, boolean overlay) { - if (!Utils.isOnSkyblock() || overlay) return; + if (overlay || !Utils.isOnSkyblock()) return; String message = text.getString(); switch (message.replaceFirst("^\\s+", "")) { @@ -156,13 +163,6 @@ public class SlayerManager { } } - /** - * Gets The slayer info from scoreboard when player joins SkyBlock - */ - public static void getSlayerInfoOnJoin() { - Scheduler.INSTANCE.schedule(() -> getSlayerBossInfo(false), 20 * 2); //2 seconds - } - /** * Checks if the given armor stand is a slayer boss or miniboss and saves it to the corresponding field. *

This is the main mechanism for detecting slayer bosses and minibosses. All other features rely on information processed here. @@ -171,7 +171,7 @@ public class SlayerManager { * {@link #findClosestMobEntity(EntityType, ArmorStandEntity)} could be modified and run more than once to ensure the correct entity is found. */ public static void checkSlayerBoss(ArmorStandEntity armorStand) { - if (slayerQuest == null || (isBossSpawned() && bossFight.boss != null) || !armorStand.hasCustomName()) return; + if (slayerQuest == null || !armorStand.hasCustomName() || (isBossSpawned() && bossFight.boss != null)) return; if (armorStand.getName().getString().contains(CLIENT.getSession().getUsername())) { for (Entity otherArmorStands : getEntityArmorStands(armorStand, 1.5f)) { Matcher matcher = SLAYER_PATTERN.matcher(otherArmorStands.getName().getString()); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/demonlord/FirePillarAnnouncer.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/demonlord/FirePillarAnnouncer.java index 0c60a5a8..cd5ecb9a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/demonlord/FirePillarAnnouncer.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/demonlord/FirePillarAnnouncer.java @@ -3,13 +3,13 @@ package de.hysky.skyblocker.skyblock.slayers.boss.demonlord; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.SlayersConfig; import de.hysky.skyblocker.skyblock.slayers.SlayerManager; +import de.hysky.skyblocker.skyblock.slayers.SlayerType; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.title.Title; import de.hysky.skyblocker.utils.render.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; -import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -30,7 +30,7 @@ public class FirePillarAnnouncer { * @param entity The updated entity that is checked to be a fire pillar */ public static void checkFirePillar(Entity entity) { - if (Utils.isInCrimson() && SlayerManager.isBossSpawned() && entity instanceof ArmorStandEntity) { + if (Utils.isInCrimson() && SlayerManager.isInSlayerType(SlayerType.DEMONLORD)) { String entityName = entity.getName().getString(); Matcher matcher = FIRE_PILLAR_PATTERN.matcher(entityName); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/ManiaIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/ManiaIndicator.java index 3c343a4c..c4c38035 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/ManiaIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/ManiaIndicator.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.slayers.boss.vampire; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.slayers.SlayerManager; -import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.skyblock.slayers.SlayerType; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.title.Title; import de.hysky.skyblocker.utils.render.title.TitleContainer; @@ -17,7 +17,7 @@ public class ManiaIndicator { private static final Title title = new Title("skyblocker.rift.mania", Formatting.RED); public static void updateMania() { - if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerManager.isBossSpawned()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableManiaIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) { TitleContainer.removeTitle(title); return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/StakeIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/StakeIndicator.java index b9ad5925..0e9c8f98 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/StakeIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/StakeIndicator.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.slayers.boss.vampire; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.slayers.SlayerManager; -import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.skyblock.slayers.SlayerType; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.title.Title; import de.hysky.skyblocker.utils.render.title.TitleContainer; @@ -13,7 +13,7 @@ public class StakeIndicator { private static final Title title = new Title("skyblocker.rift.stakeNow", Formatting.RED); public static void updateStake() { - if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château") || !SlayerManager.isBossSpawned()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableSteakStakeIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) { TitleContainer.removeTitle(title); return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/TwinClawsIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/TwinClawsIndicator.java index cec983aa..e03e56d3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/TwinClawsIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/TwinClawsIndicator.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.slayers.boss.vampire; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.slayers.SlayerManager; -import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.skyblock.slayers.SlayerType; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.title.Title; import de.hysky.skyblocker.utils.render.title.TitleContainer; @@ -15,7 +15,7 @@ public class TwinClawsIndicator { private static boolean scheduled = false; public static void updateIce() { - if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerManager.isBossSpawned()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHolyIceIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) { TitleContainer.removeTitle(title); return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/BeaconHighlighter.java index 9dff42b7..553ed92a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/BeaconHighlighter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/BeaconHighlighter.java @@ -2,6 +2,8 @@ package de.hysky.skyblocker.skyblock.slayers.boss.voidgloom; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.slayers.SlayerManager; +import de.hysky.skyblocker.skyblock.slayers.SlayerType; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; @@ -46,7 +48,7 @@ public class BeaconHighlighter { * @param context An instance of WorldRenderContext for the RenderHelper to use */ private static void render(WorldRenderContext context) { - if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.highlightBeacons) { + if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.highlightBeacons && SlayerManager.isInSlayerType(SlayerType.VOIDGLOOM)) { for (BlockPos pos : beaconPositions) { RenderHelper.renderFilled(context, pos, RED_COLOR_COMPONENTS, 0.5f, true); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/LazerTimer.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/LazerTimer.java index a2e4eb37..f496fdce 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/LazerTimer.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/LazerTimer.java @@ -53,7 +53,6 @@ public class LazerTimer { .append(Text.literal(timeText).formatted(Formatting.GREEN).formatted(Formatting.BOLD)); RenderHelper.renderText(context, renderText, boss.getPos().add(0, 2, 0), true); - } } } diff --git a/src/main/java/de/hysky/skyblocker/utils/Area.java b/src/main/java/de/hysky/skyblocker/utils/Area.java index d15f417b..c5a62e1d 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Area.java +++ b/src/main/java/de/hysky/skyblocker/utils/Area.java @@ -7,6 +7,7 @@ import java.util.Arrays; */ public enum Area { CARNIVAL("Carnival"), + CHATEAU("Stillgore Château"), UNKNOWN("Unknown"); private final String name; diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 972abd3c..c6266cb7 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -361,22 +361,22 @@ public class Utils { TEXT_SCOREBOARD.addAll(textLines); STRING_SCOREBOARD.addAll(stringLines); - Utils.updatePurse(); - SlayerManager.getSlayerBossInfo(true); - updateArea(); + if (isOnSkyblock) { + Utils.updatePurse(); + SlayerManager.getSlayerBossInfo(true); + updateArea(); + } } catch (NullPointerException e) { //Do nothing } } - //TODO add event in the future private static void updateArea() { - if (isOnSkyblock) { - String areaName = getIslandArea().replaceAll("[⏣ф]", "").strip(); - area = Area.from(areaName); - } else { - area = Area.UNKNOWN; - } + String areaName = getIslandArea().replaceAll("[⏣ф]", "").strip(); + Area oldArea = area; + area = Area.from(areaName); + + if (!oldArea.equals(area)) SkyblockEvents.AREA_CHANGE.invoker().onSkyblockAreaChange(area); } public static void updatePurse() { @@ -441,7 +441,6 @@ public class Utils { if (Utils.gameType.equals("SKYBLOCK")) { isOnSkyblock = true; tickProfileId(); - SlayerManager.getSlayerInfoOnJoin(); if (!previousServerType.equals("SKYBLOCK")) SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } else if (previousServerType.equals("SKYBLOCK")) { -- cgit