• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Визуальная часть Такой себе ChangeLog | Expensive 3.1

Учись дальше лучше. Было бы лучше: создать лист стрингов и уже рендрить его(пример ниже), а не вот это.

List<String> changes = new ArrayList<>();

changes.add("Сосал?");

for (String change : changes) {
renderText(change, size, x, y)
y += size
}
Благодарю, буду знать больше)
Ответ на ваш вопрос - Да!

А можно еще так:

Java:
Expand Collapse Copy
        List<String> changes = new ArrayList<>(List.of(
                "[+] AutoSprint",
                "[+] KillAura"
        ));

        for (String change : changes) {
            System.out.println(change);
        }
И тебе тоже спасибо, подсказки для меня это хорошо
спасибо бро)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
чат гопоте
 
можно было лучше, проще и красивее.
Но зачем это одобрять...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
парсить с пастебинчика🚫
хуярить стринги:seemsgood:
 
Всем привет! Сливаю ChangeLog для Expensive 3.1. Если вы пастеры вам думаю сойдет. А если вы кодер или почти кодер то не пишите /del пожалуйста! Я недавно начал учить код и решил написать что то свое. Знаю что можно сократить данный код, но я не знаю как. буду доволен любому +rep:roflanEbalo: Вставлять в класс MainScreen



render:
Expand Collapse Copy
    [USER=1367676]@override[/USER]
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        super.render(matrixStack, mouseX, mouseY, partialTicks);
        if (stopWatch.isReached(100)) {
            particles.add(new Particle());
            stopWatch.reset();

        }
        MainWindow mainWindow = mc.getMainWindow();
        int windowWidth = ClientUtil.calc(mainWindow.getScaledWidth());
        int windowHeight = ClientUtil.calc(mainWindow.getScaledHeight());

        int logoWidth = 1920 / 2;
        int logoHeight = 1080 / 2;

        // Расчет координат для рисования логотипа по центру
        int xLogo = (windowWidth - logoWidth) / 2;
        int yLogo = (windowHeight - logoHeight) / 2 + 50;
        boolean small = mainWindow.getWidth() < 900 && mainWindow.getHeight() < 900;
        if (small) {
            yLogo += 50;
        }
        // Рисование логотипа по центру
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);
        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo, logoWidth, logoHeight, -1);

        //ChangeLog
        DisplayUtils.drawRoundedRect(4, 4, 190, 150, 2, ColorUtils.rgba(21, 21, 21, 255));
        ITextComponent NameChangeLog = GradientUtil.gradient("ChangeLog #1");
        ITextComponent DescriptionChangeLog1 = GradientUtil.gradient ("Разрабы сосали хуй!");
        ITextComponent DescriptionChangeLog2 = GradientUtil.gradient ("Создал ебланом!");
        Fonts.sfbold.drawText(matrixStack, NameChangeLog, 30, 4, 15, 255);
        Fonts.sfbold.drawText(matrixStack, DescriptionChangeLog1, 4, 25, 10, 255);
        Fonts.sfbold.drawText(matrixStack, DescriptionChangeLog2, 4, 37, 10, 255);


        KawaseBlur.blur.updateBlur(3, 4);
        drawButtons(matrixStack, mouseX, mouseY, partialTicks);

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();

    }

SS:
Посмотреть вложение 307856
пиздец хуйня
 
Зачем я опять зашел на форум в ветку майнкрафта
 
норм шрифтом и норм цветом без всякой хуйни в углу будет лучше 10 раз
 
Всем привет! Сливаю ChangeLog для Expensive 3.1. Если вы пастеры вам думаю сойдет. А если вы кодер или почти кодер то не пишите /del пожалуйста! Я недавно начал учить код и решил написать что то свое. Знаю что можно сократить данный код, но я не знаю как. буду доволен любому +rep:roflanEbalo: Вставлять в класс MainScreen



render:
Expand Collapse Copy
    [USER=1367676]@override[/USER]
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        super.render(matrixStack, mouseX, mouseY, partialTicks);
        if (stopWatch.isReached(100)) {
            particles.add(new Particle());
            stopWatch.reset();

        }
        MainWindow mainWindow = mc.getMainWindow();
        int windowWidth = ClientUtil.calc(mainWindow.getScaledWidth());
        int windowHeight = ClientUtil.calc(mainWindow.getScaledHeight());

        int logoWidth = 1920 / 2;
        int logoHeight = 1080 / 2;

        // Расчет координат для рисования логотипа по центру
        int xLogo = (windowWidth - logoWidth) / 2;
        int yLogo = (windowHeight - logoHeight) / 2 + 50;
        boolean small = mainWindow.getWidth() < 900 && mainWindow.getHeight() < 900;
        if (small) {
            yLogo += 50;
        }
        // Рисование логотипа по центру
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);
        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo, logoWidth, logoHeight, -1);

        //ChangeLog
        DisplayUtils.drawRoundedRect(4, 4, 190, 150, 2, ColorUtils.rgba(21, 21, 21, 255));
        ITextComponent NameChangeLog = GradientUtil.gradient("ChangeLog #1");
        ITextComponent DescriptionChangeLog1 = GradientUtil.gradient ("Разрабы сосали хуй!");
        ITextComponent DescriptionChangeLog2 = GradientUtil.gradient ("Создал ебланом!");
        Fonts.sfbold.drawText(matrixStack, NameChangeLog, 30, 4, 15, 255);
        Fonts.sfbold.drawText(matrixStack, DescriptionChangeLog1, 4, 25, 10, 255);
        Fonts.sfbold.drawText(matrixStack, DescriptionChangeLog2, 4, 37, 10, 255);


        KawaseBlur.blur.updateBlur(3, 4);
        drawButtons(matrixStack, mouseX, mouseY, partialTicks);

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();

    }

SS:
Посмотреть вложение 307856
пиздец
 
Ответ на ваш вопрос - Да!

А можно еще так:

Java:
Expand Collapse Copy
        List<String> changes = new ArrayList<>(List.of(
                "[+] AutoSprint",
                "[+] KillAura"
        ));

        for (String change : changes) {
            System.out.println(change);
        }


java:
Expand Collapse Copy
public class Main {
    public static void main(String[] args) {
        String rawChanges =
                "[10.06.2025] [+] [added bugs] [добавили баги]" +
                "\n" +
                "[08.06.2025] [-] [removed fixes] [удалили исправления]" +
                "\n" +
                "[08.06.2025] [/] [fix bypasses] [починили обходы]";

        Set<ChangelogItem> items = ChangelogBuilder.from(
                SimpleParser.INSTANCE, rawChanges
        ).items();
        System.out.println("changelog items: " + items.size());
        items.forEach(System.out::println);
    }
}

public interface IChangelogParser {

    Set<ChangelogItem> parse(String source);
}

public class SimpleParser implements IChangelogParser {

    private SimpleParser() {
    }

    public static final SimpleParser INSTANCE = new SimpleParser();

    [USER=1367676]@override[/USER]
    public Set<ChangelogItem> parse(String source) {
        Set<ChangelogItem> items = new HashSet<>();
        for (String sourceItem : source.split("\n")) {
            String[] elements = sourceItem
                    .substring(1, sourceItem.length() - 1)
                    .split("] \\[");
            String date = elements[0];
            String prefix = elements[1];
            String en = elements[2];
            String ru = elements[3];
            for (Type typeValue : Type.values()) {
                if (typeValue.prefix().equals(prefix)) {
                    Map<Language, String> text = new HashMap<>();
                    text.put(Language.EN, en);
                    text.put(Language.RU, ru);
                    items.add(new ChangelogItem(text, typeValue, date));
                    break;
                }
            }
        }
        return items;
    }
}

public class Changelog {

    private final Set<ChangelogItem> items = new HashSet<>();

    protected Changelog() {
    }

    public void add(ChangelogItem item) {
        this.items.add(item);
    }

    public void add(Set<ChangelogItem> items) {
        this.items.addAll(items);
    }

    public Set<ChangelogItem> items() {
        return new HashSet<>(items);
    }
}

public class ChangelogBuilder {

    private final String source;

    private ChangelogBuilder(String source) {
        this.source = source;
    }

    public static Changelog from(IChangelogParser parser, String... source) {
        Changelog changelog = new Changelog();
        Arrays.stream(source).forEach(
                sourceItem -> changelog.add(parser.parse(sourceItem))
        );
        return changelog;
    }

    public String source() {
        return source;
    }
}

public class ChangelogItem {
    private final Map<Language, String> source;
    private final Type type;
    private final String date;

    public ChangelogItem(Map<Language, String> source, Type type, String date) {
        this.source = source;
        this.type = type;
        this.date = date;
    }

    public Type type() { return type; }

    public String date() {
        return date;
    }

    public String format(Language language) {
        return String.format("[%s] [%s] %s", type().name(), date, source.get(language));
    }

    public String source(Language language) { return source.get(language); }

    [USER=1367676]@override[/USER]
    public String toString() {
        return format(Language.RU);
    }
}

public enum Language {
    EN,
    RU
}

public enum Type {
    ADD("+"),
    REMOVE("-"),
    FIX("/"),
    OTHER("#");

    private final String prefix;

    Type(String prefix) {
        this.prefix = prefix;
    }

    public String prefix() {
        return prefix;
    }
}
 
java:
Expand Collapse Copy
public class Main {
    public static void main(String[] args) {
        String rawChanges =
                "[10.06.2025] [+] [added bugs] [добавили баги]" +
                "\n" +
                "[08.06.2025] [-] [removed fixes] [удалили исправления]" +
                "\n" +
                "[08.06.2025] [/] [fix bypasses] [починили обходы]";

        Set<ChangelogItem> items = ChangelogBuilder.from(
                SimpleParser.INSTANCE, rawChanges
        ).items();
        System.out.println("changelog items: " + items.size());
        items.forEach(System.out::println);
    }
}

public interface IChangelogParser {

    Set<ChangelogItem> parse(String source);
}

public class SimpleParser implements IChangelogParser {

    private SimpleParser() {
    }

    public static final SimpleParser INSTANCE = new SimpleParser();

    [USER=1367676]@override[/USER]
    public Set<ChangelogItem> parse(String source) {
        Set<ChangelogItem> items = new HashSet<>();
        for (String sourceItem : source.split("\n")) {
            String[] elements = sourceItem
                    .substring(1, sourceItem.length() - 1)
                    .split("] \\[");
            String date = elements[0];
            String prefix = elements[1];
            String en = elements[2];
            String ru = elements[3];
            for (Type typeValue : Type.values()) {
                if (typeValue.prefix().equals(prefix)) {
                    Map<Language, String> text = new HashMap<>();
                    text.put(Language.EN, en);
                    text.put(Language.RU, ru);
                    items.add(new ChangelogItem(text, typeValue, date));
                    break;
                }
            }
        }
        return items;
    }
}

public class Changelog {

    private final Set<ChangelogItem> items = new HashSet<>();

    protected Changelog() {
    }

    public void add(ChangelogItem item) {
        this.items.add(item);
    }

    public void add(Set<ChangelogItem> items) {
        this.items.addAll(items);
    }

    public Set<ChangelogItem> items() {
        return new HashSet<>(items);
    }
}

public class ChangelogBuilder {

    private final String source;

    private ChangelogBuilder(String source) {
        this.source = source;
    }

    public static Changelog from(IChangelogParser parser, String... source) {
        Changelog changelog = new Changelog();
        Arrays.stream(source).forEach(
                sourceItem -> changelog.add(parser.parse(sourceItem))
        );
        return changelog;
    }

    public String source() {
        return source;
    }
}

public class ChangelogItem {
    private final Map<Language, String> source;
    private final Type type;
    private final String date;

    public ChangelogItem(Map<Language, String> source, Type type, String date) {
        this.source = source;
        this.type = type;
        this.date = date;
    }

    public Type type() { return type; }

    public String date() {
        return date;
    }

    public String format(Language language) {
        return String.format("[%s] [%s] %s", type().name(), date, source.get(language));
    }

    public String source(Language language) { return source.get(language); }

    [USER=1367676]@override[/USER]
    public String toString() {
        return format(Language.RU);
    }
}

public enum Language {
    EN,
    RU
}

public enum Type {
    ADD("+"),
    REMOVE("-"),
    FIX("/"),
    OTHER("#");

    private final String prefix;

    Type(String prefix) {
        this.prefix = prefix;
    }

    public String prefix() {
        return prefix;
    }
}
фалсер доказал кто здесь крутой :anguished:
 

Похожие темы

Назад
Сверху Снизу