mirror of
https://github.com/catfoolyou/Alpha-1.1.2_01.git
synced 2025-05-31 11:50:57 -05:00
Fix a ton of shit and compile to JS
This commit is contained in:
parent
77ca5d219d
commit
aa216321aa
2
CompileEPK.sh
Normal file → Executable file
2
CompileEPK.sh
Normal file → Executable 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"
|
||||
|
@ -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
2
MakeOfflineDownload.sh
Normal file → Executable 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"
|
||||
|
@ -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)
|
||||
|
9675
javascript/Eaglercraft_Alpha_1.1.2_01.html
Normal file
9675
javascript/Eaglercraft_Alpha_1.1.2_01.html
Normal file
File diff suppressed because one or more lines are too long
86
javascript/OfflineDownloadTemplate.txt
Normal file
86
javascript/OfflineDownloadTemplate.txt
Normal 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
BIN
javascript/assets.epk
Normal file
Binary file not shown.
9590
javascript/classes.js
Normal file
9590
javascript/classes.js
Normal file
File diff suppressed because it is too large
Load Diff
1
javascript/classes.js.map
Normal file
1
javascript/classes.js.map
Normal file
File diff suppressed because one or more lines are too long
36
javascript/index.html
Normal file
36
javascript/index.html
Normal 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.
@ -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();
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
// }
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user