.ttf шрифт через slick utils

.ttf шрифт через slick utils

Версия(и) Minecraft
1.6.4
Код был нерабочий и лежал в треде 17 года, строки рисовались с лютыми артефактами и не было форматирования. Чуть договнокодил и запилил поддержку майновских цветовых кодов.

Java:
public class ExtendedFontRenderer {

    private static Font fontTahoma;
    private static final Map<Character, Color> colorMap = new HashMap();

    public static UnicodeFont TAHOMA_8;
    public static UnicodeFont TAHOMA_8_BOLD;

    public static void init() throws Exception {
        fontTahoma = Font.createFont(Font.TRUETYPE_FONT, Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("modid", "fonts/Tahoma.ttf")).getInputStream());
        TAHOMA_8 = initFont(fontTahoma, 7.5F, FontType.PLAIN);
        TAHOMA_8_BOLD = initFont(fontTahoma, 7.5F, FontType.BOLD);
    }

    private static UnicodeFont initFont(Font fontToLoad, float size, FontType ft) throws SlickException {
        UnicodeFont font;
        if (ft == FontType.PLAIN) {
            font = new UnicodeFont(fontToLoad.deriveFont(size * 2.0F));
        } else {
            font = new UnicodeFont(fontToLoad.deriveFont(Font.BOLD, size * 2.0F));
        }

        font.getEffects().clear();
        font.addAsciiGlyphs();
        font.addGlyphs(32, 1200);
        font.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
        font.loadGlyphs();
        return font;
    }

    enum FontType {
        PLAIN, BOLD;
    }

    public static int drawString(String text, float x, float y, int hexcolor) {
        Color color = new Color((hexcolor >> 16 & 255) / 255.0F, (hexcolor >> 8 & 255) / 255.0F, (hexcolor & 255) / 255.0F, (hexcolor >> 24 & 255) / 255.0F);
        FontType ft = FontType.PLAIN;
        int len = 0;
        if (text.contains("§")) {
            String[] splitted = text.split("§");
            for (String line : splitted) {
                if (!line.isEmpty()) {
                    char code = line.charAt(0);
                    line = line.substring(1);
                    if (colorMap.containsKey(code)) {
                        color = colorMap.get(code);
                    } else if (code == 'l') {
                        ft = FontType.BOLD;
                    } else if (code == 'r') {
                        color = Color.white;
                        ft = FontType.PLAIN;
                    }
                    if (!line.isEmpty()) {
                        renderString(line, x + len, y, ft, color);
                        len += (ft == FontType.PLAIN ? TAHOMA_8.getWidth(line) : TAHOMA_8_BOLD.getWidth(line)) / 2;
                    }

                }
            }
        } else {
            renderString(text, x, y, ft, color);
            len += TAHOMA_8.getWidth(text) / 2;
        }
        return len;
    }

    private static void renderString(String text, float i, float j, FontType ft, Color color) {
        GL11.glPushMatrix();
        GL11.glScalef(0.5F, 0.5F, 0.5F);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        switch (ft) {
        case PLAIN:
            TAHOMA_8.drawString(i * 2.0F - 4, j * 2.0F - 1, text, color);
            break;
        case BOLD:
            TAHOMA_8_BOLD.drawString(i * 2.0F - 4, j * 2.0F - 1, text, color);
        }
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glScalef(2.0F, 2.0F, 2.0F);
        GL11.glPopMatrix();
    }

    static {
        colorMap.put('0', new Color(0, 0, 0));
        colorMap.put('1', new Color(0, 0, 170));
        colorMap.put('2', new Color(0, 170, 0));
        colorMap.put('3', new Color(0, 170, 170));
        colorMap.put('4', new Color(170, 0, 0));
        colorMap.put('5', new Color(170, 0, 170));
        colorMap.put('6', new Color(255, 170, 0));
        colorMap.put('7', new Color(170, 170, 170));
        colorMap.put('8', new Color(85, 85, 85));
        colorMap.put('9', new Color(85, 85, 255));
        colorMap.put('a', new Color(85, 255, 85));
        colorMap.put('b', new Color(85, 255, 255));
        colorMap.put('c', new Color(255, 85, 85));
        colorMap.put('d', new Color(255, 85, 255));
        colorMap.put('e', new Color(255, 255, 85));
        colorMap.put('f', new Color(255, 255, 255));
    }

}
Регаем при старте клиента
Java:
ExtendedFontRenderer.init();
Рисуем строку
Java:
ExtendedFontRenderer.drawString("какащке", x, y, hexcolor);

Хз кому это надо, юзает древнюю либу и не факт, что работает на свежаке
Шрифт кидаем в моднейм.jar/assets/fonts/шрифтнейм.ttf
Автор
pakhan
Просмотры
627
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Назад
Сверху