Вопрос Cannot invoke - проблемма с новой системой шрифтов

Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0

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

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

Спасибо!

У меня при запуске похоже шрифты не могут подгрузиться, вот такая null ошибка:
java.lang.NullPointerException: Cannot invoke "im.expensive.utils.text.font.styled.StyledFont.getWidth(String)" because "im.expensive.utils.text.font.ClientFonts.msSemiBold[22]" is null
Репорт прикрепил.
Систему фонтов украл (спастил) из EvaWare. Вроде как без ошибок.
Пробовал ClientFonts и просто Fonts (меняя название класса) (но все равно не работает)

Другая система шрифтов нужна была для MainMenu:

MainMenu пастил для обычной Exp 3.1
 

Вложения

Начинающий
Статус
Оффлайн
Регистрация
17 Фев 2024
Сообщения
46
Реакции[?]
0
Поинты[?]
0
im.expensive.utils.text.font.ClientFonts.msSemiBold[22]" is null тебе это должно говорить о том что ты нихуя не создал в классе шрифт с именем msSemiBold и размером 22
 
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0
im.expensive.utils.text.font.ClientFonts.msSemiBold[22]" is null тебе это должно говорить о том что ты нихуя не создал в классе шрифт с именем msSemiBold и размером 22
В том то прикол что он создан. А размер как я понимаю у меня сделан так, что какой бы размер не вписал он будет подстраиваться. Могу скинуть класс Fonts.
 
Начинающий
Статус
Оффлайн
Регистрация
17 Фев 2024
Сообщения
46
Реакции[?]
0
Поинты[?]
0
Шанс того, что "оно само" равен 0, кидай фонтс
У тебя должно быть не по уебански прямой доступ к массиву, а через Fots.get(Enum,size) и тебе вернёт из map или добавит новый размер если он не создан
 
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0
Шанс того, что "оно само" равен 0, кидай фонтс
У тебя должно быть не по уебански прямой доступ к массиву, а через Fots.get(Enum,size) и тебе вернёт из map или добавит новый размер если он не создан
ClientFonts:
package im.expensive.utils.text.font;

import lombok.SneakyThrows;
import im.expensive.utils.text.font.common.Lang;
import im.expensive.utils.text.font.styled.StyledFont;
import net.minecraft.util.ResourceLocation;


public class ClientFonts {
    public static final String FONT_DIR = "/assets/minecraft/expensive/fonts/normal/";

    public static volatile StyledFont[] msBold = new StyledFont[50];
    public static volatile StyledFont[] msMedium = new StyledFont[50];
    public static volatile StyledFont[] msLight = new StyledFont[50];
    public static volatile StyledFont[] msRegular = new StyledFont[50];
    public static volatile StyledFont[] msSemiBold = new StyledFont[50];
    public static volatile StyledFont[] roadRage = new StyledFont[50];
    public static volatile StyledFont[] small_pixel = new StyledFont[50];
    public static volatile StyledFont[] tech = new StyledFont[50];
    public static volatile StyledFont[] icon = new StyledFont[50];
    public static volatile StyledFont[] icons_wex = new StyledFont[50];
    public static volatile StyledFont[] icons_nur = new StyledFont[50];
    public static volatile StyledFont[] comfortaa = new StyledFont[50];
    public static volatile StyledFont[] interBold = new StyledFont[80];
    public static volatile StyledFont[] interMedium = new StyledFont[80];
    public static volatile StyledFont[] interRegular = new StyledFont[80];
    public static volatile StyledFont[] interSemiBold = new StyledFont[80];

    @SneakyThrows
    public static void init() {

        for (int i = 8; i < 30; i++) {
            msBold[i] = new StyledFont("Montserrat-Bold.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            msLight[i] = new StyledFont("Montserrat-Light.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            msMedium[i] = new StyledFont("Montserrat-Medium.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            msRegular[i] = new StyledFont("Montserrat-Regular.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            msSemiBold[i] = new StyledFont("Montserrat-SemiBold.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }

        for (int i = 8; i < 30; i++) {
            roadRage[i] = new StyledFont("roadrage.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            small_pixel[i] = new StyledFont("small_pixel.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            tech[i] = new StyledFont("tech.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            icon[i] = new StyledFont("icon.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 50; i++) {
            icons_wex[i] = new StyledFont("iconswex.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 40; i++) {
            icons_nur[i] = new StyledFont("iconsnur.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 40; i++) {
            comfortaa[i] = new StyledFont("comfortaa-regular.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            interRegular[i] = new StyledFont("inter_regular.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            interMedium[i] = new StyledFont("inter_medium.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            interSemiBold[i] = new StyledFont("inter_semibold.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
        for (int i = 8; i < 30; i++) {
            interBold[i] = new StyledFont("inter_bold.ttf", i, 0.0f, 0.0f, 0.0f, true, Lang.ENG_RU);
        }
    }
}
Шанс того, что "оно само" равен 0, кидай фонтс
У тебя должно быть не по уебански прямой доступ к массиву, а через Fots.get(Enum,size) и тебе вернёт из map или добавит новый размер если он не создан
Ну да, наверное все таки я напутал. Просто я такой походу глупый что исправить не могу. и не понимаю систему фонтов. Поэтому прошу помощи. В общем я посчитал, что например если вписать ClientFonts.msSemiBold[22], то 22 это и есть размер шрифта. Я же не думаю что там нужно несколько значений размера шрифта создавать в классе
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
17 Фев 2024
Сообщения
46
Реакции[?]
0
Поинты[?]
0
1. посмотри если ли у тебя этот шрифт /assets/minecraft/expensive/fonts/normal/Montserrat-SemiBold.ttf
2. Если да: посмотри нету ли у тебя ошибок когда создаются все эти шрифты
3. Кинь фулл лог если не помогло

\
АХАХХАХ, и самое тупое 4. скинь конструктор
StyledFont
, кажись будет угар
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0
1. посмотри если ли у тебя этот шрифт /assets/minecraft/expensive/fonts/normal/Montserrat-SemiBold.ttf
2. Если да: посмотри нету ли у тебя ошибок когда создаются все эти шрифты
3. Кинь фулл лог если не помогло

\
АХАХХАХ, и самое тупое 4. скинь конструктор
StyledFont
, кажись будет угар
2. Шрифт лежит
3. Лог прикрепил (но я заметил такой пунктик):
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 22 out of bounds for length 22
at im.expensive.ui.mainmenu.MainScreen.render(MainScreen.java:126) ~[client/:?]
4.угар наверное то что я что-то не так там сделал?)

StyledFont:
package im.expensive.utils.text.font.styled;

import java.awt.*;
import java.util.Locale;

import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.util.math.vector.Matrix4f;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextFormatting;
import im.expensive.utils.text.font.common.AbstractFont;
import im.expensive.utils.text.font.common.Lang;
import im.expensive.utils.math.MathUtil;

public final class StyledFont {

    private final GlyphPage regular;

    public StyledFont(String fileName, int size, float stretching, float spacing, float lifting, boolean antialiasing, Lang lang) {
        int[] codes = lang.getCharCodes();
        char[] chars = new char[(codes[1] - codes[0] + codes[3] - codes[2])];

        int c = 0;
        for (int d = 0; d <= 2; d += 2) {
            for (int i = codes[d]; i <= codes[d + 1] - 1; i++) {
                chars[c] = (char) i;
                c++;
            }
        }

        this.regular = new GlyphPage(AbstractFont.getFont(fileName, Font.PLAIN, size), chars, stretching, spacing, lifting, antialiasing);
    }

    public StyledFont(String fileName, int size, float stretching, float spacing, float lifting, boolean antialiasing, Lang lang, boolean wind) {
        int[] codes = lang.getCharCodes();
        char[] chars = new char[(codes[1] - codes[0] + codes[3] - codes[2])];

        int c = 0;
        for (int d = 0; d <= 2; d += 2) {
            for (int i = codes[d]; i <= codes[d + 1] - 1; i++) {
                chars[c] = (char) i;
                c++;
            }
        }

        this.regular = new GlyphPage(AbstractFont.getFontWindows(fileName, Font.PLAIN, size), chars, stretching, spacing, lifting, antialiasing);
    }


    public float renderGlyph(Matrix4f matrix, char c, float x, float y, boolean bold, boolean italic, float red, float green, float blue, float alpha) {
        return getGlyphPage().renderGlyph(matrix, c, x, y, red, green, blue, alpha);
    }

    public void drawStringWithShadow(MatrixStack matrixStack, ITextComponent text, double x, double y, int color) {
        StyledFontRenderer.drawShadowedString(matrixStack, this, text, x, y, color);
    }

    public void drawString(MatrixStack matrixStack, String text, double x, double y, int color) {
        StyledFontRenderer.drawString(matrixStack, this, text, x, y, color);
    }

    public void drawStringTest(MatrixStack matrixStack, ITextComponent text, double x, double y, int color) {
        StyledFontRenderer.renderStringGradient(matrixStack, this, text, x, y, false, color);
    }


    public void drawString(MatrixStack matrixStack, ITextComponent text, double x, double y, int color) {
        StyledFontRenderer.drawString(matrixStack, this, text, x, y, color);
    }

    public void drawStringWithShadow(MatrixStack matrixStack, String text, double x, double y, int color) {
        StyledFontRenderer.drawShadowedString(matrixStack, this, text, x, y, color);
    }

    public void drawCenteredString(MatrixStack matrixStack, String text, double x, double y, int color) {
        StyledFontRenderer.drawCenteredXString(matrixStack, this, text, x, y, color);
    }

    public void drawCenteredString(MatrixStack matrixStack, ITextComponent text, double x, double y, int color) {
        StyledFontRenderer.drawCenteredString(matrixStack, this, text, x, y, color);
    }

    public void drawStringWithOutline(MatrixStack stack, String text, double x, double y, int color) {
        Color c = new Color(0, 0, 0, 128);
        x = MathUtil.round(x, 0.5F);
        y = MathUtil.round(y, 0.5F);
        StyledFontRenderer.drawString(stack, this, text, x - 0.5, y, c.getRGB());
        StyledFontRenderer.drawString(stack, this, text, x + 0.5, y, c.getRGB());
        StyledFontRenderer.drawString(stack, this, text, x, y - 0.5f, c.getRGB());
        StyledFontRenderer.drawString(stack, this, text, x, y + 0.5f, c.getRGB());

        drawString(stack, text, x, y, color);
    }

    public void drawCenteredStringWithOutline(MatrixStack stack, String text, double x, double y, int color) {
        drawStringWithOutline(stack, text, x - getWidth(text) / 2F, y, color);
    }

    public float getWidth(String text) {
        float width = 0.0f;

        for (int i = 0; i < text.length(); i++) {
            char c0 = text.charAt(i);
            if (c0 == 167 && i + 1 < text.length() &&
                    StyledFontRenderer.STYLE_CODES.indexOf(text.toLowerCase(Locale.ENGLISH).charAt(i + 1)) != -1) {
                i++;
            } else {
                width += getGlyphPage().getWidth(c0) + regular.getSpacing();
            }
        }

        return (width - regular.getSpacing()) / 2.0f;
    }

    private GlyphPage getGlyphPage() {
        return regular;
    }

    public float getFontHeight() {
        return regular.getFontHeight();
    }

    public float getLifting() {
        return regular.getLifting();
    }

}
 

Вложения

Начинающий
Статус
Оффлайн
Регистрация
17 Фев 2024
Сообщения
46
Реакции[?]
0
Поинты[?]
0
угар в том что у тебя
FONT_DIR
не используется, в этом и угар, у тебя софт ищет фон по следующему пути:
"Montserrat-SemiBold.ttf"
а не /assets/minecraft/expensive/fonts/normal/Montserrat-SemiBold.ttf в теории
AbstractFont
может использовать FONT_DIR но это мало вероятно, в этом и угар
Тебе надо сделать font_dir +
"Montserrat-SemiBold.ttf"
 
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0
угар в том что у тебя
FONT_DIR
не используется, в этом и угар, у тебя софт ищет фон по следующему пути:
"Montserrat-SemiBold.ttf"
а не /assets/minecraft/expensive/fonts/normal/Montserrat-SemiBold.ttf в теории
AbstractFont
может использовать FONT_DIR но это мало вероятно, в этом и угар
Тебе надо сделать font_dir +
"Montserrat-SemiBold.ttf"
Ааа, вот я дурак. Я думал, что везде в системе фонтов поменял путь а оказывается нет. :/
Спасибо что помог. Буду тогда делать font_dir (если получится конечно)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2022
Сообщения
29
Реакции[?]
0
Поинты[?]
0
Последнее редактирование:
Сверху Снизу