Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -123,66 +123,74 @@ public class ESP extends Module {

// Colors

public final Setting<Boolean> distance = sgColors.add(new BoolSetting.Builder()
.name("distance-colors")
.description("Changes the color of tracers depending on distance.")
.defaultValue(false)
public final Setting<ESPColorMode> colorMode = sgColors.add(new EnumSetting.Builder<ESPColorMode>()
.name("color-mode")
.description("Determines the colors used for entities.")
.defaultValue(ESPColorMode.EntityType)
.build()
);

public final Setting<Boolean> 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/health color of friends with the friend color.")
.defaultValue(true)
.visible(distance::get)
.visible(() -> colorMode.get() == ESPColorMode.Distance || colorMode.get() == ESPColorMode.Health)
.build()
);

private final Setting<SettingColor> 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.Health)
.build()
);

private final Setting<SettingColor> playersColor = sgColors.add(new ColorSetting.Builder()
.name("players-color")
.description("The other player's color.")
.defaultValue(new SettingColor(255, 255, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

private final Setting<SettingColor> animalsColor = sgColors.add(new ColorSetting.Builder()
.name("animals-color")
.description("The animal's color.")
.defaultValue(new SettingColor(25, 255, 25, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

private final Setting<SettingColor> waterAnimalsColor = sgColors.add(new ColorSetting.Builder()
.name("water-animals-color")
.description("The water animal's color.")
.defaultValue(new SettingColor(25, 25, 255, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

private final Setting<SettingColor> monstersColor = sgColors.add(new ColorSetting.Builder()
.name("monsters-color")
.description("The monster's color.")
.defaultValue(new SettingColor(255, 25, 25, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

private final Setting<SettingColor> ambientColor = sgColors.add(new ColorSetting.Builder()
.name("ambient-color")
.description("The ambient's color.")
.defaultValue(new SettingColor(25, 25, 25, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

private final Setting<SettingColor> miscColor = sgColors.add(new ColorSetting.Builder()
.name("misc-color")
.description("The misc color.")
.defaultValue(new SettingColor(175, 175, 175, 255))
.visible(() -> !distance.get())
.visible(() -> colorMode.get() == ESPColorMode.EntityType)
.build()
);

Expand Down Expand Up @@ -387,21 +395,27 @@ private double getFadeAlpha(Entity entity) {
}

public Color getEntityTypeColor(Entity entity) {
if (distance.get()) {
if (friendOverride.get() && entity instanceof PlayerEntity && Friends.get().isFriend((PlayerEntity) entity)) {
return Config.get().friendColor.get();
} else return EntityUtils.getColorFromDistance(entity);
} else if (entity instanceof PlayerEntity) {
return PlayerUtils.getPlayerColor(((PlayerEntity) entity), 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 (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();
};
}
}

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
Expand All @@ -417,6 +431,17 @@ public boolean isGlow() {
return isActive() && mode.get() == Mode.Glow;
}

public enum ESPColorMode {
EntityType,
Distance,
Health;

@Override
public String toString() {
return this == EntityType ? "Entity Type" : super.toString();
}
}

public enum Mode {
Box,
Wireframe,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Entity> predicate) {
EntityLookup<Entity> entityLookup = ((WorldAccessor) mc.world).meteor$getEntityLookup();

Expand Down