Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
5d7bf8e
Reworked LazerTimer
7azeemm Dec 12, 2025
6e54271
Made `muteEndermanSounds` true by default
7azeemm Dec 12, 2025
b3070e1
Option to hide miniboss spawn message in chat
7azeemm Dec 13, 2025
4d99e7a
Boss kill time is now sent on boss death instead of relying on chat m…
7azeemm Dec 13, 2025
7e11fff
Fixed sound alert volume being too low and changed title alert to min…
7azeemm Dec 13, 2025
78ebebd
made new personal best shows in titleContainer
7azeemm Dec 13, 2025
1952562
Added option for showing miniboss name in alert
7azeemm Dec 13, 2025
8456088
Unclaimed slayer lvl rewards highlighter
7azeemm Dec 13, 2025
425c59e
Fixed Bossbar not removed after boss kill
7azeemm Dec 13, 2025
b5f2094
Simplified few things
7azeemm Dec 13, 2025
83bc3ea
Mute blaze sounds feature
7azeemm Dec 14, 2025
a71958a
Fixed Quest Detection
7azeemm Dec 14, 2025
7244829
Cached slayers info
7azeemm Dec 15, 2025
e0db514
Slayer HUD now uses slayer's custom head texture instead of mob drop …
7azeemm Dec 15, 2025
14bb8ad
Improved Miniboss detection performance and Fixed alerting for higher…
7azeemm Dec 15, 2025
263b48d
Improvements to Boss Detection and other stuff
7azeemm Dec 16, 2025
c0f0203
Added option to mute wolf sounds
7azeemm Dec 16, 2025
0c81d6b
Separated BossFight and SlayerQuest so player can select other people…
7azeemm Dec 17, 2025
78d7ebf
Option to hide Sven Pup's nametag
7azeemm Dec 17, 2025
d7c6490
Added Highlight Color option and Fixed Hitbox wasn't working, also `a…
7azeemm Dec 17, 2025
99ad765
Added hide hellion shield filter
7azeemm Dec 17, 2025
6329bcb
Added Timer to BeaconHighlighter
7azeemm Dec 17, 2025
c10ab71
lots of changes
7azeemm Dec 19, 2025
fdf41e1
Fixed some stuff
7azeemm Dec 20, 2025
cd26213
Merge branch 'master' into Slayers
7azeemm Dec 20, 2025
0b197cd
1.21.11
7azeemm Dec 20, 2025
2067deb
changes
7azeemm Dec 21, 2025
e5c9454
Changes
7azeemm Jan 2, 2026
b84c126
Merge branch 'master' into Slayers
7azeemm Jan 2, 2026
efac5b7
Merge remote-tracking branch 'origin/master' into Slayers
7azeemm Jan 2, 2026
3de595a
resolving conflicts
7azeemm Jan 2, 2026
ef30ef7
changes
7azeemm Jan 3, 2026
c34e390
Merge branch 'refs/heads/master' into Slayers
7azeemm Jan 25, 2026
ecb4d22
changes
7azeemm Jan 25, 2026
378dbcc
fixed miniboss alert
7azeemm Jan 27, 2026
79727dc
Fix Config Option
Alex33856 Jan 27, 2026
b4cc2d7
Use ColorUtils#getFloatComponents
Alex33856 Jan 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 102 additions & 13 deletions src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,22 @@
import de.hysky.skyblocker.config.ConfigUtils;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.configs.SlayersConfig;
import de.hysky.skyblocker.skyblock.slayers.hud.SlayerHudWidget;
import de.hysky.skyblocker.skyblock.slayers.SlayerHudWidget;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.chat.ChatFilterResult;
import net.azureaaron.dandelion.api.ButtonOption;
import net.azureaaron.dandelion.api.ConfigCategory;
import net.azureaaron.dandelion.api.Option;
import net.azureaaron.dandelion.api.OptionGroup;
import net.azureaaron.dandelion.api.controllers.ColourController;
import net.azureaaron.dandelion.api.controllers.FloatController;
import net.azureaaron.dandelion.api.controllers.IntegerController;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;

import java.awt.Color;

public class SlayersCategory {

public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) {
Expand All @@ -38,13 +42,31 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
.name(Component.translatable("skyblocker.config.slayer.highlightBosses"))
.description(Component.translatable("skyblocker.config.slayer.highlightBosses.@Tooltip[0]"),
Component.translatable("skyblocker.config.slayer.highlightBosses.@Tooltip[1]"),
Component.translatable("skyblocker.config.slayer.highlightBosses.@Tooltip[2]"),
Component.translatable("skyblocker.config.slayer.highlightBosses.@Tooltip[3]"))
Component.translatable("skyblocker.config.slayer.highlightBosses.@Tooltip[2]"))
.binding(defaults.slayers.highlightBosses,
() -> config.slayers.highlightBosses,
newValue -> config.slayers.highlightBosses = newValue)
.controller(ConfigUtils.createEnumController())
.build())
.option(Option.<Color>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.highlightColor"))
.binding(defaults.slayers.highlightColor,
() -> config.slayers.highlightColor,
newValue -> config.slayers.highlightColor = newValue)
.controller(ColourController.createBuilder().hasAlpha(true).build())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.enableHud"))
.binding(defaults.slayers.enableHud,
() -> config.slayers.enableHud,
newValue -> config.slayers.enableHud = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(ButtonOption.createBuilder()
.name(Component.translatable("skyblocker.config.slayer.slayerHud"))
.prompt(Component.translatable("text.skyblocker.open"))
.action(screen -> Minecraft.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, SlayerHudWidget.getInstance().getInternalID(), screen)))
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.bossbar"))
.description(Component.translatable("skyblocker.config.slayer.bossbar.@Tooltip"))
Expand All @@ -69,6 +91,22 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
newValue -> config.slayers.miniBossSpawnAlert = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.alertOtherMinibosses"))
.description(Component.translatable("skyblocker.config.slayer.alertOtherMinibosses.@Tooltip"))
.binding(defaults.slayers.alertOtherMinibosses,
() -> config.slayers.alertOtherMinibosses,
newValue -> config.slayers.alertOtherMinibosses = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.showMiniBossNameInAlert"))
.description(Component.translatable("skyblocker.config.slayer.showMiniBossNameInAlert.@Tooltip"))
.binding(defaults.slayers.showMiniBossNameInAlert,
() -> config.slayers.showMiniBossNameInAlert,
newValue -> config.slayers.showMiniBossNameInAlert = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.slainTime"))
.description(Component.translatable("skyblocker.config.slayer.slainTime.@Tooltip"))
Expand All @@ -77,19 +115,21 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
newValue -> config.slayers.slainTime = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<ChatFilterResult>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.hideSlayerMinibossSpawn"))
.binding(defaults.slayers.hideSlayerMinibossSpawn,
() -> config.slayers.hideSlayerMinibossSpawn,
newValue -> config.slayers.hideSlayerMinibossSpawn = newValue)
.controller(ConfigUtils.createEnumController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.enableHud"))
.description(Component.translatable("skyblocker.config.slayer.enableHud.@Tooltip"))
.binding(defaults.slayers.enableHud,
() -> config.slayers.enableHud,
newValue -> config.slayers.enableHud = newValue)
.name(Component.translatable("skyblocker.config.slayer.highlightUnclaimedRewards"))
.description(Component.translatable("skyblocker.config.slayer.highlightUnclaimedRewards.@Tooltip"))
.binding(defaults.slayers.highlightUnclaimedRewards,
() -> config.slayers.highlightUnclaimedRewards,
newValue -> config.slayers.highlightUnclaimedRewards = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(ButtonOption.createBuilder()
.name(Component.translatable("skyblocker.config.slayer.slayerHud"))
.prompt(Component.translatable("text.skyblocker.open"))
.action(screen -> Minecraft.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, SlayerHudWidget.getInstance().getInternalID(), screen)))
.build())

.group(OptionGroup.createBuilder()
.name(Component.translatable("skyblocker.config.slayer.callMaddox"))
Expand Down Expand Up @@ -260,6 +300,55 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
newValue -> config.slayers.blazeSlayer.attunementHighlights = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.blazeSlayer.muteBlazeSounds"))
.description(Component.translatable("skyblocker.config.slayer.blazeSlayer.muteBlazeSounds.@Tooltip"))
.binding(defaults.slayers.blazeSlayer.muteBlazeSounds,
() -> config.slayers.blazeSlayer.muteBlazeSounds,
newValue -> config.slayers.blazeSlayer.muteBlazeSounds = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<ChatFilterResult>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.blazeSlayer.hideHellionShield"))
.binding(defaults.slayers.blazeSlayer.hideHellionShield,
() -> config.slayers.blazeSlayer.hideHellionShield,
newValue -> config.slayers.blazeSlayer.hideHellionShield = newValue)
.controller(ConfigUtils.createEnumController())
.build())
.build())

//Wolf Slayer
.group(OptionGroup.createBuilder()
.name(Component.translatable("skyblocker.config.slayer.wolfSlayer"))
.collapsed(true)
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.wolfSlayer.muteWolfSounds"))
.binding(defaults.slayers.wolfSlayer.muteWolfSounds,
() -> config.slayers.wolfSlayer.muteWolfSounds,
newValue -> config.slayers.wolfSlayer.muteWolfSounds = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.wolfSlayer.hideSvenPupNametag"))
.binding(defaults.slayers.wolfSlayer.hideSvenPupNametag,
() -> config.slayers.wolfSlayer.hideSvenPupNametag,
newValue -> config.slayers.wolfSlayer.hideSvenPupNametag = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.build())

//Spider Slayer
.group(OptionGroup.createBuilder()
.name(Component.translatable("skyblocker.config.slayer.spiderSlayer"))
.collapsed(true)
.option(Option.<Boolean>createBuilder()
.name(Component.translatable("skyblocker.config.slayer.spiderSlayer.muteSpiderSounds"))
.description(Component.translatable("skyblocker.config.slayer.spiderSlayer.muteSpiderSounds.@Tooltip"))
.binding(defaults.slayers.spiderSlayer.muteSpiderSounds,
() -> config.slayers.spiderSlayer.muteSpiderSounds,
newValue -> config.slayers.spiderSlayer.muteSpiderSounds = newValue)
.controller(ConfigUtils.createBooleanController())
.build())
.build())

.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public static class TheEnd {

public boolean waypoint = true;

public boolean muteEndermanSounds = false;
public boolean muteEndermanSounds = true;

public int x = 10;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package de.hysky.skyblocker.config.configs;

import de.hysky.skyblocker.utils.chat.ChatFilterResult;
import net.minecraft.client.resources.language.I18n;

import java.awt.Color;

public class SlayersConfig {
public HighlightSlayerEntities highlightMinis = HighlightSlayerEntities.GLOW;

public HighlightSlayerEntities highlightBosses = HighlightSlayerEntities.GLOW;

public Color highlightColor = new Color(0xFFFF4800, true);

public boolean displayBossbar = true;

public enum HighlightSlayerEntities {
Expand All @@ -22,10 +27,18 @@ public String toString() {

public boolean miniBossSpawnAlert = true;

public boolean alertOtherMinibosses = false;

public boolean showMiniBossNameInAlert = false;

public boolean slainTime = true;

public boolean enableHud = true;

public ChatFilterResult hideSlayerMinibossSpawn = ChatFilterResult.PASS;

public boolean highlightUnclaimedRewards = true;

public CallMaddox callMaddox = new CallMaddox();

public EndermanSlayer endermanSlayer = new EndermanSlayer();
Expand All @@ -34,6 +47,10 @@ public String toString() {

public BlazeSlayer blazeSlayer = new BlazeSlayer();

public WolfSlayer wolfSlayer = new WolfSlayer();

public SpiderSlayer spiderSlayer = new SpiderSlayer();

public static class CallMaddox {
public boolean sendMessageOnFail = true;

Expand Down Expand Up @@ -78,7 +95,12 @@ public static class VampireSlayer {

public static class BlazeSlayer {
public FirePillar firePillarCountdown = FirePillar.SOUND_AND_VISUAL;
public Boolean attunementHighlights = true;

public boolean attunementHighlights = true;

public boolean muteBlazeSounds = true;

public ChatFilterResult hideHellionShield = ChatFilterResult.PASS;

public enum FirePillar {
OFF,
Expand All @@ -91,4 +113,14 @@ public String toString() {
}
}
}

public static class WolfSlayer {
public boolean muteWolfSounds = false;

public boolean hideSvenPupNametag = true;
}

public static class SpiderSlayer {
public boolean muteSpiderSounds = false;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package de.hysky.skyblocker.mixins;

import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.slayers.SlayerBossBars;
import de.hysky.skyblocker.skyblock.slayers.SlayerBossBar;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.BossHealthOverlay;
Expand All @@ -17,7 +17,6 @@

@Mixin(BossHealthOverlay.class)
public abstract class BossHealthOverlayMixin {

@Final
@Shadow
private Minecraft minecraft;
Expand All @@ -27,17 +26,15 @@ public abstract class BossHealthOverlayMixin {

@Inject(method = "render", at = @At("HEAD"), cancellable = true)
private void onRender(GuiGraphics context, CallbackInfo ci) {
if (SkyblockerConfigManager.get().slayers.displayBossbar && SlayerBossBar.shouldRenderBossBar()) {
LerpingBossEvent bossBar = SlayerBossBar.updateBossBar();

if (SkyblockerConfigManager.get().slayers.displayBossbar && SlayerBossBars.shouldRenderBossBar()) {
LerpingBossEvent bar = SlayerBossBars.updateBossBar();

int textWidth = this.minecraft.font.width(bar.getName());
context.drawString(this.minecraft.font, bar.getName(), context.guiWidth() / 2 - textWidth / 2, 3, CommonColors.WHITE);
int textWidth = this.minecraft.font.width(bossBar.getName());
context.drawString(this.minecraft.font, bossBar.getName(), context.guiWidth() / 2 - textWidth / 2, 3, CommonColors.WHITE);

this.drawBar(context, (context.guiWidth() / 2) - 91, 12, bar);
this.drawBar(context, (context.guiWidth() / 2) - 91, 12, bossBar);

ci.cancel();
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@
import com.llamalad7.mixinextras.sugar.Share;
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.SlayersConfig;
import de.hysky.skyblocker.config.configs.UIAndVisualsConfig;
import de.hysky.skyblocker.events.ParticleEvents;
import de.hysky.skyblocker.events.PlaySoundEvents;
import de.hysky.skyblocker.skyblock.CompactDamage;
import de.hysky.skyblocker.skyblock.HealthBars;
import de.hysky.skyblocker.skyblock.teleport.PredictiveSmoothAOTE;
import de.hysky.skyblocker.skyblock.dungeon.DungeonMapTexture;
import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
import de.hysky.skyblocker.skyblock.dungeon.puzzle.TeleportMaze;
Expand All @@ -27,11 +25,11 @@
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
import de.hysky.skyblocker.skyblock.slayers.boss.demonlord.FirePillarAnnouncer;
import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListManager;
import de.hysky.skyblocker.skyblock.teleport.PredictiveSmoothAOTE;
import de.hysky.skyblocker.skyblock.teleport.ResponsiveSmoothAOTE;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.multiplayer.CommonListenerCookie;
import net.minecraft.core.BlockPos;
Expand Down Expand Up @@ -64,9 +62,6 @@
*/
@Mixin(ClientPacketListener.class)
public abstract class ClientPacketListenerMixin extends ClientCommonPacketListenerImpl {
@Shadow
private ClientLevel level;

@Shadow
@Final
private static Logger LOGGER;
Expand All @@ -80,8 +75,7 @@ protected ClientPacketListenerMixin(Minecraft client, Connection connection, Com
if (!(entity instanceof ArmorStand armorStandEntity)) return;

SlayerManager.checkSlayerBoss(armorStandEntity);

if (SkyblockerConfigManager.get().slayers.blazeSlayer.firePillarCountdown != SlayersConfig.BlazeSlayer.FirePillar.OFF) FirePillarAnnouncer.checkFirePillar(entity);
FirePillarAnnouncer.checkFirePillar(entity);

CorpseFinder.checkIfCorpse(armorStandEntity);
HealthBars.healthBar(armorStandEntity);
Expand All @@ -95,7 +89,6 @@ protected ClientPacketListenerMixin(Minecraft client, Connection connection, Com
LOGGER.error("[Skyblocker Compact Damage] Failed to compact damage number", e);
}


FishingHookDisplayHelper.onArmorStandSpawn(armorStandEntity);
}

Expand Down
Loading