mirror of
https://github.com/catfoolyou/Alpha-1.1.2_01.git
synced 2025-06-02 04:40: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
|
#!/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
|
#!/bin/sh
|
||||||
chmod +x gradlew
|
chmod +x gradlew
|
||||||
./gradlew generateJavascript
|
./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
|
#!/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(
|
srcDirs(
|
||||||
"src/main/java",
|
"src/main/java",
|
||||||
"src/game/java",
|
"src/game/java",
|
||||||
"src/lwjgl/java"
|
"src/teavm/java"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -27,7 +27,7 @@ tasks.withType(JavaCompile) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
|
//implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
|
||||||
|
|
||||||
teavm(teavm.libs.jso)
|
teavm(teavm.libs.jso)
|
||||||
teavm(teavm.libs.jsoApis)
|
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.EnumPlatformType;
|
||||||
import net.lax1dude.eaglercraft.internal.vfs2.VFile2;
|
import net.lax1dude.eaglercraft.internal.vfs2.VFile2;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.opengl.EaglercraftGPU;
|
||||||
import net.lax1dude.eaglercraft.profile.EaglerProfile;
|
import net.lax1dude.eaglercraft.profile.EaglerProfile;
|
||||||
import net.minecraft.src.AxisAlignedBB;
|
import net.minecraft.src.AxisAlignedBB;
|
||||||
import net.minecraft.src.Block;
|
import net.minecraft.src.Block;
|
||||||
@ -55,13 +56,10 @@ import net.minecraft.src.Vec3D;
|
|||||||
import net.minecraft.src.World;
|
import net.minecraft.src.World;
|
||||||
import net.minecraft.src.WorldRenderer;
|
import net.minecraft.src.WorldRenderer;
|
||||||
import org.lwjgl.LWJGLException;
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
import org.lwjgl.opengl.Display;
|
import org.lwjgl.opengl.Display;
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
import org.lwjgl.util.glu.GLU;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class Minecraft {
|
public class Minecraft {
|
||||||
public PlayerController playerController;
|
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");
|
Display.setTitle("Minecraft Alpha v1.1.2_01");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -207,7 +205,7 @@ public class Minecraft {
|
|||||||
//Add a profile GUI ASAP
|
//Add a profile GUI ASAP
|
||||||
EaglerProfile.setName("Socket");
|
EaglerProfile.setName("Socket");
|
||||||
if(this.serverName != null) {
|
if(this.serverName != null) {
|
||||||
this.displayGuiScreen(new GuiConnecting(this, this.serverName, this.serverPort));
|
this.displayGuiScreen(new GuiConnecting(this, this.serverName));
|
||||||
} else {
|
} else {
|
||||||
this.displayGuiScreen(new GuiMainMenu());
|
this.displayGuiScreen(new GuiMainMenu());
|
||||||
}
|
}
|
||||||
@ -221,7 +219,7 @@ public class Minecraft {
|
|||||||
this.scaledResolution = new ScaledResolution(this.displayWidth / 2, this.displayHeight / 2);
|
this.scaledResolution = new ScaledResolution(this.displayWidth / 2, this.displayHeight / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadScreen() throws LWJGLException {
|
private void loadScreen() {
|
||||||
Display.update();
|
Display.update();
|
||||||
updateDisplayMode();
|
updateDisplayMode();
|
||||||
final ScaledResolution var1 = this.scaledResolution;
|
final ScaledResolution var1 = this.scaledResolution;
|
||||||
@ -465,11 +463,11 @@ public class Minecraft {
|
|||||||
private void checkGLError(String var1) {
|
private void checkGLError(String var1) {
|
||||||
int var2 = GL11.glGetError();
|
int var2 = GL11.glGetError();
|
||||||
if(var2 != 0) {
|
if(var2 != 0) {
|
||||||
String var3 = GLU.gluErrorString(var2);
|
String var3 = EaglercraftGPU.gluErrorString(var2);
|
||||||
System.out.println("########## GL ERROR ##########");
|
System.out.println("########## GL ERROR ##########");
|
||||||
System.out.println("@ " + var1);
|
System.out.println("@ " + var1);
|
||||||
System.out.println(var2 + ": " + var3);
|
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) {
|
// if(this.theWorld != null && this.theWorld.multiplayerWorld) {
|
||||||
this.theWorld.updatingLighting();
|
// this.theWorld.updatingLighting();
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(!Keyboard.isKeyDown(Keyboard.KEY_F7)) {
|
if(!Keyboard.isKeyDown(Keyboard.KEY_F7)) {
|
||||||
this.updateDisplay();
|
this.updateDisplay();
|
||||||
|
@ -167,6 +167,8 @@ public class FontRenderer {
|
|||||||
* Render a single character with the default.png font at
|
* Render a single character with the default.png font at
|
||||||
* current (posX,posY) location...
|
* current (posX,posY) location...
|
||||||
*/
|
*/
|
||||||
|
private VertexFormat format = VertexFormat.createVertexFormat(true, false, false);
|
||||||
|
|
||||||
private float renderDefaultChar(int parInt1) {
|
private float renderDefaultChar(int parInt1) {
|
||||||
int i = parInt1 % 16 * 8;
|
int i = parInt1 % 16 * 8;
|
||||||
int j = parInt1 / 16 * 8;
|
int j = parInt1 / 16 * 8;
|
||||||
@ -177,19 +179,15 @@ public class FontRenderer {
|
|||||||
Tessellator tessellator = Tessellator.getInstance();
|
Tessellator tessellator = Tessellator.getInstance();
|
||||||
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
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)
|
worldrenderer.pos(this.posX + (float) k, this.posY, 0.0F).tex((float) i / 128.0F, (float) j / 128.0F).endVertex();
|
||||||
.endVertex();
|
|
||||||
|
|
||||||
worldrenderer.pos(this.posX - (float) k, this.posY + 7.99F, 0.0F)
|
worldrenderer.pos(this.posX - (float) k, this.posY + 7.99F, 0.0F).tex((float) i / 128.0F, ((float) j + 7.99F) / 128.0F).endVertex();
|
||||||
.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)
|
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();
|
||||||
.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)
|
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();
|
||||||
.tex(((float) i + f - 1.0F) / 128.0F, ((float) j + 7.99F) / 128.0F).endVertex();
|
|
||||||
|
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
|
|
||||||
|
@ -1,21 +1,71 @@
|
|||||||
package net.minecraft.src;
|
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;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
||||||
public class GuiConnecting extends GuiScreen {
|
public class GuiConnecting extends GuiScreen {
|
||||||
|
private boolean connected = false;
|
||||||
private NetClientHandler clientHandler;
|
private NetClientHandler clientHandler;
|
||||||
|
private int timer = 0;
|
||||||
|
private String currentAddress;
|
||||||
private boolean cancelled = false;
|
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);
|
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() {
|
public void updateScreen() {
|
||||||
if(this.clientHandler != null) {
|
++timer;
|
||||||
this.clientHandler.processReadPackets();
|
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) {
|
protected void keyTyped(char var1, int var2) {
|
||||||
@ -62,4 +112,4 @@ public class GuiConnecting extends GuiScreen {
|
|||||||
static NetClientHandler getNetClientHandler(GuiConnecting var0) {
|
static NetClientHandler getNetClientHandler(GuiConnecting var0) {
|
||||||
return var0.clientHandler;
|
return var0.clientHandler;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.EagRuntime;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.peyton.java.awt.Color;
|
import net.peyton.java.awt.Color;
|
||||||
import org.lwjgl.input.Keyboard;
|
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.debugInfoRenders(), 2, 12, 16777215);
|
||||||
var8.drawStringWithShadow(this.mc.getEntityDebug(), 2, 22, 16777215);
|
var8.drawStringWithShadow(this.mc.getEntityDebug(), 2, 22, 16777215);
|
||||||
var8.drawStringWithShadow(this.mc.debugInfoEntities(), 2, 32, 16777215);
|
var8.drawStringWithShadow(this.mc.debugInfoEntities(), 2, 32, 16777215);
|
||||||
long var22 = Runtime.getRuntime().maxMemory();
|
long var22 = EagRuntime.maxMemory();
|
||||||
long var27 = Runtime.getRuntime().totalMemory();
|
long var27 = EagRuntime.totalMemory();
|
||||||
long var28 = Runtime.getRuntime().freeMemory();
|
long var28 = EagRuntime.freeMemory();
|
||||||
long var19 = var27 - var28;
|
long var19 = var27 - var28;
|
||||||
var21 = "Used memory: " + var19 * 100L / var22 + "% (" + var19 / 1024L / 1024L + "MB) of " + var22 / 1024L / 1024L + "MB";
|
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);
|
this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 2, 14737632);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package net.minecraft.src;
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import net.lax1dude.eaglercraft.profile.EaglerProfile;
|
||||||
|
|
||||||
public class GuiMultiplayer extends GuiScreen {
|
public class GuiMultiplayer extends GuiScreen {
|
||||||
private GuiScreen parentScreen;
|
private GuiScreen parentScreen;
|
||||||
private int updateCounter = 0;
|
private int updateCounter = 0;
|
||||||
@ -25,8 +27,10 @@ public class GuiMultiplayer extends GuiScreen {
|
|||||||
if(var1.id == 1) {
|
if(var1.id == 1) {
|
||||||
this.mc.displayGuiScreen(this.parentScreen);
|
this.mc.displayGuiScreen(this.parentScreen);
|
||||||
} else if(var1.id == 0) {
|
} else if(var1.id == 0) {
|
||||||
String[] var2 = this.ipText.split(":");
|
this.mc.options.saveOptions();
|
||||||
this.mc.displayGuiScreen(new GuiConnecting(this.mc, var2[0], var2.length > 1 ? Integer.parseInt(var2[1]) : 25565));
|
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.spiderLeg6.rotateAngleZ = var7 * 0.74F;
|
||||||
this.spiderLeg7.rotateAngleZ = -var7;
|
this.spiderLeg7.rotateAngleZ = -var7;
|
||||||
this.spiderLeg8.rotateAngleZ = var7;
|
this.spiderLeg8.rotateAngleZ = var7;
|
||||||
float var8 = -0.0F;
|
float var8 = 0.0F;
|
||||||
float var9 = (float)Math.PI * 0.125F;
|
float var9 = (float)Math.PI * 0.125F;
|
||||||
this.spiderLeg1.rotateAngleY = var9 * 2.0F + var8;
|
this.spiderLeg1.rotateAngleY = var9 * 2.0F + var8;
|
||||||
this.spiderLeg2.rotateAngleY = -var9 * 2.0F - var8;
|
this.spiderLeg2.rotateAngleY = -var9 * 2.0F - var8;
|
||||||
|
@ -1,31 +1,25 @@
|
|||||||
package net.minecraft.src;
|
package net.minecraft.src;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import net.lax1dude.eaglercraft.Random;
|
||||||
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.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
||||||
public class NetClientHandler extends NetHandler {
|
public class NetClientHandler extends NetHandler {
|
||||||
private boolean disconnected = false;
|
private boolean disconnected = false;
|
||||||
private NetworkManager netManager;
|
NetworkManager netManager;
|
||||||
public String loginProgress;
|
public String loginProgress;
|
||||||
private Minecraft mc;
|
private Minecraft mc;
|
||||||
private WorldClient worldClient;
|
private WorldClient worldClient;
|
||||||
private boolean posUpdated = false;
|
private boolean posUpdated = false;
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
|
|
||||||
public NetClientHandler(Minecraft var1, String var2, int var3) throws IOException {
|
public NetClientHandler(Minecraft var1) {
|
||||||
this.mc = var1;
|
this.mc = var1;
|
||||||
Socket var4 = new Socket(InetAddress.getByName(var2), var3);
|
this.netManager = new NetworkManager(this);
|
||||||
this.netManager = new NetworkManager(var4, "Client", this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processReadPackets() {
|
public void processReadPackets() {
|
||||||
if(!this.disconnected) {
|
if(!this.disconnected) {
|
||||||
|
this.netManager.readPacket();
|
||||||
this.netManager.processReadPackets();
|
this.netManager.processReadPackets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -36,6 +30,7 @@ public class NetClientHandler extends NetHandler {
|
|||||||
this.worldClient.multiplayerWorld = true;
|
this.worldClient.multiplayerWorld = true;
|
||||||
this.mc.changeWorld1(this.worldClient);
|
this.mc.changeWorld1(this.worldClient);
|
||||||
this.mc.displayGuiScreen(new GuiDownloadTerrain(this));
|
this.mc.displayGuiScreen(new GuiDownloadTerrain(this));
|
||||||
|
//this.mc.thePlayer.entityID = var1.protocolVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handlePickupSpawn(Packet21PickupSpawn var1) {
|
public void handlePickupSpawn(Packet21PickupSpawn var1) {
|
||||||
@ -68,7 +63,7 @@ public class NetClientHandler extends NetHandler {
|
|||||||
if(var1.type == 12) {
|
if(var1.type == 12) {
|
||||||
var8 = new EntityMinecart(this.worldClient, var2, var4, var6, 2);
|
var8 = new EntityMinecart(this.worldClient, var2, var4, var6, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(var1.type == 1) {
|
if(var1.type == 1) {
|
||||||
var8 = new EntityBoat(this.worldClient, var2, var4, var6);
|
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) {
|
public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) {
|
||||||
double var2 = (double)var1.xPosition / 32.0D;
|
double var2 = (double)var1.xPosition / 32.0D;
|
||||||
double var4 = (double)var1.yPosition / 32.0D;
|
double var4 = (double)var1.yPosition / 32.0D;
|
||||||
@ -113,7 +115,7 @@ public class NetClientHandler extends NetHandler {
|
|||||||
var2.serverPosY = var1.yPosition;
|
var2.serverPosY = var1.yPosition;
|
||||||
var2.serverPosZ = var1.zPosition;
|
var2.serverPosZ = var1.zPosition;
|
||||||
double var3 = (double)var2.serverPosX / 32.0D;
|
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;
|
double var7 = (double)var2.serverPosZ / 32.0D;
|
||||||
float var9 = (float)(var1.yaw * 360) / 256.0F;
|
float var9 = (float)(var1.yaw * 360) / 256.0F;
|
||||||
float var10 = (float)(var1.pitch * 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.serverPosY += var1.yPosition;
|
||||||
var2.serverPosZ += var1.zPosition;
|
var2.serverPosZ += var1.zPosition;
|
||||||
double var3 = (double)var2.serverPosX / 32.0D;
|
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;
|
double var7 = (double)var2.serverPosZ / 32.0D;
|
||||||
float var9 = var1.rotating ? (float)(var1.yaw * 360) / 256.0F : var2.rotationYaw;
|
float var9 = var1.rotating ? (float)(var1.yaw * 360) / 256.0F : var2.rotationYaw;
|
||||||
float var10 = var1.rotating ? (float)(var1.pitch * 360) / 256.0F : var2.rotationPitch;
|
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.prevPosY = this.mc.thePlayer.posY;
|
||||||
this.mc.thePlayer.prevPosZ = this.mc.thePlayer.posZ;
|
this.mc.thePlayer.prevPosZ = this.mc.thePlayer.posZ;
|
||||||
this.posUpdated = true;
|
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) {
|
public void handleKickDisconnect(Packet255KickDisconnect var1) {
|
||||||
this.netManager.networkShutdown("Got kicked");
|
this.netManager.networkShutdown("Got kicked");
|
||||||
this.disconnected = true;
|
this.disconnected = true;
|
||||||
this.mc.changeWorld1((World)null);
|
this.mc.changeWorld1(null);
|
||||||
this.mc.displayGuiScreen(new GuiConnectFailed("Disconnected by server", var1.reason));
|
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) {
|
public void handleChat(Packet3Chat var1) {
|
||||||
this.mc.ingameGUI.addChatMessage(var1.message);
|
this.mc.ingameGUI.addChatMessage(var1.message);
|
||||||
}
|
}
|
||||||
@ -275,7 +263,7 @@ public class NetClientHandler extends NetHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void handleHandshake(Packet2Handshake var1) {
|
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() {
|
public void disconnect() {
|
||||||
@ -293,6 +281,7 @@ public class NetClientHandler extends NetHandler {
|
|||||||
var10.serverPosX = var1.xPosition;
|
var10.serverPosX = var1.xPosition;
|
||||||
var10.serverPosY = var1.yPosition;
|
var10.serverPosY = var1.yPosition;
|
||||||
var10.serverPosZ = var1.zPosition;
|
var10.serverPosZ = var1.zPosition;
|
||||||
|
//var10.entityID = var1.entityId;
|
||||||
var10.setPositionAndRotation(var2, var4, var6, var8, var9);
|
var10.setPositionAndRotation(var2, var4, var6, var8, var9);
|
||||||
var10.isAIEnabled = true;
|
var10.isAIEnabled = true;
|
||||||
this.worldClient.addEntityToWorld(var1.entityId, var10);
|
this.worldClient.addEntityToWorld(var1.entityId, var10);
|
||||||
@ -302,34 +291,135 @@ public class NetClientHandler extends NetHandler {
|
|||||||
this.mc.theWorld.setWorldTime(var1.time);
|
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) {
|
public void handleSpawnPosition(Packet6SpawnPosition var1) {
|
||||||
this.worldClient.spawnX = var1.xPosition;
|
this.worldClient.spawnX = var1.xPosition;
|
||||||
this.worldClient.spawnY = var1.yPosition;
|
this.worldClient.spawnY = var1.yPosition;
|
||||||
this.worldClient.spawnZ = var1.zPosition;
|
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;
|
package net.minecraft.src;
|
||||||
|
|
||||||
import net.lax1dude.eaglercraft.EagUtils;
|
import java.io.ByteArrayInputStream;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.Socket;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
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 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 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 NetHandler netHandler;
|
||||||
|
private List<Packet> readPackets = new ArrayList<Packet>();
|
||||||
private boolean isServerTerminating = false;
|
private boolean isServerTerminating = false;
|
||||||
private Thread writeThread;
|
|
||||||
private Thread readThread;
|
|
||||||
private boolean isTerminating = false;
|
private boolean isTerminating = false;
|
||||||
private String terminationReason = "";
|
private String terminationReason = "";
|
||||||
private int timeSinceLastRead = 0;
|
private int timeSinceLastRead = 0;
|
||||||
private int sendQueueByteLength = 0;
|
private int sendQueueByteLength = 0;
|
||||||
private int chunkDataSendCounter = 0;
|
public int chunkDataSendCounter = 0;
|
||||||
|
|
||||||
public NetworkManager(Socket var1, String var2, NetHandler var3) throws IOException {
|
public IWebSocketClient webSocket;
|
||||||
this.networkSocket = var1;
|
|
||||||
|
public NetworkManager(NetHandler var3) {
|
||||||
this.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) {
|
public void addToSendQueue(Packet var1) {
|
||||||
if(!this.isServerTerminating) {
|
if(!this.isServerTerminating) {
|
||||||
Object var2 = this.sendQueueLock;
|
sendBuffer.reset();
|
||||||
synchronized(var2) {
|
try (DataOutputStream dos = new DataOutputStream(sendBuffer)) {
|
||||||
this.sendQueueByteLength += var1.getPacketSize() + 1;
|
Packet.writePacket(var1, dos);
|
||||||
if(var1.isChunkDataPacket) {
|
webSocket.send(sendBuffer.toByteArray());
|
||||||
this.chunkDataPackets.add(var1);
|
} catch(Exception e) {
|
||||||
} else {
|
this.onNetworkError(e);
|
||||||
this.dataPackets.add(var1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
private void onNetworkError(Exception var1) {
|
||||||
var1.printStackTrace();
|
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) {
|
if(this.isRunning) {
|
||||||
this.isTerminating = true;
|
this.isTerminating = true;
|
||||||
this.terminationReason = var1;
|
this.terminationReason = var1;
|
||||||
(new NetworkMasterThread(this)).start();
|
|
||||||
this.isRunning = false;
|
this.isRunning = false;
|
||||||
|
webSocket.close();
|
||||||
|
webSocket = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
public void readPacket() {
|
||||||
this.socketInputStream.close();
|
IWebSocketFrame frame;
|
||||||
} catch (Throwable var5) {
|
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() {
|
public void processReadPackets() {
|
||||||
if(this.sendQueueByteLength > 1048576) {
|
if(this.sendQueueByteLength > 1048576) {
|
||||||
this.networkShutdown("Send buffer overflow");
|
this.networkShutdown("disconnect.overflow", new Object[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.readPackets.isEmpty()) {
|
if(this.readPackets.isEmpty()) {
|
||||||
if(this.timeSinceLastRead++ == 1200) {
|
if(this.timeSinceLastRead++ == 1200) {
|
||||||
this.networkShutdown("Timed out");
|
this.networkShutdown("disconnect.timeout", new Object[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.timeSinceLastRead = 0;
|
this.timeSinceLastRead = 0;
|
||||||
@ -167,7 +105,6 @@ public class NetworkManager {
|
|||||||
if(this.isTerminating && this.readPackets.isEmpty()) {
|
if(this.isTerminating && this.readPackets.isEmpty()) {
|
||||||
this.netHandler.handleErrorMessage(this.terminationReason);
|
this.netHandler.handleErrorMessage(this.terminationReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isRunning(NetworkManager var0) {
|
static boolean isRunning(NetworkManager var0) {
|
||||||
@ -177,20 +114,4 @@ public class NetworkManager {
|
|||||||
static boolean isServerTerminating(NetworkManager var0) {
|
static boolean isServerTerminating(NetworkManager var0) {
|
||||||
return var0.isServerTerminating;
|
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) {
|
private Vec3D(double var1, double var3, double var5) {
|
||||||
if(var1 == -0.0D) {
|
// if(var1 == 0.0D) {
|
||||||
var1 = 0.0D;
|
// var1 = 0.0D;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if(var3 == -0.0D) {
|
// if(var3 == 0.0D) {
|
||||||
var3 = 0.0D;
|
// var3 = 0.0D;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if(var5 == -0.0D) {
|
// if(var5 == 0.0D) {
|
||||||
var5 = 0.0D;
|
// var5 = 0.0D;
|
||||||
}
|
// }
|
||||||
|
|
||||||
this.xCoord = var1;
|
this.xCoord = var1;
|
||||||
this.yCoord = var3;
|
this.yCoord = var3;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.minecraft.src;
|
package net.minecraft.src;
|
||||||
|
|
||||||
import java.io.File;
|
import net.lax1dude.eaglercraft.internal.vfs2.VFile2;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -23,7 +24,6 @@ public class WorldClient extends World {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void tick() {
|
public void tick() {
|
||||||
System.out.println("worldclient tick");
|
|
||||||
++this.worldTime;
|
++this.worldTime;
|
||||||
int var1 = this.calculateSkylightSubtracted(1.0F);
|
int var1 = this.calculateSkylightSubtracted(1.0F);
|
||||||
int var2;
|
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);
|
this.clientChunkProvider = new ChunkProviderClient(this);
|
||||||
return this.clientChunkProvider;
|
return this.clientChunkProvider;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import net.lax1dude.eaglercraft.opengl.VertexFormat;
|
|||||||
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
import net.lax1dude.eaglercraft.opengl.WorldRenderer;
|
||||||
import net.minecraft.src.GameSettings;
|
import net.minecraft.src.GameSettings;
|
||||||
import net.minecraft.src.RenderEngine;
|
import net.minecraft.src.RenderEngine;
|
||||||
import net.peyton.eagler.minecraft.FontRenderer;
|
import net.minecraft.src.FontRenderer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copyright (c) 2022 lax1dude. All Rights Reserved.
|
* Copyright (c) 2022 lax1dude. All Rights Reserved.
|
||||||
|
@ -85,6 +85,8 @@ public class VertexFormat {
|
|||||||
|
|
||||||
public final int eaglercraftAttribBits;
|
public final int eaglercraftAttribBits;
|
||||||
|
|
||||||
|
static final VertexFormat[] stateCache = new VertexFormat[32];
|
||||||
|
|
||||||
public VertexFormat(boolean texture, boolean color, boolean normal, boolean lightmap) {
|
public VertexFormat(boolean texture, boolean color, boolean normal, boolean lightmap) {
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@ -178,7 +180,28 @@ public class VertexFormat {
|
|||||||
attribNormalStride = normal ? bytes : -1;
|
attribNormalStride = normal ? bytes : -1;
|
||||||
attribLightmapStride = lightmap ? bytes : -1;
|
attribLightmapStride = lightmap ? bytes : -1;
|
||||||
eaglercraftAttribBits = bitfield;
|
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 final double zCoord;
|
||||||
|
|
||||||
public Vec3D_112(double x, double y, double z) {
|
public Vec3D_112(double x, double y, double z) {
|
||||||
if (x == -0.0D) {
|
// if (x == -0.0D) {
|
||||||
x = 0.0D;
|
// x = 0.0D;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (y == -0.0D) {
|
// if (y == -0.0D) {
|
||||||
y = 0.0D;
|
// y = 0.0D;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (z == -0.0D) {
|
// if (z == -0.0D) {
|
||||||
z = 0.0D;
|
// z = 0.0D;
|
||||||
}
|
// }
|
||||||
|
|
||||||
this.xCoord = x;
|
this.xCoord = x;
|
||||||
this.yCoord = y;
|
this.yCoord = y;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user