Визуальная часть Сливаю старую ватермарку на експу 3.1

Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
176
Реакции[?]
0
Поинты[?]
0
Выберите загрузчик игры
Прочие моды

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

сливаю т.к. делаю новый дизайн чита да и ватермарку рекодить пришлось
сс:1741199141462.png
она если че не кавас блюр так что не будет лагать
ассеты сами найдете

Watermark:
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.Font;
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.ITextComponent;

import java.text.SimpleDateFormat;
import java.util.Date;

//заселфкодил
//толератный
// 24.11.2024
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer2 implements ElementRenderer {
    private final ResourceLocation icon = new ResourceLocation("expensive/images/fps.png");
    private final ResourceLocation vr = new ResourceLocation("expensive/images/vr.png");



    final Minecraft mc = Minecraft.getInstance();

    [USER=1367676]@override[/USER]

    public void render(EventDisplay eventDisplay) {

        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = 1;
        float posY = 3;
        float padding = 3;
        float fontSize = 5.0f;
        float iconSize = 8;
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String timeString = sdf.format(new Date());
        String time = timeString;
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();

        int fps = mc.getDebugFPS();

        ITextComponent text = GradientUtil.gradient("Tokyoware");

        //ITextComponent text2 = GradientUtil.gradient("fps " + fps);

        ITextComponent timeText = GradientUtil.gradient(timeString);
        float stringWidth = Fonts.sfui.getWidth("XYZ: ", fontSize);
        float timeTextWidth = Fonts.sfui.getWidth(timeText, fontSize - 5.25f);
        float timePosX = 16;



        float textWidth = Fonts.sfui.getWidth(text, fontSize);

        float localPosX = posX + iconSize + padding * 3;

        drawStyledRect(4, posY, iconSize + 2 * 7.4f + textWidth, iconSize + padding * 3, 3);//ватермарка
        drawStyledRect(58, posY, iconSize + 0.25f * 260.2f + textWidth, iconSize + padding * 2.9f, 3);//основной рект
        drawStyledRect(4, 21.2f, iconSize + 0.25f * 180.2f + textWidth, iconSize + padding * 2.9f, 3);//2 рект
       // drawStyledRect(58, posY, iconSize + 0.25f * 3.2f + textWidth, iconSize + padding * 2.9f, 3);
        //drawStyledRect(98, posY, iconSize + 0.2f * 18.2f + textWidth, iconSize + padding * 2.9f, 3);

        Fonts.sfMedium.drawText(ms, text,  - 2 + iconSize + padding * 1f - 1, posY + iconSize / 2 + 1f, 7, 255);//tokyoware
        Fonts.sfui.drawText(ms, "fps: " + fps , posX + 75, 6.5f + 1.5f, ColorUtils.rgb(255, 255, 255), 7f);//фпс
        DisplayUtils.drawImage(icon, 60 + padding, posY+0 + padding, 11, 11, ColorUtils.rgb(255, 255, 255));//ikonka fps
        DisplayUtils.drawImage(vr, 107 + padding, posY+0 + padding, 10, 10, ColorUtils.rgb(255, 255, 255));//vramya ikonka
        Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), time, -7.4f + 130 , 3.9f + 4.5f, ColorUtils.rgb(255, 255, 255), 7f);//vremya
        Fonts.sfui.drawText(eventDisplay.getMatrixStack(), "coords ", 7.2f, 26.5f, -1, 6, 0.05F);//coords
        Font var10000 = Fonts.sfui;
        MatrixStack var10001 = eventDisplay.getMatrixStack();
        Minecraft var10002 = mc;
        int var9 = (int)Minecraft.player.getPosX();
        Minecraft var10003 = mc;
        int var10 = (int)Minecraft.player.getPosY();
        Minecraft var10004 = mc;
        var10000.drawText(var10001, "" + var9 + ", " + var10 + ", " + (int)Minecraft.player.getPosZ(), 20 + stringWidth, 26.6f, ColorUtils.rgb(255, 255, 255), 6, 0.01F);//coords



    }

    private void drawStyledRect(float x,
                                float y,
                                float width,
                                float height,
                                float radius) {


        DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(21, 21, 21, 180));


    }
}
// фпс время по фану показывает и само название (если вам не лень можете доделать координаты)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
12 Дек 2022
Сообщения
191
Реакции[?]
0
Поинты[?]
0
сливаю т.к. делаю новый дизайн чита да и ватермарку рекодить пришлось
сс:Посмотреть вложение 300451
она если че не кавас блюр так что не будет лагать
ассеты сами найдете

Watermark:
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.Font;
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.ITextComponent;

import java.text.SimpleDateFormat;
import java.util.Date;

//заселфкодил
//толератный
// 24.11.2024
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer2 implements ElementRenderer {
    private final ResourceLocation icon = new ResourceLocation("expensive/images/fps.png");
    private final ResourceLocation vr = new ResourceLocation("expensive/images/vr.png");



    final Minecraft mc = Minecraft.getInstance();

    [USER=1367676]@override[/USER]

    public void render(EventDisplay eventDisplay) {

        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = 1;
        float posY = 3;
        float padding = 3;
        float fontSize = 5.0f;
        float iconSize = 8;
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String timeString = sdf.format(new Date());
        String time = timeString;
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();

        int fps = mc.getDebugFPS();

        ITextComponent text = GradientUtil.gradient("Tokyoware");

        //ITextComponent text2 = GradientUtil.gradient("fps " + fps);

        ITextComponent timeText = GradientUtil.gradient(timeString);
        float stringWidth = Fonts.sfui.getWidth("XYZ: ", fontSize);
        float timeTextWidth = Fonts.sfui.getWidth(timeText, fontSize - 5.25f);
        float timePosX = 16;



        float textWidth = Fonts.sfui.getWidth(text, fontSize);

        float localPosX = posX + iconSize + padding * 3;

        drawStyledRect(4, posY, iconSize + 2 * 7.4f + textWidth, iconSize + padding * 3, 3);//ватермарка
        drawStyledRect(58, posY, iconSize + 0.25f * 260.2f + textWidth, iconSize + padding * 2.9f, 3);//основной рект
        drawStyledRect(4, 21.2f, iconSize + 0.25f * 180.2f + textWidth, iconSize + padding * 2.9f, 3);//2 рект
       // drawStyledRect(58, posY, iconSize + 0.25f * 3.2f + textWidth, iconSize + padding * 2.9f, 3);
        //drawStyledRect(98, posY, iconSize + 0.2f * 18.2f + textWidth, iconSize + padding * 2.9f, 3);

        Fonts.sfMedium.drawText(ms, text,  - 2 + iconSize + padding * 1f - 1, posY + iconSize / 2 + 1f, 7, 255);//tokyoware
        Fonts.sfui.drawText(ms, "fps: " + fps , posX + 75, 6.5f + 1.5f, ColorUtils.rgb(255, 255, 255), 7f);//фпс
        DisplayUtils.drawImage(icon, 60 + padding, posY+0 + padding, 11, 11, ColorUtils.rgb(255, 255, 255));//ikonka fps
        DisplayUtils.drawImage(vr, 107 + padding, posY+0 + padding, 10, 10, ColorUtils.rgb(255, 255, 255));//vramya ikonka
        Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), time, -7.4f + 130 , 3.9f + 4.5f, ColorUtils.rgb(255, 255, 255), 7f);//vremya
        Fonts.sfui.drawText(eventDisplay.getMatrixStack(), "coords ", 7.2f, 26.5f, -1, 6, 0.05F);//coords
        Font var10000 = Fonts.sfui;
        MatrixStack var10001 = eventDisplay.getMatrixStack();
        Minecraft var10002 = mc;
        int var9 = (int)Minecraft.player.getPosX();
        Minecraft var10003 = mc;
        int var10 = (int)Minecraft.player.getPosY();
        Minecraft var10004 = mc;
        var10000.drawText(var10001, "" + var9 + ", " + var10 + ", " + (int)Minecraft.player.getPosZ(), 20 + stringWidth, 26.6f, ColorUtils.rgb(255, 255, 255), 6, 0.01F);//coords



    }

    private void drawStyledRect(float x,
                                float y,
                                float width,
                                float height,
                                float radius) {


        DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(21, 21, 21, 180));


    }
}
// фпс время по фану показывает и само название (если вам не лень можете доделать координаты)
var10000
 
Начинающий
Статус
Оффлайн
Регистрация
11 Окт 2024
Сообщения
159
Реакции[?]
0
Поинты[?]
0
Как же заебали ваши однотипные говняные ватермарки с фпсом и названием, фу блять говно
 
Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
176
Реакции[?]
0
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
176
Реакции[?]
0
Поинты[?]
0
из гкода в гкод /del
ВАЩПЗХАВПХПЩ я перешел на другую базу после полу года отдыха я сливаю все старое)) за это время я учел все свои ошибки и в новой версии чита я их постараюсь убрать а ты нихуя не можешь, кроме того что писать гкод и.т.д
)
 
Начинающий
Статус
Оффлайн
Регистрация
25 Июл 2024
Сообщения
119
Реакции[?]
0
Поинты[?]
0
ВАЩПЗХАВПХПЩ я перешел на другую базу после полу года отдыха я сливаю все старое)) за это время я учел все свои ошибки и в новой версии чита
да братиш, только вот твой софт никому не нужен будет
кроме того что писать гкод и.т.д
не тебе это говорить
 
Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
176
Реакции[?]
0
Поинты[?]
0
да братиш, только вот твой софт никому не нужен будет

не тебе это говорить
да и че что никому не нужен? я делаю софт под себя, + находяться люди, которые играли с старой убогой версией, уверен что в новую будут больше играть
 
Начинающий
Статус
Оффлайн
Регистрация
25 Июл 2024
Сообщения
119
Реакции[?]
0
Поинты[?]
0
да и че что никому не нужен? я делаю софт под себя, + находяться люди, которые играли с старой убогой версией, уверен что в новую будут больше играть
кто играл в твою старую версию? твой друг? ну конечно. делал на експе а щас наверное 1.21.1 blade XD
 
Начинающий
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
176
Реакции[?]
0
Поинты[?]
0
кто играл в твою старую версию? твой друг? ну конечно. делал на експе а щас наверное 1.21.1 blade XD
друг?) да нет, было людей 50 в дс сервере которые на фул серьезе играли))
друг?) да нет, было людей 50 в дс сервере которые на фул серьезе играли))
все еще мало, но для меня это было результатом на тот момент
 
Начинающий
Статус
Оффлайн
Регистрация
25 Июл 2024
Сообщения
119
Реакции[?]
0
Поинты[?]
0
друг?) да нет, было людей 50 в дс сервере которые на фул серьезе играли))

все еще мало, но для меня это было результатом на тот момент
50 людей на пасте кленте? мощно
 
Начинающий
Статус
Оффлайн
Регистрация
1 Сен 2023
Сообщения
27
Реакции[?]
0
Поинты[?]
0
сливаю т.к. делаю новый дизайн чита да и ватермарку рекодить пришлось
сс:Посмотреть вложение 300451
она если че не кавас блюр так что не будет лагать
ассеты сами найдете

Watermark:
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.Font;
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.ITextComponent;

import java.text.SimpleDateFormat;
import java.util.Date;

//заселфкодил
//толератный
// 24.11.2024
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer2 implements ElementRenderer {
    private final ResourceLocation icon = new ResourceLocation("expensive/images/fps.png");
    private final ResourceLocation vr = new ResourceLocation("expensive/images/vr.png");



    final Minecraft mc = Minecraft.getInstance();

    [USER=1367676]@override[/USER]

    public void render(EventDisplay eventDisplay) {

        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = 1;
        float posY = 3;
        float padding = 3;
        float fontSize = 5.0f;
        float iconSize = 8;
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String timeString = sdf.format(new Date());
        String time = timeString;
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();

        int fps = mc.getDebugFPS();

        ITextComponent text = GradientUtil.gradient("Tokyoware");

        //ITextComponent text2 = GradientUtil.gradient("fps " + fps);

        ITextComponent timeText = GradientUtil.gradient(timeString);
        float stringWidth = Fonts.sfui.getWidth("XYZ: ", fontSize);
        float timeTextWidth = Fonts.sfui.getWidth(timeText, fontSize - 5.25f);
        float timePosX = 16;



        float textWidth = Fonts.sfui.getWidth(text, fontSize);

        float localPosX = posX + iconSize + padding * 3;

        drawStyledRect(4, posY, iconSize + 2 * 7.4f + textWidth, iconSize + padding * 3, 3);//ватермарка
        drawStyledRect(58, posY, iconSize + 0.25f * 260.2f + textWidth, iconSize + padding * 2.9f, 3);//основной рект
        drawStyledRect(4, 21.2f, iconSize + 0.25f * 180.2f + textWidth, iconSize + padding * 2.9f, 3);//2 рект
       // drawStyledRect(58, posY, iconSize + 0.25f * 3.2f + textWidth, iconSize + padding * 2.9f, 3);
        //drawStyledRect(98, posY, iconSize + 0.2f * 18.2f + textWidth, iconSize + padding * 2.9f, 3);

        Fonts.sfMedium.drawText(ms, text,  - 2 + iconSize + padding * 1f - 1, posY + iconSize / 2 + 1f, 7, 255);//tokyoware
        Fonts.sfui.drawText(ms, "fps: " + fps , posX + 75, 6.5f + 1.5f, ColorUtils.rgb(255, 255, 255), 7f);//фпс
        DisplayUtils.drawImage(icon, 60 + padding, posY+0 + padding, 11, 11, ColorUtils.rgb(255, 255, 255));//ikonka fps
        DisplayUtils.drawImage(vr, 107 + padding, posY+0 + padding, 10, 10, ColorUtils.rgb(255, 255, 255));//vramya ikonka
        Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), time, -7.4f + 130 , 3.9f + 4.5f, ColorUtils.rgb(255, 255, 255), 7f);//vremya
        Fonts.sfui.drawText(eventDisplay.getMatrixStack(), "coords ", 7.2f, 26.5f, -1, 6, 0.05F);//coords
        Font var10000 = Fonts.sfui;
        MatrixStack var10001 = eventDisplay.getMatrixStack();
        Minecraft var10002 = mc;
        int var9 = (int)Minecraft.player.getPosX();
        Minecraft var10003 = mc;
        int var10 = (int)Minecraft.player.getPosY();
        Minecraft var10004 = mc;
        var10000.drawText(var10001, "" + var9 + ", " + var10 + ", " + (int)Minecraft.player.getPosZ(), 20 + stringWidth, 26.6f, ColorUtils.rgb(255, 255, 255), 6, 0.01F);//coords



    }

    private void drawStyledRect(float x,
                                float y,
                                float width,
                                float height,
                                float radius) {


        DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(21, 21, 21, 180));


    }
}
// фпс время по фану показывает и само название (если вам не лень можете доделать координаты)
спс щас запащу в свой $$елфкод клиент NeverCode
 
Danq Client
Начинающий
Статус
Оффлайн
Регистрация
23 Апр 2024
Сообщения
567
Реакции[?]
2
Поинты[?]
2K
сливаю т.к. делаю новый дизайн чита да и ватермарку рекодить пришлось
сс:Посмотреть вложение 300451
она если че не кавас блюр так что не будет лагать
ассеты сами найдете

Watermark:
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.Font;
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.ITextComponent;

import java.text.SimpleDateFormat;
import java.util.Date;

//заселфкодил
//толератный
// 24.11.2024
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class WatermarkRenderer2 implements ElementRenderer {
    private final ResourceLocation icon = new ResourceLocation("expensive/images/fps.png");
    private final ResourceLocation vr = new ResourceLocation("expensive/images/vr.png");



    final Minecraft mc = Minecraft.getInstance();

    [USER=1367676]@override[/USER]

    public void render(EventDisplay eventDisplay) {

        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = 1;
        float posY = 3;
        float padding = 3;
        float fontSize = 5.0f;
        float iconSize = 8;
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String timeString = sdf.format(new Date());
        String time = timeString;
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();

        int fps = mc.getDebugFPS();

        ITextComponent text = GradientUtil.gradient("Tokyoware");

        //ITextComponent text2 = GradientUtil.gradient("fps " + fps);

        ITextComponent timeText = GradientUtil.gradient(timeString);
        float stringWidth = Fonts.sfui.getWidth("XYZ: ", fontSize);
        float timeTextWidth = Fonts.sfui.getWidth(timeText, fontSize - 5.25f);
        float timePosX = 16;



        float textWidth = Fonts.sfui.getWidth(text, fontSize);

        float localPosX = posX + iconSize + padding * 3;

        drawStyledRect(4, posY, iconSize + 2 * 7.4f + textWidth, iconSize + padding * 3, 3);//ватермарка
        drawStyledRect(58, posY, iconSize + 0.25f * 260.2f + textWidth, iconSize + padding * 2.9f, 3);//основной рект
        drawStyledRect(4, 21.2f, iconSize + 0.25f * 180.2f + textWidth, iconSize + padding * 2.9f, 3);//2 рект
       // drawStyledRect(58, posY, iconSize + 0.25f * 3.2f + textWidth, iconSize + padding * 2.9f, 3);
        //drawStyledRect(98, posY, iconSize + 0.2f * 18.2f + textWidth, iconSize + padding * 2.9f, 3);

        Fonts.sfMedium.drawText(ms, text,  - 2 + iconSize + padding * 1f - 1, posY + iconSize / 2 + 1f, 7, 255);//tokyoware
        Fonts.sfui.drawText(ms, "fps: " + fps , posX + 75, 6.5f + 1.5f, ColorUtils.rgb(255, 255, 255), 7f);//фпс
        DisplayUtils.drawImage(icon, 60 + padding, posY+0 + padding, 11, 11, ColorUtils.rgb(255, 255, 255));//ikonka fps
        DisplayUtils.drawImage(vr, 107 + padding, posY+0 + padding, 10, 10, ColorUtils.rgb(255, 255, 255));//vramya ikonka
        Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), time, -7.4f + 130 , 3.9f + 4.5f, ColorUtils.rgb(255, 255, 255), 7f);//vremya
        Fonts.sfui.drawText(eventDisplay.getMatrixStack(), "coords ", 7.2f, 26.5f, -1, 6, 0.05F);//coords
        Font var10000 = Fonts.sfui;
        MatrixStack var10001 = eventDisplay.getMatrixStack();
        Minecraft var10002 = mc;
        int var9 = (int)Minecraft.player.getPosX();
        Minecraft var10003 = mc;
        int var10 = (int)Minecraft.player.getPosY();
        Minecraft var10004 = mc;
        var10000.drawText(var10001, "" + var9 + ", " + var10 + ", " + (int)Minecraft.player.getPosZ(), 20 + stringWidth, 26.6f, ColorUtils.rgb(255, 255, 255), 6, 0.01F);//coords



    }

    private void drawStyledRect(float x,
                                float y,
                                float width,
                                float height,
                                float radius) {


        DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(21, 21, 21, 180));


    }
}
// фпс время по фану показывает и само название (если вам не лень можете доделать координаты)
да +- норм
 
Сверху Снизу