diff options
| author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-07-22 14:52:11 -0400 |
|---|---|---|
| committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2025-07-22 14:52:11 -0400 |
| commit | da4b8c9908abddc9c2e9445237ce96db7eecbf89 (patch) | |
| tree | 24633898027471fb6ea9b90684c074ad719764e7 /src/main/java/de | |
| parent | 20e582864b6ad8f1ecf9f1f963aa914dc170cc1a (diff) | |
| download | Skyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.tar.gz Skyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.tar.bz2 Skyblocker-da4b8c9908abddc9c2e9445237ce96db7eecbf89.zip | |
Mob Glow Refactor
Diffstat (limited to 'src/main/java/de')
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() {} |
