Визуальная часть Cooldown 3.1

норм??


  • Всего проголосовало
    24
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Июн 2022
Сообщения
23
Реакции
0
Выберите загрузчик игры
  1. OptiFine
Всем привет! решил сделать красивее кулдаун
нужно чуть поправить и будет бомба:roflanEbalo:
взял с темы: src

ss-
1748460899762.png


CooldownRenderer:
Expand Collapse Copy
/**
* [USER=35246]@Author[/USER] k1dalovo3 + wexzzz
* [USER=30931]@since[/USER] 28 мая 2025 г.
*/

package im.expensive.ui.display.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.utils.drag.Dragging;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class CooldownRenderer implements ElementRenderer {

    final Dragging dragging;
    float width;
    float height;

    private static final Item[] TRACKED_ITEMS = {
            Items.ENDER_PEARL,
            Items.CHORUS_FRUIT,
            Items.FIREWORK_ROCKET,
            Items.SHIELD,
            Items.CROSSBOW,
            Items.GOLDEN_APPLE,
            Items.ENCHANTED_GOLDEN_APPLE,
            Items.TOTEM_OF_UNDYING,
            Items.TRIDENT,
            Items.SNOWBALL,
            Items.DRIED_KELP,
            Items.ENDER_EYE,
            Items.NETHERITE_SCRAP,
            Items.EXPERIENCE_BOTTLE

    };

    [USER=1367676]@override[/USER]
    public void render(EventDisplay eventDisplay) {
        Minecraft mc = Minecraft.getInstance();

        if (mc.player == null) return;

        MatrixStack ms = eventDisplay.getMatrixStack();

        float x = dragging.getX();
        float y = dragging.getY();

        float textSize = 4.93f;
        float timeTextSize = 6.16f;
        float titleTextSize = 6.16f;
        float innerPadding = 8.62f;
        float iconSize = 11.09f;
        float lineSpacing = 6.16f;
        float iconToTextGap = 12.32f;

        int activeCooldowns = 0;
        float longestLineWidth = 0;

        for (Item item : TRACKED_ITEMS) {
            if (!mc.player.getCooldownTracker().hasCooldown(item)) continue;

            String itemName = getReadableName(item);
            String timeLeft = formatTime(item);

            float currentLineWidth = iconSize + iconToTextGap +
                    Fonts.sfMedium.getWidth(itemName, textSize) +
                    Fonts.sfMedium.getWidth(timeLeft, timeTextSize) +
                    innerPadding * 2 + 8;

            if (currentLineWidth > longestLineWidth) {
                longestLineWidth = currentLineWidth;
            }
            activeCooldowns++;
        }

        if (activeCooldowns == 0) return;

        String title = "Cooldown";
        float titleWidth = Fonts.sfMedium.getWidth(title, titleTextSize);

        float blockWidth = Math.max(Math.max(longestLineWidth, titleWidth + innerPadding * 2), 70);
        float blockHeight = innerPadding + titleTextSize + 5 +
                activeCooldowns * (iconSize + lineSpacing) - lineSpacing + innerPadding;

        int backgroundTop = ColorUtils.rgba(30, 30, 40, 210);
        int backgroundBottom = ColorUtils.rgba(15, 15, 25, 210);
        int borderColor = ColorUtils.rgba(255, 255, 255, 35);

        DisplayUtils.drawShadow(x, y, blockWidth, blockHeight, 10, ColorUtils.rgba(0, 0, 0, 90));
        DisplayUtils.drawGradientRound(x, y, blockWidth, blockHeight, 4,
                backgroundTop, backgroundTop, backgroundBottom, backgroundBottom);
        DisplayUtils.drawRoundedOutline(x, y, blockWidth, blockHeight, 4, 1f, borderColor);

        float titleX = x + (blockWidth - titleWidth) / 2f;
        float titleY = y + innerPadding - 2;
        Fonts.sfMedium.drawText(ms, title, titleX, titleY, ColorUtils.rgb(255, 255, 255), titleTextSize);

        float currentY = y + innerPadding + titleTextSize + 4;
        ItemRenderer itemRenderer = mc.getItemRenderer();

        for (Item item : TRACKED_ITEMS) {
            if (!mc.player.getCooldownTracker().hasCooldown(item)) continue;

            String itemName = getReadableName(item);
            String timeLeft = formatTime(item);

            float lineHeight = Math.max(iconSize, textSize);
            float iconY = currentY + (lineHeight - iconSize) / 2f;
            float textY = currentY + (lineHeight - textSize) / 2f;

            itemRenderer.renderItemAndEffectIntoGUI(new ItemStack(item),
                    (int)(x + innerPadding), (int)iconY);

            float textX = x + innerPadding + iconSize + iconToTextGap;
            Fonts.sfMedium.drawText(ms, itemName, textX, textY, ColorUtils.rgb(255, 255, 255), textSize);

            float timeX = textX + Fonts.sfMedium.getWidth(itemName, textSize) + 10;
            Fonts.sfMedium.drawText(ms, timeLeft, timeX, textY - 1, ColorUtils.rgb(170, 170, 170), timeTextSize);

            currentY += lineHeight + lineSpacing;
        }

        width = blockWidth;
        height = blockHeight;
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private String getReadableName(Item item) {

        if (item == Items.GOLDEN_APPLE) return "Гепл";
        if (item == Items.ENCHANTED_GOLDEN_APPLE) return "Чарка";
        if (item == Items.ENDER_PEARL) return "Эндер-жемчуг";
        if (item == Items.CHORUS_FRUIT) return "Хорус";
        if (item == Items.FIREWORK_ROCKET) return "Фейерверк";
        if (item == Items.TOTEM_OF_UNDYING) return "Тотем";
        if (item == Items.TRIDENT) return "Трезубец";
        if (item == Items.SNOWBALL) return "Снежок";
        if (item == Items.SHIELD) return "Щит";
        if (item == Items.CROSSBOW) return "Арбалет";
        if (item == Items.EXPERIENCE_BOTTLE) return "Пузырёк Опыта";

        return new ItemStack(item).getDisplayName().getString();
    }

    private String formatTime(Item item) {
        float cooldownProgress = Minecraft.getInstance().player.getCooldownTracker().getCooldown(item, 0);
        int ticksRemaining = (int)(cooldownProgress * 20);
        float secondsLeft = ticksRemaining / 20.0f;

        return String.format("%.1fs", secondsLeft);
    }
}
 

Вложения

  • 1748460630230.png
    1748460630230.png
    14.9 KB · Просмотры: 126
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
6 месяцев типы не могли спастить кулдауны
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Items.ENDER_PEARL,
Items.CHORUS_FRUIT,
Items.FIREWORK_ROCKET,
Items.SHIELD,
Items.CROSSBOW,
Items.GOLDEN_APPLE,
Items.ENCHANTED_GOLDEN_APPLE,
Items.TOTEM_OF_UNDYING,
Items.TRIDENT,
Items.SNOWBALL,
Items.DRIED_KELP,
Items.ENDER_EYE,
Items.NETHERITE_SCRAP,
Items.EXPERIENCE_BOTTLE

};

шедевр
 
Всем привет! решил сделать красивее кулдаун
нужно чуть поправить и будет бомба:roflanEbalo:
взял с темы: src

ss-Посмотреть вложение 307452

CooldownRenderer:
Expand Collapse Copy
/**
* [USER=35246]@Author[/USER] k1dalovo3 + wexzzz
* [USER=30931]@since[/USER] 28 мая 2025 г.
*/

package im.expensive.ui.display.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.utils.drag.Dragging;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class CooldownRenderer implements ElementRenderer {

    final Dragging dragging;
    float width;
    float height;

    private static final Item[] TRACKED_ITEMS = {
            Items.ENDER_PEARL,
            Items.CHORUS_FRUIT,
            Items.FIREWORK_ROCKET,
            Items.SHIELD,
            Items.CROSSBOW,
            Items.GOLDEN_APPLE,
            Items.ENCHANTED_GOLDEN_APPLE,
            Items.TOTEM_OF_UNDYING,
            Items.TRIDENT,
            Items.SNOWBALL,
            Items.DRIED_KELP,
            Items.ENDER_EYE,
            Items.NETHERITE_SCRAP,
            Items.EXPERIENCE_BOTTLE

    };

    [USER=1367676]@override[/USER]
    public void render(EventDisplay eventDisplay) {
        Minecraft mc = Minecraft.getInstance();

        if (mc.player == null) return;

        MatrixStack ms = eventDisplay.getMatrixStack();

        float x = dragging.getX();
        float y = dragging.getY();

        float textSize = 4.93f;
        float timeTextSize = 6.16f;
        float titleTextSize = 6.16f;
        float innerPadding = 8.62f;
        float iconSize = 11.09f;
        float lineSpacing = 6.16f;
        float iconToTextGap = 12.32f;

        int activeCooldowns = 0;
        float longestLineWidth = 0;

        for (Item item : TRACKED_ITEMS) {
            if (!mc.player.getCooldownTracker().hasCooldown(item)) continue;

            String itemName = getReadableName(item);
            String timeLeft = formatTime(item);

            float currentLineWidth = iconSize + iconToTextGap +
                    Fonts.sfMedium.getWidth(itemName, textSize) +
                    Fonts.sfMedium.getWidth(timeLeft, timeTextSize) +
                    innerPadding * 2 + 8;

            if (currentLineWidth > longestLineWidth) {
                longestLineWidth = currentLineWidth;
            }
            activeCooldowns++;
        }

        if (activeCooldowns == 0) return;

        String title = "Cooldown";
        float titleWidth = Fonts.sfMedium.getWidth(title, titleTextSize);

        float blockWidth = Math.max(Math.max(longestLineWidth, titleWidth + innerPadding * 2), 70);
        float blockHeight = innerPadding + titleTextSize + 5 +
                activeCooldowns * (iconSize + lineSpacing) - lineSpacing + innerPadding;

        int backgroundTop = ColorUtils.rgba(30, 30, 40, 210);
        int backgroundBottom = ColorUtils.rgba(15, 15, 25, 210);
        int borderColor = ColorUtils.rgba(255, 255, 255, 35);

        DisplayUtils.drawShadow(x, y, blockWidth, blockHeight, 10, ColorUtils.rgba(0, 0, 0, 90));
        DisplayUtils.drawGradientRound(x, y, blockWidth, blockHeight, 4,
                backgroundTop, backgroundTop, backgroundBottom, backgroundBottom);
        DisplayUtils.drawRoundedOutline(x, y, blockWidth, blockHeight, 4, 1f, borderColor);

        float titleX = x + (blockWidth - titleWidth) / 2f;
        float titleY = y + innerPadding - 2;
        Fonts.sfMedium.drawText(ms, title, titleX, titleY, ColorUtils.rgb(255, 255, 255), titleTextSize);

        float currentY = y + innerPadding + titleTextSize + 4;
        ItemRenderer itemRenderer = mc.getItemRenderer();

        for (Item item : TRACKED_ITEMS) {
            if (!mc.player.getCooldownTracker().hasCooldown(item)) continue;

            String itemName = getReadableName(item);
            String timeLeft = formatTime(item);

            float lineHeight = Math.max(iconSize, textSize);
            float iconY = currentY + (lineHeight - iconSize) / 2f;
            float textY = currentY + (lineHeight - textSize) / 2f;

            itemRenderer.renderItemAndEffectIntoGUI(new ItemStack(item),
                    (int)(x + innerPadding), (int)iconY);

            float textX = x + innerPadding + iconSize + iconToTextGap;
            Fonts.sfMedium.drawText(ms, itemName, textX, textY, ColorUtils.rgb(255, 255, 255), textSize);

            float timeX = textX + Fonts.sfMedium.getWidth(itemName, textSize) + 10;
            Fonts.sfMedium.drawText(ms, timeLeft, timeX, textY - 1, ColorUtils.rgb(170, 170, 170), timeTextSize);

            currentY += lineHeight + lineSpacing;
        }

        width = blockWidth;
        height = blockHeight;
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private String getReadableName(Item item) {

        if (item == Items.GOLDEN_APPLE) return "Гепл";
        if (item == Items.ENCHANTED_GOLDEN_APPLE) return "Чарка";
        if (item == Items.ENDER_PEARL) return "Эндер-жемчуг";
        if (item == Items.CHORUS_FRUIT) return "Хорус";
        if (item == Items.FIREWORK_ROCKET) return "Фейерверк";
        if (item == Items.TOTEM_OF_UNDYING) return "Тотем";
        if (item == Items.TRIDENT) return "Трезубец";
        if (item == Items.SNOWBALL) return "Снежок";
        if (item == Items.SHIELD) return "Щит";
        if (item == Items.CROSSBOW) return "Арбалет";
        if (item == Items.EXPERIENCE_BOTTLE) return "Пузырёк Опыта";

        return new ItemStack(item).getDisplayName().getString();
    }

    private String formatTime(Item item) {
        float cooldownProgress = Minecraft.getInstance().player.getCooldownTracker().getCooldown(item, 0);
        int ticksRemaining = (int)(cooldownProgress * 20);
        float secondsLeft = ticksRemaining / 20.0f;

        return String.format("%.1fs", secondsLeft);
    }
}
Хуйня
 
Назад
Сверху Снизу