Backport instanced font renderer and cleanup code

This commit is contained in:
PeytonPlayz595 2025-03-12 18:32:24 -07:00
parent e281237d15
commit 55d416a2f7
57 changed files with 824 additions and 711 deletions

View File

@ -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();

View File

@ -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();
}
}

View File

@ -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';
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}
}

View File

@ -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) {

View File

@ -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();

View File

@ -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("!!");
}
}

View File

@ -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);
}

View 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) {

View File

@ -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);
}

View File

@ -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,"

View File

@ -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);
}

View File

@ -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.

View File

@ -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());
}

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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();
}
}

View File

@ -1,7 +1,5 @@
package net.lax1dude.eaglercraft;
import java.math.BigInteger;
public class EaglercraftVersion {
//////////////////////////////////////////////////////////////////////

View File

@ -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);

View File

@ -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();
}
}
}

View File

@ -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;

View File

@ -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,

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -18,6 +18,8 @@ package net.lax1dude.eaglercraft.internal.vfs2;
*/
public class EaglerFileSystemException extends RuntimeException {
private static final long serialVersionUID = 1L;
public EaglerFileSystemException() {
}

View File

@ -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");
}

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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) {

View File

@ -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);
}

View File

@ -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.
*/

View File

@ -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.
*/

View File

@ -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_));
}

View 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)];
}
}

View File

@ -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;