WaterMarkRenderer Для Expensive 3.1 Для пастеров.

Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2024
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Пожалуйста, авторизуйтесь для просмотра ссылки.
Это мой 1 пост, если что у текста есть анимация печатанья.
wt:
package im.expensive.ui.display.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.Expensive;
import im.expensive.events.EventDisplay;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.ui.styles.Style;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import im.expensive.utils.text.GradientUtil;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.Minecraft;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.Color;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.client.multiplayer.ServerData;
import im.expensive.utils.animations.Animation;
import im.expensive.utils.animations.Direction;
import im.expensive.utils.math.StopWatch;

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

    final Minecraft mc = Minecraft.getInstance();
    private final Animation animation = new im.expensive.utils.animations.impl.EaseBackIn(400, 1.0, 1.0F);

    private String fullText;
    private String displayedText = "";

    private float typingSpeed = 0.02f;
    private float typingAnimation = 0;

    private StopWatch timer = new StopWatch();
    private boolean textComplete = false;

    // Новые параметры для современного вида
    private final int textColor = ColorUtils.rgb(230, 230, 230); // Светло-серый
    private final int panelColor = ColorUtils.rgba(20, 20, 20, 200); // Темный фон с прозрачностью
    private final float panelRadius = 3;
    private final float fontSize = 10f;
    private final float bottomTextFontSize = 8f; // Размер шрифта для текста снизу
    private final int bottomTextColor = ColorUtils.rgb(150, 150, 150); // Цвет для текста снизу
    private final float additionalPanelHeight = 12; // Дополнительное место для текста снизу

    //Текст снизу
    private final String bottomText = "New Client?"; //Текст снизу ватермарки

    [USER=1367676]@override[/USER]
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = 3;
        float posY = 3;
        float padding = 2;

        String username = mc.player != null && mc.player.getName() != null ? mc.player.getName().getString() : "N/A";
        int fps = mc.getDebugFPS();
        fullText = "North Client | " + username + " | FPS: " + fps;

        // Обновляем анимированный текст
        updateAnimatedText();

        float textWidth = Fonts.sfui.getWidth(displayedText, fontSize);
        float textHeight = Fonts.sfui.getHeight(fontSize);
        float bottomTextWidth = Fonts.sfui.getWidth(bottomText, bottomTextFontSize);
        float panelWidth = Math.max(textWidth, bottomTextWidth) + 2 * padding; // Панель подстраивается под самый широкий текст
        float panelHeight = textHeight + 2 * padding + additionalPanelHeight; // Высота панели увеличилась для текста снизу

        // Рисуем чёрную панель
        drawBlackPanel(ms, posX, posY, panelWidth, panelHeight, panelColor, panelRadius);

        // Рисуем анимированный текст
        Fonts.sfui.drawText(ms, displayedText, posX + padding, posY + padding, textColor, fontSize);

        // Рисуем текст снизу
        Fonts.sfui.drawText(ms, bottomText, posX + padding, posY + textHeight + 2 * padding, bottomTextColor, bottomTextFontSize);
    }

    private void updateAnimatedText() {
        float animationProgress = this.typingAnimation;
        int textLength = fullText.length();
        int displayLength = (int)(textLength * animationProgress);

        if(displayLength > textLength) {
            displayLength = textLength;
        }
        if(displayLength < 0) {
            displayLength = 0;
        }

        displayedText = fullText.substring(0, displayLength);

        if(this.typingAnimation >= 1) {
            if(!textComplete) {
                textComplete = true;
                timer.reset();
            }
            if(timer.isReached(5000)) {
                this.typingAnimation = 0;
                textComplete = false;
            }
            return;
        }

        this.typingAnimation += typingSpeed;
    }

    //Измененный метод для панели
    private void drawBlackPanel(MatrixStack ms, float x, float y, float width, float height, int color, float radius) {
        DisplayUtils.drawRoundedRect(x, y, width, height, radius, color);
    }
}
 
Сверху Снизу