From b58eedf8bcfad0aaad193292dcb950c4a88357d3 Mon Sep 17 00:00:00 2001 From: cqb13 Date: Mon, 5 Jan 2026 21:32:49 -0500 Subject: [PATCH 1/4] added health color mode to ESP also added getColorFromHealth method to EntityUtils --- .../systems/modules/render/ESP.java | 67 ++++++++++++++----- .../utils/entity/EntityUtils.java | 32 +++++++++ 2 files changed, 84 insertions(+), 15 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index 796ca5dd4d..cee4fe6754 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -123,18 +123,27 @@ public class ESP extends Module { // Colors - public final Setting distance = sgColors.add(new BoolSetting.Builder() - .name("distance-colors") - .description("Changes the color of tracers depending on distance.") - .defaultValue(false) + public final Setting colorMode = sgColors.add(new EnumSetting.Builder() + .name("color-mode") + .description("Determines the colors used for entities.") + .defaultValue(ESPColorMode.EntityTypeColors) .build() ); public final Setting friendOverride = sgColors.add(new BoolSetting.Builder() .name("show-friend-colors") - .description("Whether or not to override the distance color of friends with the friend color.") + .description("Whether or not to override the distance/heatlh color of friends with the friend color.") .defaultValue(true) - .visible(distance::get) + .visible(() -> colorMode.get() == ESPColorMode.DistanceColors + || colorMode.get() == ESPColorMode.HealthColors) + .build() + ); + + private final Setting nonLivingEntityColor = sgColors.add(new ColorSetting.Builder() + .name("non-living-entity-color") + .description("The color used for non living entities such as dropped items.") + .defaultValue(new SettingColor(25, 25, 25)) + .visible(() -> colorMode.get() == ESPColorMode.HealthColors) .build() ); @@ -142,7 +151,7 @@ public class ESP extends Module { .name("players-color") .description("The other player's color.") .defaultValue(new SettingColor(255, 255, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -150,7 +159,7 @@ public class ESP extends Module { .name("animals-color") .description("The animal's color.") .defaultValue(new SettingColor(25, 255, 25, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -158,7 +167,7 @@ public class ESP extends Module { .name("water-animals-color") .description("The water animal's color.") .defaultValue(new SettingColor(25, 25, 255, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -166,7 +175,7 @@ public class ESP extends Module { .name("monsters-color") .description("The monster's color.") .defaultValue(new SettingColor(255, 25, 25, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -174,7 +183,7 @@ public class ESP extends Module { .name("ambient-color") .description("The ambient's color.") .defaultValue(new SettingColor(25, 25, 25, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -182,7 +191,7 @@ public class ESP extends Module { .name("misc-color") .description("The misc color.") .defaultValue(new SettingColor(175, 175, 175, 255)) - .visible(() -> !distance.get()) + .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) .build() ); @@ -387,10 +396,18 @@ private double getFadeAlpha(Entity entity) { } public Color getEntityTypeColor(Entity entity) { - if (distance.get()) { - if (friendOverride.get() && entity instanceof PlayerEntity && Friends.get().isFriend((PlayerEntity) entity)) { + if (colorMode.get() == ESPColorMode.DistanceColors) { + if (friendOverride.get() && entity instanceof PlayerEntity + && Friends.get().isFriend((PlayerEntity) entity)) { + return Config.get().friendColor.get(); + } else + return EntityUtils.getColorFromDistance(entity); + } else if (colorMode.get() == ESPColorMode.HealthColors) { + if (friendOverride.get() && entity instanceof PlayerEntity + && Friends.get().isFriend((PlayerEntity) entity)) { return Config.get().friendColor.get(); - } else return EntityUtils.getColorFromDistance(entity); + } else + return EntityUtils.getColorFromHealth(entity, nonLivingEntityColor.get()); } else if (entity instanceof PlayerEntity) { return PlayerUtils.getPlayerColor(((PlayerEntity) entity), playersColor.get()); } else { @@ -417,6 +434,26 @@ public boolean isGlow() { return isActive() && mode.get() == Mode.Glow; } + public enum ESPColorMode { + EntityTypeColors, + DistanceColors, + HealthColors; + + @Override + public String toString() { + switch (this) { + case EntityTypeColors: + return "Entity Type Colors"; + case DistanceColors: + return "Distance Colors"; + case HealthColors: + return "Health Colors"; + default: + return super.toString(); + } + } + } + public enum Mode { Box, Wireframe, diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java index bba31172f3..ed36f776bb 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java @@ -208,6 +208,38 @@ public static Color getColorFromDistance(Entity entity) { return distanceColor; } + public static Color getColorFromHealth(Entity entity, Color nonLivingEntityColor) { + // For entities without health (items, pearls, etc.) + if (!(entity instanceof LivingEntity living)) { + return new Color(nonLivingEntityColor); + } + + float health = living.getHealth(); + float maxHealth = living.getMaxHealth(); + + if (maxHealth <= 0) { + return new Color(nonLivingEntityColor); + } + + double percent = health / maxHealth; + + percent = Math.max(0.0, Math.min(1.0, percent)); + + int r, g; + + if (percent < 0.5) { + // Red to Yellow + r = 255; + g = (int) (255 * (percent / 0.5)); + } else { + // Yellow to Green + g = 255; + r = 255 - (int) (255 * ((percent - 0.5) / 0.5)); + } + + return new Color(r, g, 0, 255); + } + public static boolean intersectsWithEntity(Box box, Predicate predicate) { EntityLookup entityLookup = ((WorldAccessor) mc.world).meteor$getEntityLookup(); From 0d721c99f7fdd481fd57425f998ee8ead6f082d6 Mon Sep 17 00:00:00 2001 From: cqb13 Date: Tue, 6 Jan 2026 10:51:54 -0500 Subject: [PATCH 2/4] removed manual casting in getEntityTypeColor --- .../systems/modules/render/ESP.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index cee4fe6754..3746048b69 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -397,19 +397,21 @@ private double getFadeAlpha(Entity entity) { public Color getEntityTypeColor(Entity entity) { if (colorMode.get() == ESPColorMode.DistanceColors) { - if (friendOverride.get() && entity instanceof PlayerEntity - && Friends.get().isFriend((PlayerEntity) entity)) { + if (friendOverride.get() && entity instanceof PlayerEntity player + && Friends.get().isFriend(player)) { return Config.get().friendColor.get(); - } else - return EntityUtils.getColorFromDistance(entity); + } + + return EntityUtils.getColorFromDistance(entity); } else if (colorMode.get() == ESPColorMode.HealthColors) { - if (friendOverride.get() && entity instanceof PlayerEntity - && Friends.get().isFriend((PlayerEntity) entity)) { + if (friendOverride.get() && entity instanceof PlayerEntity player + && Friends.get().isFriend(player)) { return Config.get().friendColor.get(); - } else - return EntityUtils.getColorFromHealth(entity, nonLivingEntityColor.get()); - } else if (entity instanceof PlayerEntity) { - return PlayerUtils.getPlayerColor(((PlayerEntity) entity), playersColor.get()); + } + + return EntityUtils.getColorFromHealth(entity, nonLivingEntityColor.get()); + } else if (entity instanceof PlayerEntity player) { + return PlayerUtils.getPlayerColor(player, playersColor.get()); } else { return switch (entity.getType().getSpawnGroup()) { case CREATURE -> animalsColor.get(); From c82890ba76b7c929b25b8ac33eb056c9c6fc82c6 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 9 Jan 2026 13:19:10 +0000 Subject: [PATCH 3/4] refactor --- .../systems/modules/render/ESP.java | 42 +++++++------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index 3746048b69..381884b65f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -126,16 +126,15 @@ public class ESP extends Module { public final Setting colorMode = sgColors.add(new EnumSetting.Builder() .name("color-mode") .description("Determines the colors used for entities.") - .defaultValue(ESPColorMode.EntityTypeColors) + .defaultValue(ESPColorMode.EntityType) .build() ); public final Setting friendOverride = sgColors.add(new BoolSetting.Builder() .name("show-friend-colors") - .description("Whether or not to override the distance/heatlh color of friends with the friend color.") + .description("Whether or not to override the distance/health color of friends with the friend color.") .defaultValue(true) - .visible(() -> colorMode.get() == ESPColorMode.DistanceColors - || colorMode.get() == ESPColorMode.HealthColors) + .visible(() -> colorMode.get() == ESPColorMode.Distance || colorMode.get() == ESPColorMode.Health) .build() ); @@ -143,7 +142,7 @@ public class ESP extends Module { .name("non-living-entity-color") .description("The color used for non living entities such as dropped items.") .defaultValue(new SettingColor(25, 25, 25)) - .visible(() -> colorMode.get() == ESPColorMode.HealthColors) + .visible(() -> colorMode.get() == ESPColorMode.Health) .build() ); @@ -151,7 +150,7 @@ public class ESP extends Module { .name("players-color") .description("The other player's color.") .defaultValue(new SettingColor(255, 255, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -159,7 +158,7 @@ public class ESP extends Module { .name("animals-color") .description("The animal's color.") .defaultValue(new SettingColor(25, 255, 25, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -167,7 +166,7 @@ public class ESP extends Module { .name("water-animals-color") .description("The water animal's color.") .defaultValue(new SettingColor(25, 25, 255, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -175,7 +174,7 @@ public class ESP extends Module { .name("monsters-color") .description("The monster's color.") .defaultValue(new SettingColor(255, 25, 25, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -183,7 +182,7 @@ public class ESP extends Module { .name("ambient-color") .description("The ambient's color.") .defaultValue(new SettingColor(25, 25, 25, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -191,7 +190,7 @@ public class ESP extends Module { .name("misc-color") .description("The misc color.") .defaultValue(new SettingColor(175, 175, 175, 255)) - .visible(() -> colorMode.get() == ESPColorMode.EntityTypeColors) + .visible(() -> colorMode.get() == ESPColorMode.EntityType) .build() ); @@ -396,14 +395,14 @@ private double getFadeAlpha(Entity entity) { } public Color getEntityTypeColor(Entity entity) { - if (colorMode.get() == ESPColorMode.DistanceColors) { + if (colorMode.get() == ESPColorMode.Distance) { if (friendOverride.get() && entity instanceof PlayerEntity player && Friends.get().isFriend(player)) { return Config.get().friendColor.get(); } return EntityUtils.getColorFromDistance(entity); - } else if (colorMode.get() == ESPColorMode.HealthColors) { + } else if (colorMode.get() == ESPColorMode.Health) { if (friendOverride.get() && entity instanceof PlayerEntity player && Friends.get().isFriend(player)) { return Config.get().friendColor.get(); @@ -437,22 +436,13 @@ public boolean isGlow() { } public enum ESPColorMode { - EntityTypeColors, - DistanceColors, - HealthColors; + EntityType, + Distance, + Health; @Override public String toString() { - switch (this) { - case EntityTypeColors: - return "Entity Type Colors"; - case DistanceColors: - return "Distance Colors"; - case HealthColors: - return "Health Colors"; - default: - return super.toString(); - } + return this == EntityType ? "Entity Type" : super.toString(); } } From f1cb1b093b205a98fb10ab14971f3e6baa093bcd Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 9 Jan 2026 13:28:22 +0000 Subject: [PATCH 4/4] rearrange --- .../systems/modules/render/ESP.java | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index 381884b65f..a649a0539b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -395,31 +395,27 @@ private double getFadeAlpha(Entity entity) { } public Color getEntityTypeColor(Entity entity) { - if (colorMode.get() == ESPColorMode.Distance) { - if (friendOverride.get() && entity instanceof PlayerEntity player - && Friends.get().isFriend(player)) { - return Config.get().friendColor.get(); - } - - return EntityUtils.getColorFromDistance(entity); - } else if (colorMode.get() == ESPColorMode.Health) { - if (friendOverride.get() && entity instanceof PlayerEntity player - && Friends.get().isFriend(player)) { - return Config.get().friendColor.get(); + if (colorMode.get() == ESPColorMode.EntityType) { + if (entity instanceof PlayerEntity player) { + return PlayerUtils.getPlayerColor(player, playersColor.get()); + } else { + return switch (entity.getType().getSpawnGroup()) { + case CREATURE -> animalsColor.get(); + case WATER_AMBIENT, WATER_CREATURE, UNDERGROUND_WATER_CREATURE, AXOLOTLS -> waterAnimalsColor.get(); + case MONSTER -> monstersColor.get(); + case AMBIENT -> ambientColor.get(); + default -> miscColor.get(); + }; } + } - return EntityUtils.getColorFromHealth(entity, nonLivingEntityColor.get()); - } else if (entity instanceof PlayerEntity player) { - return PlayerUtils.getPlayerColor(player, playersColor.get()); - } else { - return switch (entity.getType().getSpawnGroup()) { - case CREATURE -> animalsColor.get(); - case WATER_AMBIENT, WATER_CREATURE, UNDERGROUND_WATER_CREATURE, AXOLOTLS -> waterAnimalsColor.get(); - case MONSTER -> monstersColor.get(); - case AMBIENT -> ambientColor.get(); - default -> miscColor.get(); - }; + if (friendOverride.get() && entity instanceof PlayerEntity player + && Friends.get().isFriend(player)) { + return Config.get().friendColor.get(); } + + if (colorMode.get() == ESPColorMode.Health) return EntityUtils.getColorFromHealth(entity, nonLivingEntityColor.get()); + else return EntityUtils.getColorFromDistance(entity); } @Override