Начинающий
- Статус
- Оффлайн
- Регистрация
- 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);
}
}
Вложения
Последнее редактирование:
