Backport instanced font renderer and cleanup code
This commit is contained in:
parent
e281237d15
commit
55d416a2f7
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -40,6 +40,7 @@ import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
import net.peyton.eagler.level.LevelStorageManager;
|
||||
import net.peyton.eagler.level.LevelUtils;
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
import net.lax1dude.eaglercraft.Display;
|
||||
import net.lax1dude.eaglercraft.EagRuntime;
|
||||
import net.lax1dude.eaglercraft.EagUtils;
|
||||
@ -53,6 +54,8 @@ import org.lwjgl.opengl.GL11;
|
||||
import java.io.*;
|
||||
|
||||
import net.lax1dude.eaglercraft.internal.PlatformOpenGL;
|
||||
import net.lax1dude.eaglercraft.minecraft.EaglerFontRenderer;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@ -200,7 +203,7 @@ public final class Minecraft implements Runnable {
|
||||
this.textureManager = new TextureManager(this.settings);
|
||||
this.textureManager.registerAnimation(new TextureLavaFX());
|
||||
this.textureManager.registerAnimation(new TextureWaterFX());
|
||||
this.fontRenderer = new FontRenderer(this.settings, "/default.png", this.textureManager);
|
||||
this.fontRenderer = EaglerFontRenderer.createSupportedFontRenderer(this.settings, "/default.png", this.textureManager);
|
||||
this.levelRenderer = new LevelRenderer(this, this.textureManager);
|
||||
Item.initModels();
|
||||
Mob.modelCache = new ModelManager();
|
||||
|
@ -84,10 +84,9 @@ public final class ProgressBarDisplay {
|
||||
GL11.glEnable(3553);
|
||||
}
|
||||
|
||||
this.minecraft.fontRenderer.render(this.title,
|
||||
(var4 - this.minecraft.fontRenderer.getWidth(this.title)) / 2, var5 / 2 - 4 - 16, 16777215);
|
||||
this.minecraft.fontRenderer.render(this.text,
|
||||
(var4 - this.minecraft.fontRenderer.getWidth(this.text)) / 2, var5 / 2 - 4 + 8, 16777215);
|
||||
this.minecraft.fontRenderer.drawStringWithShadow(this.title, (var4 - this.minecraft.fontRenderer.getStringWidth(this.title)) / 2, var5 / 2 - 4 - 16, 16777215);
|
||||
this.minecraft.fontRenderer.drawStringWithShadow(this.text,
|
||||
(var4 - this.minecraft.fontRenderer.getStringWidth(this.text)) / 2, var5 / 2 - 4 + 8, 16777215);
|
||||
Display.update();
|
||||
}
|
||||
}
|
||||
|
@ -1,354 +0,0 @@
|
||||
//package com.mojang.minecraft.gui;
|
||||
//
|
||||
//import com.mojang.minecraft.GameSettings;
|
||||
//import com.mojang.minecraft.render.TextureManager;
|
||||
//
|
||||
//import net.lax1dude.eaglercraft.EagRuntime;
|
||||
//import net.lax1dude.eaglercraft.opengl.ImageData;
|
||||
//import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
//import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
//import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
//
|
||||
//import org.lwjgl.opengl.GL11;
|
||||
//
|
||||
//public final class FontRenderer {
|
||||
//
|
||||
// private int[] widthmap = new int[256];
|
||||
// private int fontTexture = 0;
|
||||
// private GameSettings settings;
|
||||
//
|
||||
//
|
||||
// public FontRenderer(GameSettings var1, String var2, TextureManager var3) {
|
||||
// this.settings = var1;
|
||||
//
|
||||
// ImageData var14;
|
||||
// try {
|
||||
// var14 = ImageData.loadImageFile(EagRuntime.getResourceStream(var2)).swapRB();
|
||||
// } catch (Exception var13) {
|
||||
// throw new RuntimeException(var13);
|
||||
// }
|
||||
//
|
||||
// int var4 = var14.width;
|
||||
// int var5 = var14.height;
|
||||
// int[] var6 = new int[var4 * var5];
|
||||
// var14.getRGB(0, 0, var4, var5, var6, 0, var4);
|
||||
//
|
||||
// for(int var15 = 0; var15 < 128; ++var15) {
|
||||
// var5 = var15 % 16;
|
||||
// int var7 = var15 / 16;
|
||||
// int var8 = 0;
|
||||
//
|
||||
// for(boolean var9 = false; var8 < 8 && !var9; ++var8) {
|
||||
// int var10 = (var5 << 3) + var8;
|
||||
// var9 = true;
|
||||
//
|
||||
// for(int var11 = 0; var11 < 8 && var9; ++var11) {
|
||||
// int var12 = ((var7 << 3) + var11) * var4;
|
||||
// if((var6[var10 + var12] & 255) > 128) {
|
||||
// var9 = false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if(var15 == 32) {
|
||||
// var8 = 4;
|
||||
// }
|
||||
//
|
||||
// this.widthmap[var15] = var8;
|
||||
// }
|
||||
//
|
||||
// this.fontTexture = var3.load(var2);
|
||||
// }
|
||||
//
|
||||
// public final void render(String var1, int var2, int var3, int var4) {
|
||||
// this.render(var1, var2 + 1, var3 + 1, var4, true);
|
||||
// this.renderNoShadow(var1, var2, var3, var4);
|
||||
// }
|
||||
//
|
||||
// public final void renderNoShadow(String var1, int var2, int var3, int var4) {
|
||||
// this.render(var1, var2, var3, var4, false);
|
||||
// }
|
||||
//
|
||||
// private void render(String var1, int var2, int var3, int var4, boolean var5) {
|
||||
// if(var1 != null) {
|
||||
// char[] var12 = var1.toCharArray();
|
||||
// if(var5) {
|
||||
// var4 = (var4 & 16579836) >> 2;
|
||||
// }
|
||||
//
|
||||
// GL11.glBindTexture(3553, this.fontTexture);
|
||||
// Tessellator tess = Tessellator.getInstance();
|
||||
// WorldRenderer var6 = tess.getWorldRenderer();
|
||||
// var6.begin(7, VertexFormat.POSITION_TEX_COLOR);
|
||||
// int var7 = 0;
|
||||
//
|
||||
// for(int var8 = 0; var8 < var12.length; ++var8) {
|
||||
// int var9;
|
||||
// if(var12[var8] == 38 && var12.length > var8 + 1) {
|
||||
// if((var4 = "0123456789abcdef".indexOf(var12[var8 + 1])) < 0) {
|
||||
// var4 = 15;
|
||||
// }
|
||||
//
|
||||
// var9 = (var4 & 8) << 3;
|
||||
// int var10 = (var4 & 1) * 191 + var9;
|
||||
// int var11 = ((var4 & 2) >> 1) * 191 + var9;
|
||||
// var4 = ((var4 & 4) >> 2) * 191 + var9;
|
||||
// if(this.settings.anaglyph) {
|
||||
// var9 = (var4 * 30 + var11 * 59 + var10 * 11) / 100;
|
||||
// var11 = (var4 * 30 + var11 * 70) / 100;
|
||||
// var10 = (var4 * 30 + var10 * 70) / 100;
|
||||
// var4 = var9;
|
||||
// var11 = var11;
|
||||
// var10 = var10;
|
||||
// }
|
||||
//
|
||||
// var4 = var4 << 16 | var11 << 8 | var10;
|
||||
// var8 += 2;
|
||||
// if(var5) {
|
||||
// var4 = (var4 & 16579836) >> 2;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var4 = var12[var8] % 16 << 3;
|
||||
// var9 = var12[var8] / 16 << 3;
|
||||
// float var13 = 7.99F;
|
||||
// var6.pos((float)(var2 + var7), (float)var3 + var13, 0.0F).tex((float)var4 / 128.0F, ((float)var9 + var13) / 128.0F).color(var4).endVertex();
|
||||
// var6.pos((float)(var2 + var7) + var13, (float)var3 + var13, 0.0F).tex(((float)var4 + var13) / 128.0F, ((float)var9 + var13) / 128.0F).color(var4).endVertex();
|
||||
// var6.pos((float)(var2 + var7) + var13, (float)var3, 0.0F).tex(((float)var4 + var13) / 128.0F, (float)var9 / 128.0F).color(var4).endVertex();
|
||||
// var6.pos((float)(var2 + var7), (float)var3, 0.0F).tex((float)var4 / 128.0F, (float)var9 / 128.0F).color(var4).endVertex();
|
||||
// var7 += this.widthmap[var12[var8]];
|
||||
// }
|
||||
//
|
||||
// tess.draw();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public final int getWidth(String var1) {
|
||||
// if(var1 == null) {
|
||||
// return 0;
|
||||
// } else {
|
||||
// char[] var4 = var1.toCharArray();
|
||||
// int var2 = 0;
|
||||
//
|
||||
// for(int var3 = 0; var3 < var4.length; ++var3) {
|
||||
// if(var4[var3] == 38) {
|
||||
// ++var3;
|
||||
// } else {
|
||||
// var2 += this.widthmap[var4[var3]];
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return var2;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static String stripColor(String var0) {
|
||||
// char[] var3 = var0.toCharArray();
|
||||
// String var1 = "";
|
||||
//
|
||||
// for(int var2 = 0; var2 < var3.length; ++var2) {
|
||||
// if(var3[var2] == 38) {
|
||||
// ++var2;
|
||||
// } else {
|
||||
// var1 = var1 + var3[var2];
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return var1;
|
||||
// }
|
||||
//}
|
||||
|
||||
package com.mojang.minecraft.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.minecraft.GameSettings;
|
||||
import com.mojang.minecraft.render.TextureManager;
|
||||
|
||||
import net.lax1dude.eaglercraft.EagRuntime;
|
||||
import net.lax1dude.eaglercraft.opengl.ImageData;
|
||||
import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
|
||||
public class FontRenderer {
|
||||
|
||||
public FontRenderer(GameSettings gamesettings, String s, TextureManager var3) {
|
||||
charWidth = new int[256];
|
||||
ImageData var14;
|
||||
try {
|
||||
var14 = ImageData.loadImageFile(EagRuntime.getResourceStream(s)).swapRB();
|
||||
} catch (Exception var13) {
|
||||
throw new RuntimeException(var13);
|
||||
}
|
||||
int i = var14.width;
|
||||
int ai[] = var14.pixels;
|
||||
for (int k = 0; k < 256; k++) {
|
||||
int l = k % 16;
|
||||
int k1 = k / 16;
|
||||
int j2 = 7;
|
||||
do {
|
||||
if (j2 < 0) {
|
||||
break;
|
||||
}
|
||||
int i3 = l * 8 + j2;
|
||||
boolean flag = true;
|
||||
for (int l3 = 0; l3 < 8 && flag; l3++) {
|
||||
int i4 = (k1 * 8 + l3) * i;
|
||||
int k4 = ai[i3 + i4] & 0xff;
|
||||
if (k4 > 0) {
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
break;
|
||||
}
|
||||
j2--;
|
||||
} while (true);
|
||||
if (k == 32) {
|
||||
j2 = 2;
|
||||
}
|
||||
charWidth[k] = j2 + 2;
|
||||
}
|
||||
|
||||
this.fontTexture = var3.load(s);
|
||||
fontDisplayLists = GL11.glGenLists(288);
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
WorldRenderer renderer = tessellator.getWorldRenderer();
|
||||
for (int i1 = 0; i1 < 256; i1++) {
|
||||
GL11.glNewList(fontDisplayLists + i1, 4864 /* GL_COMPILE */);
|
||||
renderer.begin(7, VertexFormat.POSITION_TEX);
|
||||
int l1 = (i1 % 16) * 8;
|
||||
int k2 = (i1 / 16) * 8;
|
||||
float f = 7.99F;
|
||||
float f1 = 0.0F;
|
||||
float f2 = 0.0F;
|
||||
renderer.pos(0.0D, 0.0F + f, 0.0D).tex((float) l1 / 128F + f1, ((float) k2 + f) / 128F + f2).endVertex();
|
||||
renderer.pos(0.0F + f, 0.0F + f, 0.0D).tex(((float) l1 + f) / 128F + f1, ((float) k2 + f) / 128F + f2)
|
||||
.endVertex();
|
||||
renderer.pos(0.0F + f, 0.0D, 0.0D).tex(((float) l1 + f) / 128F + f1, (float) k2 / 128F + f2).endVertex();
|
||||
renderer.pos(0.0D, 0.0D, 0.0D).tex((float) l1 / 128F + f1, (float) k2 / 128F + f2).endVertex();
|
||||
tessellator.draw();
|
||||
GL11.glEndList();
|
||||
}
|
||||
|
||||
for (int j1 = 0; j1 < 32; j1++) {
|
||||
int i2 = (j1 >> 3 & 1) * 85;
|
||||
int l2 = (j1 >> 2 & 1) * 170 + i2;
|
||||
int j3 = (j1 >> 1 & 1) * 170 + i2;
|
||||
int k3 = (j1 >> 0 & 1) * 170 + i2;
|
||||
if (j1 == 6) {
|
||||
l2 += 85;
|
||||
}
|
||||
boolean flag1 = j1 >= 16;
|
||||
if (gamesettings.anaglyph) {
|
||||
int j4 = (l2 * 30 + j3 * 59 + k3 * 11) / 100;
|
||||
int l4 = (l2 * 30 + j3 * 70) / 100;
|
||||
int i5 = (l2 * 30 + k3 * 70) / 100;
|
||||
l2 = j4;
|
||||
j3 = l4;
|
||||
k3 = i5;
|
||||
}
|
||||
if (flag1) {
|
||||
l2 /= 4;
|
||||
j3 /= 4;
|
||||
k3 /= 4;
|
||||
}
|
||||
GL11.glNewList(fontDisplayLists + 256 + j1, 4864 /* GL_COMPILE */);
|
||||
GL11.glColor3f((float) l2 / 255F, (float) j3 / 255F, (float) k3 / 255F);
|
||||
GL11.glEndList();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void drawStringWithShadow(String s, int i, int j, int k) {
|
||||
render(s, i + 1, j + 1, k, true);
|
||||
render(s, i, j, k);
|
||||
}
|
||||
|
||||
public void render(String s, int i, int j, int k) {
|
||||
render(s, i, j, k, false);
|
||||
}
|
||||
|
||||
public void render(String s, int i, int j, int k, boolean flag) {
|
||||
if (s == null) {
|
||||
return;
|
||||
}
|
||||
if (flag) {
|
||||
int l = k & 0xff000000;
|
||||
k = (k & 0xfcfcfc) >> 2;
|
||||
k += l;
|
||||
}
|
||||
GL11.glBindTexture(3553, this.fontTexture);
|
||||
float f = (float) (k >> 16 & 0xff) / 255F;
|
||||
float f1 = (float) (k >> 8 & 0xff) / 255F;
|
||||
float f2 = (float) (k & 0xff) / 255F;
|
||||
float f3 = (float) (k >> 24 & 0xff) / 255F;
|
||||
if (f3 == 0.0F) {
|
||||
f3 = 1.0F;
|
||||
}
|
||||
GL11.glColor4f(f, f1, f2, f3);
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(i, j, 0.0F);
|
||||
for (int i1 = 0; i1 < s.length(); i1++) {
|
||||
for (; s.length() > i1 + 1 && s.charAt(i1) == '\247'; i1 += 2) {
|
||||
int j1 = "0123456789abcdef".indexOf(s.toLowerCase().charAt(i1 + 1));
|
||||
if (j1 < 0 || j1 > 15) {
|
||||
j1 = 15;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i1 < s.length()) {
|
||||
int k1 = FontAllowedCharacters.isAllowed(s.charAt(i1));
|
||||
if (k1 >= 0) {
|
||||
GL11.glCallList(fontDisplayLists + k1 + 32);
|
||||
GL11.glTranslatef(charWidth[k1 + 32], 0.0F, 0.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
public int getWidth(String s) {
|
||||
if (s == null) {
|
||||
return 0;
|
||||
}
|
||||
int i = 0;
|
||||
for (int j = 0; j < s.length(); j++) {
|
||||
if (s.charAt(j) == '\247') {
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
int k = FontAllowedCharacters.isAllowed(s.charAt(j));
|
||||
if (k >= 0) {
|
||||
i += charWidth[k + 32];
|
||||
}
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
public static String stripColor(String var0) {
|
||||
char[] var3 = var0.toCharArray();
|
||||
String var1 = "";
|
||||
|
||||
for (int var2 = 0; var2 < var3.length; ++var2) {
|
||||
if (var3[var2] == 38) {
|
||||
++var2;
|
||||
} else {
|
||||
var1 = var1 + var3[var2];
|
||||
}
|
||||
}
|
||||
|
||||
return var1;
|
||||
}
|
||||
|
||||
private int charWidth[];
|
||||
public int fontTexture;
|
||||
private int fontDisplayLists;
|
||||
|
||||
public static final char formatChar = '\247';
|
||||
}
|
@ -159,10 +159,10 @@ public class GuiConnecting extends GuiScreen {
|
||||
GL11.glEnable(3553);
|
||||
}
|
||||
|
||||
this.minecraft.fontRenderer.render(this.title,
|
||||
(var4 - this.minecraft.fontRenderer.getWidth(this.title)) / 2, var5 / 2 - 4 - 16, 16777215);
|
||||
this.minecraft.fontRenderer.render(this.message,
|
||||
(var4 - this.minecraft.fontRenderer.getWidth(this.message)) / 2, var5 / 2 - 4 + 8, 16777215);
|
||||
this.minecraft.fontRenderer.drawStringWithShadow(this.title,
|
||||
(var4 - this.minecraft.fontRenderer.getStringWidth(this.title)) / 2, var5 / 2 - 4 - 16, 16777215);
|
||||
this.minecraft.fontRenderer.drawStringWithShadow(this.message,
|
||||
(var4 - this.minecraft.fontRenderer.getStringWidth(this.message)) / 2, var5 / 2 - 4 + 8, 16777215);
|
||||
Display.update();
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.lax1dude.eaglercraft.Keyboard;
|
||||
import net.lax1dude.eaglercraft.Mouse;
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiScreen extends Screen {
|
||||
@ -18,12 +20,9 @@ public class GuiScreen extends Screen {
|
||||
|
||||
public void render(int var1, int var2) {
|
||||
for (int var3 = 0, var100 = this.buttons.size(); var3 < var100; ++var3) {
|
||||
Button var10000 = (Button) this.buttons.get(var3);
|
||||
Minecraft var7 = this.minecraft;
|
||||
Button var4 = var10000;
|
||||
if (var10000.visible) {
|
||||
FontRenderer var8 = var7.fontRenderer;
|
||||
GL11.glBindTexture(3553, var7.textureManager.load("/gui/gui.png"));
|
||||
Button var4 = (Button) this.buttons.get(var3);
|
||||
if (var4.visible) {
|
||||
GL11.glBindTexture(3553, this.minecraft.textureManager.load("/gui/gui.png"));
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
byte var9 = 1;
|
||||
boolean var6 = var1 >= var4.x && var2 >= var4.y && var1 < var4.x + var4.width
|
||||
@ -38,13 +37,13 @@ public class GuiScreen extends Screen {
|
||||
var4.drawImage(var4.x + var4.width / 2, var4.y, 200 - var4.width / 2, 46 + var9 * 20, var4.width / 2,
|
||||
var4.height);
|
||||
if (!var4.active) {
|
||||
Button.drawCenteredString(var8, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
Button.drawCenteredString(this.fontRenderer, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
-6250336);
|
||||
} else if (var6) {
|
||||
Button.drawCenteredString(var8, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
Button.drawCenteredString(this.fontRenderer, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
16777120);
|
||||
} else {
|
||||
Button.drawCenteredString(var8, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
Button.drawCenteredString(this.fontRenderer, var4.text, var4.x + var4.width / 2, var4.y + (var4.height - 8) / 2,
|
||||
14737632);
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import com.mojang.util.MathHelper;
|
||||
import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -144,20 +145,20 @@ public final class HUDScreen extends Screen {
|
||||
GL11.glPopMatrix();
|
||||
if (var8.count[var12] > 1) {
|
||||
var23 = "" + var8.count[var12];
|
||||
var5.render(var23, var26 + 19 - var5.getWidth(var23), var14 + 6, 16777215);
|
||||
var5.drawStringWithShadow(var23, var26 + 19 - var5.getStringWidth(var23), var14 + 6, 16777215);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var5.render("0.30", 2, 2, 16777215);
|
||||
var5.drawStringWithShadow("0.30", 2, 2, 16777215);
|
||||
if (this.mc.settings.showFrameRate) {
|
||||
var5.render(this.mc.debug, 2, 12, 16777215);
|
||||
var5.drawStringWithShadow(this.mc.debug, 2, 12, 16777215);
|
||||
}
|
||||
|
||||
if (this.mc.gamemode instanceof SurvivalGameMode) {
|
||||
String var24 = "Score: " + this.mc.player.getScore();
|
||||
var5.render(var24, this.width - var5.getWidth(var24) - 2, 2, 16777215);
|
||||
var5.render("Arrows: " + this.mc.player.arrows, this.width / 2 + 8, this.height - 33, 16777215);
|
||||
var5.drawStringWithShadow(var24, this.width - var5.getStringWidth(var24) - 2, 2, 16777215);
|
||||
var5.drawStringWithShadow("Arrows: " + this.mc.player.arrows, this.width / 2 + 8, this.height - 33, 16777215);
|
||||
}
|
||||
|
||||
byte var25 = 10;
|
||||
@ -169,7 +170,7 @@ public final class HUDScreen extends Screen {
|
||||
|
||||
for (int var14_1 = 0, var15_1 = this.chat.size(); var14_1 < var15_1 && var14_1 < var25; ++var14_1) {
|
||||
if (((ChatLine) this.chat.get(var14_1)).time < 200 || var27) {
|
||||
var5.render(((ChatLine) this.chat.get(var14_1)).message, 2, this.height - 8 - var14_1 * 9 - 20,
|
||||
var5.drawStringWithShadow(((ChatLine) this.chat.get(var14_1)).message, 2, this.height - 8 - var14_1 * 9 - 20,
|
||||
16777215);
|
||||
}
|
||||
}
|
||||
@ -196,16 +197,16 @@ public final class HUDScreen extends Screen {
|
||||
GL11.glDisable(3042);
|
||||
GL11.glEnable(3553);
|
||||
var23 = "Connected players:";
|
||||
var5.render(var23, var14 - var5.getWidth(var23) / 2, var15 - 64 - 12, 16777215);
|
||||
var5.drawStringWithShadow(var23, var14 - var5.getStringWidth(var23) / 2, var15 - 64 - 12, 16777215);
|
||||
|
||||
for (int var13 = 0, var16 = var22.size(); var13 < var16; ++var13) {
|
||||
int var28 = var14 + var13 % 2 * 120 - 120;
|
||||
int var17 = var15 - 64 + (var13 / 2 << 3);
|
||||
if (var2 && var3 >= var28 && var4 >= var17 && var3 < var28 + 120 && var4 < var17 + 8) {
|
||||
this.hoveredPlayer = (String) var22.get(var13);
|
||||
var5.render((String) var22.get(var13), var28 + 2, var17, 16777215);
|
||||
var5.drawStringWithShadow((String) var22.get(var13), var28 + 2, var17, 16777215);
|
||||
} else {
|
||||
var5.render((String) var22.get(var13), var28, var17, 15658734);
|
||||
var5.drawStringWithShadow((String) var22.get(var13), var28, var17, 15658734);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package com.mojang.minecraft.gui;
|
||||
import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@ -61,11 +62,11 @@ public class Screen {
|
||||
}
|
||||
|
||||
public static void drawCenteredString(FontRenderer var0, String var1, int var2, int var3, int var4) {
|
||||
var0.render(var1, var2 - var0.getWidth(var1) / 2, var3, var4);
|
||||
var0.drawStringWithShadow(var1, var2 - var0.getStringWidth(var1) / 2, var3, var4);
|
||||
}
|
||||
|
||||
public static void drawString(FontRenderer var0, String var1, int var2, int var3, int var4) {
|
||||
var0.render(var1, var2, var3, var4);
|
||||
var0.drawStringWithShadow(var1, var2, var3, var4);
|
||||
}
|
||||
|
||||
public final void drawImage(int var1, int var2, int var3, int var4, int var5, int var6) {
|
||||
|
@ -1,9 +1,11 @@
|
||||
package com.mojang.minecraft.net;
|
||||
|
||||
import com.mojang.minecraft.Minecraft;
|
||||
import com.mojang.minecraft.gui.FontRenderer;
|
||||
import com.mojang.minecraft.mob.HumanoidMob;
|
||||
import com.mojang.minecraft.render.TextureManager;
|
||||
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@ -24,7 +26,6 @@ public class NetworkPlayer extends HumanoidMob {
|
||||
super(var1.level, (float) var4, (float) var5, (float) var6);
|
||||
this.minecraft = var1;
|
||||
this.displayName = var3;
|
||||
var3 = FontRenderer.stripColor(var3);
|
||||
this.name = var3;
|
||||
this.xp = var4;
|
||||
this.yp = var5;
|
||||
@ -63,14 +64,14 @@ public class NetworkPlayer extends HumanoidMob {
|
||||
GL11.glRotatef(-this.minecraft.player.yRot, 0.0F, 1.0F, 0.0F);
|
||||
var2 = 0.05F;
|
||||
GL11.glScalef(0.05F, -var2, var2);
|
||||
GL11.glTranslatef((float) (-var3.getWidth(this.displayName)) / 2.0F, 0.0F, 0.0F);
|
||||
GL11.glTranslatef((float) (-var3.getStringWidth(this.displayName)) / 2.0F, 0.0F, 0.0F);
|
||||
GL11.glNormal3f(1.0F, -1.0F, 1.0F);
|
||||
GL11.glDisable(2896);
|
||||
GL11.glDisable(16384);
|
||||
if (this.name.equalsIgnoreCase("Notch")) {
|
||||
var3.render(this.displayName, 0, 0, 16776960);
|
||||
var3.drawStringWithShadow(this.displayName, 0, 0, 16776960);
|
||||
} else {
|
||||
var3.render(this.displayName, 0, 0, 16777215);
|
||||
var3.drawStringWithShadow(this.displayName, 0, 0, 16777215);
|
||||
}
|
||||
|
||||
GL11.glDepthFunc(516);
|
||||
@ -78,12 +79,12 @@ public class NetworkPlayer extends HumanoidMob {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.8F);
|
||||
GL11.glEnable(3042);
|
||||
GL11.glBlendFunc(770, 771);
|
||||
var3.render(this.displayName, 0, 0, 16777215);
|
||||
var3.drawStringWithShadow(this.displayName, 0, 0, 16777215);
|
||||
GL11.glDisable(3042);
|
||||
GL11.glDepthMask(true);
|
||||
GL11.glDepthFunc(515);
|
||||
GL11.glTranslatef(1.0F, 1.0F, -0.05F);
|
||||
var3.render(this.name, 0, 0, 5263440);
|
||||
var3.drawStringWithShadow(this.name, 0, 0, 5263440);
|
||||
GL11.glEnable(16384);
|
||||
GL11.glEnable(2896);
|
||||
GL11.glPopMatrix();
|
||||
|
@ -30,15 +30,23 @@ public class TextureManager {
|
||||
if ((var2 = (Integer) this.textures.get(var1)) != null) {
|
||||
return var2.intValue();
|
||||
} else {
|
||||
// try {
|
||||
int var4 = GL11.generateTexture();
|
||||
this.load(ImageData.loadImageFile(EagRuntime.getResourceStream(var1)).swapRB(), var4);
|
||||
try {
|
||||
int var4 = GL11.generateTexture();
|
||||
this.load(ImageData.loadImageFile(EagRuntime.getResourceStream(var1)).swapRB(), var4);
|
||||
|
||||
this.textures.put(var1, Integer.valueOf(var4));
|
||||
return var4;
|
||||
// } catch (Exception var3) {
|
||||
// throw new RuntimeException("!!");
|
||||
// }
|
||||
this.textures.put(var1, Integer.valueOf(var4));
|
||||
return var4;
|
||||
} catch (Exception var3) {
|
||||
throw new RuntimeException("!!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ImageData loadImageData(String var1) {
|
||||
try {
|
||||
return ImageData.loadImageFile(EagRuntime.getResourceStream(var1));
|
||||
} catch(Exception e) {
|
||||
throw new RuntimeException("!!");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -221,6 +221,8 @@ public class PlatformApplication {
|
||||
|
||||
private static class FileChooserAlwaysOnTop extends JFileChooser {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private FileChooserAlwaysOnTop(File file) {
|
||||
super(file);
|
||||
}
|
||||
|
@ -632,8 +632,7 @@ public class PlatformRuntime {
|
||||
|
||||
public static void downloadRemoteURIByteArray(String assetPackageURI, final Consumer<byte[]> cb) {
|
||||
logger.info("Downloading: {}");
|
||||
try (InputStream is = (new URL(assetPackageURI)).openStream()) {
|
||||
EaglerOutputStream bao = new EaglerOutputStream();
|
||||
try (InputStream is = (new URL(assetPackageURI)).openStream(); EaglerOutputStream bao = new EaglerOutputStream()) {
|
||||
byte[] copyBuffer = new byte[16384];
|
||||
int i;
|
||||
while ((i = is.read(copyBuffer, 0, copyBuffer.length)) != -1) {
|
||||
|
@ -21,6 +21,8 @@ import org.lwjgl.system.jemalloc.JEmalloc;
|
||||
public class EaglerLWJGLAllocator {
|
||||
|
||||
public static class WrongBufferClassType extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public WrongBufferClassType(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
@ -51,7 +51,6 @@ public class JDBCFilesystem implements IEaglerFilesystem {
|
||||
|
||||
private final String dbName;
|
||||
private final String jdbcUri;
|
||||
private final String jdbcDriver;
|
||||
|
||||
private final Connection conn;
|
||||
private final PreparedStatement createStatement;
|
||||
@ -123,7 +122,6 @@ public class JDBCFilesystem implements IEaglerFilesystem {
|
||||
this.dbName = dbName;
|
||||
this.conn = conn;
|
||||
this.jdbcUri = jdbcUri;
|
||||
this.jdbcDriver = jdbcDriver;
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
stmt.execute("CREATE TABLE IF NOT EXISTS " + "\"eaglercraft_desktop_runtime_filesystem\" ("
|
||||
+ "\"FileName\" VARCHAR(1024) NOT NULL," + "\"FileSize\" INT NOT NULL,"
|
||||
|
@ -13,6 +13,8 @@ import java.util.IllegalFormatException;
|
||||
import java.util.Locale;
|
||||
|
||||
public class BufferAllocationException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public BufferAllocationException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
@ -10,8 +10,6 @@
|
||||
package com.carrotsearch.hppc;
|
||||
|
||||
import com.carrotsearch.hppc.internals.SuppressForbidden;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Constants used as defaults in containers.
|
||||
|
@ -379,7 +379,6 @@ public class ObjectArrayList<KType> extends AbstractObjectCollection<KType>
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Stream<KType> stream() {
|
||||
return (Stream<KType>) Arrays.stream(buffer, 0, size());
|
||||
}
|
||||
|
@ -51,8 +51,6 @@ public class ObjectByteIdentityHashMap<KType> extends ObjectByteHashMap<KType> {
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectByteIdentityHashMap<KType> from(KType[] keys, byte[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectCharIdentityHashMap<KType> extends ObjectCharHashMap<KType> {
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectCharIdentityHashMap<KType> from(KType[] keys, char[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectDoubleIdentityHashMap<KType> extends ObjectDoubleHashMap<KTyp
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectDoubleIdentityHashMap<KType> from(KType[] keys, double[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectFloatIdentityHashMap<KType> extends ObjectFloatHashMap<KType>
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectFloatIdentityHashMap<KType> from(KType[] keys, float[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectIntIdentityHashMap<KType> extends ObjectIntHashMap<KType> {
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectIntIdentityHashMap<KType> from(KType[] keys, int[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectLongIdentityHashMap<KType> extends ObjectLongHashMap<KType> {
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectLongIdentityHashMap<KType> from(KType[] keys, long[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -51,8 +51,6 @@ public class ObjectShortIdentityHashMap<KType> extends ObjectShortHashMap<KType>
|
||||
return v1 == v2;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
/** Creates a hash map from two index-aligned arrays of key-value pairs. */
|
||||
public static <KType> ObjectShortIdentityHashMap<KType> from(KType[] keys, short[] values) {
|
||||
if (keys.length != values.length) {
|
||||
|
@ -20,7 +20,6 @@ import net.lax1dude.eaglercraft.internal.PlatformInput;
|
||||
*/
|
||||
public class Display {
|
||||
|
||||
private static long lastSwap = 0l;
|
||||
private static long lastDPIUpdate = -250l;
|
||||
private static float cacheDPI = 1.0f;
|
||||
|
||||
|
@ -168,9 +168,7 @@ public class EagRuntime {
|
||||
byte[] bytes = PlatformAssets.getResourceBytes(path);
|
||||
if (bytes != null) {
|
||||
List<String> ret = new ArrayList<>();
|
||||
try {
|
||||
BufferedReader rd = new BufferedReader(
|
||||
new InputStreamReader(new EaglerInputStream(bytes), StandardCharsets.UTF_8));
|
||||
try (BufferedReader rd = new BufferedReader(new InputStreamReader(new EaglerInputStream(bytes), StandardCharsets.UTF_8))) {
|
||||
String s;
|
||||
while ((s = rd.readLine()) != null) {
|
||||
ret.add(s);
|
||||
|
@ -129,13 +129,14 @@ public class EaglerInputStream extends InputStream {
|
||||
is.read(ret);
|
||||
return ret;
|
||||
} else {
|
||||
EaglerOutputStream os = new EaglerOutputStream(1024);
|
||||
byte[] buf = new byte[1024];
|
||||
int i;
|
||||
while ((i = is.read(buf)) != -1) {
|
||||
os.write(buf, 0, i);
|
||||
try (EaglerOutputStream os = new EaglerOutputStream(1024)) {
|
||||
byte[] buf = new byte[1024];
|
||||
int i;
|
||||
while ((i = is.read(buf)) != -1) {
|
||||
os.write(buf, 0, i);
|
||||
}
|
||||
return os.toByteArray();
|
||||
}
|
||||
return os.toByteArray();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package net.lax1dude.eaglercraft;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
public class EaglercraftVersion {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
@ -396,6 +396,8 @@ public final class HFormatter implements Closeable, Flushable {
|
||||
|
||||
public static class MissingFormatArgumentException extends IllegalArgumentException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public MissingFormatArgumentException() {
|
||||
}
|
||||
|
||||
@ -407,6 +409,8 @@ public final class HFormatter implements Closeable, Flushable {
|
||||
|
||||
public static class DuplicateFormatFlagsException extends IllegalArgumentException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public DuplicateFormatFlagsException() {
|
||||
}
|
||||
|
||||
@ -418,6 +422,8 @@ public final class HFormatter implements Closeable, Flushable {
|
||||
|
||||
public static class IllegalFormatWidthException extends IllegalArgumentException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public IllegalFormatWidthException() {
|
||||
}
|
||||
|
||||
@ -1154,8 +1160,6 @@ public final class HFormatter implements Closeable, Flushable {
|
||||
*/
|
||||
private static class Transformer {
|
||||
|
||||
private HFormatter formatter;
|
||||
|
||||
private FormatToken formatToken;
|
||||
|
||||
private Object arg;
|
||||
@ -1164,24 +1168,14 @@ public final class HFormatter implements Closeable, Flushable {
|
||||
|
||||
private static String lineSeparator;
|
||||
|
||||
private NumberFormat numberFormat;
|
||||
|
||||
private DecimalFormatSymbols decimalFormatSymbols;
|
||||
|
||||
private DateTimeUtil dateTimeUtil;
|
||||
|
||||
Transformer(HFormatter formatter, Locale locale) {
|
||||
this.formatter = formatter;
|
||||
this.locale = (null == locale ? Locale.US : locale);
|
||||
}
|
||||
|
||||
private NumberFormat getNumberFormat() {
|
||||
if (null == numberFormat) {
|
||||
numberFormat = NumberFormat.getInstance(locale);
|
||||
}
|
||||
return numberFormat;
|
||||
}
|
||||
|
||||
private DecimalFormatSymbols getDecimalFormatSymbols() {
|
||||
if (null == decimalFormatSymbols) {
|
||||
decimalFormatSymbols = new DecimalFormatSymbols(locale);
|
||||
|
@ -19,7 +19,9 @@ package net.lax1dude.eaglercraft;
|
||||
public class HString {
|
||||
|
||||
public static String format(String format, Object... args) {
|
||||
return new HFormatter().format(format, args).toString();
|
||||
try (HFormatter formatter = new HFormatter()) {
|
||||
return formatter.format(format, args).toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -47,7 +47,7 @@ public class IOUtils {
|
||||
return Arrays.asList(
|
||||
new String(((EaglerInputStream) parInputStream).getAsArray(), charset).split("(\\r\\n|\\n|\\r)"));
|
||||
} else {
|
||||
List<String> ret = new ArrayList();
|
||||
List<String> ret = new ArrayList<String>();
|
||||
try (InputStream is = parInputStream) {
|
||||
BufferedReader rd = new BufferedReader(new InputStreamReader(is, charset));
|
||||
String s;
|
||||
@ -264,11 +264,6 @@ public class IOUtils {
|
||||
return fill0(SCRATCH_CHAR_BUFFER_WO);
|
||||
}
|
||||
|
||||
private static byte[] fill0(final byte[] arr) {
|
||||
Arrays.fill(arr, (byte) 0);
|
||||
return arr;
|
||||
}
|
||||
|
||||
private static char[] fill0(final char[] arr) {
|
||||
Arrays.fill(arr, (char) 0);
|
||||
return arr;
|
||||
|
@ -157,6 +157,7 @@ public class KeyboardConstants {
|
||||
public static final int KEY_POWER = 0xDE;
|
||||
public static final int KEY_SLEEP = 0xDF;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static final int GLFW_KEY_SPACE = 32, GLFW_KEY_APOSTROPHE = 39, GLFW_KEY_COMMA = 44, GLFW_KEY_MINUS = 45,
|
||||
GLFW_KEY_PERIOD = 46, GLFW_KEY_SLASH = 47, GLFW_KEY_0 = 48, GLFW_KEY_1 = 49, GLFW_KEY_2 = 50,
|
||||
GLFW_KEY_3 = 51, GLFW_KEY_4 = 52, GLFW_KEY_5 = 53, GLFW_KEY_6 = 54, GLFW_KEY_7 = 55, GLFW_KEY_8 = 56,
|
||||
@ -168,6 +169,7 @@ public class KeyboardConstants {
|
||||
GLFW_KEY_LEFT_BRACKET = 91, GLFW_KEY_BACKSLASH = 92, GLFW_KEY_RIGHT_BRACKET = 93,
|
||||
GLFW_KEY_GRAVE_ACCENT = 96, GLFW_KEY_WORLD_1 = 161, GLFW_KEY_WORLD_2 = 162;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static final int GLFW_KEY_ESCAPE = 256, GLFW_KEY_ENTER = 257, GLFW_KEY_TAB = 258, GLFW_KEY_BACKSPACE = 259,
|
||||
GLFW_KEY_INSERT = 260, GLFW_KEY_DELETE = 261, GLFW_KEY_RIGHT = 262, GLFW_KEY_LEFT = 263,
|
||||
GLFW_KEY_DOWN = 264, GLFW_KEY_UP = 265, GLFW_KEY_PAGE_UP = 266, GLFW_KEY_PAGE_DOWN = 267,
|
||||
|
@ -17,19 +17,19 @@ package net.lax1dude.eaglercraft.internal;
|
||||
*
|
||||
*/
|
||||
public class GLObjectMap<T> {
|
||||
private Object[] values;
|
||||
private ITextureGL[] values;
|
||||
private int size;
|
||||
private int insertIndex;
|
||||
public int allocatedObjects;
|
||||
|
||||
public GLObjectMap(int initialSize) {
|
||||
this.values = new Object[initialSize];
|
||||
this.values = new ITextureGL[initialSize];
|
||||
this.size = initialSize;
|
||||
this.insertIndex = 0;
|
||||
this.allocatedObjects = 0;
|
||||
}
|
||||
|
||||
public int register(T obj) {
|
||||
public int register(ITextureGL obj) {
|
||||
int start = insertIndex;
|
||||
do {
|
||||
++insertIndex;
|
||||
@ -46,24 +46,24 @@ public class GLObjectMap<T> {
|
||||
return insertIndex + 1;
|
||||
}
|
||||
|
||||
public T free(int obj) {
|
||||
public ITextureGL free(int obj) {
|
||||
--obj;
|
||||
if (obj >= size || obj < 0)
|
||||
return null;
|
||||
Object ret = values[obj];
|
||||
ITextureGL ret = values[obj];
|
||||
values[obj] = null;
|
||||
--allocatedObjects;
|
||||
return (T) ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public T get(int obj) {
|
||||
public ITextureGL get(int obj) {
|
||||
--obj;
|
||||
if (obj >= size || obj < 0)
|
||||
return null;
|
||||
return (T) values[obj];
|
||||
return values[obj];
|
||||
}
|
||||
|
||||
public void set(int obj, T val) {
|
||||
public void set(int obj, ITextureGL val) {
|
||||
values[obj] = val;
|
||||
}
|
||||
|
||||
@ -71,14 +71,14 @@ public class GLObjectMap<T> {
|
||||
int oldSize = size;
|
||||
size += size / 2;
|
||||
Object[] oldValues = values;
|
||||
values = new Object[size];
|
||||
values = new ITextureGL[size];
|
||||
System.arraycopy(oldValues, 0, values, 0, oldSize);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
if (allocatedObjects == 0)
|
||||
return;
|
||||
values = new Object[size];
|
||||
values = new ITextureGL[size];
|
||||
insertIndex = 0;
|
||||
allocatedObjects = 0;
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ package net.lax1dude.eaglercraft.internal;
|
||||
*/
|
||||
public class PlatformIncompatibleException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public PlatformIncompatibleException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ package net.lax1dude.eaglercraft.internal;
|
||||
*/
|
||||
public class RuntimeInitializationFailureException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public RuntimeInitializationFailureException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ package net.lax1dude.eaglercraft.internal.vfs2;
|
||||
*/
|
||||
public class EaglerFileSystemException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public EaglerFileSystemException() {
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,8 @@ package net.lax1dude.eaglercraft.internal.vfs2;
|
||||
public interface VFSIterator2 {
|
||||
|
||||
public static class BreakLoop extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public BreakLoop() {
|
||||
super("iterator loop break request");
|
||||
}
|
||||
|
@ -1,244 +1,159 @@
|
||||
//package net.lax1dude.eaglercraft.minecraft;
|
||||
//
|
||||
//import net.lax1dude.eaglercraft.opengl.EaglercraftGPU;
|
||||
//import net.lax1dude.eaglercraft.opengl.GlStateManager;
|
||||
//import net.lax1dude.eaglercraft.opengl.InstancedFontRenderer;
|
||||
//import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
//
|
||||
///**
|
||||
// * Copyright (c) 2022 lax1dude. All Rights Reserved.
|
||||
// *
|
||||
// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
// * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
// * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
// * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
// * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
// * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
// * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
// * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
// * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// * POSSIBILITY OF SUCH DAMAGE.
|
||||
// *
|
||||
// */
|
||||
//public class EaglerFontRenderer extends FontRenderer {
|
||||
//
|
||||
// private final int[] temporaryCodepointArray = new int[6553];
|
||||
//
|
||||
// public static FontRenderer createSupportedFontRenderer(GameSettings gameSettingsIn, ResourceLocation location,
|
||||
// TextureManager textureManagerIn, boolean unicode) {
|
||||
// if (EaglercraftGPU.checkInstancingCapable()) {
|
||||
// return new EaglerFontRenderer(gameSettingsIn, location, textureManagerIn, unicode);
|
||||
// } else {
|
||||
// return new FontRenderer(gameSettingsIn, location, textureManagerIn, unicode);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public EaglerFontRenderer(GameSettings gameSettingsIn, ResourceLocation location, TextureManager textureManagerIn,
|
||||
// boolean unicode) {
|
||||
// super(gameSettingsIn, location, textureManagerIn, unicode);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public int drawString(String text, float x, float y, int color, boolean dropShadow) {
|
||||
// GlStateManager.enableAlpha();
|
||||
// if (text == null || text.length() == 0) {
|
||||
// this.posX = x + (dropShadow ? 1 : 0);
|
||||
// this.posY = y;
|
||||
// } else {
|
||||
// if (this.unicodeFlag || !decodeASCIICodepointsAndValidate(text)) {
|
||||
// return super.drawString(text, x, y, color, dropShadow);
|
||||
// }
|
||||
// this.resetStyles();
|
||||
// if ((color & 0xFC000000) == 0) {
|
||||
// color |= 0xFF000000;
|
||||
// }
|
||||
// this.red = (float) (color >>> 16 & 255) / 255.0F;
|
||||
// this.blue = (float) (color >>> 8 & 255) / 255.0F;
|
||||
// this.green = (float) (color & 255) / 255.0F;
|
||||
// this.alpha = (float) (color >>> 24 & 255) / 255.0F;
|
||||
// this.posX = x;
|
||||
// this.posY = y;
|
||||
// this.textColor = color;
|
||||
// this.renderStringAtPos0(text, dropShadow);
|
||||
// }
|
||||
// return (int) this.posX;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void renderStringAtPos(String parString1, boolean parFlag) {
|
||||
// if (parString1 == null)
|
||||
// return;
|
||||
// if (this.unicodeFlag || !decodeASCIICodepointsAndValidate(parString1)) {
|
||||
// super.renderStringAtPos(parString1, parFlag);
|
||||
// } else {
|
||||
// renderStringAtPos0(parString1, false);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void renderStringAtPos0(String parString1, boolean parFlag) {
|
||||
// renderEngine.bindTexture(locationFontTexture);
|
||||
// InstancedFontRenderer.begin();
|
||||
//
|
||||
// Tessellator tessellator = Tessellator.getInstance();
|
||||
// WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
||||
// worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
|
||||
//
|
||||
// boolean hasStrike = false;
|
||||
//
|
||||
// for (int i = 0; i < parString1.length(); ++i) {
|
||||
// char c0 = parString1.charAt(i);
|
||||
// if (c0 == 167 && i + 1 < parString1.length()) {
|
||||
// int i1 = "0123456789abcdefklmnor".indexOf(Character.toLowerCase(parString1.charAt(i + 1)));
|
||||
// if (i1 < 16) {
|
||||
// this.randomStyle = false;
|
||||
// this.boldStyle = false;
|
||||
// this.strikethroughStyle = false;
|
||||
// this.underlineStyle = false;
|
||||
// this.italicStyle = false;
|
||||
// if (i1 < 0 || i1 > 15) {
|
||||
// i1 = 15;
|
||||
// }
|
||||
// int j1 = this.colorCode[i1];
|
||||
// this.textColor = j1 | (this.textColor & 0xFF000000);
|
||||
// } else if (i1 == 16) {
|
||||
// this.randomStyle = true;
|
||||
// } else if (i1 == 17) {
|
||||
// this.boldStyle = true;
|
||||
// } else if (i1 == 18) {
|
||||
// this.strikethroughStyle = true;
|
||||
// } else if (i1 == 19) {
|
||||
// this.underlineStyle = true;
|
||||
// } else if (i1 == 20) {
|
||||
// this.italicStyle = true;
|
||||
// } else if (i1 == 21) {
|
||||
// this.randomStyle = false;
|
||||
// this.boldStyle = false;
|
||||
// this.strikethroughStyle = false;
|
||||
// this.underlineStyle = false;
|
||||
// this.italicStyle = false;
|
||||
// this.textColor = ((int) (this.alpha * 255.0f) << 24) | ((int) (this.red * 255.0f) << 16)
|
||||
// | ((int) (this.green * 255.0f) << 8) | (int) (this.blue * 255.0f);
|
||||
// }
|
||||
//
|
||||
// ++i;
|
||||
// } else {
|
||||
// int j = temporaryCodepointArray[i];
|
||||
// if (j > 255)
|
||||
// continue;
|
||||
//
|
||||
// if (this.randomStyle && j != -1) {
|
||||
// int k = this.getCharWidth(c0);
|
||||
// char[] chars = FontRenderer.codepointLookup;
|
||||
//
|
||||
// char c1;
|
||||
// while (true) {
|
||||
// j = this.fontRandom.nextInt(chars.length);
|
||||
// c1 = chars[j];
|
||||
// if (k == this.getCharWidth(c1)) {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// c0 = c1;
|
||||
// }
|
||||
//
|
||||
// float f = this.appendCharToBuffer(j, this.textColor, this.boldStyle, this.italicStyle);
|
||||
//
|
||||
// if (this.strikethroughStyle) {
|
||||
// hasStrike = true;
|
||||
// worldrenderer.pos((double) this.posX, (double) (this.posY + (float) (this.FONT_HEIGHT / 2)), 0.0D)
|
||||
// .endVertex();
|
||||
// worldrenderer
|
||||
// .pos((double) (this.posX + f), (double) (this.posY + (float) (this.FONT_HEIGHT / 2)), 0.0D)
|
||||
// .endVertex();
|
||||
// worldrenderer.pos((double) (this.posX + f),
|
||||
// (double) (this.posY + (float) (this.FONT_HEIGHT / 2) - 1.0F), 0.0D).endVertex();
|
||||
// worldrenderer
|
||||
// .pos((double) this.posX, (double) (this.posY + (float) (this.FONT_HEIGHT / 2) - 1.0F), 0.0D)
|
||||
// .endVertex();
|
||||
// worldrenderer.putColor4(this.textColor);
|
||||
// GlStateManager.enableTexture2D();
|
||||
// }
|
||||
//
|
||||
// if (this.underlineStyle) {
|
||||
// hasStrike = true;
|
||||
// int l = this.underlineStyle ? -1 : 0;
|
||||
// worldrenderer.pos((double) (this.posX + (float) l), (double) (this.posY + (float) this.FONT_HEIGHT),
|
||||
// 0.0D).endVertex();
|
||||
// worldrenderer.pos((double) (this.posX + f), (double) (this.posY + (float) this.FONT_HEIGHT), 0.0D)
|
||||
// .endVertex();
|
||||
// worldrenderer
|
||||
// .pos((double) (this.posX + f), (double) (this.posY + (float) this.FONT_HEIGHT - 1.0F), 0.0D)
|
||||
// .endVertex();
|
||||
// worldrenderer.pos((double) (this.posX + (float) l),
|
||||
// (double) (this.posY + (float) this.FONT_HEIGHT - 1.0F), 0.0D).endVertex();
|
||||
// worldrenderer.putColor4(this.textColor);
|
||||
// GlStateManager.enableTexture2D();
|
||||
// }
|
||||
//
|
||||
// this.posX += (float) ((int) f);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// float texScale = 0.0625f;
|
||||
//
|
||||
// if (!hasStrike) {
|
||||
// worldrenderer.finishDrawing();
|
||||
// }
|
||||
//
|
||||
// if (parFlag) {
|
||||
// if (hasStrike) {
|
||||
// GlStateManager.color(0.25f, 0.25f, 0.25f, 1.0f);
|
||||
// GlStateManager.translate(1.0f, 1.0f, 0.0f);
|
||||
// tessellator.draw();
|
||||
// GlStateManager.translate(-1.0f, -1.0f, 0.0f);
|
||||
// GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
// InstancedFontRenderer.render(8, 8, texScale, texScale, true);
|
||||
// EaglercraftGPU.renderAgain();
|
||||
// } else {
|
||||
// GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
// InstancedFontRenderer.render(8, 8, texScale, texScale, true);
|
||||
// }
|
||||
// } else {
|
||||
// GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
// if (hasStrike) {
|
||||
// tessellator.draw();
|
||||
// }
|
||||
// InstancedFontRenderer.render(8, 8, texScale, texScale, false);
|
||||
// }
|
||||
//
|
||||
// if (parFlag) {
|
||||
// this.posX += 1.0f;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private float appendCharToBuffer(int parInt1, int color, boolean boldStyle, boolean italicStyle) {
|
||||
// if (parInt1 == 32) {
|
||||
// return 4.0f;
|
||||
// } else {
|
||||
// int i = parInt1 % 16;
|
||||
// int j = parInt1 / 16;
|
||||
// float w = this.charWidth[parInt1];
|
||||
// if (boldStyle) {
|
||||
// InstancedFontRenderer.appendBoldQuad((int) this.posX, (int) this.posY, i, j, color, italicStyle);
|
||||
// ++w;
|
||||
// } else {
|
||||
// InstancedFontRenderer.appendQuad((int) this.posX, (int) this.posY, i, j, color, italicStyle);
|
||||
// }
|
||||
// return w;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private boolean decodeASCIICodepointsAndValidate(String str) {
|
||||
// for (int i = 0, l = str.length(); i < l; ++i) {
|
||||
// int j = FontMappingHelper.lookupChar(str.charAt(i), true);
|
||||
// if (j != -1) {
|
||||
// temporaryCodepointArray[i] = j;
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
//}
|
||||
package net.lax1dude.eaglercraft.minecraft;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.minecraft.GameSettings;
|
||||
import com.mojang.minecraft.render.TextureManager;
|
||||
|
||||
import net.lax1dude.eaglercraft.opengl.EaglercraftGPU;
|
||||
import net.lax1dude.eaglercraft.opengl.GlStateManager;
|
||||
import net.lax1dude.eaglercraft.opengl.InstancedFontRenderer;
|
||||
import net.lax1dude.eaglercraft.opengl.RealOpenGLEnums;
|
||||
import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
import net.peyton.eagler.minecraft.FontRenderer;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2022 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
public class EaglerFontRenderer extends FontRenderer {
|
||||
|
||||
private final int[] temporaryCodepointArray = new int[6553];
|
||||
|
||||
public static FontRenderer createSupportedFontRenderer(GameSettings gameSettingsIn, String location, TextureManager textureManagerIn) {
|
||||
if (EaglercraftGPU.checkInstancingCapable()) {
|
||||
return new EaglerFontRenderer(gameSettingsIn, location, textureManagerIn);
|
||||
} else {
|
||||
return new FontRenderer(gameSettingsIn, location, textureManagerIn);
|
||||
}
|
||||
}
|
||||
|
||||
public EaglerFontRenderer(GameSettings gameSettingsIn, String location, TextureManager textureManagerIn) {
|
||||
super(gameSettingsIn, location, textureManagerIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int drawString(String text, float x, float y, int color, boolean dropShadow) {
|
||||
GlStateManager.enableAlpha();
|
||||
if (text == null || text.length() == 0) {
|
||||
this.posX = x + (dropShadow ? 1 : 0);
|
||||
this.posY = y;
|
||||
} else {
|
||||
if (!decodeASCIICodepointsAndValidate(text)) {
|
||||
return super.drawString(text, x, y, color, dropShadow);
|
||||
}
|
||||
if ((color & 0xFC000000) == 0) {
|
||||
color |= 0xFF000000;
|
||||
}
|
||||
this.red = (float) (color >>> 16 & 255) / 255.0F;
|
||||
this.blue = (float) (color >>> 8 & 255) / 255.0F;
|
||||
this.green = (float) (color & 255) / 255.0F;
|
||||
this.alpha = (float) (color >>> 24 & 255) / 255.0F;
|
||||
this.posX = x;
|
||||
this.posY = y;
|
||||
this.textColor = color;
|
||||
this.renderStringAtPos0(text, dropShadow);
|
||||
}
|
||||
return (int) this.posX;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderStringAtPos(String parString1, boolean parFlag) {
|
||||
if (parString1 == null)
|
||||
return;
|
||||
if (!decodeASCIICodepointsAndValidate(parString1)) {
|
||||
super.renderStringAtPos(parString1, parFlag);
|
||||
} else {
|
||||
renderStringAtPos0(parString1, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderStringAtPos0(String parString1, boolean parFlag) {
|
||||
GL11.glBindTexture(RealOpenGLEnums.GL_TEXTURE_2D, this.renderEngine.load(this.locationFontTexture));
|
||||
InstancedFontRenderer.begin();
|
||||
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
||||
worldrenderer.begin(7, VertexFormat.POSITION_COLOR);
|
||||
|
||||
for (int i = 0; i < parString1.length(); ++i) {
|
||||
char c0 = parString1.charAt(i);
|
||||
if (c0 == 167 && i + 1 < parString1.length()) {
|
||||
int i1 = "0123456789abcdefklmnor".indexOf(Character.toLowerCase(parString1.charAt(i + 1)));
|
||||
if (i1 < 16) {
|
||||
if (i1 < 0 || i1 > 15) {
|
||||
i1 = 15;
|
||||
}
|
||||
int j1 = this.colorCode[i1];
|
||||
this.textColor = j1 | (this.textColor & 0xFF000000);
|
||||
} else if (i1 == 21) {
|
||||
this.textColor = ((int) (this.alpha * 255.0f) << 24) | ((int) (this.red * 255.0f) << 16)
|
||||
| ((int) (this.green * 255.0f) << 8) | (int) (this.blue * 255.0f);
|
||||
}
|
||||
|
||||
++i;
|
||||
} else {
|
||||
int j = temporaryCodepointArray[i];
|
||||
if (j > 255)
|
||||
continue;
|
||||
|
||||
float f = this.appendCharToBuffer(j, this.textColor);
|
||||
this.posX += (float) ((int) f);
|
||||
}
|
||||
}
|
||||
|
||||
float texScale = 0.0625f;
|
||||
|
||||
worldrenderer.finishDrawing();
|
||||
|
||||
if (parFlag) {
|
||||
GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
InstancedFontRenderer.render(8, 8, texScale, texScale, true);
|
||||
} else {
|
||||
GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
InstancedFontRenderer.render(8, 8, texScale, texScale, false);
|
||||
}
|
||||
|
||||
if (parFlag) {
|
||||
this.posX += 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
private float appendCharToBuffer(int parInt1, int color) {
|
||||
if (parInt1 == 32) {
|
||||
return 4.0f;
|
||||
} else {
|
||||
int i = parInt1 % 16;
|
||||
int j = parInt1 / 16;
|
||||
float w = this.charWidth[parInt1];
|
||||
InstancedFontRenderer.appendQuad((int) this.posX, (int) this.posY, i, j, color, false);
|
||||
return w;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean decodeASCIICodepointsAndValidate(String str) {
|
||||
for (int i = 0, l = str.length(); i < l; ++i) {
|
||||
int j = FontMappingHelper.lookupChar(str.charAt(i), true);
|
||||
if (j != -1) {
|
||||
temporaryCodepointArray[i] = j;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -94,8 +94,8 @@ public class EaglercraftGPU extends GlStateManager {
|
||||
static boolean emulatedVAOs = false;
|
||||
static SoftGLVertexState emulatedVAOState = new SoftGLVertexState();
|
||||
|
||||
private static final HashMap<Integer, DisplayList> displayLists = new HashMap();
|
||||
private static final HashMap<Integer, DisplayList> displayListsInitialized = new HashMap();
|
||||
private static final HashMap<Integer, DisplayList> displayLists = new HashMap<Integer, DisplayList>();
|
||||
private static final HashMap<Integer, DisplayList> displayListsInitialized = new HashMap<Integer, DisplayList>();
|
||||
|
||||
public static String gluErrorString(int i) {
|
||||
switch (i) {
|
||||
|
@ -373,7 +373,6 @@ public class FixedFunctionPipeline {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private final int stateBits;
|
||||
private final int stateCoreBits;
|
||||
private final int stateExtBits;
|
||||
private Object[] extensionPointer;
|
||||
@ -507,7 +506,6 @@ public class FixedFunctionPipeline {
|
||||
private FixedFunctionPipeline(int bits, int extBits, IProgramGL compiledProg) {
|
||||
shaderProgram = compiledProg;
|
||||
|
||||
stateBits = bits;
|
||||
stateHasAttribTexture = (bits & STATE_HAS_ATTRIB_TEXTURE) != 0;
|
||||
stateHasAttribColor = (bits & STATE_HAS_ATTRIB_COLOR) != 0;
|
||||
stateHasAttribNormal = (bits & STATE_HAS_ATTRIB_NORMAL) != 0;
|
||||
|
@ -908,7 +908,6 @@ public class GlStateManager {
|
||||
Matrix4f.mul(matrix, paramMatrix, matrix);
|
||||
}
|
||||
|
||||
private static final Vector3f paramVector = new Vector3f();
|
||||
private static final float toRad = 0.0174532925f;
|
||||
|
||||
public static void rotate(float angle, float x, float y, float z) {
|
||||
|
@ -42,6 +42,8 @@ public class VSHInputLayoutParser {
|
||||
|
||||
public static class ShaderLayoutParseException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public ShaderLayoutParseException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
@ -45,6 +45,8 @@ import net.lax1dude.eaglercraft.internal.buffer.FloatBuffer;
|
||||
*/
|
||||
public abstract class Matrix implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor for Matrix.
|
||||
*/
|
||||
|
@ -44,6 +44,8 @@ import net.lax1dude.eaglercraft.internal.buffer.FloatBuffer;
|
||||
*/
|
||||
public abstract class Vector implements Serializable, ReadableVector {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor for Vector.
|
||||
*/
|
||||
|
@ -1,6 +1,8 @@
|
||||
package net.peyton.eagler.level.nbt;
|
||||
|
||||
public class NBTException extends Exception {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public NBTException(String p_i47523_1_, String p_i47523_2_, int p_i47523_3_) {
|
||||
super(p_i47523_1_ + " at: " + func_193592_a(p_i47523_2_, p_i47523_3_));
|
||||
}
|
||||
|
552
src/main/java/net/peyton/eagler/minecraft/FontRenderer.java
Normal file
552
src/main/java/net/peyton/eagler/minecraft/FontRenderer.java
Normal file
@ -0,0 +1,552 @@
|
||||
package net.peyton.eagler.minecraft;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.mojang.minecraft.GameSettings;
|
||||
import com.mojang.minecraft.render.TextureManager;
|
||||
|
||||
import net.lax1dude.eaglercraft.Random;
|
||||
|
||||
import net.lax1dude.eaglercraft.minecraft.FontMappingHelper;
|
||||
import net.lax1dude.eaglercraft.opengl.GlStateManager;
|
||||
import net.lax1dude.eaglercraft.opengl.ImageData;
|
||||
import net.lax1dude.eaglercraft.opengl.RealOpenGLEnums;
|
||||
import net.lax1dude.eaglercraft.opengl.Tessellator;
|
||||
import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||
|
||||
/**+
|
||||
* This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code.
|
||||
*
|
||||
* Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!"
|
||||
* Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
|
||||
*
|
||||
* EaglercraftX 1.8 patch files (c) 2022-2025 lax1dude, ayunami2000. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
public class FontRenderer {
|
||||
/**+
|
||||
* Array of width of all the characters in default.png
|
||||
*/
|
||||
protected int[] charWidth = new int[256];
|
||||
/**+
|
||||
* the height in pixels of default text
|
||||
*/
|
||||
public int FONT_HEIGHT = 9;
|
||||
public Random fontRandom = new Random();
|
||||
/**+
|
||||
* Array of RGB triplets defining the 16 standard chat colors
|
||||
* followed by 16 darker version of the same colors for drop
|
||||
* shadows.
|
||||
*/
|
||||
protected int[] colorCode = new int[32];
|
||||
protected float posX;
|
||||
protected float posY;
|
||||
protected float red;
|
||||
protected float blue;
|
||||
protected float green;
|
||||
protected float alpha;
|
||||
protected int textColor;
|
||||
|
||||
protected TextureManager renderEngine;
|
||||
protected String locationFontTexture;
|
||||
|
||||
protected static char[] codepointLookup = new char[] { 192, 193, 194, 200, 202, 203, 205, 211, 212, 213, 218, 223,
|
||||
227, 245, 287, 304, 305, 338, 339, 350, 351, 372, 373, 382, 519, 0, 0, 0, 0, 0, 0, 0, 32, 33, 34, 35, 36,
|
||||
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
|
||||
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
|
||||
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
|
||||
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 0, 199, 252, 233, 226, 228, 224, 229, 231,
|
||||
234, 235, 232, 239, 238, 236, 196, 197, 201, 230, 198, 244, 246, 242, 251, 249, 255, 214, 220, 248, 163,
|
||||
216, 215, 402, 225, 237, 243, 250, 241, 209, 170, 186, 191, 174, 172, 189, 188, 161, 171, 187, 9617, 9618,
|
||||
9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500,
|
||||
9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554,
|
||||
9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 945, 946, 915, 960, 931, 963, 956, 964, 934,
|
||||
920, 937, 948, 8734, 8709, 8712, 8745, 8801, 177, 8805, 8804, 8992, 8993, 247, 8776, 176, 8729, 183, 8730,
|
||||
8319, 178, 9632, 0 };
|
||||
|
||||
public FontRenderer(GameSettings gameSettingsIn, String s, TextureManager textureManagerIn) {
|
||||
this.locationFontTexture = s;
|
||||
this.renderEngine = textureManagerIn;
|
||||
GL11.glBindTexture(RealOpenGLEnums.GL_TEXTURE_2D, this.renderEngine.load(s));
|
||||
|
||||
for (int i = 0; i < 32; ++i) {
|
||||
int j = (i >> 3 & 1) * 85;
|
||||
int k = (i >> 2 & 1) * 170 + j;
|
||||
int l = (i >> 1 & 1) * 170 + j;
|
||||
int i1 = (i >> 0 & 1) * 170 + j;
|
||||
if (i == 6) {
|
||||
k += 85;
|
||||
}
|
||||
|
||||
if (gameSettingsIn.anaglyph) {
|
||||
int j1 = (k * 30 + l * 59 + i1 * 11) / 100;
|
||||
int k1 = (k * 30 + l * 70) / 100;
|
||||
int l1 = (k * 30 + i1 * 70) / 100;
|
||||
k = j1;
|
||||
l = k1;
|
||||
i1 = l1;
|
||||
}
|
||||
|
||||
if (i >= 16) {
|
||||
k /= 4;
|
||||
l /= 4;
|
||||
i1 /= 4;
|
||||
}
|
||||
|
||||
this.colorCode[i] = (k & 255) << 16 | (l & 255) << 8 | i1 & 255;
|
||||
}
|
||||
|
||||
readFontTexture();
|
||||
}
|
||||
|
||||
private void readFontTexture() {
|
||||
ImageData bufferedimage;
|
||||
try {
|
||||
bufferedimage = this.renderEngine.loadImageData(this.locationFontTexture);
|
||||
} catch (Exception ioexception) {
|
||||
throw new RuntimeException(ioexception);
|
||||
}
|
||||
|
||||
int i = bufferedimage.width;
|
||||
int j = bufferedimage.height;
|
||||
int[] aint = bufferedimage.pixels;
|
||||
int k = j / 16;
|
||||
int l = i / 16;
|
||||
byte b0 = 1;
|
||||
float f = 8.0F / (float) l;
|
||||
|
||||
for (int i1 = 0; i1 < 256; ++i1) {
|
||||
int j1 = i1 % 16;
|
||||
int k1 = i1 / 16;
|
||||
if (i1 == 32) {
|
||||
this.charWidth[i1] = 3 + b0;
|
||||
}
|
||||
|
||||
int l1;
|
||||
for (l1 = l - 1; l1 >= 0; --l1) {
|
||||
int i2 = j1 * l + l1;
|
||||
boolean flag = true;
|
||||
|
||||
for (int j2 = 0; j2 < k && flag; ++j2) {
|
||||
int k2 = (k1 * l + j2) * i;
|
||||
if ((aint[i2 + k2] >> 24 & 255) != 0) {
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
++l1;
|
||||
this.charWidth[i1] = (int) (0.5D + (double) ((float) l1 * f)) + b0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private float func_181559_a(char parChar1) {
|
||||
if (parChar1 == 32) {
|
||||
return 4.0F;
|
||||
} else {
|
||||
return this.renderDefaultChar(parChar1);
|
||||
}
|
||||
}
|
||||
|
||||
/**+
|
||||
* Render a single character with the default.png font at
|
||||
* current (posX,posY) location...
|
||||
*/
|
||||
private float renderDefaultChar(int parInt1) {
|
||||
int i = parInt1 % 16 * 8;
|
||||
int j = parInt1 / 16 * 8;
|
||||
int k = 0;
|
||||
GL11.glBindTexture(RealOpenGLEnums.GL_TEXTURE_2D, this.renderEngine.load(this.locationFontTexture));
|
||||
int l = this.charWidth[parInt1];
|
||||
float f = (float) l - 0.01F;
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
||||
|
||||
worldrenderer.begin(Tessellator.GL_TRIANGLE_STRIP, VertexFormat.POSITION_TEX);
|
||||
|
||||
worldrenderer.pos(this.posX + (float) k, this.posY, 0.0F).tex((float) i / 128.0F, (float) j / 128.0F)
|
||||
.endVertex();
|
||||
|
||||
worldrenderer.pos(this.posX - (float) k, this.posY + 7.99F, 0.0F)
|
||||
.tex((float) i / 128.0F, ((float) j + 7.99F) / 128.0F).endVertex();
|
||||
|
||||
worldrenderer.pos(this.posX + f - 1.0F + (float) k, this.posY, 0.0F)
|
||||
.tex(((float) i + f - 1.0F) / 128.0F, (float) j / 128.0F).endVertex();
|
||||
|
||||
worldrenderer.pos(this.posX + f - 1.0F - (float) k, this.posY + 7.99F, 0.0F)
|
||||
.tex(((float) i + f - 1.0F) / 128.0F, ((float) j + 7.99F) / 128.0F).endVertex();
|
||||
|
||||
tessellator.draw();
|
||||
|
||||
return (float) l;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Draws the specified string with a shadow.
|
||||
*/
|
||||
public int drawStringWithShadow(String text, float x, float y, int color) {
|
||||
return this.drawString(text, x, y, color, true);
|
||||
}
|
||||
|
||||
/**+
|
||||
* Draws the specified string.
|
||||
*/
|
||||
public int drawString(String text, int x, int y, int color) {
|
||||
return this.drawString(text, (float) x, (float) y, color, false);
|
||||
}
|
||||
|
||||
/**+
|
||||
* Draws the specified string.
|
||||
*/
|
||||
public int drawString(String text, float x, float y, int color, boolean dropShadow) {
|
||||
GlStateManager.enableAlpha();
|
||||
int i;
|
||||
if (dropShadow) {
|
||||
i = this.renderString(text, x + 1.0F, y + 1.0F, color, true);
|
||||
i = Math.max(i, this.renderString(text, x, y, color, false));
|
||||
} else {
|
||||
i = this.renderString(text, x, y, color, false);
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Render a single line string at the current (posX,posY) and
|
||||
* update posX
|
||||
*/
|
||||
protected void renderStringAtPos(String parString1, boolean parFlag) {
|
||||
for (int i = 0; i < parString1.length(); ++i) {
|
||||
char c0 = parString1.charAt(i);
|
||||
if (c0 == 167 && i + 1 < parString1.length()) {
|
||||
int i1 = "0123456789abcdefklmnor".indexOf(Character.toLowerCase(parString1.charAt(i + 1)));
|
||||
if (i1 < 16) {
|
||||
if (i1 < 0 || i1 > 15) {
|
||||
i1 = 15;
|
||||
}
|
||||
|
||||
if (parFlag) {
|
||||
i1 += 16;
|
||||
}
|
||||
|
||||
int j1 = this.colorCode[i1];
|
||||
this.textColor = j1;
|
||||
GlStateManager.color((float) (j1 >> 16) / 255.0F, (float) (j1 >> 8 & 255) / 255.0F,
|
||||
(float) (j1 & 255) / 255.0F, this.alpha);
|
||||
}else if (i1 == 21) {
|
||||
GlStateManager.color(this.red, this.blue, this.green, this.alpha);
|
||||
}
|
||||
|
||||
++i;
|
||||
} else {
|
||||
int j = FontMappingHelper.lookupChar(c0, false);
|
||||
float f1 = 1.0F;
|
||||
boolean flag = (c0 == 0 || j == -1) && parFlag;
|
||||
if (flag) {
|
||||
this.posX -= f1;
|
||||
this.posY -= f1;
|
||||
}
|
||||
|
||||
float f = this.func_181559_a(c0);
|
||||
if (flag) {
|
||||
this.posX += f1;
|
||||
this.posY += f1;
|
||||
}
|
||||
|
||||
this.posX += (float) ((int) f);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**+
|
||||
* Render single line string by setting GL color, current
|
||||
* (posX,posY), and calling renderStringAtPos()
|
||||
*/
|
||||
private int renderString(String text, float x, float y, int color, boolean dropShadow) {
|
||||
if (text == null) {
|
||||
this.posX = x;
|
||||
this.posY = y;
|
||||
} else {
|
||||
if ((color & -67108864) == 0) {
|
||||
color |= -16777216;
|
||||
}
|
||||
|
||||
if (dropShadow) {
|
||||
color = (color & 16579836) >> 2 | color & -16777216;
|
||||
}
|
||||
|
||||
this.red = (float) (color >> 16 & 255) / 255.0F;
|
||||
this.blue = (float) (color >> 8 & 255) / 255.0F;
|
||||
this.green = (float) (color & 255) / 255.0F;
|
||||
this.alpha = (float) (color >> 24 & 255) / 255.0F;
|
||||
GlStateManager.color(this.red, this.blue, this.green, this.alpha);
|
||||
this.posX = x;
|
||||
this.posY = y;
|
||||
this.renderStringAtPos(text, dropShadow);
|
||||
}
|
||||
return (int) this.posX;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Returns the width of this string. Equivalent of
|
||||
* FontMetrics.stringWidth(String s).
|
||||
*/
|
||||
public int getStringWidth(String text) {
|
||||
if (text == null) {
|
||||
return 0;
|
||||
} else {
|
||||
int i = 0;
|
||||
boolean flag = false;
|
||||
|
||||
for (int j = 0; j < text.length(); ++j) {
|
||||
char c0 = text.charAt(j);
|
||||
int k = this.getCharWidth(c0);
|
||||
if (k < 0 && j < text.length() - 1) {
|
||||
++j;
|
||||
c0 = text.charAt(j);
|
||||
if (c0 != 108 && c0 != 76) {
|
||||
if (c0 == 114 || c0 == 82) {
|
||||
flag = false;
|
||||
}
|
||||
} else {
|
||||
flag = true;
|
||||
}
|
||||
|
||||
k = 0;
|
||||
}
|
||||
|
||||
i += k;
|
||||
if (flag && k > 0) {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
/**+
|
||||
* Returns the width of this character as rendered.
|
||||
*/
|
||||
public int getCharWidth(char character) {
|
||||
if (character == 167) {
|
||||
return -1;
|
||||
} else if (character == 32) {
|
||||
return 4;
|
||||
} else {
|
||||
int i = FontMappingHelper.lookupChar(character, false);
|
||||
if (character > 0 && i != -1) {
|
||||
return this.charWidth[i];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**+
|
||||
* Trims a string to fit a specified Width.
|
||||
*/
|
||||
public String trimStringToWidth(String text, int width) {
|
||||
return this.trimStringToWidth(text, width, false);
|
||||
}
|
||||
|
||||
/**+
|
||||
* Trims a string to fit a specified Width.
|
||||
*/
|
||||
public String trimStringToWidth(String text, int width, boolean reverse) {
|
||||
StringBuilder stringbuilder = new StringBuilder();
|
||||
int i = 0;
|
||||
int j = reverse ? text.length() - 1 : 0;
|
||||
int k = reverse ? -1 : 1;
|
||||
boolean flag = false;
|
||||
boolean flag1 = false;
|
||||
|
||||
for (int l = j; l >= 0 && l < text.length() && i < width; l += k) {
|
||||
char c0 = text.charAt(l);
|
||||
int i1 = this.getCharWidth(c0);
|
||||
if (flag) {
|
||||
flag = false;
|
||||
if (c0 != 108 && c0 != 76) {
|
||||
if (c0 == 114 || c0 == 82) {
|
||||
flag1 = false;
|
||||
}
|
||||
} else {
|
||||
flag1 = true;
|
||||
}
|
||||
} else if (i1 < 0) {
|
||||
flag = true;
|
||||
} else {
|
||||
i += i1;
|
||||
if (flag1) {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (i > width) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (reverse) {
|
||||
stringbuilder.insert(0, c0);
|
||||
} else {
|
||||
stringbuilder.append(c0);
|
||||
}
|
||||
}
|
||||
|
||||
return stringbuilder.toString();
|
||||
}
|
||||
|
||||
/**+
|
||||
* Returns the width of the wordwrapped String (maximum length
|
||||
* is parameter k)
|
||||
*/
|
||||
public int splitStringWidth(String parString1, int parInt1) {
|
||||
return this.FONT_HEIGHT * this.listFormattedStringToWidth(parString1, parInt1).size();
|
||||
}
|
||||
|
||||
/**+
|
||||
* Breaks a string into a list of pieces that will fit a
|
||||
* specified width.
|
||||
*/
|
||||
public List<String> listFormattedStringToWidth(String str, int wrapWidth) {
|
||||
return Arrays.asList(this.wrapFormattedStringToWidth(str, wrapWidth, 0).split("\n"));
|
||||
}
|
||||
|
||||
/**+
|
||||
* Inserts newline and formatting into a string to wrap it
|
||||
* within the specified width.
|
||||
*/
|
||||
String wrapFormattedStringToWidth(String str, int wrapWidth, int depthCheck) { // TODO: fix recursive
|
||||
if (depthCheck > 20) {
|
||||
return str;
|
||||
}
|
||||
int i = this.sizeStringToWidth(str, wrapWidth);
|
||||
if (str.length() <= i) {
|
||||
return str;
|
||||
} else {
|
||||
String s = str.substring(0, i);
|
||||
char c0 = str.charAt(i);
|
||||
boolean flag = c0 == 32 || c0 == 10;
|
||||
String s1 = getFormatFromString(s) + str.substring(i + (flag ? 1 : 0));
|
||||
return s + "\n" + this.wrapFormattedStringToWidth(s1, wrapWidth, ++depthCheck);
|
||||
}
|
||||
}
|
||||
|
||||
/**+
|
||||
* Determines how many characters from the string will fit into
|
||||
* the specified width.
|
||||
*/
|
||||
private int sizeStringToWidth(String str, int wrapWidth) {
|
||||
int i = str.length();
|
||||
int j = 0;
|
||||
int k = 0;
|
||||
int l = -1;
|
||||
|
||||
for (boolean flag = false; k < i; ++k) {
|
||||
char c0 = str.charAt(k);
|
||||
switch (c0) {
|
||||
case '\n':
|
||||
--k;
|
||||
break;
|
||||
case ' ':
|
||||
l = k;
|
||||
default:
|
||||
j += this.getCharWidth(c0);
|
||||
if (flag) {
|
||||
++j;
|
||||
}
|
||||
break;
|
||||
case '\u00a7':
|
||||
if (k < i - 1) {
|
||||
++k;
|
||||
char c1 = str.charAt(k);
|
||||
if (c1 != 108 && c1 != 76) {
|
||||
if (c1 == 114 || c1 == 82 || isFormatColor(c1)) {
|
||||
flag = false;
|
||||
}
|
||||
} else {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (c0 == 10) {
|
||||
++k;
|
||||
l = k;
|
||||
break;
|
||||
}
|
||||
|
||||
if (j > wrapWidth) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return k != i && l != -1 && l < k ? l : k;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Checks if the char code is a hexadecimal character, used to
|
||||
* set colour.
|
||||
*/
|
||||
private static boolean isFormatColor(char colorChar) {
|
||||
return colorChar >= 48 && colorChar <= 57 || colorChar >= 97 && colorChar <= 102
|
||||
|| colorChar >= 65 && colorChar <= 70;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Checks if the char code is O-K...lLrRk-o... used to set
|
||||
* special formatting.
|
||||
*/
|
||||
private static boolean isFormatSpecial(char formatChar) {
|
||||
return formatChar >= 107 && formatChar <= 111 || formatChar >= 75 && formatChar <= 79 || formatChar == 114
|
||||
|| formatChar == 82;
|
||||
}
|
||||
|
||||
/**+
|
||||
* Digests a string for nonprinting formatting characters then
|
||||
* returns a string containing only that formatting.
|
||||
*/
|
||||
public static String getFormatFromString(String text) {
|
||||
String s = "";
|
||||
int i = -1;
|
||||
int j = text.length();
|
||||
|
||||
while ((i = text.indexOf(167, i + 1)) != -1) {
|
||||
if (i < j - 1) {
|
||||
char c0 = text.charAt(i + 1);
|
||||
if (isFormatColor(c0)) {
|
||||
s = "\u00a7" + c0;
|
||||
} else if (isFormatSpecial(c0)) {
|
||||
s = s + "\u00a7" + c0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
public int getColorCode(char character) {
|
||||
return this.colorCode["0123456789abcdef".indexOf(character)];
|
||||
}
|
||||
}
|
@ -21,7 +21,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class LogManager {
|
||||
|
||||
private static final Map<String, Logger> loggerInstances = new HashMap();
|
||||
private static final Map<String, Logger> loggerInstances = new HashMap<String, Logger>();
|
||||
|
||||
public static final Object logLock = new Object();
|
||||
public static Level logLevel = Level.DEBUG;
|
||||
|
Loading…
x
Reference in New Issue
Block a user