Skip to content

Commit 54b1127

Browse files
authored
Fixed Vampire Features not working (SkyblockerMod#1169)
* Fixed Vampire features not working * improved checks
1 parent c70c392 commit 54b1127

File tree

11 files changed

+49
-35
lines changed

11 files changed

+49
-35
lines changed

Diff for: src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static class VampireSlayer {
7171
public boolean enableHolyIceIndicator = true;
7272

7373
@SerialEntry
74-
public int holyIceIndicatorTickDelay = 10;
74+
public int holyIceIndicatorTickDelay = 5;
7575

7676
@SerialEntry
7777
public int holyIceUpdateFrequency = 5;

Diff for: src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java

+13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.hysky.skyblocker.events;
22

3+
import de.hysky.skyblocker.utils.Area;
34
import de.hysky.skyblocker.utils.Location;
45
import de.hysky.skyblocker.utils.purse.PurseChangeCause;
56
import net.fabricmc.api.EnvType;
@@ -27,6 +28,12 @@ public final class SkyblockEvents {
2728
}
2829
});
2930

31+
public static final Event<SkyblockAreaChange> AREA_CHANGE = EventFactory.createArrayBacked(SkyblockAreaChange.class, callbacks -> area -> {
32+
for (SkyblockAreaChange callback : callbacks) {
33+
callback.onSkyblockAreaChange(area);
34+
}
35+
});
36+
3037
/**
3138
* Called when the player's Skyblock profile changes.
3239
*
@@ -74,6 +81,12 @@ public interface SkyblockLocationChange {
7481
void onSkyblockLocationChange(Location location);
7582
}
7683

84+
@Environment(EnvType.CLIENT)
85+
@FunctionalInterface
86+
public interface SkyblockAreaChange {
87+
void onSkyblockAreaChange(Area area);
88+
}
89+
7790
@Environment(EnvType.CLIENT)
7891
@FunctionalInterface
7992
public interface ProfileChange {

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/SlayerManager.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import de.hysky.skyblocker.skyblock.slayers.boss.vampire.ManiaIndicator;
88
import de.hysky.skyblocker.skyblock.slayers.boss.vampire.StakeIndicator;
99
import de.hysky.skyblocker.skyblock.slayers.boss.vampire.TwinClawsIndicator;
10+
import de.hysky.skyblocker.utils.Area;
1011
import de.hysky.skyblocker.utils.Location;
1112
import de.hysky.skyblocker.utils.Utils;
1213
import de.hysky.skyblocker.utils.mayor.MayorUtils;
@@ -56,20 +57,26 @@ public class SlayerManager {
5657
public static void init() {
5758
ClientReceiveMessageEvents.GAME.register(SlayerManager::onChatMessage);
5859
SkyblockEvents.LOCATION_CHANGE.register(SlayerManager::onLocationChange);
60+
SkyblockEvents.AREA_CHANGE.register(SlayerManager::onAreaChange);
5961
Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfigManager.get().slayers.vampireSlayer.holyIceUpdateFrequency);
6062
Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfigManager.get().slayers.vampireSlayer.maniaUpdateFrequency);
6163
Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfigManager.get().slayers.vampireSlayer.steakStakeUpdateFrequency);
6264
}
6365

64-
private static void onLocationChange(Location location) {
65-
if (isBossSpawned()) {
66-
slayerQuest = null;
67-
bossFight = null;
66+
private static void onAreaChange(Area area) {
67+
if (area.equals(Area.CHATEAU)) {
68+
getSlayerBossInfo(false);
6869
}
6970
}
7071

72+
private static void onLocationChange(Location location) {
73+
slayerQuest = null;
74+
bossFight = null;
75+
Scheduler.INSTANCE.schedule(() -> getSlayerBossInfo(false), 20 * 2);
76+
}
77+
7178
private static void onChatMessage(Text text, boolean overlay) {
72-
if (!Utils.isOnSkyblock() || overlay) return;
79+
if (overlay || !Utils.isOnSkyblock()) return;
7380
String message = text.getString();
7481

7582
switch (message.replaceFirst("^\\s+", "")) {
@@ -156,13 +163,6 @@ public static void getSlayerBossInfo(boolean checkStatus) {
156163
}
157164
}
158165

159-
/**
160-
* Gets The slayer info from scoreboard when player joins SkyBlock
161-
*/
162-
public static void getSlayerInfoOnJoin() {
163-
Scheduler.INSTANCE.schedule(() -> getSlayerBossInfo(false), 20 * 2); //2 seconds
164-
}
165-
166166
/**
167167
* Checks if the given armor stand is a slayer boss or miniboss and saves it to the corresponding field.
168168
* <p>This is the main mechanism for detecting slayer bosses and minibosses. All other features rely on information processed here.
@@ -171,7 +171,7 @@ public static void getSlayerInfoOnJoin() {
171171
* {@link #findClosestMobEntity(EntityType, ArmorStandEntity)} could be modified and run more than once to ensure the correct entity is found.
172172
*/
173173
public static void checkSlayerBoss(ArmorStandEntity armorStand) {
174-
if (slayerQuest == null || (isBossSpawned() && bossFight.boss != null) || !armorStand.hasCustomName()) return;
174+
if (slayerQuest == null || !armorStand.hasCustomName() || (isBossSpawned() && bossFight.boss != null)) return;
175175
if (armorStand.getName().getString().contains(CLIENT.getSession().getUsername())) {
176176
for (Entity otherArmorStands : getEntityArmorStands(armorStand, 1.5f)) {
177177
Matcher matcher = SLAYER_PATTERN.matcher(otherArmorStands.getName().getString());

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/demonlord/FirePillarAnnouncer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import de.hysky.skyblocker.config.SkyblockerConfigManager;
44
import de.hysky.skyblocker.config.configs.SlayersConfig;
55
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
6+
import de.hysky.skyblocker.skyblock.slayers.SlayerType;
67
import de.hysky.skyblocker.utils.Utils;
78
import de.hysky.skyblocker.utils.render.RenderHelper;
89
import de.hysky.skyblocker.utils.render.title.Title;
910
import de.hysky.skyblocker.utils.render.title.TitleContainer;
1011
import net.minecraft.client.MinecraftClient;
1112
import net.minecraft.entity.Entity;
12-
import net.minecraft.entity.decoration.ArmorStandEntity;
1313
import net.minecraft.text.Text;
1414
import net.minecraft.util.Formatting;
1515

@@ -30,7 +30,7 @@ public class FirePillarAnnouncer {
3030
* @param entity The updated entity that is checked to be a fire pillar
3131
*/
3232
public static void checkFirePillar(Entity entity) {
33-
if (Utils.isInCrimson() && SlayerManager.isBossSpawned() && entity instanceof ArmorStandEntity) {
33+
if (Utils.isInCrimson() && SlayerManager.isInSlayerType(SlayerType.DEMONLORD)) {
3434

3535
String entityName = entity.getName().getString();
3636
Matcher matcher = FIRE_PILLAR_PATTERN.matcher(entityName);

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/ManiaIndicator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import de.hysky.skyblocker.config.SkyblockerConfigManager;
44
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
5-
import de.hysky.skyblocker.utils.Utils;
5+
import de.hysky.skyblocker.skyblock.slayers.SlayerType;
66
import de.hysky.skyblocker.utils.render.RenderHelper;
77
import de.hysky.skyblocker.utils.render.title.Title;
88
import de.hysky.skyblocker.utils.render.title.TitleContainer;
@@ -17,7 +17,7 @@ public class ManiaIndicator {
1717
private static final Title title = new Title("skyblocker.rift.mania", Formatting.RED);
1818

1919
public static void updateMania() {
20-
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerManager.isBossSpawned()) {
20+
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableManiaIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) {
2121
TitleContainer.removeTitle(title);
2222
return;
2323
}

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/StakeIndicator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import de.hysky.skyblocker.config.SkyblockerConfigManager;
44
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
5-
import de.hysky.skyblocker.utils.Utils;
5+
import de.hysky.skyblocker.skyblock.slayers.SlayerType;
66
import de.hysky.skyblocker.utils.render.RenderHelper;
77
import de.hysky.skyblocker.utils.render.title.Title;
88
import de.hysky.skyblocker.utils.render.title.TitleContainer;
@@ -13,7 +13,7 @@ public class StakeIndicator {
1313
private static final Title title = new Title("skyblocker.rift.stakeNow", Formatting.RED);
1414

1515
public static void updateStake() {
16-
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château") || !SlayerManager.isBossSpawned()) {
16+
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableSteakStakeIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) {
1717
TitleContainer.removeTitle(title);
1818
return;
1919
}

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/vampire/TwinClawsIndicator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import de.hysky.skyblocker.config.SkyblockerConfigManager;
44
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
5-
import de.hysky.skyblocker.utils.Utils;
5+
import de.hysky.skyblocker.skyblock.slayers.SlayerType;
66
import de.hysky.skyblocker.utils.render.RenderHelper;
77
import de.hysky.skyblocker.utils.render.title.Title;
88
import de.hysky.skyblocker.utils.render.title.TitleContainer;
@@ -15,7 +15,7 @@ public class TwinClawsIndicator {
1515
private static boolean scheduled = false;
1616

1717
public static void updateIce() {
18-
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerManager.isBossSpawned()) {
18+
if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHolyIceIndicator || !SlayerManager.isInSlayerType(SlayerType.VAMPIRE)) {
1919
TitleContainer.removeTitle(title);
2020
return;
2121
}

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/BeaconHighlighter.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import de.hysky.skyblocker.annotations.Init;
44
import de.hysky.skyblocker.config.SkyblockerConfigManager;
5+
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
6+
import de.hysky.skyblocker.skyblock.slayers.SlayerType;
57
import de.hysky.skyblocker.utils.Utils;
68
import de.hysky.skyblocker.utils.render.RenderHelper;
79
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
@@ -46,7 +48,7 @@ private static void onMessage(Text text, boolean overlay) {
4648
* @param context An instance of WorldRenderContext for the RenderHelper to use
4749
*/
4850
private static void render(WorldRenderContext context) {
49-
if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.highlightBeacons) {
51+
if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.highlightBeacons && SlayerManager.isInSlayerType(SlayerType.VOIDGLOOM)) {
5052
for (BlockPos pos : beaconPositions) {
5153
RenderHelper.renderFilled(context, pos, RED_COLOR_COMPONENTS, 0.5f, true);
5254
}

Diff for: src/main/java/de/hysky/skyblocker/skyblock/slayers/boss/voidgloom/LazerTimer.java

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ private static void render(WorldRenderContext context) {
5353
.append(Text.literal(timeText).formatted(Formatting.GREEN).formatted(Formatting.BOLD));
5454

5555
RenderHelper.renderText(context, renderText, boss.getPos().add(0, 2, 0), true);
56-
5756
}
5857
}
5958
}

Diff for: src/main/java/de/hysky/skyblocker/utils/Area.java

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
public enum Area {
99
CARNIVAL("Carnival"),
10+
CHATEAU("Stillgore Château"),
1011
UNKNOWN("Unknown");
1112

1213
private final String name;

Diff for: src/main/java/de/hysky/skyblocker/utils/Utils.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -361,22 +361,22 @@ private static void updateScoreboard(MinecraftClient client) {
361361

362362
TEXT_SCOREBOARD.addAll(textLines);
363363
STRING_SCOREBOARD.addAll(stringLines);
364-
Utils.updatePurse();
365-
SlayerManager.getSlayerBossInfo(true);
366-
updateArea();
364+
if (isOnSkyblock) {
365+
Utils.updatePurse();
366+
SlayerManager.getSlayerBossInfo(true);
367+
updateArea();
368+
}
367369
} catch (NullPointerException e) {
368370
//Do nothing
369371
}
370372
}
371373

372-
//TODO add event in the future
373374
private static void updateArea() {
374-
if (isOnSkyblock) {
375-
String areaName = getIslandArea().replaceAll("[⏣ф]", "").strip();
376-
area = Area.from(areaName);
377-
} else {
378-
area = Area.UNKNOWN;
379-
}
375+
String areaName = getIslandArea().replaceAll("[⏣ф]", "").strip();
376+
Area oldArea = area;
377+
area = Area.from(areaName);
378+
379+
if (!oldArea.equals(area)) SkyblockEvents.AREA_CHANGE.invoker().onSkyblockAreaChange(area);
380380
}
381381

382382
public static void updatePurse() {
@@ -441,7 +441,6 @@ case LocationUpdateS2CPacket(var serverName, var serverType, var _lobbyName, var
441441
if (Utils.gameType.equals("SKYBLOCK")) {
442442
isOnSkyblock = true;
443443
tickProfileId();
444-
SlayerManager.getSlayerInfoOnJoin();
445444

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

0 commit comments

Comments
 (0)