Fix a ton of shit and compile to JS

This commit is contained in:
Catfoolyou 2025-05-11 15:15:58 -04:00
parent 77ca5d219d
commit aa216321aa
28 changed files with 19721 additions and 1002 deletions

2
CompileEPK.sh Normal file → Executable file
View File

@ -1,2 +1,2 @@
#!/bin/sh
java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk"
java -jar "lwjgl-rundir/CompileEPK.jar" "lwjgl-rundir/resources" "javascript/assets.epk"

View File

@ -1,6 +1,3 @@
#!/bin/sh
chmod +x gradlew
./gradlew generateJavascript
cd sp-server
chmod +x gradlew
./gradlew generateJavascript

2
MakeOfflineDownload.sh Normal file → Executable file
View File

@ -1,2 +1,2 @@
#!/bin/sh
java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/Eaglercraft_Infdev_en_US.html"
java -cp "lwjgl-rundir/MakeOfflineDownload.jar:lwjgl-rundir/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/Eaglercraft_Alpha_1.1.2_01.html"

View File

@ -11,7 +11,7 @@ sourceSets {
srcDirs(
"src/main/java",
"src/game/java",
"src/lwjgl/java"
"src/teavm/java"
)
}
}
@ -27,7 +27,7 @@ tasks.withType(JavaCompile) {
}
dependencies {
implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
//implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
teavm(teavm.libs.jso)
teavm(teavm.libs.jsoApis)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="und" style="width:100%;height:100%;background-color:black;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="description" content="Eaglercraft Alpha 1.1.2_01 Offline Download">
<meta name="keywords" content="eaglercraft, minecraft, catfoolyou, alpha, mark101, voidexp, alpha 1.1.2_01">
<title>Eaglercraft Alpha 1.1.2_01</title>
<meta property="og:locale" content="en-US">
<meta property="og:type" content="website">
<meta property="og:title" content="Eaglercraft Alpha 1.1.2_01 Offline">
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass">
<script type="text/javascript">
"use strict";
var relayId = Math.floor(Math.random() * 3);
// %%%%%%%%% launch options %%%%%%%%%%%%
window.eaglercraftXOpts = {
container: "game_frame",
worldsDB: "worlds"
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</script>
<script type="text/javascript">
"use strict";
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
${classes_js}
</script>
<script type="text/javascript">
"use strict";
(function(){
window.eaglercraftXOpts.assetsURI = ${assets_epk};
var launchInterval = -1;
var launchCounter = 1;
var launchCountdownNumberElement = null;
var launchCountdownProgressElement = null;
var launchSkipCountdown = false;
var launchTick = function() {
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
if(++launchCounter > 100 || launchSkipCountdown) {
clearInterval(launchInterval);
setTimeout(function() {
document.body.removeChild(document.getElementById("launch_countdown_screen"));
document.body.style.backgroundColor = "black";
main();
}, 50);
}
};
window.addEventListener("load", function() {
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
launchInterval = setInterval(launchTick, 50);
document.getElementById("skipCountdown").addEventListener("click", function() {
launchSkipCountdown = true;
});
document.getElementById("skipCountdown").focus();
/*
document.getElementById("bootMenu").addEventListener("click", function() {
launchSkipCountdown = true;
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
});
*/
});
})();
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==">
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:#121212;" id="game_frame">
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
<div style="margin:auto;text-align:center;color:#FFFFFF;">
<h1>This file is from <span style="color:#FF5555;">${date}</span></h1>
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
<div style="border:2px solid #FFFFFF;width:100%;height:15px;padding:1px;margin-bottom:20vh;">
<div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
</div>
<button id="skipCountdown" autofocus style="padding:10px 20px;font-size:1rem;color:#FFFFFF;background-color:#333333;border:none;cursor:pointer;border-radius:5px;">Skip</button>
</div>
</div>
</body>
</html>

BIN
javascript/assets.epk Normal file

Binary file not shown.

9590
javascript/classes.js Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

36
javascript/index.html Normal file
View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="und" style="width:100%;height:100%;background-color:black;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="description" content="Eaglercraft Alpha 1.1.2_01">
<meta name="keywords" content="eaglercraft, eaglercraftx, catfoolyou, socket, alphaver, mark101, voidexp, minecraft, Alpha, Alpha 1.1.2, Alpha 1.1.2_01">
<title>Eaglercraft Alpha 1.1.2_01</title>
<meta property="og:locale" content="en-US">
<meta property="og:type" content="website">
<meta property="og:title" content="Eaglercraft Alpha 1.1.2_01">
<meta property="og:description" content="test directory HTML page">
<link type="image/png" rel="shortcut icon" href="favicon.png">
<script type="text/javascript" src="classes.js"></script>
<script type="text/javascript">
"use strict";
window.addEventListener("load", function() {
if(window.location.href.indexOf("file:") === 0) {
alert("HTTP please, do not open this file locally, run a local HTTP server and load it via HTTP");
}else {
var relayId = Math.floor(Math.random() * 3);
window.eaglercraftXOpts = {
container: "game_frame",
assetsURI: "assets.epk",
worldsDB: "worlds",
logInvalidCerts: true,
crashOnUncaughtExceptions: true
};
main();
}
});
</script>
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:black;" id="game_frame">
</body>
</html>

Binary file not shown.

View File

@ -5,6 +5,7 @@ import net.lax1dude.eaglercraft.EagUtils;
import net.lax1dude.eaglercraft.internal.EnumPlatformType;
import net.lax1dude.eaglercraft.internal.vfs2.VFile2;
import net.lax1dude.eaglercraft.opengl.EaglercraftGPU;
import net.lax1dude.eaglercraft.profile.EaglerProfile;
import net.minecraft.src.AxisAlignedBB;
import net.minecraft.src.Block;
@ -55,13 +56,10 @@ import net.minecraft.src.Vec3D;
import net.minecraft.src.World;
import net.minecraft.src.WorldRenderer;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.GL11;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
import java.io.IOException;
public class Minecraft {
public PlayerController playerController;
@ -158,7 +156,7 @@ public class Minecraft {
}
}
public void startGame() throws LWJGLException, IOException {
public void startGame() {
Display.setTitle("Minecraft Alpha v1.1.2_01");
try {
@ -207,7 +205,7 @@ public class Minecraft {
//Add a profile GUI ASAP
EaglerProfile.setName("Socket");
if(this.serverName != null) {
this.displayGuiScreen(new GuiConnecting(this, this.serverName, this.serverPort));
this.displayGuiScreen(new GuiConnecting(this, this.serverName));
} else {
this.displayGuiScreen(new GuiMainMenu());
}
@ -221,7 +219,7 @@ public class Minecraft {
this.scaledResolution = new ScaledResolution(this.displayWidth / 2, this.displayHeight / 2);
}
private void loadScreen() throws LWJGLException {
private void loadScreen() {
Display.update();
updateDisplayMode();
final ScaledResolution var1 = this.scaledResolution;
@ -465,11 +463,11 @@ public class Minecraft {
private void checkGLError(String var1) {
int var2 = GL11.glGetError();
if(var2 != 0) {
String var3 = GLU.gluErrorString(var2);
String var3 = EaglercraftGPU.gluErrorString(var2);
System.out.println("########## GL ERROR ##########");
System.out.println("@ " + var1);
System.out.println(var2 + ": " + var3);
System.exit(0);
//System.exit(0);
}
}
@ -540,9 +538,9 @@ public class Minecraft {
}
}
if(this.theWorld != null && this.theWorld.multiplayerWorld) {
this.theWorld.updatingLighting();
}
// if(this.theWorld != null && this.theWorld.multiplayerWorld) {
// this.theWorld.updatingLighting();
// }
if(!Keyboard.isKeyDown(Keyboard.KEY_F7)) {
this.updateDisplay();

View File

@ -167,6 +167,8 @@ public class FontRenderer {
* Render a single character with the default.png font at
* current (posX,posY) location...
*/
private VertexFormat format = VertexFormat.createVertexFormat(true, false, false);
private float renderDefaultChar(int parInt1) {
int i = parInt1 % 16 * 8;
int j = parInt1 / 16 * 8;
@ -177,19 +179,15 @@ public class FontRenderer {
Tessellator tessellator = Tessellator.getInstance();
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
worldrenderer.begin(Tessellator.GL_TRIANGLE_STRIP, new VertexFormat(true, false, false, false));
worldrenderer.begin(Tessellator.GL_TRIANGLE_STRIP, format);
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, 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 - (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, 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();
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();

View File

@ -1,21 +1,71 @@
package net.minecraft.src;
import net.lax1dude.eaglercraft.EagRuntime;
import net.lax1dude.eaglercraft.internal.EnumEaglerConnectionState;
import net.lax1dude.eaglercraft.internal.IWebSocketClient;
import net.lax1dude.eaglercraft.internal.PlatformNetworking;
import net.minecraft.client.Minecraft;
public class GuiConnecting extends GuiScreen {
private boolean connected = false;
private NetClientHandler clientHandler;
private int timer = 0;
private String currentAddress;
private boolean cancelled = false;
private boolean successful = false;
private IWebSocketClient webSocket;
public GuiConnecting(Minecraft var1, String var2, int var3) {
public GuiConnecting(Minecraft var1, String addr) {
this.currentAddress = addr;
var1.changeWorld1(null);
//(new ThreadConnectToServer(this, var1, var2, var3)).start();
if (currentAddress.contains("ws://") && EagRuntime.requireSSL()) {
currentAddress = currentAddress.replace("ws://", "wss://");
} else if (!currentAddress.contains("://")) {
currentAddress = EagRuntime.requireSSL() ? "wss://" + currentAddress : "ws://" + currentAddress;
}
this.clientHandler = new NetClientHandler(var1);
}
public void updateScreen() {
if(this.clientHandler != null) {
this.clientHandler.processReadPackets();
++timer;
if(timer > 1) {
if(this.webSocket == null) {
this.webSocket = PlatformNetworking.openWebSocket(this.currentAddress);
if(this.webSocket == null) {
this.mc.displayGuiScreen(new GuiConnectFailed("Failed to connect to the server", "Could not open websocket to\"" + this.currentAddress + "\"!"));
}
} else {
if(this.webSocket.getState() == EnumEaglerConnectionState.CONNECTED) {
if(!this.successful) {
this.clientHandler.netManager.setWebsocketClient(this.webSocket);
this.clientHandler.addToSendQueue(new Packet2Handshake(this.mc.session.username));
this.successful = true;
this.connected = true;
} else {
this.clientHandler.processReadPackets();
}
} else if(this.webSocket.getState() == EnumEaglerConnectionState.FAILED) {
if(this.webSocket != null) {
this.webSocket.close();
this.webSocket = null;
}
if (this.currentAddress.contains("ws://") && !EagRuntime.requireSSL()) {
currentAddress = currentAddress.replace("ws://", "wss://");
timer = 0;
} else {
this.mc.displayGuiScreen(new GuiConnectFailed("Failed to connect to the server", "Connection Refused!"));
}
}
}
if(timer > 200 && !this.connected) {
if(this.webSocket != null) {
this.webSocket.close();
this.webSocket = null;
}
this.mc.displayGuiScreen(new GuiConnectFailed("Failed to connect to the server", "Connection timed out"));
}
}
}
protected void keyTyped(char var1, int var2) {
@ -62,4 +112,4 @@ public class GuiConnecting extends GuiScreen {
static NetClientHandler getNetClientHandler(GuiConnecting var0) {
return var0.clientHandler;
}
}
}

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.lax1dude.eaglercraft.EagRuntime;
import net.minecraft.client.Minecraft;
import net.peyton.java.awt.Color;
import org.lwjgl.input.Keyboard;
@ -145,9 +146,9 @@ public class GuiIngame extends Gui {
var8.drawStringWithShadow(this.mc.debugInfoRenders(), 2, 12, 16777215);
var8.drawStringWithShadow(this.mc.getEntityDebug(), 2, 22, 16777215);
var8.drawStringWithShadow(this.mc.debugInfoEntities(), 2, 32, 16777215);
long var22 = Runtime.getRuntime().maxMemory();
long var27 = Runtime.getRuntime().totalMemory();
long var28 = Runtime.getRuntime().freeMemory();
long var22 = EagRuntime.maxMemory();
long var27 = EagRuntime.totalMemory();
long var28 = EagRuntime.freeMemory();
long var19 = var27 - var28;
var21 = "Used memory: " + var19 * 100L / var22 + "% (" + var19 / 1024L / 1024L + "MB) of " + var22 / 1024L / 1024L + "MB";
this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 2, 14737632);

View File

@ -1,5 +1,7 @@
package net.minecraft.src;
import net.lax1dude.eaglercraft.profile.EaglerProfile;
public class GuiMultiplayer extends GuiScreen {
private GuiScreen parentScreen;
private int updateCounter = 0;
@ -25,8 +27,10 @@ public class GuiMultiplayer extends GuiScreen {
if(var1.id == 1) {
this.mc.displayGuiScreen(this.parentScreen);
} else if(var1.id == 0) {
String[] var2 = this.ipText.split(":");
this.mc.displayGuiScreen(new GuiConnecting(this.mc, var2[0], var2.length > 1 ? Integer.parseInt(var2[1]) : 25565));
this.mc.options.saveOptions();
EaglerProfile.save();
System.out.println(this.ipText);
this.mc.displayGuiScreen(new GuiConnecting(this.mc, this.ipText));
}
}

View File

@ -78,7 +78,7 @@ public class ModelSpider extends ModelBase {
this.spiderLeg6.rotateAngleZ = var7 * 0.74F;
this.spiderLeg7.rotateAngleZ = -var7;
this.spiderLeg8.rotateAngleZ = var7;
float var8 = -0.0F;
float var8 = 0.0F;
float var9 = (float)Math.PI * 0.125F;
this.spiderLeg1.rotateAngleY = var9 * 2.0F + var8;
this.spiderLeg2.rotateAngleY = -var9 * 2.0F - var8;

View File

@ -1,31 +1,25 @@
package net.minecraft.src;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.util.Random;
import net.lax1dude.eaglercraft.Random;
import net.minecraft.client.Minecraft;
public class NetClientHandler extends NetHandler {
private boolean disconnected = false;
private NetworkManager netManager;
NetworkManager netManager;
public String loginProgress;
private Minecraft mc;
private WorldClient worldClient;
private boolean posUpdated = false;
Random rand = new Random();
public NetClientHandler(Minecraft var1, String var2, int var3) throws IOException {
public NetClientHandler(Minecraft var1) {
this.mc = var1;
Socket var4 = new Socket(InetAddress.getByName(var2), var3);
this.netManager = new NetworkManager(var4, "Client", this);
this.netManager = new NetworkManager(this);
}
public void processReadPackets() {
if(!this.disconnected) {
this.netManager.readPacket();
this.netManager.processReadPackets();
}
}
@ -36,6 +30,7 @@ public class NetClientHandler extends NetHandler {
this.worldClient.multiplayerWorld = true;
this.mc.changeWorld1(this.worldClient);
this.mc.displayGuiScreen(new GuiDownloadTerrain(this));
//this.mc.thePlayer.entityID = var1.protocolVersion;
}
public void handlePickupSpawn(Packet21PickupSpawn var1) {
@ -68,7 +63,7 @@ public class NetClientHandler extends NetHandler {
if(var1.type == 12) {
var8 = new EntityMinecart(this.worldClient, var2, var4, var6, 2);
}
if(var1.type == 1) {
var8 = new EntityBoat(this.worldClient, var2, var4, var6);
}
@ -85,6 +80,13 @@ public class NetClientHandler extends NetHandler {
}
// public void func_6498_a(Packet28 var1) {
// Entity var2 = this.worldClient.getEntityByID(var1.field_6367_a);
// if(var2 != null) {
// var2.setVelocity((double)var1.field_6366_b / 8000.0D, (double)var1.field_6369_c / 8000.0D, (double)var1.field_6368_d / 8000.0D);
// }
// }
public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) {
double var2 = (double)var1.xPosition / 32.0D;
double var4 = (double)var1.yPosition / 32.0D;
@ -113,7 +115,7 @@ public class NetClientHandler extends NetHandler {
var2.serverPosY = var1.yPosition;
var2.serverPosZ = var1.zPosition;
double var3 = (double)var2.serverPosX / 32.0D;
double var5 = (double)var2.serverPosY / 32.0D;
double var5 = (double)var2.serverPosY / 32.0D + 1.0D / 64.0D;
double var7 = (double)var2.serverPosZ / 32.0D;
float var9 = (float)(var1.yaw * 360) / 256.0F;
float var10 = (float)(var1.pitch * 360) / 256.0F;
@ -128,7 +130,7 @@ public class NetClientHandler extends NetHandler {
var2.serverPosY += var1.yPosition;
var2.serverPosZ += var1.zPosition;
double var3 = (double)var2.serverPosX / 32.0D;
double var5 = (double)var2.serverPosY / 32.0D;
double var5 = (double)var2.serverPosY / 32.0D + 1.0D / 64.0D;
double var7 = (double)var2.serverPosZ / 32.0D;
float var9 = var1.rotating ? (float)(var1.yaw * 360) / 256.0F : var2.rotationYaw;
float var10 = var1.rotating ? (float)(var1.pitch * 360) / 256.0F : var2.rotationPitch;
@ -171,7 +173,7 @@ public class NetClientHandler extends NetHandler {
this.mc.thePlayer.prevPosY = this.mc.thePlayer.posY;
this.mc.thePlayer.prevPosZ = this.mc.thePlayer.posZ;
this.posUpdated = true;
this.mc.displayGuiScreen((GuiScreen)null);
this.mc.displayGuiScreen(null);
}
}
@ -211,7 +213,7 @@ public class NetClientHandler extends NetHandler {
public void handleKickDisconnect(Packet255KickDisconnect var1) {
this.netManager.networkShutdown("Got kicked");
this.disconnected = true;
this.mc.changeWorld1((World)null);
this.mc.changeWorld1(null);
this.mc.displayGuiScreen(new GuiConnectFailed("Disconnected by server", var1.reason));
}
@ -244,20 +246,6 @@ public class NetClientHandler extends NetHandler {
}
public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) {
Entity var2 = this.worldClient.getEntityByID(var1.entityId);
if(var2 != null) {
EntityPlayer var3 = (EntityPlayer)var2;
int var4 = var1.id;
if(var4 == 0) {
var3.inventory.mainInventory[var3.inventory.currentItem] = null;
} else {
var3.inventory.mainInventory[var3.inventory.currentItem] = new ItemStack(var4);
}
}
}
public void handleChat(Packet3Chat var1) {
this.mc.ingameGUI.addChatMessage(var1.message);
}
@ -275,7 +263,7 @@ public class NetClientHandler extends NetHandler {
}
public void handleHandshake(Packet2Handshake var1) {
this.addToSendQueue(new Packet1Login(this.mc.session.username, "Password", 8));
this.addToSendQueue(new Packet1Login(this.mc.session.username, "Password", 2));
}
public void disconnect() {
@ -293,6 +281,7 @@ public class NetClientHandler extends NetHandler {
var10.serverPosX = var1.xPosition;
var10.serverPosY = var1.yPosition;
var10.serverPosZ = var1.zPosition;
//var10.entityID = var1.entityId;
var10.setPositionAndRotation(var2, var4, var6, var8, var9);
var10.isAIEnabled = true;
this.worldClient.addEntityToWorld(var1.entityId, var10);
@ -302,34 +291,135 @@ public class NetClientHandler extends NetHandler {
this.mc.theWorld.setWorldTime(var1.time);
}
public void handlePlayerInventory(Packet5PlayerInventory var1) {
EntityPlayerSP var2 = this.mc.thePlayer;
if(var1.inventoryType == -1) {
var2.inventory.mainInventory = var1.inventory;
}
if(var1.inventoryType == -2) {
var2.inventory.craftingInventory = var1.inventory;
}
if(var1.inventoryType == -3) {
var2.inventory.armorInventory = var1.inventory;
}
}
public void handleComplexEntity(Packet59ComplexEntity var1) {
TileEntity var2 = this.worldClient.getBlockTileEntity(var1.xCoord, var1.yCoord, var1.zCoord);
if(var2 != null) {
var2.readFromNBT(var1.tileEntityNBT);
this.worldClient.markBlocksDirty(var1.xCoord, var1.yCoord, var1.zCoord, var1.xCoord, var1.yCoord, var1.zCoord);
}
}
public void handleSpawnPosition(Packet6SpawnPosition var1) {
this.worldClient.spawnX = var1.xPosition;
this.worldClient.spawnY = var1.yPosition;
this.worldClient.spawnZ = var1.zPosition;
}
}
// public void func_6497_a(Packet39 var1) {
// Object var2 = this.worldClient.getEntityByID(var1.field_6365_a);
// Entity var3 = this.worldClient.getEntityByID(var1.field_6364_b);
// if(var1.field_6365_a == this.mc.thePlayer.entityID) {
// var2 = this.mc.thePlayer;
// }
//
// if(var2 != null) {
// ((Entity)var2).mountEntity(var3);
// }
// }
//
// public void func_9447_a(Packet38 var1) {
// Entity var2 = this.worldClient.getEntityByID(var1.field_9274_a);
// if(var2 != null) {
// var2.func_9282_a(var1.field_9273_b);
// }
//
// }
// public void handleHealth(Packet8 var1) {
// this.mc.thePlayer.setHealth(var1.healthMP);
// }
//
// public void func_9448_a(Packet9 var1) {
// this.mc.respawn();
// }
//
// public void func_12245_a(Packet60 var1) {
// Explosion var2 = new Explosion(this.mc.theWorld, (Entity)null, var1.field_12236_a, var1.field_12235_b, var1.field_12239_c, var1.field_12238_d);
// var2.field_12251_g = var1.field_12237_e;
// var2.func_12247_b();
// }
//
// public void func_20087_a(Packet100 var1) {
// if(var1.field_20037_b == 0) {
// InventoryBasic var2 = new InventoryBasic(var1.field_20040_c, var1.field_20039_d);
// this.mc.thePlayer.displayGUIChest(var2);
// this.mc.thePlayer.field_20068_h.unusedList = var1.field_20038_a;
// } else if(var1.field_20037_b == 2) {
// TileEntityFurnace var3 = new TileEntityFurnace();
// this.mc.thePlayer.displayGUIFurnace(var3);
// this.mc.thePlayer.field_20068_h.unusedList = var1.field_20038_a;
// } else if(var1.field_20037_b == 1) {
// EntityPlayerSP var4 = this.mc.thePlayer;
// this.mc.thePlayer.displayWorkbenchGUI(MathHelper.floor_double(var4.posX), MathHelper.floor_double(var4.posY), MathHelper.floor_double(var4.posZ));
// this.mc.thePlayer.field_20068_h.unusedList = var1.field_20038_a;
// }
//
// }
//
// public void func_20088_a(Packet103 var1) {
// if(var1.field_20042_a == -1) {
// this.mc.thePlayer.inventory.func_20076_b(var1.field_20043_c);
// } else if(var1.field_20042_a == 0) {
// this.mc.thePlayer.field_20069_g.func_20119_a(var1.field_20041_b, var1.field_20043_c);
// } else if(var1.field_20042_a == this.mc.thePlayer.field_20068_h.unusedList) {
// this.mc.thePlayer.field_20068_h.func_20119_a(var1.field_20041_b, var1.field_20043_c);
// }
//
// }
//
// public void func_20089_a(Packet106 var1) {
// CraftingInventoryCB var2 = null;
// if(var1.field_20029_a == 0) {
// var2 = this.mc.thePlayer.field_20069_g;
// } else if(var1.field_20029_a == this.mc.thePlayer.field_20068_h.unusedList) {
// var2 = this.mc.thePlayer.field_20068_h;
// }
//
// if(var2 != null) {
// if(var1.field_20030_c) {
// var2.func_20113_a(var1.field_20028_b);
// } else {
// var2.func_20110_b(var1.field_20028_b);
// this.addToSendQueue(new Packet106(var1.field_20029_a, var1.field_20028_b, true));
// }
// }
//
// }
//
// public void func_20094_a(Packet104 var1) {
// if(var1.field_20036_a == 0) {
// this.mc.thePlayer.field_20069_g.func_20115_a(var1.field_20035_b);
// } else if(var1.field_20036_a == this.mc.thePlayer.field_20068_h.unusedList) {
// this.mc.thePlayer.field_20068_h.func_20115_a(var1.field_20035_b);
// }
//
// }
//
// public void func_20093_a(Packet130 var1) {
// if(this.mc.theWorld.blockExists(var1.field_20020_a, var1.field_20019_b, var1.field_20022_c)) {
// TileEntity var2 = this.mc.theWorld.getBlockTileEntity(var1.field_20020_a, var1.field_20019_b, var1.field_20022_c);
// if(var2 instanceof TileEntitySign) {
// TileEntitySign var3 = (TileEntitySign)var2;
//
// for(int var4 = 0; var4 < 4; ++var4) {
// var3.signText[var4] = var1.field_20021_d[var4];
// }
//
// var3.onInventoryChanged();
// }
// }
//
// }
//
// public void func_20090_a(Packet105 var1) {
// this.func_4114_b(var1);
// if(this.mc.thePlayer.field_20068_h != null && this.mc.thePlayer.field_20068_h.unusedList == var1.field_20032_a) {
// this.mc.thePlayer.field_20068_h.func_20112_a(var1.field_20031_b, var1.field_20033_c);
// }
//
// }
//
// public void handlePlayerInventory(Packet5PlayerInventory var1) {
// Entity var2 = this.worldClient.getEntityByID(var1.type);
// if(var2 != null) {
// var2.func_20045_c(var1.stacks, var1.field_20044_c);
// }
//
// }
//
// public void func_20092_a(Packet101 var1) {
// this.mc.thePlayer.func_20059_m();
// }
}

View File

@ -1,157 +1,95 @@
package net.minecraft.src;
import net.lax1dude.eaglercraft.EagUtils;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Collections;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
import net.lax1dude.eaglercraft.EaglerOutputStream;
import net.lax1dude.eaglercraft.internal.IWebSocketClient;
import net.lax1dude.eaglercraft.internal.IWebSocketFrame;
public class NetworkManager {
public static final Object threadSyncObject = new Object();
public static int numReadThreads;
public static int numWriteThreads;
private Object sendQueueLock = new Object();
private Socket networkSocket;
private DataInputStream socketInputStream;
private DataOutputStream socketOutputStream;
private boolean isRunning = true;
private List readPackets = Collections.synchronizedList(new LinkedList());
private List dataPackets = Collections.synchronizedList(new LinkedList());
private List chunkDataPackets = Collections.synchronizedList(new LinkedList());
private NetHandler netHandler;
private List<Packet> readPackets = new ArrayList<Packet>();
private boolean isServerTerminating = false;
private Thread writeThread;
private Thread readThread;
private boolean isTerminating = false;
private String terminationReason = "";
private int timeSinceLastRead = 0;
private int sendQueueByteLength = 0;
private int chunkDataSendCounter = 0;
public int chunkDataSendCounter = 0;
public NetworkManager(Socket var1, String var2, NetHandler var3) throws IOException {
this.networkSocket = var1;
public IWebSocketClient webSocket;
public NetworkManager(NetHandler var3) {
this.netHandler = var3;
var1.setTrafficClass(24);
this.socketInputStream = new DataInputStream(var1.getInputStream());
this.socketOutputStream = new DataOutputStream(var1.getOutputStream());
this.readThread = new NetworkReaderThread(this, var2 + " read thread");
this.writeThread = new NetworkWriterThread(this, var2 + " write thread");
this.readThread.start();
this.writeThread.start();
}
public void setWebsocketClient(IWebSocketClient client) {
this.webSocket = client;
}
private EaglerOutputStream sendBuffer = new EaglerOutputStream();
public void addToSendQueue(Packet var1) {
if(!this.isServerTerminating) {
Object var2 = this.sendQueueLock;
synchronized(var2) {
this.sendQueueByteLength += var1.getPacketSize() + 1;
if(var1.isChunkDataPacket) {
this.chunkDataPackets.add(var1);
} else {
this.dataPackets.add(var1);
}
sendBuffer.reset();
try (DataOutputStream dos = new DataOutputStream(sendBuffer)) {
Packet.writePacket(var1, dos);
webSocket.send(sendBuffer.toByteArray());
} catch(Exception e) {
this.onNetworkError(e);
}
}
}
private void sendPacket() {
try {
boolean var1 = true;
Packet var2;
Object var3;
if(!this.dataPackets.isEmpty()) {
var1 = false;
var3 = this.sendQueueLock;
synchronized(var3) {
var2 = (Packet)this.dataPackets.remove(0);
this.sendQueueByteLength -= var2.getPacketSize() + 1;
}
Packet.writePacket(var2, this.socketOutputStream);
}
if((var1 || this.chunkDataSendCounter-- <= 0) && !this.chunkDataPackets.isEmpty()) {
var1 = false;
var3 = this.sendQueueLock;
synchronized(var3) {
var2 = (Packet)this.chunkDataPackets.remove(0);
this.sendQueueByteLength -= var2.getPacketSize() + 1;
}
Packet.writePacket(var2, this.socketOutputStream);
this.chunkDataSendCounter = 50;
}
if(var1) {
EagUtils.sleep(10L);
}
} catch (Exception var9) {
if(!this.isTerminating) {
this.onNetworkError(var9);
}
}
}
private void readPacket() {
try {
Packet var1 = Packet.readPacket(this.socketInputStream);
if(var1 != null) {
this.readPackets.add(var1);
} else {
this.networkShutdown("End of stream");
}
} catch (Exception var2) {
if(!this.isTerminating) {
this.onNetworkError(var2);
}
}
}
private void onNetworkError(Exception var1) {
var1.printStackTrace();
this.networkShutdown("Internal exception: " + var1.toString());
this.networkShutdown("\"Internal exception: \" + var1.toString()");
}
public void networkShutdown(String var1) {
public void networkShutdown(String var1, Object... var2) {
if(this.isRunning) {
this.isTerminating = true;
this.terminationReason = var1;
(new NetworkMasterThread(this)).start();
this.isRunning = false;
webSocket.close();
webSocket = null;
}
}
try {
this.socketInputStream.close();
} catch (Throwable var5) {
public void readPacket() {
IWebSocketFrame frame;
while((frame = webSocket.getNextBinaryFrame()) != null) {
byte[] arr = frame.getByteArray();
if(arr != null) {
try(ByteArrayInputStream bais = new ByteArrayInputStream(arr); DataInputStream packetStream = new DataInputStream(bais)) {
Packet pkt = Packet.readPacket(packetStream);
if(pkt != null) {
this.readPackets.add(pkt);
} else {
this.networkShutdown("disconnect.endOfStream", new Object[0]);
}
} catch(IOException e) {
if(!this.isTerminating) {
this.onNetworkError(e);
}
}
}
try {
this.socketOutputStream.close();
} catch (Throwable var4) {
}
try {
this.networkSocket.close();
} catch (Throwable var3) {
}
}
}
public void processReadPackets() {
if(this.sendQueueByteLength > 1048576) {
this.networkShutdown("Send buffer overflow");
this.networkShutdown("disconnect.overflow", new Object[0]);
}
if(this.readPackets.isEmpty()) {
if(this.timeSinceLastRead++ == 1200) {
this.networkShutdown("Timed out");
this.networkShutdown("disconnect.timeout", new Object[0]);
}
} else {
this.timeSinceLastRead = 0;
@ -167,7 +105,6 @@ public class NetworkManager {
if(this.isTerminating && this.readPackets.isEmpty()) {
this.netHandler.handleErrorMessage(this.terminationReason);
}
}
static boolean isRunning(NetworkManager var0) {
@ -177,20 +114,4 @@ public class NetworkManager {
static boolean isServerTerminating(NetworkManager var0) {
return var0.isServerTerminating;
}
static void readNetworkPacket(NetworkManager var0) {
var0.readPacket();
}
static void sendNetworkPacket(NetworkManager var0) {
var0.sendPacket();
}
static Thread getReadThread(NetworkManager var0) {
return var0.readThread;
}
static Thread getWriteThread(NetworkManager var0) {
return var0.writeThread;
}
}
}

View File

@ -1,31 +0,0 @@
package net.minecraft.src;
class NetworkMasterThread extends Thread {
final NetworkManager netManager;
NetworkMasterThread(NetworkManager var1) {
this.netManager = var1;
}
public void run() {
try {
Thread.sleep(5000L);
if(NetworkManager.getReadThread(this.netManager).isAlive()) {
try {
NetworkManager.getReadThread(this.netManager).stop();
} catch (Throwable var3) {
}
}
if(NetworkManager.getWriteThread(this.netManager).isAlive()) {
try {
NetworkManager.getWriteThread(this.netManager).stop();
} catch (Throwable var2) {
}
}
} catch (InterruptedException var4) {
var4.printStackTrace();
}
}
}

View File

@ -1,49 +0,0 @@
package net.minecraft.src;
class NetworkReaderThread extends Thread {
final NetworkManager netManager;
NetworkReaderThread(NetworkManager var1, String var2) {
super(var2);
this.netManager = var1;
}
public void run() {
Object var1 = NetworkManager.threadSyncObject;
synchronized(var1) {
++NetworkManager.numReadThreads;
}
while(true) {
boolean var11 = false;
try {
var11 = true;
if(NetworkManager.isRunning(this.netManager)) {
if(!NetworkManager.isServerTerminating(this.netManager)) {
NetworkManager.readNetworkPacket(this.netManager);
continue;
}
var11 = false;
break;
}
var11 = false;
break;
} finally {
if(var11) {
Object var5 = NetworkManager.threadSyncObject;
synchronized(var5) {
--NetworkManager.numReadThreads;
}
}
}
}
var1 = NetworkManager.threadSyncObject;
synchronized(var1) {
--NetworkManager.numReadThreads;
}
}
}

View File

@ -1,43 +0,0 @@
package net.minecraft.src;
class NetworkWriterThread extends Thread {
final NetworkManager netManager;
NetworkWriterThread(NetworkManager var1, String var2) {
super(var2);
this.netManager = var1;
}
public void run() {
Object var1 = NetworkManager.threadSyncObject;
synchronized(var1) {
++NetworkManager.numWriteThreads;
}
while(true) {
boolean var11 = false;
try {
var11 = true;
if(!NetworkManager.isRunning(this.netManager)) {
var11 = false;
break;
}
NetworkManager.sendNetworkPacket(this.netManager);
} finally {
if(var11) {
Object var5 = NetworkManager.threadSyncObject;
synchronized(var5) {
--NetworkManager.numWriteThreads;
}
}
}
}
var1 = NetworkManager.threadSyncObject;
synchronized(var1) {
--NetworkManager.numWriteThreads;
}
}
}

View File

@ -27,17 +27,17 @@ public class Vec3D {
}
private Vec3D(double var1, double var3, double var5) {
if(var1 == -0.0D) {
var1 = 0.0D;
}
if(var3 == -0.0D) {
var3 = 0.0D;
}
if(var5 == -0.0D) {
var5 = 0.0D;
}
// if(var1 == 0.0D) {
// var1 = 0.0D;
// }
//
// if(var3 == 0.0D) {
// var3 = 0.0D;
// }
//
// if(var5 == 0.0D) {
// var5 = 0.0D;
// }
this.xCoord = var1;
this.yCoord = var3;

View File

@ -1,6 +1,7 @@
package net.minecraft.src;
import java.io.File;
import net.lax1dude.eaglercraft.internal.vfs2.VFile2;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
@ -23,7 +24,6 @@ public class WorldClient extends World {
}
public void tick() {
System.out.println("worldclient tick");
++this.worldTime;
int var1 = this.calculateSkylightSubtracted(1.0F);
int var2;
@ -63,7 +63,7 @@ public class WorldClient extends World {
}
protected IChunkProvider getChunkProvider(File var1) {
protected IChunkProvider getChunkProvider(VFile2 var1) {
this.clientChunkProvider = new ChunkProviderClient(this);
return this.clientChunkProvider;
}

View File

@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.opengl.VertexFormat;
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
import net.minecraft.src.GameSettings;
import net.minecraft.src.RenderEngine;
import net.peyton.eagler.minecraft.FontRenderer;
import net.minecraft.src.FontRenderer;
/**
* Copyright (c) 2022 lax1dude. All Rights Reserved.

View File

@ -85,6 +85,8 @@ public class VertexFormat {
public final int eaglercraftAttribBits;
static final VertexFormat[] stateCache = new VertexFormat[32];
public VertexFormat(boolean texture, boolean color, boolean normal, boolean lightmap) {
int index = 0;
@ -178,7 +180,28 @@ public class VertexFormat {
attribNormalStride = normal ? bytes : -1;
attribLightmapStride = lightmap ? bytes : -1;
eaglercraftAttribBits = bitfield;
stateCache[bitfield] = this;
}
private static int bitfield;
public static VertexFormat createVertexFormat(boolean texture, boolean color, boolean normal) {
bitfield = 0;
if(color) {
bitfield |= EaglercraftGPU.ATTRIB_COLOR;
}
if(texture) {
bitfield |= EaglercraftGPU.ATTRIB_TEXTURE;
}
if(normal) {
bitfield |= EaglercraftGPU.ATTRIB_NORMAL;
}
VertexFormat format = stateCache[bitfield];
if(format != null) {
return format;
}
return new VertexFormat(texture, color, normal, false);
}
}

View File

@ -1,628 +0,0 @@
package net.peyton.eagler.minecraft;
import java.util.Arrays;
import java.util.List;
import org.lwjgl.opengl.GL11;
import net.lax1dude.eaglercraft.EagRuntime;
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;
import net.minecraft.src.GameSettings;
import net.minecraft.src.RenderEngine;
/**+
* 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 RenderEngine 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, RenderEngine textureManagerIn) {
this.locationFontTexture = s;
this.renderEngine = textureManagerIn;
GL11.glBindTexture(RealOpenGLEnums.GL_TEXTURE_2D, this.renderEngine.getTexture(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 = ImageData.loadImageFile(EagRuntime.getResourceStream(this.locationFontTexture));
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.getTexture(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, new VertexFormat(true, false, false, false));
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)];
}
public void func_27278_a(String var1, int var2, int var3, int var4, int var5) {
String[] var6 = var1.split("\n");
if(var6.length > 1) {
for(int var11 = 0; var11 < var6.length; ++var11) {
this.func_27278_a(var6[var11], var2, var3, var4, var5);
var3 += this.func_27277_a(var6[var11], var4);
}
} else {
String[] var7 = var1.split(" ");
int var8 = 0;
while(var8 < var7.length) {
String var9;
for(var9 = var7[var8++] + " "; var8 < var7.length && this.getStringWidth(var9 + var7[var8]) < var4; var9 = var9 + var7[var8++] + " ") {
}
int var10;
for(; this.getStringWidth(var9) > var4; var9 = var9.substring(var10)) {
for(var10 = 0; this.getStringWidth(var9.substring(0, var10 + 1)) <= var4; ++var10) {
}
if(var9.substring(0, var10).trim().length() > 0) {
this.drawString(var9.substring(0, var10), var2, var3, var5);
var3 += 8;
}
}
if(var9.trim().length() > 0) {
this.drawString(var9, var2, var3, var5);
var3 += 8;
}
}
}
}
public int func_27277_a(String var1, int var2) {
String[] var3 = var1.split("\n");
int var5;
if(var3.length > 1) {
int var9 = 0;
for(var5 = 0; var5 < var3.length; ++var5) {
var9 += this.func_27277_a(var3[var5], var2);
}
return var9;
} else {
String[] var4 = var1.split(" ");
var5 = 0;
int var6 = 0;
while(var5 < var4.length) {
String var7;
for(var7 = var4[var5++] + " "; var5 < var4.length && this.getStringWidth(var7 + var4[var5]) < var2; var7 = var7 + var4[var5++] + " ") {
}
int var8;
for(; this.getStringWidth(var7) > var2; var7 = var7.substring(var8)) {
for(var8 = 0; this.getStringWidth(var7.substring(0, var8 + 1)) <= var2; ++var8) {
}
if(var7.substring(0, var8).trim().length() > 0) {
var6 += 8;
}
}
if(var7.trim().length() > 0) {
var6 += 8;
}
}
if(var6 < 8) {
var6 += 8;
}
return var6;
}
}
}

View File

@ -15,17 +15,17 @@ public class Vec3D_112 {
public final double zCoord;
public Vec3D_112(double x, double y, double z) {
if (x == -0.0D) {
x = 0.0D;
}
if (y == -0.0D) {
y = 0.0D;
}
if (z == -0.0D) {
z = 0.0D;
}
// if (x == -0.0D) {
// x = 0.0D;
// }
//
// if (y == -0.0D) {
// y = 0.0D;
// }
//
// if (z == -0.0D) {
// z = 0.0D;
// }
this.xCoord = x;
this.yCoord = y;