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

Часть функционала Notifications для Rich 1.21.11 fabric

Начинающий
Начинающий
Статус
Онлайн
Регистрация
3 Июн 2025
Сообщения
11
Реакции
0
Выберите загрузчик игры
  1. Fabric
Код:
Expand Collapse Copy
package rich.screens.hud;

import net.minecraft.client.gui.DrawContext;
import rich.client.draggables.AbstractHudElement;
import rich.util.animations.Animation;
import rich.util.animations.Direction;
import rich.util.animations.OutBack;
import rich.util.render.Render2D;
import rich.util.render.font.Fonts;

import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Notifications extends AbstractHudElement {

    private static Notifications instance;

    public static Notifications getInstance() {
        return instance;
    }

    private final List<NotificationEntry> notifications = new ArrayList<>();

    private static final float NOTIF_HEIGHT = 30f;
    private static final float NOTIF_WIDTH = 140f;
    private static final float GAP = 6f;

    private long lastTimeNs = System.nanoTime();

    public Notifications() {
        super("Notifications", 0, 0, (int) NOTIF_WIDTH, (int) NOTIF_HEIGHT, false);
        instance = this;
    }

    @Override
    public boolean visible() {
        return !notifications.isEmpty();
    }

    @Override
    public void tick() {
        for (NotificationEntry entry : notifications) {
            if (System.currentTimeMillis() > entry.removeTime) {
                entry.anim.setDirection(Direction.BACKWARDS);
            }
        }

        notifications.removeIf(entry -> entry.anim.isFinished(Direction.BACKWARDS));

        updateTargetPositions();
    }

    private void updateTargetPositions() {
        float offsetY = 10f;
        for (NotificationEntry entry : notifications) {
            entry.targetY = offsetY;
            offsetY += NOTIF_HEIGHT + GAP;
        }
    }

    private void updatePositionsWithPhysics() {
        long now = System.nanoTime();
        float deltaSec = (now - lastTimeNs) / 1_000_000_000f;
        lastTimeNs = now;

        deltaSec = Math.min(deltaSec, 0.05f);

        float smooth = 3f;
        float bounce = 18f;

        for (NotificationEntry entry : notifications) {
            float diff = entry.targetY - entry.currentY;
            float accel = diff * smooth;

            entry.velocityY += accel * deltaSec;
            entry.velocityY *= (1f - bounce * deltaSec * 0.98f);

            entry.currentY += entry.velocityY;

            if (Math.abs(diff) < 0.1f && Math.abs(entry.velocityY) < 0.1f) {
                entry.currentY = entry.targetY;
                entry.velocityY = 0;
            }
        }
    }

    public void addNotification(String text, long durationMs) {
        Animation anim = new OutBack().setMs(750).setValue(1);
        anim.setDirection(Direction.FORWARDS);

        long now = System.currentTimeMillis();

        NotificationEntry newEntry = new NotificationEntry(
                text,
                anim,
                now,
                now + durationMs
        );

        notifications.add(0, newEntry);

        if (notifications.size() > 8) {
            notifications.remove(notifications.size() - 1);
        }

        notifications.sort(Comparator.comparingLong(n -> -n.startTime));
    }

    private int clampAlpha(int val) {
        return Math.max(0, Math.min(255, val));
    }

    @Override
    public void drawDraggable(DrawContext context, int alpha) {
        //отрисовка
        alpha = clampAlpha(alpha);
        if (alpha <= 0) return;

        float alphaF = alpha / 255f;

        float screenW = mc.getWindow().getScaledWidth();
        float screenH = mc.getWindow().getScaledHeight();

        updatePositionsWithPhysics();

        for (NotificationEntry entry : notifications) {

            float animProgress = entry.anim.getOutput().floatValue();
            animProgress = Math.max(0f, Math.min(1f, animProgress));
            if (animProgress <= 0.01f) continue;

            float width = NOTIF_WIDTH;
            float height = NOTIF_HEIGHT;

            float startX = screenW - (width * animProgress) - 6f;
            float startY = screenH - entry.currentY - height;

            int bgAlpha = clampAlpha((int) (255 * animProgress * alphaF));
            int textAlpha = clampAlpha((int) (255 * animProgress * alphaF));

            Render2D.gradientRect(
                    startX,
                    startY,
                    width,
                    height,
                    new int[]{
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB(),
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB()
                    },
                    5f
            );

            Render2D.outline(startX, startY, width, height, 1f, new Color(90, 90, 90, bgAlpha).getRGB(), 5);

            Fonts.BOLD.draw(
                    entry.text,
                    startX + 40,
                    startY + 11,
                    7,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );

            Fonts.BOLD.draw(
                    "!",
                    startX + 17,
                    startY + 3,
                    20,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );
        }

        setWidth((int) NOTIF_WIDTH);
        setHeight((int) screenH);
    }

    public static class NotificationEntry {
        String text;
        Animation anim;
        long startTime;
        long removeTime;

        float currentY;
        float targetY;
        float velocityY;

        NotificationEntry(String text, Animation anim, long startTime, long removeTime) {
            this.text = text;
            this.anim = anim;
            this.startTime = startTime;
            this.removeTime = removeTime;
            this.currentY = 0;
            this.targetY = 0;
            this.velocityY = 0;
        }
    }
}

SS:
1771423083910.png


Сделал на скорую руку нотификейшоны в "старом" стиле, никогда не нравились новые маленькие по центру экрана.
Кому надо тот сам отрисует как ему нравится т.к над дизайном я не парился
 
Код:
Expand Collapse Copy
package rich.screens.hud;

import net.minecraft.client.gui.DrawContext;
import rich.client.draggables.AbstractHudElement;
import rich.util.animations.Animation;
import rich.util.animations.Direction;
import rich.util.animations.OutBack;
import rich.util.render.Render2D;
import rich.util.render.font.Fonts;

import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Notifications extends AbstractHudElement {

    private static Notifications instance;

    public static Notifications getInstance() {
        return instance;
    }

    private final List<NotificationEntry> notifications = new ArrayList<>();

    private static final float NOTIF_HEIGHT = 30f;
    private static final float NOTIF_WIDTH = 140f;
    private static final float GAP = 6f;

    private long lastTimeNs = System.nanoTime();

    public Notifications() {
        super("Notifications", 0, 0, (int) NOTIF_WIDTH, (int) NOTIF_HEIGHT, false);
        instance = this;
    }

    @Override
    public boolean visible() {
        return !notifications.isEmpty();
    }

    @Override
    public void tick() {
        for (NotificationEntry entry : notifications) {
            if (System.currentTimeMillis() > entry.removeTime) {
                entry.anim.setDirection(Direction.BACKWARDS);
            }
        }

        notifications.removeIf(entry -> entry.anim.isFinished(Direction.BACKWARDS));

        updateTargetPositions();
    }

    private void updateTargetPositions() {
        float offsetY = 10f;
        for (NotificationEntry entry : notifications) {
            entry.targetY = offsetY;
            offsetY += NOTIF_HEIGHT + GAP;
        }
    }

    private void updatePositionsWithPhysics() {
        long now = System.nanoTime();
        float deltaSec = (now - lastTimeNs) / 1_000_000_000f;
        lastTimeNs = now;

        deltaSec = Math.min(deltaSec, 0.05f);

        float smooth = 3f;
        float bounce = 18f;

        for (NotificationEntry entry : notifications) {
            float diff = entry.targetY - entry.currentY;
            float accel = diff * smooth;

            entry.velocityY += accel * deltaSec;
            entry.velocityY *= (1f - bounce * deltaSec * 0.98f);

            entry.currentY += entry.velocityY;

            if (Math.abs(diff) < 0.1f && Math.abs(entry.velocityY) < 0.1f) {
                entry.currentY = entry.targetY;
                entry.velocityY = 0;
            }
        }
    }

    public void addNotification(String text, long durationMs) {
        Animation anim = new OutBack().setMs(750).setValue(1);
        anim.setDirection(Direction.FORWARDS);

        long now = System.currentTimeMillis();

        NotificationEntry newEntry = new NotificationEntry(
                text,
                anim,
                now,
                now + durationMs
        );

        notifications.add(0, newEntry);

        if (notifications.size() > 8) {
            notifications.remove(notifications.size() - 1);
        }

        notifications.sort(Comparator.comparingLong(n -> -n.startTime));
    }

    private int clampAlpha(int val) {
        return Math.max(0, Math.min(255, val));
    }

    @Override
    public void drawDraggable(DrawContext context, int alpha) {
        //отрисовка
        alpha = clampAlpha(alpha);
        if (alpha <= 0) return;

        float alphaF = alpha / 255f;

        float screenW = mc.getWindow().getScaledWidth();
        float screenH = mc.getWindow().getScaledHeight();

        updatePositionsWithPhysics();

        for (NotificationEntry entry : notifications) {

            float animProgress = entry.anim.getOutput().floatValue();
            animProgress = Math.max(0f, Math.min(1f, animProgress));
            if (animProgress <= 0.01f) continue;

            float width = NOTIF_WIDTH;
            float height = NOTIF_HEIGHT;

            float startX = screenW - (width * animProgress) - 6f;
            float startY = screenH - entry.currentY - height;

            int bgAlpha = clampAlpha((int) (255 * animProgress * alphaF));
            int textAlpha = clampAlpha((int) (255 * animProgress * alphaF));

            Render2D.gradientRect(
                    startX,
                    startY,
                    width,
                    height,
                    new int[]{
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB(),
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB()
                    },
                    5f
            );

            Render2D.outline(startX, startY, width, height, 1f, new Color(90, 90, 90, bgAlpha).getRGB(), 5);

            Fonts.BOLD.draw(
                    entry.text,
                    startX + 40,
                    startY + 11,
                    7,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );

            Fonts.BOLD.draw(
                    "!",
                    startX + 17,
                    startY + 3,
                    20,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );
        }

        setWidth((int) NOTIF_WIDTH);
        setHeight((int) screenH);
    }

    public static class NotificationEntry {
        String text;
        Animation anim;
        long startTime;
        long removeTime;

        float currentY;
        float targetY;
        float velocityY;

        NotificationEntry(String text, Animation anim, long startTime, long removeTime) {
            this.text = text;
            this.anim = anim;
            this.startTime = startTime;
            this.removeTime = removeTime;
            this.currentY = 0;
            this.targetY = 0;
            this.velocityY = 0;
        }
    }
}

SS:Посмотреть вложение 327993

Сделал на скорую руку нотификейшоны в "старом" стиле, никогда не нравились новые маленькие по центру экрана.
Кому надо тот сам отрисует как ему нравится т.к над дизайном я не парился
ну и хуйня кривая
чем тебе ровные уведомления по центру не угадили
 
пожалуйста удали иде с компа и не позорься
на другие комментарии и не рассчитывал
ну и хуйня кривая
чем тебе ровные уведомления по центру не угадили
хуйня потому-что, к слову арайлист пиздатая штука
 
Последнее редактирование:
Реализация - говно. Но идея прикольная.
внимательнее прочитай, я написал что над дизайном не парился
Логика работает хорошо, кому нравится не нравится пусть сам под себя рисует. На вкус и цвет товарища нет.
 
Че доебались до типа? Он написал: "Сделал на скорую руку и над дизайном не парился". Всё, что сливают на этом форуме, не обязательно должно быть идеальным и уж тем более нравиться всем
 
Код:
Expand Collapse Copy
package rich.screens.hud;

import net.minecraft.client.gui.DrawContext;
import rich.client.draggables.AbstractHudElement;
import rich.util.animations.Animation;
import rich.util.animations.Direction;
import rich.util.animations.OutBack;
import rich.util.render.Render2D;
import rich.util.render.font.Fonts;

import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Notifications extends AbstractHudElement {

    private static Notifications instance;

    public static Notifications getInstance() {
        return instance;
    }

    private final List<NotificationEntry> notifications = new ArrayList<>();

    private static final float NOTIF_HEIGHT = 30f;
    private static final float NOTIF_WIDTH = 140f;
    private static final float GAP = 6f;

    private long lastTimeNs = System.nanoTime();

    public Notifications() {
        super("Notifications", 0, 0, (int) NOTIF_WIDTH, (int) NOTIF_HEIGHT, false);
        instance = this;
    }

    @Override
    public boolean visible() {
        return !notifications.isEmpty();
    }

    @Override
    public void tick() {
        for (NotificationEntry entry : notifications) {
            if (System.currentTimeMillis() > entry.removeTime) {
                entry.anim.setDirection(Direction.BACKWARDS);
            }
        }

        notifications.removeIf(entry -> entry.anim.isFinished(Direction.BACKWARDS));

        updateTargetPositions();
    }

    private void updateTargetPositions() {
        float offsetY = 10f;
        for (NotificationEntry entry : notifications) {
            entry.targetY = offsetY;
            offsetY += NOTIF_HEIGHT + GAP;
        }
    }

    private void updatePositionsWithPhysics() {
        long now = System.nanoTime();
        float deltaSec = (now - lastTimeNs) / 1_000_000_000f;
        lastTimeNs = now;

        deltaSec = Math.min(deltaSec, 0.05f);

        float smooth = 3f;
        float bounce = 18f;

        for (NotificationEntry entry : notifications) {
            float diff = entry.targetY - entry.currentY;
            float accel = diff * smooth;

            entry.velocityY += accel * deltaSec;
            entry.velocityY *= (1f - bounce * deltaSec * 0.98f);

            entry.currentY += entry.velocityY;

            if (Math.abs(diff) < 0.1f && Math.abs(entry.velocityY) < 0.1f) {
                entry.currentY = entry.targetY;
                entry.velocityY = 0;
            }
        }
    }

    public void addNotification(String text, long durationMs) {
        Animation anim = new OutBack().setMs(750).setValue(1);
        anim.setDirection(Direction.FORWARDS);

        long now = System.currentTimeMillis();

        NotificationEntry newEntry = new NotificationEntry(
                text,
                anim,
                now,
                now + durationMs
        );

        notifications.add(0, newEntry);

        if (notifications.size() > 8) {
            notifications.remove(notifications.size() - 1);
        }

        notifications.sort(Comparator.comparingLong(n -> -n.startTime));
    }

    private int clampAlpha(int val) {
        return Math.max(0, Math.min(255, val));
    }

    @Override
    public void drawDraggable(DrawContext context, int alpha) {
        //отрисовка
        alpha = clampAlpha(alpha);
        if (alpha <= 0) return;

        float alphaF = alpha / 255f;

        float screenW = mc.getWindow().getScaledWidth();
        float screenH = mc.getWindow().getScaledHeight();

        updatePositionsWithPhysics();

        for (NotificationEntry entry : notifications) {

            float animProgress = entry.anim.getOutput().floatValue();
            animProgress = Math.max(0f, Math.min(1f, animProgress));
            if (animProgress <= 0.01f) continue;

            float width = NOTIF_WIDTH;
            float height = NOTIF_HEIGHT;

            float startX = screenW - (width * animProgress) - 6f;
            float startY = screenH - entry.currentY - height;

            int bgAlpha = clampAlpha((int) (255 * animProgress * alphaF));
            int textAlpha = clampAlpha((int) (255 * animProgress * alphaF));

            Render2D.gradientRect(
                    startX,
                    startY,
                    width,
                    height,
                    new int[]{
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB(),
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB()
                    },
                    5f
            );

            Render2D.outline(startX, startY, width, height, 1f, new Color(90, 90, 90, bgAlpha).getRGB(), 5);

            Fonts.BOLD.draw(
                    entry.text,
                    startX + 40,
                    startY + 11,
                    7,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );

            Fonts.BOLD.draw(
                    "!",
                    startX + 17,
                    startY + 3,
                    20,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );
        }

        setWidth((int) NOTIF_WIDTH);
        setHeight((int) screenH);
    }

    public static class NotificationEntry {
        String text;
        Animation anim;
        long startTime;
        long removeTime;

        float currentY;
        float targetY;
        float velocityY;

        NotificationEntry(String text, Animation anim, long startTime, long removeTime) {
            this.text = text;
            this.anim = anim;
            this.startTime = startTime;
            this.removeTime = removeTime;
            this.currentY = 0;
            this.targetY = 0;
            this.velocityY = 0;
        }
    }
}

SS:Посмотреть вложение 327993

Сделал на скорую руку нотификейшоны в "старом" стиле, никогда не нравились новые маленькие по центру экрана.
Кому надо тот сам отрисует как ему нравится т.к над дизайном я не парился
Чутка текст побольше, иконочки нормальные и размеры подправить,то кайф
 
Че доебались до типа? Он написал: "Сделал на скорую руку и над дизайном не парился". Всё, что сливают на этом форуме, не обязательно должно быть идеальным и уж тем более нравиться всем
ну так жри дерьмо тогда
чувак сам понимает что сделал калл на скорую руку и просит оценки на форуме, что ещё ему сказать если не "хуйня"
 
ну так жри дерьмо тогда
чувак сам понимает что сделал калл на скорую руку и просит оценки на форуме, что ещё ему сказать если не "хуйня"
Где он просил оценки дубень? Он прямо написал фиксите как хотите
 
Где он просил оценки дубень? Он прямо написал фиксите как хотите
ты не понял, на форуме есть такая вещь как комментарии что бы говорить свою оценку какой либо теме.
если бы он не хотел не какой оценки то не заливал бы на форум, то что он сделал рил херня, сделать можно за 5 минут если не меньше
 
Код:
Expand Collapse Copy
package rich.screens.hud;

import net.minecraft.client.gui.DrawContext;
import rich.client.draggables.AbstractHudElement;
import rich.util.animations.Animation;
import rich.util.animations.Direction;
import rich.util.animations.OutBack;
import rich.util.render.Render2D;
import rich.util.render.font.Fonts;

import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Notifications extends AbstractHudElement {

    private static Notifications instance;

    public static Notifications getInstance() {
        return instance;
    }

    private final List<NotificationEntry> notifications = new ArrayList<>();

    private static final float NOTIF_HEIGHT = 30f;
    private static final float NOTIF_WIDTH = 140f;
    private static final float GAP = 6f;

    private long lastTimeNs = System.nanoTime();

    public Notifications() {
        super("Notifications", 0, 0, (int) NOTIF_WIDTH, (int) NOTIF_HEIGHT, false);
        instance = this;
    }

    @Override
    public boolean visible() {
        return !notifications.isEmpty();
    }

    @Override
    public void tick() {
        for (NotificationEntry entry : notifications) {
            if (System.currentTimeMillis() > entry.removeTime) {
                entry.anim.setDirection(Direction.BACKWARDS);
            }
        }

        notifications.removeIf(entry -> entry.anim.isFinished(Direction.BACKWARDS));

        updateTargetPositions();
    }

    private void updateTargetPositions() {
        float offsetY = 10f;
        for (NotificationEntry entry : notifications) {
            entry.targetY = offsetY;
            offsetY += NOTIF_HEIGHT + GAP;
        }
    }

    private void updatePositionsWithPhysics() {
        long now = System.nanoTime();
        float deltaSec = (now - lastTimeNs) / 1_000_000_000f;
        lastTimeNs = now;

        deltaSec = Math.min(deltaSec, 0.05f);

        float smooth = 3f;
        float bounce = 18f;

        for (NotificationEntry entry : notifications) {
            float diff = entry.targetY - entry.currentY;
            float accel = diff * smooth;

            entry.velocityY += accel * deltaSec;
            entry.velocityY *= (1f - bounce * deltaSec * 0.98f);

            entry.currentY += entry.velocityY;

            if (Math.abs(diff) < 0.1f && Math.abs(entry.velocityY) < 0.1f) {
                entry.currentY = entry.targetY;
                entry.velocityY = 0;
            }
        }
    }

    public void addNotification(String text, long durationMs) {
        Animation anim = new OutBack().setMs(750).setValue(1);
        anim.setDirection(Direction.FORWARDS);

        long now = System.currentTimeMillis();

        NotificationEntry newEntry = new NotificationEntry(
                text,
                anim,
                now,
                now + durationMs
        );

        notifications.add(0, newEntry);

        if (notifications.size() > 8) {
            notifications.remove(notifications.size() - 1);
        }

        notifications.sort(Comparator.comparingLong(n -> -n.startTime));
    }

    private int clampAlpha(int val) {
        return Math.max(0, Math.min(255, val));
    }

    @Override
    public void drawDraggable(DrawContext context, int alpha) {
        //отрисовка
        alpha = clampAlpha(alpha);
        if (alpha <= 0) return;

        float alphaF = alpha / 255f;

        float screenW = mc.getWindow().getScaledWidth();
        float screenH = mc.getWindow().getScaledHeight();

        updatePositionsWithPhysics();

        for (NotificationEntry entry : notifications) {

            float animProgress = entry.anim.getOutput().floatValue();
            animProgress = Math.max(0f, Math.min(1f, animProgress));
            if (animProgress <= 0.01f) continue;

            float width = NOTIF_WIDTH;
            float height = NOTIF_HEIGHT;

            float startX = screenW - (width * animProgress) - 6f;
            float startY = screenH - entry.currentY - height;

            int bgAlpha = clampAlpha((int) (255 * animProgress * alphaF));
            int textAlpha = clampAlpha((int) (255 * animProgress * alphaF));

            Render2D.gradientRect(
                    startX,
                    startY,
                    width,
                    height,
                    new int[]{
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB(),
                            new Color(52, 52, 52, bgAlpha).getRGB(),
                            new Color(22, 22, 22, bgAlpha).getRGB()
                    },
                    5f
            );

            Render2D.outline(startX, startY, width, height, 1f, new Color(90, 90, 90, bgAlpha).getRGB(), 5);

            Fonts.BOLD.draw(
                    entry.text,
                    startX + 40,
                    startY + 11,
                    7,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );

            Fonts.BOLD.draw(
                    "!",
                    startX + 17,
                    startY + 3,
                    20,
                    new Color(255, 255, 255, textAlpha).getRGB()
            );
        }

        setWidth((int) NOTIF_WIDTH);
        setHeight((int) screenH);
    }

    public static class NotificationEntry {
        String text;
        Animation anim;
        long startTime;
        long removeTime;

        float currentY;
        float targetY;
        float velocityY;

        NotificationEntry(String text, Animation anim, long startTime, long removeTime) {
            this.text = text;
            this.anim = anim;
            this.startTime = startTime;
            this.removeTime = removeTime;
            this.currentY = 0;
            this.targetY = 0;
            this.velocityY = 0;
        }
    }
}

SS:Посмотреть вложение 327993

Сделал на скорую руку нотификейшоны в "старом" стиле, никогда не нравились новые маленькие по центру экрана.
Кому надо тот сам отрисует как ему нравится т.к над дизайном я не парился
что все ноют мне зашло
 
ты не понял, на форуме есть такая вещь как комментарии что бы говорить свою оценку какой либо теме.
если бы он не хотел не какой оценки то не заливал бы на форум, то что он сделал рил херня, сделать можно за 5 минут если не меньше
херню сморозил, суда выложил потому-что это крупнейший форум снг в этой теме и потому-что здесь слили сурс рича а значит логичнее код суда и выкладывать, никакие "оценки" меня не интересуют - выложил чтобы нашлась польза этому коду.
Думай что хочешь и как хочешь если ты способен, в конце концов твое нищее мнение меня не интересует
 
херню сморозил, суда выложил потому-что это крупнейший форум снг в этой теме и потому-что здесь слили сурс рича а значит логичнее код суда и выкладывать, никакие "оценки" меня не интересуют - выложил чтобы нашлась польза этому коду.
Думай что хочешь и как хочешь если ты способен, в конце концов твое нищее мнение меня не интересует
1771435589439.png
если не устраиваёт моё мнение то можешь почитать другие комментарии которые тебя обсирают)
ты сделал полную хуету, тебе это в лицо сказали и ты на что то обижен.
Было бы похуй ты бы мне щас это всё не выписывал...
 
Посмотреть вложение 328009если не устраиваёт моё мнение то можешь почитать другие комментарии которые тебя обсирают)
ты сделал полную хуету, тебе это в лицо сказали и ты на что то обижен.
Было бы похуй ты бы мне щас это всё не выписывал...
Не путай
Это ты на что-то обижен что с такой яростью выписываешь
Не нравится - промолчи и иди дальше своей дорогой но нет ты сидишь здесь слюни пускаешь будто это что-то изменит
 
Не путай
Это ты на что-то обижен что с такой яростью выписываешь
Не нравится - промолчи и иди дальше своей дорогой но нет ты сидишь здесь слюни пускаешь будто это что-то изменит
1771437171513.png
ну вот я прям созлостью это написал вообще я такой неадекват боже...
не то что ты со своими адекватными и добрыми сообщениями
1771437220176.png
1771437231853.png
 
Назад
Сверху Снизу