Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Визуальная часть Cooldowns Any Item

  • Автор темы Автор темы Moyten
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
6 Дек 2023
Сообщения
517
Реакции
3
Выберите загрузчик игры
  1. Vanilla
Решил чучуть порадовать вас. Сливаю кд на любой предмет с отображением кд в виде полосочки,
по сути любая база, но рендер 3.1
SS=
1744829460432.jpeg



DW=
Cooldowns:
Expand Collapse Copy
package fgnepasti.wonderful.ui.display.wonderful;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import fgnepasti.wonderful.Wonderful;
import fgnepasti.wonderful.events.EventDisplay;
import fgnepasti.wonderful.ui.display.ElementRenderer;
import fgnepasti.wonderful.ui.interfaces.naselfcodilgavna.ClickGui;
import fgnepasti.wonderful.ui.styles.Style;
import fgnepasti.wonderful.utils.animations.Direction;
import fgnepasti.wonderful.utils.animations.impl.ElasticAnimation;
import fgnepasti.wonderful.utils.drag.Dragging;
import fgnepasti.wonderful.utils.math.MathUtil;
import fgnepasti.wonderful.utils.render.ColorUtils;
import fgnepasti.wonderful.utils.render.DisplayUtils;
import fgnepasti.wonderful.utils.render.Scissor;
import fgnepasti.wonderful.utils.render.font.Fonts;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

import java.util.HashSet;
import java.util.Set;

@RequiredArgsConstructor
public class CooldownsRenderer implements ElementRenderer {

    final Dragging dragging;

    final ElasticAnimation animation = new ElasticAnimation(300,1, 15, 3, false);

    float width;
    float height;

    private long startTime = -1;

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

        float posX = dragging.getX();
        float posY = dragging.getY();
        float fontSize = 7;
        float padding = 5;

        animation.setDirection((height > 20 || mc.currentScreen instanceof ChatScreen || mc.currentScreen instanceof fgnepasti.wonderful.ui.interfaces.newdropdown.ClickGui || mc.currentScreen instanceof ClickGui) ? Direction.FORWARDS : Direction.BACKWARDS);

        GlStateManager.pushMatrix();
        GlStateManager.translated(posX + (width / 2), posY + (height / 2), 0);
        GlStateManager.scaled((float) animation.getOutput(), (float) animation.getOutput(), (float) animation.getOutput());
        GlStateManager.translated(-(posX + (width / 2)), -(posY + (height / 2)), 0);
        DisplayUtils.drawGlow(posX,posY,width,height,4, ColorUtils.rgba(29, 31, 42, 150));

        Scissor.push();
        Scissor.setFromComponentCoordinates(posX, posY, width, height + 24);


        Fonts.sf_semibold.drawCenteredText(ms, "Cooldowns", posX + width / 2, posY + padding - 0.5f, ColorUtils.rgb(255, 255, 255), fontSize, 0.1f);
        fgnepasti.wonderful.utils.font.Fonts.oldNextGen[16].drawString(eventDisplay.getMatrixStack(), "O", posX + 6, posY + padding + 2f, ColorUtils.rgb(255, 255, 255));

        posY += fontSize + padding * 2;

        float maxWidth = Fonts.sf_semibold.getWidth("Cooldowns", fontSize) + padding * 2;
        float localHeight = fontSize + padding * 2;
        DisplayUtils.drawRectHorizontalW(posX + 0.5f, posY - 2, width - 1, 2.5f, 3, ColorUtils.rgba(0, 0, 0, (int) (255 * 0.25f)));


        posY += 3f;

        Set<Item> acitveCooldowns = new HashSet<>();

        for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
            ItemStack itemStack = mc.player.inventory.getStackInSlot(i);

//            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
//                print("Тута кд на айтем: " + itemStack.getItem().getName().getString());
//            }z


            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
                if (!acitveCooldowns.contains(itemStack.getItem())) {
                    renderCooldownItem(ms, posX, posY, fontSize, padding, itemStack, mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()), posY);

                    acitveCooldowns.add(itemStack.getItem());
                    //print("инфо о кд: " + itemStack + " " + mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()));
                    posY += (fontSize + padding);
                    localHeight += (fontSize + padding);
                }
            }
        }


        Scissor.unset();
        Scissor.pop();
        GlStateManager.popMatrix();
        width = MathUtil.lerp(width, Math.max(maxWidth, 80.0f), 20.0f);
        height = MathUtil.lerp(height, Math.max(localHeight + 2.5f, 10.0f), 50.0f);
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private float renderCooldownItem(MatrixStack ms, float posX, float posY, float fontSize, float padding, ItemStack itemStack, float cooldownDuration, float currentPosY) {
        boolean isItemInInventory = mc.player.inventory.hasItemStack(itemStack);
        long currentTime = System.currentTimeMillis();
        String cooldownText = "";

        if (isItemInInventory && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
            if (startTime == -1) {
                startTime = currentTime;
            }
            float cooldownTicks = cooldownDuration;
            cooldownText = cooldownTicks + "";

            if (cooldownTicks <= 0) {
                startTime = 0;
            }
        }

        else if (isItemInInventory) {
            cooldownText = "";
        }

        String itemName = itemStack.getItem().getName().getString();
        if (isItemInInventory) {
            if (itemStack.getItem() == Items.ENCHANTED_GOLDEN_APPLE) {
                itemName = "Чарка";
            } else if (itemStack.getItem() == Items.ENDER_EYE) {
                itemName = "Дезорент";
            } else if (itemStack.getItem() == Items.NETHERITE_SCRAP) {
                itemName = "Трапка";
            } else if (itemStack.getItem() == Items.SUGAR) {
                itemName = "Явная пыль";
            } else if (itemStack.getItem() == Items.ENDER_PEARL) {
                itemName = "Эндер-перл";
            } else if (itemStack.getItem() == Items.GOLDEN_APPLE) {
                itemName = "Гэпл";
            } else if (itemStack.getItem() == Items.DRIED_KELP) {
                itemName = "Пласт";
            }

            if (!cooldownText.isEmpty()) {
                Style style = Wonderful.getInstance().getStyleManager().getCurrentStyle();
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30, 2.5f, 1, ColorUtils.rgb(12, 12, 12));
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30 * cooldownDuration, 2.5f, 1, style.getFirstColor().getRGB());
            }
        }
        Scissor.push();
        Scissor.setFromComponentCoordinates(posX + padding, currentPosY, 50 - 10, 10);
        Fonts.sf_medium.drawText(ms, itemName, posX + padding, currentPosY + 2.5f,  ColorUtils.rgba(255, 255, 255, 255), fontSize, 0.1f);
        Scissor.unset();
        Scissor.pop();
        currentPosY += (padding / 1.2f);
        return currentPosY;
    }
}
 
Решил чучуть порадовать вас. Сливаю кд на любой предмет с отображением кд в виде полосочки,
по сути любая база, но рендер 3.1
SS=Посмотреть вложение 303847


DW=
Cooldowns:
Expand Collapse Copy
package fgnepasti.wonderful.ui.display.wonderful;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import fgnepasti.wonderful.Wonderful;
import fgnepasti.wonderful.events.EventDisplay;
import fgnepasti.wonderful.ui.display.ElementRenderer;
import fgnepasti.wonderful.ui.interfaces.naselfcodilgavna.ClickGui;
import fgnepasti.wonderful.ui.styles.Style;
import fgnepasti.wonderful.utils.animations.Direction;
import fgnepasti.wonderful.utils.animations.impl.ElasticAnimation;
import fgnepasti.wonderful.utils.drag.Dragging;
import fgnepasti.wonderful.utils.math.MathUtil;
import fgnepasti.wonderful.utils.render.ColorUtils;
import fgnepasti.wonderful.utils.render.DisplayUtils;
import fgnepasti.wonderful.utils.render.Scissor;
import fgnepasti.wonderful.utils.render.font.Fonts;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

import java.util.HashSet;
import java.util.Set;

@RequiredArgsConstructor
public class CooldownsRenderer implements ElementRenderer {

    final Dragging dragging;

    final ElasticAnimation animation = new ElasticAnimation(300,1, 15, 3, false);

    float width;
    float height;

    private long startTime = -1;

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

        float posX = dragging.getX();
        float posY = dragging.getY();
        float fontSize = 7;
        float padding = 5;

        animation.setDirection((height > 20 || mc.currentScreen instanceof ChatScreen || mc.currentScreen instanceof fgnepasti.wonderful.ui.interfaces.newdropdown.ClickGui || mc.currentScreen instanceof ClickGui) ? Direction.FORWARDS : Direction.BACKWARDS);

        GlStateManager.pushMatrix();
        GlStateManager.translated(posX + (width / 2), posY + (height / 2), 0);
        GlStateManager.scaled((float) animation.getOutput(), (float) animation.getOutput(), (float) animation.getOutput());
        GlStateManager.translated(-(posX + (width / 2)), -(posY + (height / 2)), 0);
        DisplayUtils.drawGlow(posX,posY,width,height,4, ColorUtils.rgba(29, 31, 42, 150));

        Scissor.push();
        Scissor.setFromComponentCoordinates(posX, posY, width, height + 24);


        Fonts.sf_semibold.drawCenteredText(ms, "Cooldowns", posX + width / 2, posY + padding - 0.5f, ColorUtils.rgb(255, 255, 255), fontSize, 0.1f);
        fgnepasti.wonderful.utils.font.Fonts.oldNextGen[16].drawString(eventDisplay.getMatrixStack(), "O", posX + 6, posY + padding + 2f, ColorUtils.rgb(255, 255, 255));

        posY += fontSize + padding * 2;

        float maxWidth = Fonts.sf_semibold.getWidth("Cooldowns", fontSize) + padding * 2;
        float localHeight = fontSize + padding * 2;
        DisplayUtils.drawRectHorizontalW(posX + 0.5f, posY - 2, width - 1, 2.5f, 3, ColorUtils.rgba(0, 0, 0, (int) (255 * 0.25f)));


        posY += 3f;

        Set<Item> acitveCooldowns = new HashSet<>();

        for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
            ItemStack itemStack = mc.player.inventory.getStackInSlot(i);

//            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
//                print("Тута кд на айтем: " + itemStack.getItem().getName().getString());
//            }z


            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
                if (!acitveCooldowns.contains(itemStack.getItem())) {
                    renderCooldownItem(ms, posX, posY, fontSize, padding, itemStack, mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()), posY);

                    acitveCooldowns.add(itemStack.getItem());
                    //print("инфо о кд: " + itemStack + " " + mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()));
                    posY += (fontSize + padding);
                    localHeight += (fontSize + padding);
                }
            }
        }


        Scissor.unset();
        Scissor.pop();
        GlStateManager.popMatrix();
        width = MathUtil.lerp(width, Math.max(maxWidth, 80.0f), 20.0f);
        height = MathUtil.lerp(height, Math.max(localHeight + 2.5f, 10.0f), 50.0f);
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private float renderCooldownItem(MatrixStack ms, float posX, float posY, float fontSize, float padding, ItemStack itemStack, float cooldownDuration, float currentPosY) {
        boolean isItemInInventory = mc.player.inventory.hasItemStack(itemStack);
        long currentTime = System.currentTimeMillis();
        String cooldownText = "";

        if (isItemInInventory && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
            if (startTime == -1) {
                startTime = currentTime;
            }
            float cooldownTicks = cooldownDuration;
            cooldownText = cooldownTicks + "";

            if (cooldownTicks <= 0) {
                startTime = 0;
            }
        }

        else if (isItemInInventory) {
            cooldownText = "";
        }

        String itemName = itemStack.getItem().getName().getString();
        if (isItemInInventory) {
            if (itemStack.getItem() == Items.ENCHANTED_GOLDEN_APPLE) {
                itemName = "Чарка";
            } else if (itemStack.getItem() == Items.ENDER_EYE) {
                itemName = "Дезорент";
            } else if (itemStack.getItem() == Items.NETHERITE_SCRAP) {
                itemName = "Трапка";
            } else if (itemStack.getItem() == Items.SUGAR) {
                itemName = "Явная пыль";
            } else if (itemStack.getItem() == Items.ENDER_PEARL) {
                itemName = "Эндер-перл";
            } else if (itemStack.getItem() == Items.GOLDEN_APPLE) {
                itemName = "Гэпл";
            } else if (itemStack.getItem() == Items.DRIED_KELP) {
                itemName = "Пласт";
            }

            if (!cooldownText.isEmpty()) {
                Style style = Wonderful.getInstance().getStyleManager().getCurrentStyle();
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30, 2.5f, 1, ColorUtils.rgb(12, 12, 12));
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30 * cooldownDuration, 2.5f, 1, style.getFirstColor().getRGB());
            }
        }
        Scissor.push();
        Scissor.setFromComponentCoordinates(posX + padding, currentPosY, 50 - 10, 10);
        Fonts.sf_medium.drawText(ms, itemName, posX + padding, currentPosY + 2.5f,  ColorUtils.rgba(255, 255, 255, 255), fontSize, 0.1f);
        Scissor.unset();
        Scissor.pop();
        currentPosY += (padding / 1.2f);
        return currentPosY;
    }
}
дай drawGlow и эту херню как решить
вфыфвы.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Решил чучуть порадовать вас. Сливаю кд на любой предмет с отображением кд в виде полосочки,
по сути любая база, но рендер 3.1
SS=Посмотреть вложение 303847


DW=
Cooldowns:
Expand Collapse Copy
package fgnepasti.wonderful.ui.display.wonderful;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import fgnepasti.wonderful.Wonderful;
import fgnepasti.wonderful.events.EventDisplay;
import fgnepasti.wonderful.ui.display.ElementRenderer;
import fgnepasti.wonderful.ui.interfaces.naselfcodilgavna.ClickGui;
import fgnepasti.wonderful.ui.styles.Style;
import fgnepasti.wonderful.utils.animations.Direction;
import fgnepasti.wonderful.utils.animations.impl.ElasticAnimation;
import fgnepasti.wonderful.utils.drag.Dragging;
import fgnepasti.wonderful.utils.math.MathUtil;
import fgnepasti.wonderful.utils.render.ColorUtils;
import fgnepasti.wonderful.utils.render.DisplayUtils;
import fgnepasti.wonderful.utils.render.Scissor;
import fgnepasti.wonderful.utils.render.font.Fonts;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

import java.util.HashSet;
import java.util.Set;

@RequiredArgsConstructor
public class CooldownsRenderer implements ElementRenderer {

    final Dragging dragging;

    final ElasticAnimation animation = new ElasticAnimation(300,1, 15, 3, false);

    float width;
    float height;

    private long startTime = -1;

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

        float posX = dragging.getX();
        float posY = dragging.getY();
        float fontSize = 7;
        float padding = 5;

        animation.setDirection((height > 20 || mc.currentScreen instanceof ChatScreen || mc.currentScreen instanceof fgnepasti.wonderful.ui.interfaces.newdropdown.ClickGui || mc.currentScreen instanceof ClickGui) ? Direction.FORWARDS : Direction.BACKWARDS);

        GlStateManager.pushMatrix();
        GlStateManager.translated(posX + (width / 2), posY + (height / 2), 0);
        GlStateManager.scaled((float) animation.getOutput(), (float) animation.getOutput(), (float) animation.getOutput());
        GlStateManager.translated(-(posX + (width / 2)), -(posY + (height / 2)), 0);
        DisplayUtils.drawGlow(posX,posY,width,height,4, ColorUtils.rgba(29, 31, 42, 150));

        Scissor.push();
        Scissor.setFromComponentCoordinates(posX, posY, width, height + 24);


        Fonts.sf_semibold.drawCenteredText(ms, "Cooldowns", posX + width / 2, posY + padding - 0.5f, ColorUtils.rgb(255, 255, 255), fontSize, 0.1f);
        fgnepasti.wonderful.utils.font.Fonts.oldNextGen[16].drawString(eventDisplay.getMatrixStack(), "O", posX + 6, posY + padding + 2f, ColorUtils.rgb(255, 255, 255));

        posY += fontSize + padding * 2;

        float maxWidth = Fonts.sf_semibold.getWidth("Cooldowns", fontSize) + padding * 2;
        float localHeight = fontSize + padding * 2;
        DisplayUtils.drawRectHorizontalW(posX + 0.5f, posY - 2, width - 1, 2.5f, 3, ColorUtils.rgba(0, 0, 0, (int) (255 * 0.25f)));


        posY += 3f;

        Set<Item> acitveCooldowns = new HashSet<>();

        for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
            ItemStack itemStack = mc.player.inventory.getStackInSlot(i);

//            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
//                print("Тута кд на айтем: " + itemStack.getItem().getName().getString());
//            }z


            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
                if (!acitveCooldowns.contains(itemStack.getItem())) {
                    renderCooldownItem(ms, posX, posY, fontSize, padding, itemStack, mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()), posY);

                    acitveCooldowns.add(itemStack.getItem());
                    //print("инфо о кд: " + itemStack + " " + mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()));
                    posY += (fontSize + padding);
                    localHeight += (fontSize + padding);
                }
            }
        }


        Scissor.unset();
        Scissor.pop();
        GlStateManager.popMatrix();
        width = MathUtil.lerp(width, Math.max(maxWidth, 80.0f), 20.0f);
        height = MathUtil.lerp(height, Math.max(localHeight + 2.5f, 10.0f), 50.0f);
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private float renderCooldownItem(MatrixStack ms, float posX, float posY, float fontSize, float padding, ItemStack itemStack, float cooldownDuration, float currentPosY) {
        boolean isItemInInventory = mc.player.inventory.hasItemStack(itemStack);
        long currentTime = System.currentTimeMillis();
        String cooldownText = "";

        if (isItemInInventory && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
            if (startTime == -1) {
                startTime = currentTime;
            }
            float cooldownTicks = cooldownDuration;
            cooldownText = cooldownTicks + "";

            if (cooldownTicks <= 0) {
                startTime = 0;
            }
        }

        else if (isItemInInventory) {
            cooldownText = "";
        }

        String itemName = itemStack.getItem().getName().getString();
        if (isItemInInventory) {
            if (itemStack.getItem() == Items.ENCHANTED_GOLDEN_APPLE) {
                itemName = "Чарка";
            } else if (itemStack.getItem() == Items.ENDER_EYE) {
                itemName = "Дезорент";
            } else if (itemStack.getItem() == Items.NETHERITE_SCRAP) {
                itemName = "Трапка";
            } else if (itemStack.getItem() == Items.SUGAR) {
                itemName = "Явная пыль";
            } else if (itemStack.getItem() == Items.ENDER_PEARL) {
                itemName = "Эндер-перл";
            } else if (itemStack.getItem() == Items.GOLDEN_APPLE) {
                itemName = "Гэпл";
            } else if (itemStack.getItem() == Items.DRIED_KELP) {
                itemName = "Пласт";
            }

            if (!cooldownText.isEmpty()) {
                Style style = Wonderful.getInstance().getStyleManager().getCurrentStyle();
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30, 2.5f, 1, ColorUtils.rgb(12, 12, 12));
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30 * cooldownDuration, 2.5f, 1, style.getFirstColor().getRGB());
            }
        }
        Scissor.push();
        Scissor.setFromComponentCoordinates(posX + padding, currentPosY, 50 - 10, 10);
        Fonts.sf_medium.drawText(ms, itemName, posX + padding, currentPosY + 2.5f,  ColorUtils.rgba(255, 255, 255, 255), fontSize, 0.1f);
        Scissor.unset();
        Scissor.pop();
        currentPosY += (padding / 1.2f);
        return currentPosY;
    }
}
не работает хотя ошибок нет
 
Последнее редактирование:
Решил чучуть порадовать вас. Сливаю кд на любой предмет с отображением кд в виде полосочки,
по сути любая база, но рендер 3.1
SS=Посмотреть вложение 303847


DW=
Cooldowns:
Expand Collapse Copy
package fgnepasti.wonderful.ui.display.wonderful;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import fgnepasti.wonderful.Wonderful;
import fgnepasti.wonderful.events.EventDisplay;
import fgnepasti.wonderful.ui.display.ElementRenderer;
import fgnepasti.wonderful.ui.interfaces.naselfcodilgavna.ClickGui;
import fgnepasti.wonderful.ui.styles.Style;
import fgnepasti.wonderful.utils.animations.Direction;
import fgnepasti.wonderful.utils.animations.impl.ElasticAnimation;
import fgnepasti.wonderful.utils.drag.Dragging;
import fgnepasti.wonderful.utils.math.MathUtil;
import fgnepasti.wonderful.utils.render.ColorUtils;
import fgnepasti.wonderful.utils.render.DisplayUtils;
import fgnepasti.wonderful.utils.render.Scissor;
import fgnepasti.wonderful.utils.render.font.Fonts;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

import java.util.HashSet;
import java.util.Set;

@RequiredArgsConstructor
public class CooldownsRenderer implements ElementRenderer {

    final Dragging dragging;

    final ElasticAnimation animation = new ElasticAnimation(300,1, 15, 3, false);

    float width;
    float height;

    private long startTime = -1;

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

        float posX = dragging.getX();
        float posY = dragging.getY();
        float fontSize = 7;
        float padding = 5;

        animation.setDirection((height > 20 || mc.currentScreen instanceof ChatScreen || mc.currentScreen instanceof fgnepasti.wonderful.ui.interfaces.newdropdown.ClickGui || mc.currentScreen instanceof ClickGui) ? Direction.FORWARDS : Direction.BACKWARDS);

        GlStateManager.pushMatrix();
        GlStateManager.translated(posX + (width / 2), posY + (height / 2), 0);
        GlStateManager.scaled((float) animation.getOutput(), (float) animation.getOutput(), (float) animation.getOutput());
        GlStateManager.translated(-(posX + (width / 2)), -(posY + (height / 2)), 0);
        DisplayUtils.drawGlow(posX,posY,width,height,4, ColorUtils.rgba(29, 31, 42, 150));

        Scissor.push();
        Scissor.setFromComponentCoordinates(posX, posY, width, height + 24);


        Fonts.sf_semibold.drawCenteredText(ms, "Cooldowns", posX + width / 2, posY + padding - 0.5f, ColorUtils.rgb(255, 255, 255), fontSize, 0.1f);
        fgnepasti.wonderful.utils.font.Fonts.oldNextGen[16].drawString(eventDisplay.getMatrixStack(), "O", posX + 6, posY + padding + 2f, ColorUtils.rgb(255, 255, 255));

        posY += fontSize + padding * 2;

        float maxWidth = Fonts.sf_semibold.getWidth("Cooldowns", fontSize) + padding * 2;
        float localHeight = fontSize + padding * 2;
        DisplayUtils.drawRectHorizontalW(posX + 0.5f, posY - 2, width - 1, 2.5f, 3, ColorUtils.rgba(0, 0, 0, (int) (255 * 0.25f)));


        posY += 3f;

        Set<Item> acitveCooldowns = new HashSet<>();

        for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
            ItemStack itemStack = mc.player.inventory.getStackInSlot(i);

//            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
//                print("Тута кд на айтем: " + itemStack.getItem().getName().getString());
//            }z


            if (!itemStack.isEmpty() && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
                if (!acitveCooldowns.contains(itemStack.getItem())) {
                    renderCooldownItem(ms, posX, posY, fontSize, padding, itemStack, mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()), posY);

                    acitveCooldowns.add(itemStack.getItem());
                    //print("инфо о кд: " + itemStack + " " + mc.player.getCooldownTracker().getCooldown(itemStack.getItem(), eventDisplay.getPartialTicks()));
                    posY += (fontSize + padding);
                    localHeight += (fontSize + padding);
                }
            }
        }


        Scissor.unset();
        Scissor.pop();
        GlStateManager.popMatrix();
        width = MathUtil.lerp(width, Math.max(maxWidth, 80.0f), 20.0f);
        height = MathUtil.lerp(height, Math.max(localHeight + 2.5f, 10.0f), 50.0f);
        dragging.setWidth(width);
        dragging.setHeight(height);
    }

    private float renderCooldownItem(MatrixStack ms, float posX, float posY, float fontSize, float padding, ItemStack itemStack, float cooldownDuration, float currentPosY) {
        boolean isItemInInventory = mc.player.inventory.hasItemStack(itemStack);
        long currentTime = System.currentTimeMillis();
        String cooldownText = "";

        if (isItemInInventory && mc.player.getCooldownTracker().hasCooldown(itemStack.getItem())) {
            if (startTime == -1) {
                startTime = currentTime;
            }
            float cooldownTicks = cooldownDuration;
            cooldownText = cooldownTicks + "";

            if (cooldownTicks <= 0) {
                startTime = 0;
            }
        }

        else if (isItemInInventory) {
            cooldownText = "";
        }

        String itemName = itemStack.getItem().getName().getString();
        if (isItemInInventory) {
            if (itemStack.getItem() == Items.ENCHANTED_GOLDEN_APPLE) {
                itemName = "Чарка";
            } else if (itemStack.getItem() == Items.ENDER_EYE) {
                itemName = "Дезорент";
            } else if (itemStack.getItem() == Items.NETHERITE_SCRAP) {
                itemName = "Трапка";
            } else if (itemStack.getItem() == Items.SUGAR) {
                itemName = "Явная пыль";
            } else if (itemStack.getItem() == Items.ENDER_PEARL) {
                itemName = "Эндер-перл";
            } else if (itemStack.getItem() == Items.GOLDEN_APPLE) {
                itemName = "Гэпл";
            } else if (itemStack.getItem() == Items.DRIED_KELP) {
                itemName = "Пласт";
            }

            if (!cooldownText.isEmpty()) {
                Style style = Wonderful.getInstance().getStyleManager().getCurrentStyle();
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30, 2.5f, 1, ColorUtils.rgb(12, 12, 12));
                DisplayUtils.drawRoundedRect(posX + padding + 52.5f - 10, currentPosY + 5, 30 * cooldownDuration, 2.5f, 1, style.getFirstColor().getRGB());
            }
        }
        Scissor.push();
        Scissor.setFromComponentCoordinates(posX + padding, currentPosY, 50 - 10, 10);
        Fonts.sf_medium.drawText(ms, itemName, posX + padding, currentPosY + 2.5f,  ColorUtils.rgba(255, 255, 255, 255), fontSize, 0.1f);
        Scissor.unset();
        Scissor.pop();
        currentPosY += (padding / 1.2f);
        return currentPosY;
    }
}
НУ ЗАЧЕМ ТЫ ИМ ДАЕШЬ ЧТО ТО ?
 
Назад
Сверху Снизу