- Joined
- Jul 11, 2020
- Messages
- 0
- Reaction score
- 25
- Points
- 0
Hallo,
wenn ich eine Font Ingame rendere wird die Font gerendert aber wenn etwas im chat steht und ich etwas schreiben möchte kann ich es nicht sehen
Hoffe das mir jemand Helfen kann!
wenn ich eine Font Ingame rendere wird die Font gerendert aber wenn etwas im chat steht und ich etwas schreiben möchte kann ich es nicht sehen
Code:
package me.croze69.dragon.Utils;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_LIGHTING;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.glDisable;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glIsEnabled;
import static org.lwjgl.opengl.GL11.glPopMatrix;
import static org.lwjgl.opengl.GL11.glPushMatrix;
import org.lwjgl.opengl.GL11;
import java.awt.Font;
import net.minecraft.client.Minecraft;
import net.minecraft.util.StringUtils;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
public class FontUtils {
private Minecraft mc = Minecraft.getMinecraft();
private final UnicodeFont unicodeFont;
private final int[] colorCodes = new int[32];
private int fontType, size;
private String fontName;
private float kerning;
public FontUtils(String fontName, int fontType, int size) {
this(fontName, fontType, size, 0);
}
public FontUtils(String fontName, int fontType, int size, float kerning) {
this.fontName = fontName;
this.fontType = fontType;
this.size = size;
this.unicodeFont = new UnicodeFont(new Font(fontName, fontType, size));
this.kerning = kerning;
this.unicodeFont.addAsciiGlyphs();
this.unicodeFont.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
try {
this.unicodeFont.loadGlyphs();
} catch(Exception e) {
e.printStackTrace();
}
for(int i = 0; i < 32; i++) {
int shadow = (i >> 3 & 1) * 85;
int red = (i >> 2 & 1) * 170 + shadow;
int green = (i >> 1 & 1) * 170 + shadow;
int blue = (i >> 0 & 1) * 170 + shadow;
if(i == 6) {
red += 85;
}
if(i >= 16) {
red /= 4;
green /= 4;
blue /= 4;
}
this.colorCodes[i] = (red & 255) << 16 | (green & 255) << 8 | blue & 255;
}
}
public int drawString(String text, float x, float y, int color) {
x *= 2.0F;
y *= 2.0F;
float originalX = x;
GL11.glPushMatrix();
GL11.glScaled(0.5F, 0.5F, 0.5F);
boolean blend = GL11.glIsEnabled(GL11.GL_BLEND);
boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
boolean texture = GL11.glIsEnabled(GL11.GL_TEXTURE_2D);
if(!blend)
glEnable(GL11.GL_BLEND);
if(lighting)
glDisable(GL11.GL_LIGHTING);
if(texture)
glDisable(GL11.GL_TEXTURE_2D);
int currentColor = color;
char[] characters = text.toCharArray();
int index = 0;
for(char c : characters) {
if(c == '\r') {
x = originalX;
}
if(c == '\n') {
y += getHeight(Character.toString(c)) * 2.0F;
}
if(c != '\247' && (index == 0 || index == characters.length - 1 || characters[index - 1] != '\247')) {
unicodeFont.drawString(x, y, Character.toString(c), new org.newdawn.slick.Color(currentColor));
x += (getWidth(Character.toString(c)) * 2.0F);
} else if(c == ' ') {
x += unicodeFont.getSpaceWidth();
} else if(c == '\247' && index != characters.length - 1) {
int codeIndex = "0123456789abcdefg".indexOf(text.charAt(index + 1));
if(codeIndex < 0) continue;
int col = this.colorCodes[codeIndex];
currentColor = col;
}
index++;
}
GL11.glScaled(2.0F, 2.0F, 2.0F);
if(texture)
GL11.glEnable(GL11.GL_TEXTURE_2D);
if(lighting)
GL11.glEnable(GL11.GL_LIGHTING);
if(!blend)
GL11.glDisable(GL11.GL_BLEND);
glPopMatrix();
return (int) x;
}
public int drawStringWithShadow(String text, float x, float y, int color) {
drawString(StringUtils.stripControlCodes(text), x + 0.5F, y + 0.5F, 0x000000);
return drawString(text, x, y, color);
}
public void drawCenteredString(String text, float x, float y, int color) {
drawString(text, x - (int)getWidth(text) / 2, y, color);
}
public void drawCenteredStringWithShadow(String text, float x, float y, int color) {
drawCenteredString(StringUtils.stripControlCodes(text), x+0.5F, y+0.5F, color);
drawCenteredString(text, x, y, color);
}
public float getWidth(String s) {
float width = 0.0F;
String str = StringUtils.stripControlCodes(s);
for(char c : str.toCharArray()) {
width += unicodeFont.getWidth(Character.toString(c)) + this.kerning;
}
return width / 2.0F;
}
public float getCharWidth(char c){
return unicodeFont.getWidth(String.valueOf(c));
}
public float getHeight(String s) {
return unicodeFont.getHeight(s) / 2.0F;
}
public UnicodeFont getFont() {
return this.unicodeFont;
}
public String trimStringToWidth(String par1Str, int par2)
{
StringBuilder var4 = new StringBuilder();
float var5 = 0.0F;
int var6 = 0;
int var7 = 1;
boolean var8 = false;
boolean var9 = false;
for (int var10 = var6; var10 >= 0 && var10 < par1Str.length() && var5 < (float)par2; var10 += var7)
{
char var11 = par1Str.charAt(var10);
float var12 = this.getCharWidth(var11);
if (var8)
{
var8 = false;
if (var11 != 108 && var11 != 76)
{
if (var11 == 114 || var11 == 82)
{
var9 = false;
}
}
else
{
var9 = true;
}
}
else if (var12 < 0.0F)
{
var8 = true;
}
else
{
var5 += var12;
if (var9)
{
++var5;
}
}
if (var5 > (float)par2)
{
break;
}
else
{
var4.append(var11);
}
}
return var4.toString();
}
}
Last edited by a moderator: