- Версия(и) Minecraft
- 1.6.4
Код был нерабочий и лежал в треде 17 года, строки рисовались с лютыми артефактами и не было форматирования. Чуть договнокодил и запилил поддержку майновских цветовых кодов.
Регаем при старте клиента
Рисуем строку
Хз кому это надо, юзает древнюю либу и не факт, что работает на свежаке
Шрифт кидаем в моднейм.jar/assets/fonts/шрифтнейм.ttf
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