aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2025-07-22 14:52:11 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2025-07-22 14:52:11 -0400
commitda4b8c9908abddc9c2e9445237ce96db7eecbf89 (patch)
tree24633898027471fb6ea9b90684c074ad719764e7 /src/main/java/de
parent20e582864b6ad8f1ecf9f1f963aa914dc170cc1a (diff)
downloadSkyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.tar.gz
Skyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.tar.bz2
Skyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.zip
Mob Glow Refactor
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java174
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlowAdder.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/CrimsonGlowAdder.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/DungeonGlowAdder.java89
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/EndGlowAdder.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GalateaGlowAdder.java31
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GardenGlowAdder.java40
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/HubGlowAdder.java32
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/KuudraGlowAdder.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/RiftGlowAdder.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/SlayerGlowAdder.java60
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/HeadTextures.java25
13 files changed, 422 insertions, 164 deletions
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 d5081668..1f70775a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
@@ -4,6 +4,7 @@ import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.SlayersConfig;
import de.hysky.skyblocker.skyblock.dungeon.LividColor;
+import de.hysky.skyblocker.skyblock.entity.glow.adder.DungeonGlowAdder;
import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.FrustumUtils;
@@ -40,7 +41,7 @@ public class MobBoundingBoxes {
case ArmorStandEntity _armorStand -> false;
// Regular Mobs
- default -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes && MobGlow.isStarred(entity);
+ default -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes && DungeonGlowAdder.isStarred(entity);
};
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
index 28025a3f..c520142b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
@@ -1,35 +1,12 @@
package de.hysky.skyblocker.skyblock.entity;
import de.hysky.skyblocker.annotations.Init;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.config.configs.SlayersConfig;
-import de.hysky.skyblocker.skyblock.carnival.CatchAFish;
-import de.hysky.skyblocker.skyblock.carnival.ZombieShootout;
-import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager;
-import de.hysky.skyblocker.skyblock.crimson.kuudra.Kuudra;
-import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
-import de.hysky.skyblocker.skyblock.dungeon.LividColor;
-import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
-import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonPlayerManager;
-import de.hysky.skyblocker.skyblock.end.TheEnd;
-import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
-import de.hysky.skyblocker.skyblock.slayers.SlayerType;
-import de.hysky.skyblocker.skyblock.slayers.boss.demonlord.AttunementColors;
-import de.hysky.skyblocker.utils.ItemUtils;
-import de.hysky.skyblocker.utils.Utils;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.Entity;
-import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.decoration.ArmorStandEntity;
-import net.minecraft.entity.mob.*;
-import net.minecraft.entity.passive.BatEntity;
-import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.predicate.entity.EntityPredicates;
-import net.minecraft.util.DyeColor;
-import net.minecraft.util.Formatting;
import net.minecraft.util.math.Box;
import net.minecraft.world.World;
@@ -37,38 +14,7 @@ import java.util.*;
public class MobGlow {
public static final int NO_GLOW = 0;
- /**
- * The Nukekubi head texture id is eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3.
- */
- private static final String NUKEKUBI_HEAD_TEXTURE = "eyJ0aW1lc3RhbXAiOjE1MzQ5NjM0MzU5NjIsInByb2ZpbGVJZCI6ImQzNGFhMmI4MzFkYTRkMjY5NjU1ZTMzYzE0M2YwOTZjIiwicHJvZmlsZU5hbWUiOiJFbmRlckRyYWdvbiIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0=";
- private static final String FEL_HEAD_TEXTURE = "ewogICJ0aW1lc3RhbXAiIDogMTcyMDAyNTQ4Njg2MywKICAicHJvZmlsZUlkIiA6ICIzZDIxZTYyMTk2NzQ0Y2QwYjM3NjNkNTU3MWNlNGJlZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTcl83MUJsYWNrYmlyZCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jMjg2ZGFjYjBmMjE0NGQ3YTQxODdiZTM2YmJhYmU4YTk4ODI4ZjdjNzlkZmY1Y2UwMTM2OGI2MzAwMTU1NjYzIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=";
- private static final String WITHER_KEY_HEAD_TEXTURE = "ewogICJ0aW1lc3RhbXAiIDogMTYwMzYxMDQ0MzU4MywKICAicHJvZmlsZUlkIiA6ICIzM2ViZDMyYmIzMzk0YWQ5YWM2NzBjOTZjNTQ5YmE3ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEYW5ub0JhbmFubm9YRCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lNDllYzdkODJiMTQxNWFjYWUyMDU5Zjc4Y2QxZDE3NTRiOWRlOWIxOGNhNTlmNjA5MDI0YzRhZjg0M2Q0ZDI0IgogICAgfQogIH0KfQ==";
- private static final String BLOOD_KEY_HEAD_TEXTURE = "ewogICJ0aW1lc3RhbXAiIDogMTcwODY4ODA2MjE4OCwKICAicHJvZmlsZUlkIiA6ICIzNzRhZGZlMjkyOWI0ZDBiODJmYmVjNTg2ZTI5ODk4YyIsCiAgInByb2ZpbGVOYW1lIiA6ICJfR2xvenpfIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzIwZGU1ZTg5NzQ5NDAzNzU5MzRkMzJmNzFjOTFhZDJkNTcyOGQzOGU1MTY0N2RjYzhmMzkyMDZjMDk5YTU0YzIiCiAgICB9CiAgfQp9";
- private static final Set<String> PEST_HEAD_TEXTURES = Set.of(
- // Mosquito
- "ewogICJ0aW1lc3RhbXAiIDogMTY5Njk0NTAyOTQ2MSwKICAicHJvZmlsZUlkIiA6ICI3NTE0NDQ4MTkxZTY0NTQ2OGM5NzM5YTZlMzk1N2JlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGFua3NNb2phbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTJhOWZlMDViYzY2M2VmY2QxMmU1NmEzY2NjNWVjMDM1YmY1NzdiNzg3MDg1NDhiNmY0ZmZjZjFkMzBlY2NmZSIKICAgIH0KICB9Cn0=",
- // Rat
- "ewogICJ0aW1lc3RhbXAiIDogMTYxODQxOTcwMTc1MywKICAicHJvZmlsZUlkIiA6ICI3MzgyZGRmYmU0ODU0NTVjODI1ZjkwMGY4OGZkMzJmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJCdUlJZXQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYThhYmI0NzFkYjBhYjc4NzAzMDExOTc5ZGM4YjQwNzk4YTk0MWYzYTRkZWMzZWM2MWNiZWVjMmFmOGNmZmU4IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=",
- // Locust
- "ewogICJ0aW1lc3RhbXAiIDogMTY5NzU1NzA3NzAzNywKICAicHJvZmlsZUlkIiA6ICI0YjJlMGM1ODliZjU0ZTk1OWM1ZmJlMzg5MjQ1MzQzZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJfTmVvdHJvbl8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGIyNGE0ODJhMzJkYjFlYTc4ZmI5ODA2MGIwYzJmYTRhMzczY2JkMThhNjhlZGRkZWI3NDE5NDU1YTU5Y2RhOSIKICAgIH0KICB9Cn0=",
- // Cricket
- "ewogICJ0aW1lc3RhbXAiIDogMTcyMzE3OTgxMTI2NCwKICAicHJvZmlsZUlkIiA6ICJjZjc4YzFkZjE3ZTI0Y2Q5YTIxYmU4NWQ0NDk5ZWE4ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNYXR0c0FybW9yU3RhbmRzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2EyNGM2OWY5NmNlNTU2MjIxZTE5NWM4ZWYyYmZhZDcxZWJmN2Y5NWY1YWU5MTRhNDg0YThkMGVjMjE2NzI2NzQiCiAgICB9CiAgfQp9",
- // Fly
- "ewogICJ0aW1lc3RhbXAiIDogMTY5Njk0NTA2MzI4MSwKICAicHJvZmlsZUlkIiA6ICJjN2FmMWNkNjNiNTE0Y2YzOGY4NWQ2ZDUxNzhjYThlNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJtb25zdGVyZ2FtZXIzMTUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWQ5MGU3Nzc4MjZhNTI0NjEzNjhlMjZkMWIyZTE5YmZhMWJhNTgyZDYwMjQ4M2U1NDVmNDEyNGQwZjczMTg0MiIKICAgIH0KICB9Cn0=",
- // Beetle
- "ewogICJ0aW1lc3RhbXAiIDogMTcyMzE3OTc4OTkzNCwKICAicHJvZmlsZUlkIiA6ICJlMjc5NjliODYyNWY0NDg1YjkyNmM5NTBhMDljMWMwMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJLRVZJTktFTE9LRSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MGExZTgzNmJmMTk2OGIyZWFhNDgzNzIyN2ExOTIwNGYxNzI5NWQ4NzBlZTllNzU0YmQ2YjZkNjBkZGJlZDNjIgogICAgfQogIH0KfQ==",
- // Slug
- "ewogICJ0aW1lc3RhbXAiIDogMTY5NzQ3MDQ0MzA4MiwKICAicHJvZmlsZUlkIiA6ICJkOGNkMTNjZGRmNGU0Y2IzODJmYWZiYWIwOGIyNzQ4OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJaYWNoeVphY2giLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2E3OWQwZmQ2NzdiNTQ1MzA5NjExMTdlZjg0YWRjMjA2ZTJjYzUwNDVjMTM0NGQ2MWQ3NzZiZjhhYzJmZTFiYSIKICAgIH0KICB9Cn0=",
- // Moth
- "ewogICJ0aW1lc3RhbXAiIDogMTY5Njg3MDQwNTk1NCwKICAicHJvZmlsZUlkIiA6ICJiMTUyZDlhZTE1MTM0OWNmOWM2NmI0Y2RjMTA5NTZjOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaXNxdW90aCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82NTQ4NWM0YjM0ZTViNTQ3MGJlOTRkZTEwMGU2MWY3ODE2ZjgxYmM1YTExZGZkZjBlY2NmODkwMTcyZGE1ZDBhIgogICAgfQogIH0KfQ==",
- // Mite
- "ewogICJ0aW1lc3RhbXAiIDogMTY5Njg3MDQxOTcyNSwKICAicHJvZmlsZUlkIiA6ICJkYjYzNWE3MWI4N2U0MzQ5YThhYTgwOTMwOWFhODA3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJFbmdlbHMxNzQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmU2YmFmNjQzMWE5ZGFhMmNhNjA0ZDVhM2MyNmU5YTc2MWQ1OTUyZjA4MTcxNzRhNGZlMGI3NjQ2MTZlMjFmZiIKICAgIH0KICB9Cn0=",
- // Earthworm
- "ewogICJ0aW1lc3RhbXAiIDogMTY5NzQ3MDQ1OTc0NywKICAicHJvZmlsZUlkIiA6ICIyNTBlNzc5MjZkNDM0ZDIyYWM2MTQ4N2EyY2M3YzAwNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMdW5hMTIxMDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjQwM2JhNDAyN2EzMzNkOGQyZmQzMmFiNTlkMWNmZGJhYTdkOTA4ZDgwZDIzODFkYjJhNjljYmU2NTQ1MGFkOCIKICAgIH0KICB9Cn0=",
- // Field Mouse
- "ewogICJ0aW1lc3RhbXAiIDogMTcyNzkwNDc5NzQ1OSwKICAicHJvZmlsZUlkIiA6ICI0MmIwOTMyZDUwMWI0MWQ1YTM4YjEwOTcxYTYwYmYxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJBaXJib2x0MDc4IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2YzNzllMDkyNTI4MTczMTRiZDBiNjk0ZjdkNTNiNDhhZjJjN2ZhODQ5OTEwOTgwMmE0MWJiMjk0ZDJmOTNlM2UiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="
- );
-
+ private static final List<MobGlowAdder> ADDERS = new ArrayList<>();
/**
* Cache for mob glow. Absence means the entity does not have custom glow.
* If an entity is in the cache, it must have custom glow.
@@ -85,6 +31,10 @@ public class MobGlow {
return !CACHE.isEmpty();
}
+ protected static void registerGlowAdder(MobGlowAdder adder) {
+ ADDERS.add(adder);
+ }
+
public static boolean hasOrComputeMobGlow(Entity entity) {
if (CACHE.containsKey(entity)) {
return true;
@@ -114,103 +64,15 @@ public class MobGlow {
* <p>Only non-zero colors are valid.
*/
private static int computeMobGlow(Entity entity) {
- String name = entity.getName().getString();
-
- // Dungeons
- if (Utils.isInDungeons()) {
- return switch (entity) {
- // Minibosses
- case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Lost Adventurer") -> 0xfee15c;
- case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Shadow Assassin") -> 0x5b2cb2;
- case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Diamond Guy") -> 0x57c2f7;
- case PlayerEntity p when entity.getId() == LividColor.getCorrectLividId() && LividColor.shouldGlow(name) -> LividColor.getGlowColor(name);
-
- // Bats
- case BatEntity b when SkyblockerConfigManager.get().dungeons.starredMobGlow -> 0xf57738;
-
- // Fel Heads
- case ArmorStandEntity as when SkyblockerConfigManager.get().dungeons.starredMobGlow && as.isMarker() && as.hasStackEquipped(EquipmentSlot.HEAD) && ItemUtils.getHeadTexture(as.getEquippedStack(EquipmentSlot.HEAD)).equals(FEL_HEAD_TEXTURE) -> 0xcc00fa; // Enderman eye color
-
- // Wither & Blood Keys
- case ArmorStandEntity as when SkyblockerConfigManager.get().dungeons.highlightDoorKeys && as.hasStackEquipped(EquipmentSlot.HEAD) -> {
- yield switch (ItemUtils.getHeadTexture(as.getEquippedStack(EquipmentSlot.HEAD))) {
- case String s when s.equals(WITHER_KEY_HEAD_TEXTURE) -> DyeColor.CYAN.getSignColor();
- case String s when s.equals(BLOOD_KEY_HEAD_TEXTURE) -> DyeColor.CYAN.getSignColor();
- default -> NO_GLOW;
- };
- }
-
- // Armor Stands
- case ArmorStandEntity _armorStand -> 0;
-
- // Regular Mobs
- case Entity e when SkyblockerConfigManager.get().dungeons.starredMobGlow && isStarred(entity) -> 0xf57738;
-
- //Class-based glow
- //This goes after regular mobs to ensure starred player entities like dreadlords have the glow applied
- case PlayerEntity p when SkyblockerConfigManager.get().dungeons.classBasedPlayerGlow && DungeonScore.isDungeonStarted() -> DungeonPlayerManager.getClassFromPlayer(p).color();
-
- default -> NO_GLOW;
- };
- }
-
- // Slayer
- if (SlayerManager.shouldGlow(entity, SlayersConfig.HighlightSlayerEntities.GLOW)) {
- return switch (entity) {
- case ArmorStandEntity e when SlayerManager.isInSlayerType(SlayerType.DEMONLORD) -> AttunementColors.getColor(e);
- case BlazeEntity e when SlayerManager.isInSlayerType(SlayerType.DEMONLORD) -> AttunementColors.getColor(e);
- default -> 0xf57738;
- };
- }
+ for (MobGlowAdder adder : ADDERS) {
+ if (adder.isEnabled()) {
+ int glowColour = adder.computeColour(entity);
- if (Utils.isInGalatea()) {
- return switch (entity) {
- case ShulkerEntity shulker when shulker.getColor() == DyeColor.GREEN && SkyblockerConfigManager.get().hunting.huntingMobs.highlightHideonleaf -> DyeColor.YELLOW.getSignColor();
-
- default -> NO_GLOW;
- };
+ if (glowColour != NO_GLOW) return glowColour;
+ }
}
- return switch (entity) {
- // Rift Blobbercyst
- case PlayerEntity p when SkyblockerConfigManager.get().otherLocations.rift.blobbercystGlow && Utils.isInTheRift() && name.equals("Blobbercyst ") -> Formatting.GREEN.getColorValue();
-
- // Dojo Helpers
- case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena && DojoManager.shouldGlow(getArmorStandName(zombie)) -> DojoManager.getColor();
-
- //Kuudra
- case MagmaCubeEntity magmaCube when SkyblockerConfigManager.get().crimsonIsle.kuudra.kuudraGlow && Utils.isInKuudra() && magmaCube.getSize() == Kuudra.KUUDRA_MAGMA_CUBE_SIZE -> 0xf7510f;
-
- // Special Zealot && Slayer (Mini)Boss
- case EndermanEntity enderman when Utils.isInTheEnd() && TheEnd.isSpecialZealot(enderman) -> Formatting.RED.getColorValue();
-
- // Enderman Slayer's Nukekubi Skulls
- case ArmorStandEntity armorStand when SkyblockerConfigManager.get().slayers.endermanSlayer.highlightNukekubiHeads && Utils.isInTheEnd() && armorStand.isMarker() && SlayerManager.isInSlayer() && isNukekubiHead(armorStand) -> 0x990099;
-
- // Pests
- case ArmorStandEntity armorStand when SkyblockerConfigManager.get().farming.garden.pestHighlighter && Utils.isInGarden() && isPestHead(armorStand) -> 0xb62f00;
-
- // Blaze Slayer's Demonic minions
- case WitherSkeletonEntity e when SkyblockerConfigManager.get().slayers.highlightBosses == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerManager.isInSlayerType(SlayerType.DEMONLORD) && e.distanceTo(MinecraftClient.getInstance().player) <= 15 -> AttunementColors.getColor(e);
- case ZombifiedPiglinEntity e when SkyblockerConfigManager.get().slayers.highlightBosses == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerManager.isInSlayerType(SlayerType.DEMONLORD) && e.distanceTo(MinecraftClient.getInstance().player) <= 15 -> AttunementColors.getColor(e);
-
- //Chivalrous Carnival
- case ZombieEntity zombie when ZombieShootout.isInZombieShootout() -> ZombieShootout.getZombieGlowColor(zombie);
- case ArmorStandEntity armorStand when CatchAFish.isInCatchAFish() -> CatchAFish.getFishGlowColor(armorStand);
-
- default -> NO_GLOW;
- };
- }
-
- /**
- * Checks if an entity is starred by checking if its armor stand contains a star in its name.
- *
- * @param entity the entity to check.
- * @return true if the entity is starred, false otherwise
- */
- public static boolean isStarred(Entity entity) {
- List<ArmorStandEntity> armorStands = getArmorStands(entity);
- return !armorStands.isEmpty() && armorStands.getFirst().getName().getString().contains("✯");
+ return NO_GLOW;
}
/**
@@ -234,18 +96,4 @@ public class MobGlow {
public static List<ArmorStandEntity> getArmorStands(World world, Box box) {
return world.getEntitiesByClass(ArmorStandEntity.class, box.expand(0, 2, 0), EntityPredicates.NOT_MOUNTED);
}
-
- /**
- * Compares the armor items of an armor stand to the Nukekubi head texture to determine if it is a Nukekubi head.
- */
- private static boolean isNukekubiHead(ArmorStandEntity entity) {
- return ItemUtils.getHeadTexture(entity.getEquippedStack(EquipmentSlot.HEAD)).contains(NUKEKUBI_HEAD_TEXTURE);
- }
-
- /**
- * Compares the armor items of an armor stand to the Pest head texture to determine if it is a Pest head.
- */
- private static boolean isPestHead(ArmorStandEntity entity) {
- return PEST_HEAD_TEXTURES.contains(ItemUtils.getHeadTexture(entity.getEquippedStack(EquipmentSlot.HEAD)));
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlowAdder.java
new file mode 100644
index 00000000..b203600f
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlowAdder.java
@@ -0,0 +1,23 @@
+package de.hysky.skyblocker.skyblock.entity;
+
+import net.minecraft.entity.Entity;
+
+public abstract class MobGlowAdder {
+ protected static final int NO_GLOW = MobGlow.NO_GLOW;
+
+ protected MobGlowAdder() {
+ MobGlow.registerGlowAdder(this);
+ }
+
+ /**
+ * Computes the glow colour of the {@code entity}.
+ *
+ * @return The glow colour of the entity or {@link #NO_GLOW}.
+ */
+ public abstract int computeColour(Entity entity);
+
+ /**
+ * @return If this adder is enabled.
+ */
+ public abstract boolean isEnabled();
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/CrimsonGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/CrimsonGlowAdder.java
new file mode 100644
index 00000000..fbb96857
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/CrimsonGlowAdder.java
@@ -0,0 +1,27 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager;
+import de.hysky.skyblocker.skyblock.entity.MobGlow;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.mob.ZombieEntity;
+
+public class CrimsonGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final CrimsonGlowAdder INSTANCE = new CrimsonGlowAdder();
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return entity instanceof ZombieEntity zombie && DojoManager.inArena && DojoManager.shouldGlow(MobGlow.getArmorStandName(zombie)) ? DojoManager.getColor() : NO_GLOW;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInCrimson();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/DungeonGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/DungeonGlowAdder.java
new file mode 100644
index 00000000..13ef6afd
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/DungeonGlowAdder.java
@@ -0,0 +1,89 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import java.util.List;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
+import de.hysky.skyblocker.skyblock.dungeon.LividColor;
+import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
+import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonPlayerManager;
+import de.hysky.skyblocker.skyblock.entity.MobGlow;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.skyblock.item.HeadTextures;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.entity.passive.BatEntity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.util.DyeColor;
+
+public class DungeonGlowAdder extends MobGlowAdder {
+ public static final DungeonGlowAdder INSTANCE = new DungeonGlowAdder();
+ protected static final int STARRED_COLOUR = 0xf57738;
+ private static final int LOST_ADVENTURER_COLOUR = 0xfee15c;
+ private static final int SHADOW_ASSASSIN_COLOUR = 0x5b2cb2;
+ private static final int ANGRY_ARCHAEOLOGIST_COLOUR = 0x57c2f7;
+ private static final int ENDERMAN_EYE_COLOUR = 0xcc00fa;
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ String name = entity.getName().getString();
+
+ return switch (entity) {
+ // Minibosses
+ case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Lost Adventurer") -> LOST_ADVENTURER_COLOUR;
+ case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Shadow Assassin") -> SHADOW_ASSASSIN_COLOUR;
+ case PlayerEntity p when SkyblockerConfigManager.get().dungeons.starredMobGlow && !DungeonManager.getBoss().isFloor(4) && name.equals("Diamond Guy") -> ANGRY_ARCHAEOLOGIST_COLOUR;
+ case PlayerEntity p when entity.getId() == LividColor.getCorrectLividId() && LividColor.shouldGlow(name) -> LividColor.getGlowColor(name);
+
+ // Bats
+ case BatEntity b when SkyblockerConfigManager.get().dungeons.starredMobGlow -> STARRED_COLOUR;
+
+ // Fel Heads
+ case ArmorStandEntity as when SkyblockerConfigManager.get().dungeons.starredMobGlow && as.isMarker() && as.hasStackEquipped(EquipmentSlot.HEAD) && ItemUtils.getHeadTexture(as.getEquippedStack(EquipmentSlot.HEAD)).equals(HeadTextures.FEL) -> ENDERMAN_EYE_COLOUR;
+
+ // Wither & Blood Keys
+ case ArmorStandEntity as when SkyblockerConfigManager.get().dungeons.highlightDoorKeys && as.hasStackEquipped(EquipmentSlot.HEAD) -> {
+ yield switch (ItemUtils.getHeadTexture(as.getEquippedStack(EquipmentSlot.HEAD))) {
+ case String s when s.equals(HeadTextures.WITHER_KEY) -> DyeColor.CYAN.getSignColor();
+ case String s when s.equals(HeadTextures.BLOOD_KEY) -> DyeColor.CYAN.getSignColor();
+ default -> NO_GLOW;
+ };
+ }
+
+ // Armor Stands
+ case ArmorStandEntity as -> 0;
+
+ // Regular Mobs
+ case Entity e when SkyblockerConfigManager.get().dungeons.starredMobGlow && isStarred(entity) -> STARRED_COLOUR;
+
+ //Class-based glow
+ //This goes after regular mobs to ensure starred player entities like dreadlords have the glow applied
+ case PlayerEntity p when SkyblockerConfigManager.get().dungeons.classBasedPlayerGlow && DungeonScore.isDungeonStarted() -> DungeonPlayerManager.getClassFromPlayer(p).color();
+
+ default -> NO_GLOW;
+ };
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInDungeons();
+ }
+
+ /**
+ * Checks if an entity is starred by checking if its armor stand contains a star in its name.
+ *
+ * @param entity the entity to check.
+ * @return true if the entity is starred, false otherwise
+ */
+ public static boolean isStarred(Entity entity) {
+ List<ArmorStandEntity> armorStands = MobGlow.getArmorStands(entity);
+ return !armorStands.isEmpty() && armorStands.getFirst().getName().getString().contains("✯");
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/EndGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/EndGlowAdder.java
new file mode 100644
index 00000000..46e6d60e
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/EndGlowAdder.java
@@ -0,0 +1,27 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.skyblock.end.TheEnd;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.mob.EndermanEntity;
+import net.minecraft.util.Formatting;
+
+public class EndGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final EndGlowAdder INSTANCE = new EndGlowAdder();
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return entity instanceof EndermanEntity enderman && TheEnd.isSpecialZealot(enderman) ? Formatting.RED.getColorValue() : NO_GLOW;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInTheEnd();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GalateaGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GalateaGlowAdder.java
new file mode 100644
index 00000000..7531f574
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GalateaGlowAdder.java
@@ -0,0 +1,31 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.mob.ShulkerEntity;
+import net.minecraft.util.DyeColor;
+
+public class GalateaGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final GalateaGlowAdder INSTANCE = new GalateaGlowAdder();
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return switch (entity) {
+ case ShulkerEntity shulker when shulker.getColor() == DyeColor.GREEN && SkyblockerConfigManager.get().hunting.huntingMobs.highlightHideonleaf -> DyeColor.YELLOW.getSignColor();
+
+ default -> NO_GLOW;
+ };
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInGalatea();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GardenGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GardenGlowAdder.java
new file mode 100644
index 00000000..69e179e6
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/GardenGlowAdder.java
@@ -0,0 +1,40 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.skyblock.item.HeadTextures;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+
+public class GardenGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final GardenGlowAdder INSTANCE = new GardenGlowAdder();
+ private static final int PEST_COLOUR = 0xb62f00;
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return switch (entity) {
+ case ArmorStandEntity as when SkyblockerConfigManager.get().farming.garden.pestHighlighter && isPestHead(as) -> PEST_COLOUR;
+ default -> NO_GLOW;
+ };
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInGarden();
+ }
+
+ /**
+ * Compares the armor items of an armor stand to the Pest head texture to determine if it is a Pest head.
+ */
+ private static boolean isPestHead(ArmorStandEntity entity) {
+ return entity.hasStackEquipped(EquipmentSlot.HEAD) && HeadTextures.PEST_HEADS.contains(ItemUtils.getHeadTexture(entity.getEquippedStack(EquipmentSlot.HEAD)));
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/HubGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/HubGlowAdder.java
new file mode 100644
index 00000000..9756c856
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/HubGlowAdder.java
@@ -0,0 +1,32 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.skyblock.carnival.CatchAFish;
+import de.hysky.skyblocker.skyblock.carnival.ZombieShootout;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.entity.mob.ZombieEntity;
+
+public class HubGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final HubGlowAdder INSTANCE = new HubGlowAdder();
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return switch (entity) {
+ case ZombieEntity zombie when ZombieShootout.isInZombieShootout() -> ZombieShootout.getZombieGlowColor(zombie);
+ case ArmorStandEntity armorStand when CatchAFish.isInCatchAFish() -> CatchAFish.getFishGlowColor(armorStand);
+ default -> NO_GLOW;
+ };
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInHub();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/KuudraGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/KuudraGlowAdder.java
new file mode 100644
index 00000000..95654e35
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/KuudraGlowAdder.java
@@ -0,0 +1,28 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.crimson.kuudra.Kuudra;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.mob.MagmaCubeEntity;
+
+public class KuudraGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final KuudraGlowAdder INSTANCE = new KuudraGlowAdder();
+ private static final int KUUDRA_COLOUR = 0xf7510f;
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return entity instanceof MagmaCubeEntity magmaCube && SkyblockerConfigManager.get().crimsonIsle.kuudra.kuudraGlow && magmaCube.getSize() == Kuudra.KUUDRA_MAGMA_CUBE_SIZE ? KUUDRA_COLOUR : NO_GLOW;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInKuudra();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/RiftGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/RiftGlowAdder.java
new file mode 100644
index 00000000..77fcdeb3
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/RiftGlowAdder.java
@@ -0,0 +1,27 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.util.Formatting;
+
+public class RiftGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final RiftGlowAdder INSTANCE = new RiftGlowAdder();
+
+ @Init
+ public static void init() {}
+
+ @Override
+ public int computeColour(Entity entity) {
+ return entity instanceof PlayerEntity p && SkyblockerConfigManager.get().otherLocations.rift.blobbercystGlow && p.getName().getString().equals("Blobbercyst ") ? Formatting.GREEN.getColorValue() : NO_GLOW;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return Utils.isInTheRift();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/SlayerGlowAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/SlayerGlowAdder.java
new file mode 100644
index 00000000..e1767d3d
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/glow/adder/SlayerGlowAdder.java
@@ -0,0 +1,60 @@
+package de.hysky.skyblocker.skyblock.entity.glow.adder;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.SlayersConfig;
+import de.hysky.skyblocker.skyblock.entity.MobGlowAdder;
+import de.hysky.skyblocker.skyblock.item.HeadTextures;
+import de.hysky.skyblocker.skyblock.slayers.SlayerManager;
+import de.hysky.skyblocker.skyblock.slayers.SlayerType;
+import de.hysky.skyblocker.skyblock.slayers.boss.demonlord.AttunementColors;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EquipmentSlot;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.entity.mob.BlazeEntity;
+import net.minecraft.entity.mob.WitherSkeletonEntity;
+import net.minecraft.entity.mob.ZombifiedPiglinEntity;
+
+public class SlayerGlowAdder extends MobGlowAdder {
+ @SuppressWarnings("unused")
+ private static final SlayerGlowAdder INSTANCE = new SlayerGlowAdder();
+ private static final int NUKEKUBI_COLOUR = 0x990099;
+
+ @Init
+ public static void init() {}