Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Визуальная часть Watermark 3.1 (50/50)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Июл 2025
Сообщения
31
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Прочие моды
Ватермарка в которой можно настраивать что показывать

super mega xyeta:
Expand Collapse Copy
package im.expensive.ui.hud2.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.hud2.ElementRenderer;
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.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer implements ElementRenderer {
    public boolean showTitle = true;
    public boolean showName = true;
    public boolean showFps = true;
    public boolean showPing = true;
    public boolean showTime = true;
    private final float fontSize = 8.4f;
    private final float padding = 4f;
    private final float spacing = 2f;
    private final float lineHeight = 18f;
    private final float borderRadius = 0.5f;
    private final String title = "yougay client";

    @Override
    public void update(EventUpdate eventUpdate) {
    }

    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        Minecraft mc = Minecraft.getInstance();
        String playerName = mc.player != null ? " " + mc.player.getName().getString() + " " : " Unknown ";
        double fps = mc.getDebugFPS();
        double ping = mc.getConnection() != null && mc.player != null ?
                mc.getConnection().getPlayerInfo(mc.player.getGameProfile().getId()).getResponseTime() : 0;
        LocalTime now = LocalTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String time = now.format(formatter);

        ITextComponent textTitle = GradientUtil.gradient(title);
        ITextComponent textPlayer = new StringTextComponent(playerName);
        ITextComponent textPing = new StringTextComponent(ping == -1 ? " " + "0 ms " : " " + String.valueOf((int) ping) + " ms ");
        ITextComponent textFps = new StringTextComponent(" " + String.valueOf((int) fps) + " FPS ");
        ITextComponent textTime = new StringTextComponent(" " + time + " ");

        List<ITextComponent> elements = new ArrayList<>();
        List<Float> widths = new ArrayList<>();
        List<Boolean> isTitleList = new ArrayList<>();

        if (showTitle) {
            elements.add(textTitle);
            widths.add(Fonts.radwave.getWidth(textTitle.getString(), fontSize));
            isTitleList.add(true);
        }
        if (showName) {
            elements.add(textPlayer);
            widths.add(Fonts.sfui.getWidth(textPlayer.getString(), fontSize));
            isTitleList.add(false);}
        if (showPing) {
            elements.add(textPing);
            widths.add(Fonts.sfui.getWidth(textPing.getString(), fontSize));
            isTitleList.add(false);}
        if (showFps) {
            elements.add(textFps);
            widths.add(Fonts.sfui.getWidth(textFps.getString(), fontSize));
            isTitleList.add(false);}
        if (showTime) {
            elements.add(textTime);
            widths.add(Fonts.sfui.getWidth(textTime.getString(), fontSize));
            isTitleList.add(false);}
        float totalWidth = padding * 2;
        int separatorCount = Math.max(0, elements.size() - 1);
        for (float width : widths) {
            totalWidth += width;}
        totalWidth += separatorCount * (spacing * 2 + Fonts.sfui.getWidth("|", fontSize));
        float x = 6f;
        float y = 6f;
        DisplayUtils.drawShadow(x, y, totalWidth, lineHeight, 8, ColorUtils.rgba(0, 0, 0, 40), ColorUtils.rgba(0, 0, 0, 40));
        DisplayUtils.drawRoundedRect(x, y, totalWidth, lineHeight, borderRadius, ColorUtils.rgba(13, 13, 13, 255));
        float currentX = x + padding;
        float textY = y + (lineHeight - fontSize) / 2f;
        for (int i = 0; i < elements.size(); i++) {
            ITextComponent element = elements.get(i);
            if (isTitleList.get(i)) {Fonts.radwave.drawText(ms, element, currentX, textY + 2, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            else {Fonts.sfui.drawText(ms, element, currentX, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            currentX += widths.get(i);
            if (i < elements.size() - 1) {
                ITextComponent separator = new StringTextComponent("|");
                float separatorWidth = Fonts.sfui.getWidth("|", fontSize);
                Fonts.sfui.drawText(ms, separator, currentX + spacing, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));
                currentX += separatorWidth + spacing * 2;
            }
        }
    }
}

чтобы можно было настраивать заходим в класс худа

1. под ModeListSetting elements добавляем ModeListSetting с элементами ватермарки
ModeListSetting:
Expand Collapse Copy
private final ModeListSetting watermarkElements = new ModeListSetting("Элементы ватермарки",
            new BooleanSetting("Название чита", true),
            new BooleanSetting("Имя игрока", true),
            new BooleanSetting("FPS", true),
            new BooleanSetting("Время", true),
            new BooleanSetting("Ping", true)
    ).setVisible(() -> elements.getValueByName("Ватермарка").get());

2. Дальше в методе onDisplay под if (mc.gameSettings.showDebugInfo || e.getType() != EventDisplay.Type.POST) return; пишем
onDisplay:
Expand Collapse Copy
if (elements.getValueByName("Ватермарка").get()) {
            watermarkRenderer.showName = watermarkElements.getValueByName("Имя игрока").get();
            watermarkRenderer.showFps = watermarkElements.getValueByName("FPS").get();
            watermarkRenderer.showPing = watermarkElements.getValueByName("Ping").get();
            watermarkRenderer.showTitle = watermarkElements.getValueByName("Название чита").get();
            watermarkRenderer.showTime = watermarkElements.getValueByName("Время").get();
            watermarkRenderer.render(e);
        }

3. Указываем настройки в public HUD()
public HUD():
Expand Collapse Copy
addSettings(watermarkElements);


вроде всё, если что-то забыл то пишите
SS :
1760899948577.png
1760899952571.png

Пожалуйста, авторизуйтесь для просмотра ссылки.


:roflanBuldiga:
 
Последнее редактирование:
Ватермарка в которой можно настраивать что показывать

super mega xyeta:
Expand Collapse Copy
package im.expensive.ui.hud2.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.hud2.ElementRenderer;
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.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer implements ElementRenderer {
    public boolean showTitle = true;
    public boolean showName = true;
    public boolean showFps = true;
    public boolean showPing = true;
    public boolean showTime = true;
    private final float fontSize = 8.4f;
    private final float padding = 4f;
    private final float spacing = 2f;
    private final float lineHeight = 18f;
    private final float borderRadius = 0.5f;
    private final String title = "yougay client";

    @Override
    public void update(EventUpdate eventUpdate) {
    }

    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        Minecraft mc = Minecraft.getInstance();
        String playerName = mc.player != null ? " " + mc.player.getName().getString() + " " : " Unknown ";
        double fps = mc.getDebugFPS();
        double ping = mc.getConnection() != null && mc.player != null ?
                mc.getConnection().getPlayerInfo(mc.player.getGameProfile().getId()).getResponseTime() : 0;
        LocalTime now = LocalTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String time = now.format(formatter);

        ITextComponent textTitle = GradientUtil.gradient(title);
        ITextComponent textPlayer = new StringTextComponent(playerName);
        ITextComponent textPing = new StringTextComponent(ping == -1 ? " " + "0 ms " : " " + String.valueOf((int) ping) + " ms ");
        ITextComponent textFps = new StringTextComponent(" " + String.valueOf((int) fps) + " FPS ");
        ITextComponent textTime = new StringTextComponent(" " + time + " ");

        List<ITextComponent> elements = new ArrayList<>();
        List<Float> widths = new ArrayList<>();
        List<Boolean> isTitleList = new ArrayList<>();

        if (showTitle) {
            elements.add(textTitle);
            widths.add(Fonts.radwave.getWidth(textTitle.getString(), fontSize));
            isTitleList.add(true);
        }
        if (showName) {
            elements.add(textPlayer);
            widths.add(Fonts.sfui.getWidth(textPlayer.getString(), fontSize));
            isTitleList.add(false);}
        if (showPing) {
            elements.add(textPing);
            widths.add(Fonts.sfui.getWidth(textPing.getString(), fontSize));
            isTitleList.add(false);}
        if (showFps) {
            elements.add(textFps);
            widths.add(Fonts.sfui.getWidth(textFps.getString(), fontSize));
            isTitleList.add(false);}
        if (showTime) {
            elements.add(textTime);
            widths.add(Fonts.sfui.getWidth(textTime.getString(), fontSize));
            isTitleList.add(false);}
        float totalWidth = padding * 2;
        int separatorCount = Math.max(0, elements.size() - 1);
        for (float width : widths) {
            totalWidth += width;}
        totalWidth += separatorCount * (spacing * 2 + Fonts.sfui.getWidth("|", fontSize));
        float x = 6f;
        float y = 6f;
        DisplayUtils.drawShadow(x, y, totalWidth, lineHeight, 8, ColorUtils.rgba(0, 0, 0, 40), ColorUtils.rgba(0, 0, 0, 40));
        DisplayUtils.drawRoundedRect(x, y, totalWidth, lineHeight, borderRadius, ColorUtils.rgba(13, 13, 13, 255));
        float currentX = x + padding;
        float textY = y + (lineHeight - fontSize) / 2f;
        for (int i = 0; i < elements.size(); i++) {
            ITextComponent element = elements.get(i);
            if (isTitleList.get(i)) {Fonts.radwave.drawText(ms, element, currentX, textY + 2, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            else {Fonts.sfui.drawText(ms, element, currentX, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            currentX += widths.get(i);
            if (i < elements.size() - 1) {
                ITextComponent separator = new StringTextComponent("|");
                float separatorWidth = Fonts.sfui.getWidth("|", fontSize);
                Fonts.sfui.drawText(ms, separator, currentX + spacing, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));
                currentX += separatorWidth + spacing * 2;
            }
        }
    }
}

чтобы можно было настраивать заходим в класс худа

1. под ModeListSetting elements добавляем ModeListSetting с элементами ватермарки
ModeListSetting:
Expand Collapse Copy
private final ModeListSetting watermarkElements = new ModeListSetting("Элементы ватермарки",
            new BooleanSetting("Название чита", true),
            new BooleanSetting("Имя игрока", true),
            new BooleanSetting("FPS", true),
            new BooleanSetting("Время", true),
            new BooleanSetting("Ping", true)
    ).setVisible(() -> elements.getValueByName("Ватермарка").get());

2. Дальше в методе onDisplay под if (mc.gameSettings.showDebugInfo || e.getType() != EventDisplay.Type.POST) return; пишем
onDisplay:
Expand Collapse Copy
if (elements.getValueByName("Ватермарка").get()) {
            watermarkRenderer.showName = watermarkElements.getValueByName("Имя игрока").get();
            watermarkRenderer.showFps = watermarkElements.getValueByName("FPS").get();
            watermarkRenderer.showPing = watermarkElements.getValueByName("Ping").get();
            watermarkRenderer.showTitle = watermarkElements.getValueByName("Название чита").get();
            watermarkRenderer.showTime = watermarkElements.getValueByName("Время").get();
            watermarkRenderer.render(e);
        }

3. Указываем настройки в public HUD()
public HUD():
Expand Collapse Copy
addSettings(watermarkElements);


вроде всё, если что-то забыл то пишите
SS :
Посмотреть вложение 317917Посмотреть вложение 317918
Пожалуйста, авторизуйтесь для просмотра ссылки.


:roflanBuldiga:
не а чо прикольной квадратный ватермарк Выглядит ахуено, и как-то будто я такого ещё не видел, шрифт пиздатый
 
Ватермарка в которой можно настраивать что показывать

super mega xyeta:
Expand Collapse Copy
package im.expensive.ui.hud2.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.hud2.ElementRenderer;
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.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer implements ElementRenderer {
    public boolean showTitle = true;
    public boolean showName = true;
    public boolean showFps = true;
    public boolean showPing = true;
    public boolean showTime = true;
    private final float fontSize = 8.4f;
    private final float padding = 4f;
    private final float spacing = 2f;
    private final float lineHeight = 18f;
    private final float borderRadius = 0.5f;
    private final String title = "yougay client";

    @Override
    public void update(EventUpdate eventUpdate) {
    }

    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        Minecraft mc = Minecraft.getInstance();
        String playerName = mc.player != null ? " " + mc.player.getName().getString() + " " : " Unknown ";
        double fps = mc.getDebugFPS();
        double ping = mc.getConnection() != null && mc.player != null ?
                mc.getConnection().getPlayerInfo(mc.player.getGameProfile().getId()).getResponseTime() : 0;
        LocalTime now = LocalTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String time = now.format(formatter);

        ITextComponent textTitle = GradientUtil.gradient(title);
        ITextComponent textPlayer = new StringTextComponent(playerName);
        ITextComponent textPing = new StringTextComponent(ping == -1 ? " " + "0 ms " : " " + String.valueOf((int) ping) + " ms ");
        ITextComponent textFps = new StringTextComponent(" " + String.valueOf((int) fps) + " FPS ");
        ITextComponent textTime = new StringTextComponent(" " + time + " ");

        List<ITextComponent> elements = new ArrayList<>();
        List<Float> widths = new ArrayList<>();
        List<Boolean> isTitleList = new ArrayList<>();

        if (showTitle) {
            elements.add(textTitle);
            widths.add(Fonts.radwave.getWidth(textTitle.getString(), fontSize));
            isTitleList.add(true);
        }
        if (showName) {
            elements.add(textPlayer);
            widths.add(Fonts.sfui.getWidth(textPlayer.getString(), fontSize));
            isTitleList.add(false);}
        if (showPing) {
            elements.add(textPing);
            widths.add(Fonts.sfui.getWidth(textPing.getString(), fontSize));
            isTitleList.add(false);}
        if (showFps) {
            elements.add(textFps);
            widths.add(Fonts.sfui.getWidth(textFps.getString(), fontSize));
            isTitleList.add(false);}
        if (showTime) {
            elements.add(textTime);
            widths.add(Fonts.sfui.getWidth(textTime.getString(), fontSize));
            isTitleList.add(false);}
        float totalWidth = padding * 2;
        int separatorCount = Math.max(0, elements.size() - 1);
        for (float width : widths) {
            totalWidth += width;}
        totalWidth += separatorCount * (spacing * 2 + Fonts.sfui.getWidth("|", fontSize));
        float x = 6f;
        float y = 6f;
        DisplayUtils.drawShadow(x, y, totalWidth, lineHeight, 8, ColorUtils.rgba(0, 0, 0, 40), ColorUtils.rgba(0, 0, 0, 40));
        DisplayUtils.drawRoundedRect(x, y, totalWidth, lineHeight, borderRadius, ColorUtils.rgba(13, 13, 13, 255));
        float currentX = x + padding;
        float textY = y + (lineHeight - fontSize) / 2f;
        for (int i = 0; i < elements.size(); i++) {
            ITextComponent element = elements.get(i);
            if (isTitleList.get(i)) {Fonts.radwave.drawText(ms, element, currentX, textY + 2, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            else {Fonts.sfui.drawText(ms, element, currentX, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            currentX += widths.get(i);
            if (i < elements.size() - 1) {
                ITextComponent separator = new StringTextComponent("|");
                float separatorWidth = Fonts.sfui.getWidth("|", fontSize);
                Fonts.sfui.drawText(ms, separator, currentX + spacing, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));
                currentX += separatorWidth + spacing * 2;
            }
        }
    }
}

чтобы можно было настраивать заходим в класс худа

1. под ModeListSetting elements добавляем ModeListSetting с элементами ватермарки
ModeListSetting:
Expand Collapse Copy
private final ModeListSetting watermarkElements = new ModeListSetting("Элементы ватермарки",
            new BooleanSetting("Название чита", true),
            new BooleanSetting("Имя игрока", true),
            new BooleanSetting("FPS", true),
            new BooleanSetting("Время", true),
            new BooleanSetting("Ping", true)
    ).setVisible(() -> elements.getValueByName("Ватермарка").get());

2. Дальше в методе onDisplay под if (mc.gameSettings.showDebugInfo || e.getType() != EventDisplay.Type.POST) return; пишем
onDisplay:
Expand Collapse Copy
if (elements.getValueByName("Ватермарка").get()) {
            watermarkRenderer.showName = watermarkElements.getValueByName("Имя игрока").get();
            watermarkRenderer.showFps = watermarkElements.getValueByName("FPS").get();
            watermarkRenderer.showPing = watermarkElements.getValueByName("Ping").get();
            watermarkRenderer.showTitle = watermarkElements.getValueByName("Название чита").get();
            watermarkRenderer.showTime = watermarkElements.getValueByName("Время").get();
            watermarkRenderer.render(e);
        }

3. Указываем настройки в public HUD()
public HUD():
Expand Collapse Copy
addSettings(watermarkElements);


вроде всё, если что-то забыл то пишите
SS :
Посмотреть вложение 317917Посмотреть вложение 317918
Пожалуйста, авторизуйтесь для просмотра ссылки.


:roflanBuldiga:
шрифт название клиента пиздатое а так сама ватермарка слишком устаревшая тема
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
говно не заливай ниче
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
шрифт в тему )
 
Ватермарка в которой можно настраивать что показывать

super mega xyeta:
Expand Collapse Copy
package im.expensive.ui.hud2.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.hud2.ElementRenderer;
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.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer implements ElementRenderer {
    public boolean showTitle = true;
    public boolean showName = true;
    public boolean showFps = true;
    public boolean showPing = true;
    public boolean showTime = true;
    private final float fontSize = 8.4f;
    private final float padding = 4f;
    private final float spacing = 2f;
    private final float lineHeight = 18f;
    private final float borderRadius = 0.5f;
    private final String title = "yougay client";

    @Override
    public void update(EventUpdate eventUpdate) {
    }

    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        Minecraft mc = Minecraft.getInstance();
        String playerName = mc.player != null ? " " + mc.player.getName().getString() + " " : " Unknown ";
        double fps = mc.getDebugFPS();
        double ping = mc.getConnection() != null && mc.player != null ?
                mc.getConnection().getPlayerInfo(mc.player.getGameProfile().getId()).getResponseTime() : 0;
        LocalTime now = LocalTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String time = now.format(formatter);

        ITextComponent textTitle = GradientUtil.gradient(title);
        ITextComponent textPlayer = new StringTextComponent(playerName);
        ITextComponent textPing = new StringTextComponent(ping == -1 ? " " + "0 ms " : " " + String.valueOf((int) ping) + " ms ");
        ITextComponent textFps = new StringTextComponent(" " + String.valueOf((int) fps) + " FPS ");
        ITextComponent textTime = new StringTextComponent(" " + time + " ");

        List<ITextComponent> elements = new ArrayList<>();
        List<Float> widths = new ArrayList<>();
        List<Boolean> isTitleList = new ArrayList<>();

        if (showTitle) {
            elements.add(textTitle);
            widths.add(Fonts.radwave.getWidth(textTitle.getString(), fontSize));
            isTitleList.add(true);
        }
        if (showName) {
            elements.add(textPlayer);
            widths.add(Fonts.sfui.getWidth(textPlayer.getString(), fontSize));
            isTitleList.add(false);}
        if (showPing) {
            elements.add(textPing);
            widths.add(Fonts.sfui.getWidth(textPing.getString(), fontSize));
            isTitleList.add(false);}
        if (showFps) {
            elements.add(textFps);
            widths.add(Fonts.sfui.getWidth(textFps.getString(), fontSize));
            isTitleList.add(false);}
        if (showTime) {
            elements.add(textTime);
            widths.add(Fonts.sfui.getWidth(textTime.getString(), fontSize));
            isTitleList.add(false);}
        float totalWidth = padding * 2;
        int separatorCount = Math.max(0, elements.size() - 1);
        for (float width : widths) {
            totalWidth += width;}
        totalWidth += separatorCount * (spacing * 2 + Fonts.sfui.getWidth("|", fontSize));
        float x = 6f;
        float y = 6f;
        DisplayUtils.drawShadow(x, y, totalWidth, lineHeight, 8, ColorUtils.rgba(0, 0, 0, 40), ColorUtils.rgba(0, 0, 0, 40));
        DisplayUtils.drawRoundedRect(x, y, totalWidth, lineHeight, borderRadius, ColorUtils.rgba(13, 13, 13, 255));
        float currentX = x + padding;
        float textY = y + (lineHeight - fontSize) / 2f;
        for (int i = 0; i < elements.size(); i++) {
            ITextComponent element = elements.get(i);
            if (isTitleList.get(i)) {Fonts.radwave.drawText(ms, element, currentX, textY + 2, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            else {Fonts.sfui.drawText(ms, element, currentX, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            currentX += widths.get(i);
            if (i < elements.size() - 1) {
                ITextComponent separator = new StringTextComponent("|");
                float separatorWidth = Fonts.sfui.getWidth("|", fontSize);
                Fonts.sfui.drawText(ms, separator, currentX + spacing, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));
                currentX += separatorWidth + spacing * 2;
            }
        }
    }
}

чтобы можно было настраивать заходим в класс худа

1. под ModeListSetting elements добавляем ModeListSetting с элементами ватермарки
ModeListSetting:
Expand Collapse Copy
private final ModeListSetting watermarkElements = new ModeListSetting("Элементы ватермарки",
            new BooleanSetting("Название чита", true),
            new BooleanSetting("Имя игрока", true),
            new BooleanSetting("FPS", true),
            new BooleanSetting("Время", true),
            new BooleanSetting("Ping", true)
    ).setVisible(() -> elements.getValueByName("Ватермарка").get());

2. Дальше в методе onDisplay под if (mc.gameSettings.showDebugInfo || e.getType() != EventDisplay.Type.POST) return; пишем
onDisplay:
Expand Collapse Copy
if (elements.getValueByName("Ватермарка").get()) {
            watermarkRenderer.showName = watermarkElements.getValueByName("Имя игрока").get();
            watermarkRenderer.showFps = watermarkElements.getValueByName("FPS").get();
            watermarkRenderer.showPing = watermarkElements.getValueByName("Ping").get();
            watermarkRenderer.showTitle = watermarkElements.getValueByName("Название чита").get();
            watermarkRenderer.showTime = watermarkElements.getValueByName("Время").get();
            watermarkRenderer.render(e);
        }

3. Указываем настройки в public HUD()
public HUD():
Expand Collapse Copy
addSettings(watermarkElements);


вроде всё, если что-то забыл то пишите
SS :
Посмотреть вложение 317917Посмотреть вложение 317918
Пожалуйста, авторизуйтесь для просмотра ссылки.


:roflanBuldiga:
Арбуз завидует, я бы сказал не 50/50, а 75/25(круто)
 
Ватермарка в которой можно настраивать что показывать

super mega xyeta:
Expand Collapse Copy
package im.expensive.ui.hud2.impl;

import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.hud2.ElementRenderer;
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.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer implements ElementRenderer {
    public boolean showTitle = true;
    public boolean showName = true;
    public boolean showFps = true;
    public boolean showPing = true;
    public boolean showTime = true;
    private final float fontSize = 8.4f;
    private final float padding = 4f;
    private final float spacing = 2f;
    private final float lineHeight = 18f;
    private final float borderRadius = 0.5f;
    private final String title = "yougay client";

    @Override
    public void update(EventUpdate eventUpdate) {
    }

    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        Minecraft mc = Minecraft.getInstance();
        String playerName = mc.player != null ? " " + mc.player.getName().getString() + " " : " Unknown ";
        double fps = mc.getDebugFPS();
        double ping = mc.getConnection() != null && mc.player != null ?
                mc.getConnection().getPlayerInfo(mc.player.getGameProfile().getId()).getResponseTime() : 0;
        LocalTime now = LocalTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        String time = now.format(formatter);

        ITextComponent textTitle = GradientUtil.gradient(title);
        ITextComponent textPlayer = new StringTextComponent(playerName);
        ITextComponent textPing = new StringTextComponent(ping == -1 ? " " + "0 ms " : " " + String.valueOf((int) ping) + " ms ");
        ITextComponent textFps = new StringTextComponent(" " + String.valueOf((int) fps) + " FPS ");
        ITextComponent textTime = new StringTextComponent(" " + time + " ");

        List<ITextComponent> elements = new ArrayList<>();
        List<Float> widths = new ArrayList<>();
        List<Boolean> isTitleList = new ArrayList<>();

        if (showTitle) {
            elements.add(textTitle);
            widths.add(Fonts.radwave.getWidth(textTitle.getString(), fontSize));
            isTitleList.add(true);
        }
        if (showName) {
            elements.add(textPlayer);
            widths.add(Fonts.sfui.getWidth(textPlayer.getString(), fontSize));
            isTitleList.add(false);}
        if (showPing) {
            elements.add(textPing);
            widths.add(Fonts.sfui.getWidth(textPing.getString(), fontSize));
            isTitleList.add(false);}
        if (showFps) {
            elements.add(textFps);
            widths.add(Fonts.sfui.getWidth(textFps.getString(), fontSize));
            isTitleList.add(false);}
        if (showTime) {
            elements.add(textTime);
            widths.add(Fonts.sfui.getWidth(textTime.getString(), fontSize));
            isTitleList.add(false);}
        float totalWidth = padding * 2;
        int separatorCount = Math.max(0, elements.size() - 1);
        for (float width : widths) {
            totalWidth += width;}
        totalWidth += separatorCount * (spacing * 2 + Fonts.sfui.getWidth("|", fontSize));
        float x = 6f;
        float y = 6f;
        DisplayUtils.drawShadow(x, y, totalWidth, lineHeight, 8, ColorUtils.rgba(0, 0, 0, 40), ColorUtils.rgba(0, 0, 0, 40));
        DisplayUtils.drawRoundedRect(x, y, totalWidth, lineHeight, borderRadius, ColorUtils.rgba(13, 13, 13, 255));
        float currentX = x + padding;
        float textY = y + (lineHeight - fontSize) / 2f;
        for (int i = 0; i < elements.size(); i++) {
            ITextComponent element = elements.get(i);
            if (isTitleList.get(i)) {Fonts.radwave.drawText(ms, element, currentX, textY + 2, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            else {Fonts.sfui.drawText(ms, element, currentX, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));}
            currentX += widths.get(i);
            if (i < elements.size() - 1) {
                ITextComponent separator = new StringTextComponent("|");
                float separatorWidth = Fonts.sfui.getWidth("|", fontSize);
                Fonts.sfui.drawText(ms, separator, currentX + spacing, textY, fontSize, ColorUtils.rgba(255, 255, 255, 255));
                currentX += separatorWidth + spacing * 2;
            }
        }
    }
}

чтобы можно было настраивать заходим в класс худа

1. под ModeListSetting elements добавляем ModeListSetting с элементами ватермарки
ModeListSetting:
Expand Collapse Copy
private final ModeListSetting watermarkElements = new ModeListSetting("Элементы ватермарки",
            new BooleanSetting("Название чита", true),
            new BooleanSetting("Имя игрока", true),
            new BooleanSetting("FPS", true),
            new BooleanSetting("Время", true),
            new BooleanSetting("Ping", true)
    ).setVisible(() -> elements.getValueByName("Ватермарка").get());

2. Дальше в методе onDisplay под if (mc.gameSettings.showDebugInfo || e.getType() != EventDisplay.Type.POST) return; пишем
onDisplay:
Expand Collapse Copy
if (elements.getValueByName("Ватермарка").get()) {
            watermarkRenderer.showName = watermarkElements.getValueByName("Имя игрока").get();
            watermarkRenderer.showFps = watermarkElements.getValueByName("FPS").get();
            watermarkRenderer.showPing = watermarkElements.getValueByName("Ping").get();
            watermarkRenderer.showTitle = watermarkElements.getValueByName("Название чита").get();
            watermarkRenderer.showTime = watermarkElements.getValueByName("Время").get();
            watermarkRenderer.render(e);
        }

3. Указываем настройки в public HUD()
public HUD():
Expand Collapse Copy
addSettings(watermarkElements);


вроде всё, если что-то забыл то пишите
SS :
Посмотреть вложение 317917Посмотреть вложение 317918
Пожалуйста, авторизуйтесь для просмотра ссылки.


:roflanBuldiga:
ебать крута
 
Назад
Сверху Снизу