Исходник Notifications nurik skid | Exp 3.1

Забаненный
Статус
Оффлайн
Регистрация
26 Окт 2024
Сообщения
122
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем ку! Сегодня сливаю около-нурсултановские нотификейшны, вроде как никаких багов у них нет(по крайней мере я не обнаружил), подбирает размер бекграунда и положения иконки от текста
(P.S. Да, основа нотифок это (noad) но у них было только 2 варианта рендера иконок, другой рендер и бла-бла-бла)
SS =
Пожалуйста, авторизуйтесь для просмотра ссылки.

Notifications nurlan:
package im.expensive.ui;

import com.mojang.blaze3d.matrix.MatrixStack;

import java.awt.*;
import java.util.concurrent.CopyOnWriteArrayList;

import im.expensive.Expensive;
import im.expensive.command.friends.FriendStorage;
import im.expensive.functions.api.Notificpenus;
import im.expensive.functions.impl.misc.SelfDestruct;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.util.ResourceLocation;
import im.expensive.utils.animations.Animation;
import im.expensive.utils.animations.Direction;
import im.expensive.utils.animations.impl.EaseBackIn;
import im.expensive.utils.animations.impl.EaseInOutQuad;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;

import static im.expensive.utils.client.IMinecraft.mc;

public class NotificationManager {
    public static final FriendStorage NOTIFICATION_MANAGER = null;
    private final CopyOnWriteArrayList<Notification> notifications = new CopyOnWriteArrayList();
    private MathUtil AnimationMath;
    boolean state;

    public void add(String text, String content, int time) {
        this.notifications.add(new Notification(text, content, time));
    }

    public void draw(MatrixStack stack) {
        int yOffset = 0;
        for (Notification notification : this.notifications) {
            if (System.currentTimeMillis() - notification.getTime() <= (long)notification.time2 * 1000L - 300L) {
                notification.yAnimation.setDirection(Direction.FORWARDS);
            }
            notification.alpha = (float)notification.animation.getOutput();
            if (System.currentTimeMillis() - notification.getTime() > (long)notification.time2 * 1000L) {
                notification.yAnimation.setDirection(Direction.BACKWARDS);
            }
            if (notification.yAnimation.finished(Direction.BACKWARDS)) {
                this.notifications.remove(notification);
                continue;
            }
            float x = (float) mc.getMainWindow().scaledWidth() - (Fonts.sfMedium.getWidth(notification.getText(), 7.0f) + 8.0f) - 10.0f;
            float y = mc.getMainWindow().scaledHeight() - 40;
            notification.yAnimation.setEndPoint(yOffset);
            notification.yAnimation.setDuration(500);
            notification.setX(x);
            notification.setY(MathUtil.fast(notification.getY(), y -= (float)((double)notification.draw(stack) * notification.yAnimation.getOutput() + 3.0), 15.0f));
            ++yOffset;
        }
    }

    private class Notification {
        private float x = 0.0f;
        private float y = mc.getMainWindow().scaledHeight() + 24;
        private String text;
        private String content;
        private long time = System.currentTimeMillis();
        public Animation animation = new EaseInOutQuad(500, 1.0, Direction.FORWARDS);
        public Animation yAnimation = new EaseBackIn(500, 1.0, 1.0f);
        float alpha;
        int time2 = 3;
        private boolean isState;
        private boolean state;

        public Notification(String text, String content, int time) {
            this.text = text;
            this.content = content;
            this.time2 = time;
        }

        public float draw(MatrixStack stack) {
            mc.gameRenderer.setupOverlayRendering(2);

            float posX = mc.getMainWindow().getScaledWidth() / 2.0F;

            float posY = (float) mc.getMainWindow().getScaledHeight() + (float) mc.getMainWindow().getScaledHeight() / 2 - y - 20;

            float textWidth = im.expensive.utils.font.Fonts.mntsb[12].getWidth(this.text) + 28.0F + 15F;

            float XStart = posX - textWidth / 2.0F;

            DisplayUtils.drawRoundedRect(XStart, posY + 15.0F, textWidth, 11.0F, 4.0F, ColorUtils.rgba(0, 0, 0, 200));

            Color style1 = Expensive.getInstance().getStyleManager().getCurrentStyle().getFirstColor();
            DisplayUtils.drawRoundedRect(XStart, posY + 15.0F, textWidth, 11.0F, 4.0F, ColorUtils.rgba(style1.getRed(), style1.getGreen(), style1.getBlue(), 50));

            float textX = posX - (im.expensive.utils.font.Fonts.mntsb[12].getWidth(this.text) / 2.0F);

            im.expensive.utils.font.Fonts.mntsb[12].drawString(stack, this.text, (double)(textX), (double)(posY + 19.0F), -1);

            //FUNCTIONS
            if (this.text.contains("включен")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack, "J", (double)(XStart + 4), (double)(posY + 20.0F), -1);
            } else if (this.text.contains("выключен")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack, "K", (double)(XStart + 4), (double)(posY + 20.0F), -1);
            }


            //FREELOOK
            if (this.text.contains("Отключите KillAura")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"M",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }

            //AUTOGPS
            if (this.text.contains("Добавили ГПС")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"F",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }

            //NOTIFICATIONS
            if (this.text.contains("высокий пинг")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"Q",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("просит спек")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"G",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("У вас мало хп!")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"M",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }

            //ELYTRAHELPER
            if (this.text.contains("Феерверки не найдены!")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"I",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("Свапнул на элитру!")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"G",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("Свапнул на нагрудник!")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"G",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }


            //FTHELPER
            if (this.text.contains("До следующего ивента")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"T",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("не найден")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"I",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
            if (this.text.contains("Заюзал")) {
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"G",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }

            mc.gameRenderer.setupOverlayRendering();

            return 12.0F;

        }

        public float getX() {
            return this.x;
        }

        public float getY() {
            return this.y;
        }

        public void setX(float x) {
            this.x = x;
        }

        public void setY(float y) {
            this.y = y;
        }

        public String getText() {
            return this.text;
        }

        public String getContent() {
            return this.content;
        }

        public long getTime() {
            return this.time;
        }
    }
}
После создаете класс
YOUGAME $$$ELFCODEEE:
package im.expensive.functions.api;

import im.expensive.ui.NotificationManager;

public class Notificpenus {

    public static NotificationManager NOTIFICATION_MANAGER;

}
Теперь в Expensive после File filesDir ставим код
Java:
    public NotificationManager notificationManager;
в clientLoad()
Java:
 notificationManager = new NotificationManager();
и в конец метода
Java:
Notificpenus.NOTIFICATION_MANAGER = new NotificationManager();
в Function ставим или заменяем
YOUGAME CHTOOO:
boolean bl = this.state = !this.state;

        if (!this.state) {

        this.onDisable();

        Notificpenus.NOTIFICATION_MANAGER.add(this.name + " выключен.", "", 2);

    } else {

        this.onEnable();

        Notificpenus.NOTIFICATION_MANAGER.add(this.name + " включен.", "", 2);

    }
UPDDDDDDD: Я не знаю надо оно 100% или нет, но что бы избежать вылетов и просьб помощи лучше поставлю
В класс IngameGui
ставим код +- на 427 строку
Java:
 Notificpenus.NOTIFICATION_MANAGER.draw(matrixStack);
Скачиваем шрифты
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кидаем их по пути src/assets/minecraft/expensive/font

Если у вас есть класс Fonts по пути im.expensive.utils.font то просто вставляем этот код
Java:
    public static volatile StyledFont[] nurik = new StyledFont[131];
    public static volatile StyledFont[] mntsb = new StyledFont[48]; //(строки после FONT_DIR)
Java:
        for (int i = 8; i < 48;i++) {
            mntsb[i] = new StyledFont("mntsb.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 131;i++) {
            nurik[i] = new StyledFont("nurik.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        } // Это ставим в метод init
Если же у вас нет класса и его утилок:
Качаем их с первого пункта отсюда (noad)
(Из этой системы можете не ставить шрифты, если вы их не ставите уберите все из метода init и все public static volatile StyledFont[] над методом

В NotificationManager я специально пометил FreeLook AutoGps что бы различать текст между друг другом, этот текст - иконка ставящаяся перед нотификейшном, если у вас их нет, код просто не будет работать, можете посмотреть сам шрифт, и по нему делать что то для своих нотификейшнов,

Как использовать?

Представим, что в функции GriefHelper вы хотите заменить текст через print на нотификейшн, для этого ищем строку с print, допустим это
FtHelper:
  print("Заюзал дезориентацию!");
Что бы заменить его на нотифку, вам надо написать
FtHelper:
 Notificpenus.NOTIFICATION_MANAGER.add("Заюзал дезориентацию!","",2);
2 = Время, которое будет виден нотификейшн
"Заюзал дезориентацию!" = текст который будет выводиться в нотифке

Теперь нам нужно прописать наш нотификейшн, если вы хотите, что бы у вас была видна иконка
Для этого в NotificationManager в методе draw пишем
Notifca:
if (this.text.contains("Заюзал")) { // "Заюзал" используется для установки иконки к нотифкам, в которых содержится этот текст
                im.expensive.utils.font.Fonts.nurik[16].drawString(stack,"G",(double)(XStart + 4), (double) (posY + 20.0F), -1);
            }
После этого ваши нотифки будут рендериться с иконкой!
Спасибо всем, кто полностью прочитал пост, жду ваших мега оценок под постом
смысл создавать отдельный класс? не проще инцилизировать в главном классе? по типу Expensive.java - rep , но если сделаешь чтобы на этих нотифках был драг будет +++++++ реп
 
Начинающий
Статус
Оффлайн
Регистрация
6 Дек 2023
Сообщения
308
Реакции[?]
1
Поинты[?]
1K
не реди 3.1, но даже тупой пастер перенесет поэтому гуд
гений, миллиардер, плейбой, д..
я на 3.1 эти нотифки писал, каким образом не реди 3.1?)
смысл создавать отдельный класс? не проще инцилизировать в главном классе? по типу Expensive.java - rep
я слил топовый рендер нотифок, но дефолтный код был взят с другой темы, я писал же
но если сделаешь чтобы на этих нотифках был драг будет +++++++ реп
я сделал скид нурика, в нурике нет драггинга на нотифики и никогда не было, какой от этого толк?
Если ты ренеймер который не может сам доделать их под себя, то это не мои проблемы, дружище
У меня и без того отличный рендер, лучше которого лично я не находил тем на юг
можешь помочь с кулдаунсами?
какие кулдауны?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июн 2024
Сообщения
487
Реакции[?]
1
Поинты[?]
1K
гений, миллиардер, плейбой, д..
я на 3.1 эти нотифки писал, каким образом не реди 3.1?)

я слил топовый рендер нотифок, но дефолтный код был взят с другой темы, я писал же

я сделал скид нурика, в нурике нет драггинга на нотифики и никогда не было, какой от этого толк?
Если ты ренеймер который не может сам доделать их под себя, то это не мои проблемы, дружище
У меня и без того отличный рендер, лучше которого лично я не находил тем на юг

какие кулдауны?
у тебя в худе они есть
 
Забаненный
Статус
Оффлайн
Регистрация
26 Окт 2024
Сообщения
122
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гений, миллиардер, плейбой, д..
я на 3.1 эти нотифки писал, каким образом не реди 3.1?)

я слил топовый рендер нотифок, но дефолтный код был взят с другой темы, я писал же

я сделал скид нурика, в нурике нет драггинга на нотифики и никогда не было, какой от этого толк?
Если ты ренеймер который не может сам доделать их под себя, то это не мои проблемы, дружище
У меня и без того отличный рендер, лучше которого лично я не находил тем на юг

какие кулдауны?
а, ну тогда тема ебаное дерьмище, буквально, там даже тип с -0 iq справится чтобы это сделать
 
Начинающий
Статус
Оффлайн
Регистрация
6 Дек 2023
Сообщения
308
Реакции[?]
1
Поинты[?]
1K
а, ну тогда тема ебаное дерьмище, буквально, там даже тип с -0 iq справится чтобы это сделать
Почему же никто до сих пор не слил нормальные нотифики? Буквально на юг 2 темы, моя и ещё одного типа по которой я и делал, при чем переписал рендер
Ты сидишь на юг, хрюкаешь на меня что я твои хотелки не выполнил, так хули ты сам не переделаешь так, как тебе нужно?
а, ну тогда тема ебаное дерьмище, буквально, там даже тип с -0 iq справится чтобы это сделать
 

Вложения

Забаненный
Статус
Оффлайн
Регистрация
26 Окт 2024
Сообщения
122
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Почему же никто до сих пор не слил нормальные нотифики? Буквально на юг 2 темы, моя и ещё одного типа по которой я и делал, при чем переписал рендер
Ты сидишь на юг, хрюкаешь на меня что я твои хотелки не выполнил, так хули ты сам не переделаешь так, как тебе нужно?
1730017566362.png

И ты ещё что то пиздишь?
 
Забаненный
Статус
Оффлайн
Регистрация
26 Окт 2024
Сообщения
122
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
26 Окт 2024
Сообщения
122
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу