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

взял с темы: src
ss-
			
				CooldownRenderer:
			
		
		
		/**
* [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);
    }
}Вложения
			
				Последнее редактирование: 
			
		
	
								
								
									
	
								
							
							 
				 
	 
 
		 
			 
 
		 
 
		
 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		