Бюджет гайда-бутылка пива , и пузо ежова под рукой. НЕ ПИЗДИТЬ НОГАМИ! Так-с , нам нужно создать переменные с цветами , которые будем юзать в нашем переливании цветов-у меня это зеленый,красный,желтый.У вас же они могут быть другие,по вашему вкусу. // Градиентный переход цвета полоски здоровья Color greenColor = new Color(0, 153, 76); Color yellowColor = new Color(204, 204, 0); Color redColor = new Color(204, 0, 0); Далее мы создаем оператор,который вычисляет процентное значение здоровья путем деления текущего здоровья (hp) на максимальное здоровье (maxHp) Также создаем переменную currentColor, которая будет использоваться для хранения цвета в зависимости от процентного значения здоровья. float healthPercentage = hp / maxHp; Color currentColor; Далее создаем условное выражение, которое выбирает цвет в зависимости от процентного значения здоровья (healthPercentage). Если healthPercentage больше или равно 0.5, то это означает, что здоровье более чем половина максимального значения. В этом случае используется переменная ratio, которая вычисляется как (healthPercentage - 0.5) * 2, чтобы преобразовать диапазон значений в интервал от 0 до 1. Затем функция blendColors() вызывается с использованием yellowColor и greenColor, а также ratio для плавного смешивания этих двух цветов в пропорции, определенной значением ratio. Если healthPercentage меньше 0.5, то это означает, что здоровье менее чем половина максимального значения. В этом случае используется другая переменная ratio, которая вычисляется как healthPercentage * 2, чтобы также преобразовать диапазон значений в интервал от 0 до 1. Затем снова вызывается blendColors(), но уже с использованием redColor и yellowColor, и значение ratio для плавного смешивания цветов. if (healthPercentage >= 0.5f) { float ratio = (healthPercentage - 0.5f) * 2; currentColor = blendColors(yellowColor, greenColor, ratio); } else { float ratio = healthPercentage * 2; currentColor = blendColors(redColor, yellowColor, ratio); } Вот что в итоге вышло- Color greenColor = new Color(0, 153, 76); Color yellowColor = new Color(204, 204, 0); Color redColor = new Color(204, 0, 0); float healthPercentage = hp / maxHp; Color currentColor; if (healthPercentage >= 0.5f) { float ratio = (healthPercentage - 0.5f) * 2; currentColor = blendColors(yellowColor, greenColor, ratio); } else { float ratio = healthPercentage * 2; currentColor = blendColors(redColor, yellowColor, ratio); } Я думаю не стоит говорить,что это мы пихаем в метод render,перед рендером самой полоски ХП Далее у нас осталось самое простое-зарендерить это все. Все что нужно - это заменить значение цвета с style.getFirstColor().getRGB(), style.getSecondColor().getRGB() на наш currentColor.getRGB У меня вышло так - DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2.0f - 2.0f, (width - 42.0f) * this.healthAnimation, 7.0f, new Vector4f(4.0f, 4.0f, 4.0f, 4.0f), currentColor.getRGB()); DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2.0f - 2.0f, (width - 42.0f) * this.healthAnimation, 7.0f, new Vector4f(4.0f, 4.0f, 4.0f, 4.0f),currentColor.getRGB()); DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2.0f - 2.0f, (width - 42.0f) * this.absorptionAnimation, 7.0f, new Vector4f(4.0f, 4.0f, 4.0f, 4.0f), currentColor.getRGB()); Вот что у нас вышло - клик Всем спасибо кто был,буду рад клоунам и попкорну.