Skip to content

Commit

Permalink
Fixed Vampire features not working
Browse files Browse the repository at this point in the history
  • Loading branch information
7azeemm committed Feb 9, 2025
1 parent bab8fe0 commit 5cfd8ee
Show file tree
Hide file tree
Showing 11 changed files with 45 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public static class VampireSlayer {
public boolean enableHolyIceIndicator = true;

@SerialEntry
public int holyIceIndicatorTickDelay = 10;
public int holyIceIndicatorTickDelay = 5;

@SerialEntry
public int holyIceUpdateFrequency = 5;
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -27,6 +28,12 @@ public final class SkyblockEvents {
}
});

public static final Event<SkyblockAreaChange> AREA_CHANGE = EventFactory.createArrayBacked(SkyblockAreaChange.class, callbacks -> area -> {
for (SkyblockAreaChange callback : callbacks) {
callback.onSkyblockAreaChange(area);
}
});

/**
* Called when the player's Skyblock profile changes.
*
Expand Down Expand Up @@ -74,6 +81,12 @@ public interface SkyblockLocationChange {
void onSkyblockLocationChange(Location location);
}

@Environment(EnvType.CLIENT)
@FunctionalInterface
public interface SkyblockAreaChange {
void onSkyblockAreaChange(Area area);
}

@Environment(EnvType.CLIENT)
@FunctionalInterface
public interface ProfileChange {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
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;
Expand Down Expand Up @@ -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+", "")) {
Expand Down Expand Up @@ -156,13 +163,6 @@ public static void getSlayerBossInfo(boolean checkStatus) {
}
}

/**
* 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.
* <p>This is the main mechanism for detecting slayer bosses and minibosses. All other features rely on information processed here.
Expand All @@ -171,7 +171,7 @@ public static void getSlayerInfoOnJoin() {
* {@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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
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;

Expand All @@ -30,7 +29,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.isBossSpawned()) {

String entityName = entity.getName().getString();
Matcher matcher = FIRE_PILLAR_PATTERN.matcher(entityName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
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;
Expand All @@ -17,7 +16,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.isBossSpawned()) {
TitleContainer.removeTitle(title);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
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;
Expand All @@ -13,7 +12,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.isBossSpawned()) {
TitleContainer.removeTitle(title);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
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;
Expand All @@ -15,7 +14,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.isBossSpawned()) {
TitleContainer.removeTitle(title);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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;
Expand Down Expand Up @@ -46,7 +48,7 @@ private static void onMessage(Text text, boolean overlay) {
* @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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ private static void render(WorldRenderContext context) {
.append(Text.literal(timeText).formatted(Formatting.GREEN).formatted(Formatting.BOLD));

RenderHelper.renderText(context, renderText, boss.getPos().add(0, 2, 0), true);

}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/de/hysky/skyblocker/utils/Area.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
public enum Area {
CARNIVAL("Carnival"),
CHATEAU("Stillgore Château"),
UNKNOWN("Unknown");

private final String name;
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/de/hysky/skyblocker/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -361,22 +361,22 @@ private static void updateScoreboard(MinecraftClient client) {

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() {
Expand Down Expand Up @@ -441,7 +441,6 @@ case LocationUpdateS2CPacket(var serverName, var serverType, var _lobbyName, var
if (Utils.gameType.equals("SKYBLOCK")) {
isOnSkyblock = true;
tickProfileId();
SlayerManager.getSlayerInfoOnJoin();

if (!previousServerType.equals("SKYBLOCK")) SkyblockEvents.JOIN.invoker().onSkyblockJoin();
} else if (previousServerType.equals("SKYBLOCK")) {
Expand Down

0 comments on commit 5cfd8ee

Please sign in to comment.