Minecraft is now (mostly) compatible with the OpenGL Emulator

Rewrote a bunch of Minecraft's code to work with the OpenGL Emulator
This commit is contained in:
PeytonPlayz595 2023-07-10 18:52:04 -04:00
parent 2346b97c03
commit ecf58c6fe3
18 changed files with 274 additions and 1000 deletions

View File

@ -1,23 +1,12 @@
package com.mojang.minecraft;
import com.mojang.minecraft.render.TextureManager;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.imageio.ImageIO;
import org.lwjgl.input.Keyboard;
import com.mojang.minecraft.gamemode.*;
import com.mojang.minecraft.player.Inventory;
public final class GameSettings
{
public GameSettings(Minecraft minecraft, File minecraftFolder)
public GameSettings(Minecraft minecraft)
{
bindings = new KeyBinding[] {forwardKey, leftKey, backKey, rightKey, jumpKey, buildKey, chatKey, toggleFogKey, saveLocationKey, loadLocationKey};
@ -25,7 +14,7 @@ public final class GameSettings
this.minecraft = minecraft;
settingsFile = new File(minecraftFolder, "options.txt");
// settingsFile = new File(minecraftFolder, "options.txt");
load();
}
@ -56,7 +45,7 @@ public final class GameSettings
public KeyBinding loadLocationKey = new KeyBinding("Load location", 19);
public KeyBinding[] bindings;
private Minecraft minecraft;
private File settingsFile;
// private File settingsFile;
public int settingCount;
public String getBinding(int key)
@ -167,121 +156,121 @@ public final class GameSettings
private void load()
{
try
{
if(settingsFile.exists())
{
FileReader fileReader = new FileReader(settingsFile);
BufferedReader reader = new BufferedReader(fileReader);
String line = null;
while((line = reader.readLine()) != null)
{
String[] setting = line.split(":");
if(setting[0].equals("music"))
{
music = setting[1].equals("true");
}
if(setting[0].equals("sound"))
{
sound = setting[1].equals("true");
}
if(setting[0].equals("invertYMouse"))
{
invertMouse = setting[1].equals("true");
}
if(setting[0].equals("showFrameRate"))
{
showFrameRate = setting[1].equals("true");
}
if(setting[0].equals("viewDistance"))
{
viewDistance = Integer.parseInt(setting[1]);
}
if(setting[0].equals("bobView"))
{
viewBobbing = setting[1].equals("true");
}
if(setting[0].equals("anaglyph3d"))
{
anaglyph = setting[1].equals("true");
}
if(setting[0].equals("limitFramerate"))
{
limitFramerate = setting[1].equals("true");
}
if(setting[0].equals("ofBetterGrass"))
{
ofBetterGrass = setting[1].equals("true");
}
if(setting[0].equals("ofFastMath"))
{
ofFastMath = setting[1].equals("true");
}
if(setting[0].equals("ofSmoothFPS"))
{
ofSmoothFPS = setting[1].equals("true");
}
for(int index = 0; index < this.bindings.length; index++)
{
if(setting[0].equals("key_" + bindings[index].name))
{
bindings[index].key = Integer.parseInt(setting[1]);
}
}
}
reader.close();
}
} catch (Exception e) {
System.out.println("Failed to load options");
e.printStackTrace();
}
// try
// {
// if(settingsFile.exists())
// {
// FileReader fileReader = new FileReader(settingsFile);
// BufferedReader reader = new BufferedReader(fileReader);
//
// String line = null;
//
// while((line = reader.readLine()) != null)
// {
// String[] setting = line.split(":");
//
// if(setting[0].equals("music"))
// {
// music = setting[1].equals("true");
// }
//
// if(setting[0].equals("sound"))
// {
// sound = setting[1].equals("true");
// }
//
// if(setting[0].equals("invertYMouse"))
// {
// invertMouse = setting[1].equals("true");
// }
//
// if(setting[0].equals("showFrameRate"))
// {
// showFrameRate = setting[1].equals("true");
// }
//
// if(setting[0].equals("viewDistance"))
// {
// viewDistance = Integer.parseInt(setting[1]);
// }
//
// if(setting[0].equals("bobView"))
// {
// viewBobbing = setting[1].equals("true");
// }
//
// if(setting[0].equals("anaglyph3d"))
// {
// anaglyph = setting[1].equals("true");
// }
//
// if(setting[0].equals("limitFramerate"))
// {
// limitFramerate = setting[1].equals("true");
// }
//
// if(setting[0].equals("ofBetterGrass"))
// {
// ofBetterGrass = setting[1].equals("true");
// }
//
// if(setting[0].equals("ofFastMath"))
// {
// ofFastMath = setting[1].equals("true");
// }
//
// if(setting[0].equals("ofSmoothFPS"))
// {
// ofSmoothFPS = setting[1].equals("true");
// }
//
// for(int index = 0; index < this.bindings.length; index++)
// {
// if(setting[0].equals("key_" + bindings[index].name))
// {
// bindings[index].key = Integer.parseInt(setting[1]);
// }
// }
// }
//
// reader.close();
// }
// } catch (Exception e) {
// System.out.println("Failed to load options");
//
// e.printStackTrace();
// }
}
private void save()
{
try {
FileWriter fileWriter = new FileWriter(this.settingsFile);
PrintWriter writer = new PrintWriter(fileWriter);
writer.println("music:" + music);
writer.println("sound:" + sound);
writer.println("invertYMouse:" + invertMouse);
writer.println("showFrameRate:" + showFrameRate);
writer.println("viewDistance:" + viewDistance);
writer.println("bobView:" + viewBobbing);
writer.println("anaglyph3d:" + anaglyph);
writer.println("limitFramerate:" + limitFramerate);
writer.println("ofBetterGrass:" + ofBetterGrass);
writer.println("ofFastMath:" + ofFastMath);
writer.println("ofSmoothFPS:" + ofSmoothFPS);
for(int binding = 0; binding < bindings.length; binding++)
{
writer.println("key_" + bindings[binding].name + ":" + bindings[binding].key);
}
writer.close();
} catch (Exception e) {
System.out.println("Failed to save options");
e.printStackTrace();
}
// try {
// FileWriter fileWriter = new FileWriter(this.settingsFile);
// PrintWriter writer = new PrintWriter(fileWriter);
//
// writer.println("music:" + music);
// writer.println("sound:" + sound);
// writer.println("invertYMouse:" + invertMouse);
// writer.println("showFrameRate:" + showFrameRate);
// writer.println("viewDistance:" + viewDistance);
// writer.println("bobView:" + viewBobbing);
// writer.println("anaglyph3d:" + anaglyph);
// writer.println("limitFramerate:" + limitFramerate);
// writer.println("ofBetterGrass:" + ofBetterGrass);
// writer.println("ofFastMath:" + ofFastMath);
// writer.println("ofSmoothFPS:" + ofSmoothFPS);
//
// for(int binding = 0; binding < bindings.length; binding++)
// {
// writer.println("key_" + bindings[binding].name + ":" + bindings[binding].key);
// }
//
// writer.close();
// } catch (Exception e) {
// System.out.println("Failed to save options");
//
// e.printStackTrace();
// }
}
}

View File

@ -1,16 +0,0 @@
package com.mojang.minecraft;
public enum Minecraft$OS
{
linux("linux", 0),
solaris("solaris", 1),
windows("windows", 2),
macos("macos", 3),
unknown("unknown", 4);
private static final Minecraft$OS[] values = new Minecraft$OS[] {linux, solaris, windows, macos, unknown};
private Minecraft$OS(String name, int id)
{
}
}

View File

@ -34,22 +34,15 @@ import com.mojang.minecraft.sound.SoundManager;
import com.mojang.minecraft.sound.SoundPlayer;
import com.mojang.net.NetworkHandler;
import com.mojang.util.MathHelper;
import net.PeytonPlayz585.main.MinecraftMain;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Controllers;
import org.lwjgl.input.Cursor;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.nio.IntBuffer;
import java.util.Collections;
import java.util.List;
@ -67,10 +60,8 @@ public final class Minecraft implements Runnable {
public ParticleManager particleManager;
public SessionData session = null;
public String host;
public Canvas canvas;
public boolean levelLoaded = false;
public volatile boolean waiting = false;
private Cursor cursor;
public TextureManager textureManager;
public FontRenderer fontRenderer;
public GuiScreen currentScreen = null;
@ -83,14 +74,12 @@ public final class Minecraft implements Runnable {
private int blockHitTime;
public String levelName;
public int levelId;
public Robot robot;
public HUDScreen hud;
public boolean online;
public NetworkManager networkManager;
public SoundPlayer soundPlayer;
public MovingObjectPosition selected;
public static GameSettings settings;
private MinecraftApplet applet;
String server;
int port;
volatile boolean running;
@ -100,7 +89,7 @@ public final class Minecraft implements Runnable {
public boolean raining;
public Minecraft(Canvas var1, MinecraftApplet var2, int var3, int var4, boolean var5) {
public Minecraft(int var3, int var4, boolean var5) {
this.levelIo = new LevelIO(this.progressBar);
this.sound = new SoundManager();
this.ticks = 0;
@ -117,28 +106,10 @@ public final class Minecraft implements Runnable {
this.hasMouse = false;
this.lastClick = 0;
this.raining = false;
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception var7) {
var7.printStackTrace();
}
this.applet = var2;
new SleepForeverThread(this);
this.canvas = var1;
this.width = var3;
this.height = var4;
this.fullscreen = var5;
if(var1 != null) {
try {
this.robot = new Robot();
return;
} catch (AWTException var8) {
var8.printStackTrace();
}
}
}
public final void setCurrentScreen(GuiScreen var1) {
@ -157,11 +128,7 @@ public final class Minecraft implements Runnable {
this.player.releaseAllKeys();
this.hasMouse = false;
if(this.levelLoaded) {
try {
Mouse.setNativeCursor((Cursor)null);
} catch (LWJGLException var4) {
var4.printStackTrace();
}
Mouse.setGrabbed(false);
} else {
Mouse.setGrabbed(false);
}
@ -180,7 +147,7 @@ public final class Minecraft implements Runnable {
private static void checkGLError(String var0) {
int var1;
if((var1 = GL11.glGetError()) != 0) {
String var2 = GLU.gluErrorString(var1);
String var2 = GL11.gluErrorString(var1);
System.out.println("########## GL ERROR ##########");
System.out.println("@ " + var0);
System.out.println(var1 + ": " + var2);
@ -204,18 +171,14 @@ public final class Minecraft implements Runnable {
;
}
Minecraft var5 = this;
if(!this.levelLoaded) {
try {
LevelIO.save(var5.level, (OutputStream)(new FileOutputStream(new File("level.dat"))));
} catch (Exception var2) {
var2.printStackTrace();
}
}
Mouse.destroy();
Keyboard.destroy();
Display.destroy();
// Minecraft var5 = this;
// if(!this.levelLoaded) {
// try {
// LevelIO.save(var5.level, (OutputStream)(new FileOutputStream(new File("level.dat"))));
// } catch (Exception var2) {
// var2.printStackTrace();
// }
// }
}
public final void run() {
@ -223,45 +186,13 @@ public final class Minecraft implements Runnable {
try {
Minecraft var1 = this;
if(this.canvas != null) {
Display.setParent(this.canvas);
} else if(this.fullscreen) {
Display.setFullscreen(true);
this.width = Display.getDisplayMode().getWidth();
this.height = Display.getDisplayMode().getHeight();
} else {
Display.setDisplayMode(new DisplayMode(this.width, this.height));
}
Display.setTitle("Minecraft 0.30");
try {
Display.create();
} catch (LWJGLException var57) {
var57.printStackTrace();
try {
Thread.sleep(1000L);
} catch (InterruptedException var56) {
;
}
Display.create();
}
Keyboard.create();
Mouse.create();
try {
Controllers.create();
} catch (Exception var55) {
var55.printStackTrace();
}
this.width = MinecraftMain.canvas.getWidth();
this.height = MinecraftMain.canvas.getHeight();
checkGLError("Pre startup");
GL11.glEnable(3553);
GL11.glShadeModel(7425);
GL11.glClearDepth(1.0D);
GL11.glClearDepth((float)1.0D);
GL11.glEnable(2929);
GL11.glDepthFunc(515);
GL11.glEnable(3008);
@ -271,36 +202,7 @@ public final class Minecraft implements Runnable {
GL11.glLoadIdentity();
GL11.glMatrixMode(5888);
checkGLError("Startup");
String var3 = "minecraftclassicforever";
String var5 = System.getProperty("user.home", ".");
String var6;
File var7;
switch(OperatingSystemLookup.lookup[((var6 = System.getProperty("os.name").toLowerCase()).contains("win")?Minecraft$OS.windows:(var6.contains("mac")?Minecraft$OS.macos:(var6.contains("solaris")?Minecraft$OS.solaris:(var6.contains("sunos")?Minecraft$OS.solaris:(var6.contains("linux")?Minecraft$OS.linux:(var6.contains("unix")?Minecraft$OS.linux:Minecraft$OS.unknown)))))).ordinal()]) {
case 1:
case 2:
var7 = new File(var5, '.' + var3 + '/');
break;
case 3:
String var8;
if((var8 = System.getenv("APPDATA")) != null) {
var7 = new File(var8, "." + var3 + '/');
} else {
var7 = new File(var5, '.' + var3 + '/');
}
break;
case 4:
var7 = new File(var5, "Library/Application Support/" + var3);
break;
default:
var7 = new File(var5, var3 + '/');
}
if(!var7.exists() && !var7.mkdirs()) {
throw new RuntimeException("The working directory could not be created: " + var7);
}
File var2 = var7;
this.settings = new GameSettings(this, var7);
this.settings = new GameSettings(this);
this.textureManager = new TextureManager(this.settings);
this.textureManager.registerAnimation(new TextureLavaFX());
this.textureManager.registerAnimation(new TextureWaterFX());
@ -318,57 +220,50 @@ public final class Minecraft implements Runnable {
} else {
boolean var10 = false;
try {
if(var1.levelName != null) {
var1.loadOnlineLevel(var1.levelName, var1.levelId);
} else if(!var1.levelLoaded) {
Level var11 = null;
if((var11 = var1.levelIo.load((InputStream)(new FileInputStream(new File("level.dat"))))) != null) {
var1.setLevel(var11);
}
}
} catch (Exception var54) {
var54.printStackTrace();
}
// try {
// if(var1.levelName != null) {
// var1.loadOnlineLevel(var1.levelName, var1.levelId);
// } else if(!var1.levelLoaded) {
// Level var11 = null;
// if((var11 = var1.levelIo.load((InputStream)(new FileInputStream(new File("level.dat"))))) != null) {
// var1.setLevel(var11);
// }
// }
// } catch (Exception var54) {
// var54.printStackTrace();
// }
if(this.level == null) {
//if(this.level == null) {
this.generateLevel(1);
}
//}
}
this.particleManager = new ParticleManager(this.level, this.textureManager);
if(this.levelLoaded) {
try {
var1.cursor = new Cursor(16, 16, 0, 0, 1, var9, (IntBuffer)null);
} catch (LWJGLException var53) {
var53.printStackTrace();
}
}
try {
var1.soundPlayer = new SoundPlayer(var1.settings);
SoundPlayer var4 = var1.soundPlayer;
try {
AudioFormat var67 = new AudioFormat(44100.0F, 16, 2, true, true);
var4.dataLine = AudioSystem.getSourceDataLine(var67);
var4.dataLine.open(var67, 4410);
var4.dataLine.start();
var4.running = true;
Thread var72;
(var72 = new Thread(var4)).setDaemon(true);
var72.setPriority(10);
var72.start();
} catch (Exception var51) {
var51.printStackTrace();
var4.running = false;
}
var1.resourceThread = new ResourceDownloadThread(var2, var1);
var1.resourceThread.start();
} catch (Exception var52) {
;
}
// try {
// var1.soundPlayer = new SoundPlayer(var1.settings);
// SoundPlayer var4 = var1.soundPlayer;
//
// try {
// AudioFormat var67 = new AudioFormat(44100.0F, 16, 2, true, true);
// var4.dataLine = AudioSystem.getSourceDataLine(var67);
// var4.dataLine.open(var67, 4410);
// var4.dataLine.start();
// var4.running = true;
// Thread var72;
// (var72 = new Thread(var4)).setDaemon(true);
// var72.setPriority(10);
// var72.start();
// } catch (Exception var51) {
// var51.printStackTrace();
// var4.running = false;
// }
//
// var1.resourceThread = new ResourceDownloadThread(var2, var1);
// var1.resourceThread.start();
// } catch (Exception var52) {
// ;
// }
checkGLError("Post startup");
this.hud = new HUDScreen(this, this.width, this.height);
@ -378,8 +273,7 @@ public final class Minecraft implements Runnable {
}
} catch (Exception var62) {
var62.printStackTrace();
JOptionPane.showMessageDialog((Component)null, var62.toString(), "Failed to start Minecraft", 0);
return;
throw new RuntimeException("Failed to start Minecraft! :(");
}
long var13 = System.currentTimeMillis();
@ -390,7 +284,7 @@ public final class Minecraft implements Runnable {
if(this.waiting) {
Thread.sleep(100L);
} else {
if(this.canvas == null && Display.isCloseRequested()) {
if(Display.isCloseRequested()) {
this.running = false;
}
@ -457,17 +351,17 @@ public final class Minecraft implements Runnable {
var81 = 0;
var86 = 0;
if(var66.minecraft.levelLoaded) {
if(var66.minecraft.canvas != null) {
Point var90;
var70 = (var90 = var66.minecraft.canvas.getLocationOnScreen()).x + var66.minecraft.width / 2;
var68 = var90.y + var66.minecraft.height / 2;
Point var75;
var81 = (var75 = MouseInfo.getPointerInfo().getLocation()).x - var70;
var86 = -(var75.y - var68);
var66.minecraft.robot.mouseMove(var70, var68);
} else {
// if(var66.minecraft.canvas != null) {
// Point var90;
// var70 = (var90 = MinecraftMain.canvas.mouse).x + var66.minecraft.width / 2;
// var68 = var90.y + var66.minecraft.height / 2;
// Point var75;
// var81 = (var75 = MouseInfo.getPointerInfo().getLocation()).x - var70;
// var86 = -(var75.y - var68);
// Mouse.setCursorPosition(var70, var68);
// } else {
Mouse.setCursorPosition(var66.minecraft.width / 2, var66.minecraft.height / 2);
}
// }
} else {
var81 = Mouse.getDX();
var86 = Mouse.getDY();
@ -615,7 +509,7 @@ public final class Minecraft implements Runnable {
var69 /= (1.0F - 500.0F / (var74 + 500.0F)) * 2.0F + 1.0F;
}
GLU.gluPerspective(var69, (float)var82.minecraft.width / (float)var82.minecraft.height, 0.05F, var82.fogEnd);
GL11.gluPerspective(var69, (float)var82.minecraft.width / (float)var82.minecraft.height, 0.05F, var82.fogEnd);
GL11.glMatrixMode(5888);
GL11.glLoadIdentity();
if(var82.minecraft.settings.anaglyph) {
@ -870,33 +764,33 @@ public final class Minecraft implements Runnable {
GL11.glDisable(3553);
GL11.glDepthMask(false);
var29 = 0.002F;
if((var104 = var89.level.getTile(var102.x, var102.y, var102.z)) > 0) {
AABB var111 = Block.blocks[var104].getSelectionBox(var102.x, var102.y, var102.z).grow(var29, var29, var29);
GL11.glBegin(3);
GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
GL11.glVertex3f(var111.x1, var111.y0, var111.z0);
GL11.glVertex3f(var111.x1, var111.y0, var111.z1);
GL11.glVertex3f(var111.x0, var111.y0, var111.z1);
GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
GL11.glEnd();
GL11.glBegin(3);
GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
GL11.glVertex3f(var111.x1, var111.y1, var111.z0);
GL11.glVertex3f(var111.x1, var111.y1, var111.z1);
GL11.glVertex3f(var111.x0, var111.y1, var111.z1);
GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
GL11.glEnd();
GL11.glBegin(1);
GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
GL11.glVertex3f(var111.x1, var111.y0, var111.z0);
GL11.glVertex3f(var111.x1, var111.y1, var111.z0);
GL11.glVertex3f(var111.x1, var111.y0, var111.z1);
GL11.glVertex3f(var111.x1, var111.y1, var111.z1);
GL11.glVertex3f(var111.x0, var111.y0, var111.z1);
GL11.glVertex3f(var111.x0, var111.y1, var111.z1);
GL11.glEnd();
}
// if((var104 = var89.level.getTile(var102.x, var102.y, var102.z)) > 0) {
// AABB var111 = Block.blocks[var104].getSelectionBox(var102.x, var102.y, var102.z).grow(var29, var29, var29);
// GL11.glBegin(3);
// GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y0, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y0, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y0, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
// GL11.glEnd();
// GL11.glBegin(3);
// GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y1, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y1, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y1, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
// GL11.glEnd();
// GL11.glBegin(1);
// GL11.glVertex3f(var111.x0, var111.y0, var111.z0);
// GL11.glVertex3f(var111.x0, var111.y1, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y0, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y1, var111.z0);
// GL11.glVertex3f(var111.x1, var111.y0, var111.z1);
// GL11.glVertex3f(var111.x1, var111.y1, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y0, var111.z1);
// GL11.glVertex3f(var111.x0, var111.y1, var111.z1);
// GL11.glEnd();
// }
GL11.glDepthMask(true);
GL11.glEnable(3553);
@ -1114,26 +1008,17 @@ public final class Minecraft implements Runnable {
public final void grabMouse() {
if(!this.hasMouse) {
this.hasMouse = true;
if(this.levelLoaded) {
try {
Mouse.setNativeCursor(this.cursor);
Mouse.setCursorPosition(this.width / 2, this.height / 2);
} catch (LWJGLException var2) {
var2.printStackTrace();
}
if(this.canvas == null) {
this.canvas.requestFocus();
}
if(!Mouse.isFocused()) {
return;
} else if(Mouse.isActuallyGrabbed()) {
return;
} else {
Mouse.setGrabbed(true);
}
this.setCurrentScreen((GuiScreen)null);
this.lastClick = this.ticks + 10000;
}
}
}
public final void pause() {
if(this.currentScreen == null) {
@ -1285,7 +1170,7 @@ public final class Minecraft implements Runnable {
byte var5 = var22.in.get(0);
PacketType var6;
if((var6 = PacketType.packets[var5]) == null) {
throw new IOException("Bad command: " + var5);
throw new Exception("Bad command: " + var5);
}
if(var22.in.remaining() < var6.length + 1) {
@ -1308,28 +1193,28 @@ public final class Minecraft implements Runnable {
var42.minecraft.player.userType = ((Byte)var7[3]).byteValue();
} else if(var6 == PacketType.LEVEL_INIT) {
var42.minecraft.setLevel((Level)null);
var42.levelData = new ByteArrayOutputStream();
//var42.levelData = new ByteArrayOutputStream();
} else if(var6 == PacketType.LEVEL_DATA) {
short var11 = ((Short)var7[0]).shortValue();
byte[] var12 = (byte[])((byte[])var7[1]);
byte var13 = ((Byte)var7[2]).byteValue();
var42.minecraft.progressBar.setProgress(var13);
var42.levelData.write(var12, 0, var11);
//var42.levelData.write(var12, 0, var11);
} else if(var6 == PacketType.LEVEL_FINALIZE) {
try {
var42.levelData.close();
} catch (IOException var14) {
var14.printStackTrace();
}
//try {
//var42.levelData.close();
//} catch (IOException var14) {
//var14.printStackTrace();
//}
byte[] var51 = LevelIO.decompress(new ByteArrayInputStream(var42.levelData.toByteArray()));
var42.levelData = null;
//byte[] var51 = LevelIO.decompress(new ByteArrayInputStream(var42.levelData.toByteArray()));
//var42.levelData = null;
short var55 = ((Short)var7[0]).shortValue();
short var63 = ((Short)var7[1]).shortValue();
short var21 = ((Short)var7[2]).shortValue();
Level var30;
(var30 = new Level()).setNetworkMode(true);
var30.setData(var55, var63, var21, var51);
//var30.setData(var55, var63, var21, var51);
var42.minecraft.setLevel(var30);
var42.minecraft.online = false;
var42.levelLoaded = true;
@ -1739,10 +1624,6 @@ public final class Minecraft implements Runnable {
}
public final void setLevel(Level var1) {
if(this.applet == null || !this.applet.getDocumentBase().getHost().equalsIgnoreCase("minecraft.net") && !this.applet.getDocumentBase().getHost().equalsIgnoreCase("www.minecraft.net") || !this.applet.getCodeBase().getHost().equalsIgnoreCase("minecraft.net") && !this.applet.getCodeBase().getHost().equalsIgnoreCase("www.minecraft.net")) {
var1 = null;
}
this.level = var1;
if(var1 != null) {
var1.initTransient();

View File

@ -1,32 +0,0 @@
package com.mojang.minecraft;
import java.awt.Canvas;
// MinecraftCanvas
public class MinecraftApplet$1 extends Canvas
{
public MinecraftApplet$1(MinecraftApplet minecraftApplet)
{
this.applet = minecraftApplet;
}
@Override
public synchronized void addNotify()
{
super.addNotify();
applet.startGameThread();
}
@Override
public synchronized void removeNotify()
{
applet.stopGameThread();
super.removeNotify();
}
private static final long serialVersionUID = 1L;
private MinecraftApplet applet;
}

View File

@ -1,115 +0,0 @@
package com.mojang.minecraft;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Canvas;
public class MinecraftApplet extends Applet
{
private static final long serialVersionUID = 1L;
private Canvas canvas;
private Minecraft minecraft;
private Thread thread = null;
public void init()
{
canvas = new MinecraftApplet$1(this);
boolean fullscreen = false;
if(getParameter("fullscreen") != null)
{
fullscreen = getParameter("fullscreen").equalsIgnoreCase("true");
}
minecraft = new Minecraft(canvas, this, getWidth(), getHeight(), fullscreen);
minecraft.host = getDocumentBase().getHost();
if(getDocumentBase().getPort() > 0)
{
minecraft.host = minecraft.host + ":" + getDocumentBase().getPort();
}
if(getParameter("username") != null && getParameter("sessionid") != null)
{
minecraft.session = new SessionData(getParameter("username"), getParameter("sessionid"));
if(getParameter("mppass") != null)
{
minecraft.session.mppass = getParameter("mppass");
}
// TODO: Not tested.
minecraft.session.haspaid = getParameter("haspaid").equalsIgnoreCase("true");
}
if(getParameter("loadmap_user") != null && getParameter("loadmap_id") != null)
{
minecraft.levelName = getParameter("loadmap_user");
minecraft.levelId = Integer.parseInt(getParameter("loadmap_id"));
} else if(getParameter("server") != null && getParameter("port") != null) {
String server = getParameter("server");
int port = Integer.parseInt(getParameter("port"));
minecraft.server = server;
minecraft.port = port;
}
minecraft.levelLoaded = true;
setLayout(new BorderLayout());
add(canvas, "Center");
canvas.setFocusable(true);
validate();
}
public void startGameThread()
{
if(thread == null)
{
thread = new Thread(minecraft);
thread.start();
}
}
@Override
public void start()
{
minecraft.waiting = false;
}
@Override
public void stop()
{
minecraft.waiting = true;
}
@Override
public void destroy()
{
stopGameThread();
}
public void stopGameThread()
{
if(thread != null)
{
minecraft.running = false;
try {
thread.join(1000L);
} catch (InterruptedException var3) {
minecraft.shutdown();
}
thread = null;
}
}
}

View File

@ -1,10 +1,5 @@
package com.mojang.minecraft.gui;
import com.mojang.minecraft.gui.Button;
import com.mojang.minecraft.gui.GenerateLevelScreen;
import com.mojang.minecraft.gui.GuiScreen;
import com.mojang.minecraft.gui.LoadLevelScreen;
import com.mojang.minecraft.gui.OptionsScreen;
import org.lwjgl.opengl.GL11;
public final class GameOverScreen extends GuiScreen {
@ -28,9 +23,9 @@ public final class GameOverScreen extends GuiScreen {
this.minecraft.setCurrentScreen(new GenerateLevelScreen(this));
}
if(this.minecraft.session != null && var1.id == 2) {
this.minecraft.setCurrentScreen(new LoadLevelScreen(this));
}
//if(this.minecraft.session != null && var1.id == 2) {
//this.minecraft.setCurrentScreen(new LoadLevelScreen(this));
//}
}

View File

@ -177,14 +177,14 @@ public final class HUDScreen extends Screen {
GL11.glEnable(3042);
GL11.glDisable(3553);
GL11.glBlendFunc(770, 771);
GL11.glBegin(7);
//GL11.glBegin(7);
GL11.glColor4f(0.0F, 0.0F, 0.0F, 0.7F);
GL11.glVertex2f((float)(var14 + 128), (float)(var15 - 68 - 12));
GL11.glVertex2f((float)(var14 - 128), (float)(var15 - 68 - 12));
//GL11.glVertex2f((float)(var14 + 128), (float)(var15 - 68 - 12));
//GL11.glVertex2f((float)(var14 - 128), (float)(var15 - 68 - 12));
GL11.glColor4f(0.2F, 0.2F, 0.2F, 0.8F);
GL11.glVertex2f((float)(var14 - 128), (float)(var15 + 68));
GL11.glVertex2f((float)(var14 + 128), (float)(var15 + 68));
GL11.glEnd();
//GL11.glVertex2f((float)(var14 - 128), (float)(var15 + 68));
//GL11.glVertex2f((float)(var14 + 128), (float)(var15 + 68));
//GL11.glEnd();
GL11.glDisable(3042);
GL11.glEnable(3553);
var23 = "Connected players:";

View File

@ -1,52 +0,0 @@
package com.mojang.minecraft.gui;
import com.mojang.minecraft.gui.LoadLevelScreen;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
final class LevelDialog extends Thread {
// $FF: synthetic field
private LoadLevelScreen screen;
LevelDialog(LoadLevelScreen var1) {
super();
this.screen = var1;
}
public final void run() {
JFileChooser var1;
LoadLevelScreen var2;
try {
LoadLevelScreen var10000 = this.screen;
var1 = new JFileChooser();
var10000.chooser = var1;
FileNameExtensionFilter var3 = new FileNameExtensionFilter("Minecraft levels", new String[]{"mine"});
var2 = this.screen;
this.screen.chooser.setFileFilter(var3);
var2 = this.screen;
this.screen.chooser.setMultiSelectionEnabled(false);
int var7;
if(this.screen.saving) {
var2 = this.screen;
var7 = this.screen.chooser.showSaveDialog(this.screen.minecraft.canvas);
} else {
var2 = this.screen;
var7 = this.screen.chooser.showOpenDialog(this.screen.minecraft.canvas);
}
if(var7 == 0) {
(var2 = this.screen).selectedFile = this.screen.chooser.getSelectedFile();
}
} finally {
boolean var6 = false;
var2 = this.screen;
this.screen.frozen = false;
var1 = null;
var2 = this.screen;
this.screen.chooser = var1;
}
}
}

View File

@ -1,164 +0,0 @@
package com.mojang.minecraft.gui;
import com.mojang.minecraft.Minecraft;
import com.mojang.minecraft.gui.Button;
import com.mojang.minecraft.gui.GuiScreen;
import com.mojang.minecraft.gui.LevelDialog;
import com.mojang.minecraft.level.Level;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.URL;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
public class LoadLevelScreen extends GuiScreen implements Runnable {
protected GuiScreen parent;
private boolean finished = false;
private boolean loaded = false;
private String[] levels = null;
private String status = "";
protected String title = "Load level";
boolean frozen = false;
JFileChooser chooser;
protected boolean saving = false;
protected File selectedFile;
public LoadLevelScreen(GuiScreen var1) {
this.parent = var1;
}
public void run() {
try {
if(this.frozen) {
try {
Thread.sleep(100L);
} catch (InterruptedException var2) {
var2.printStackTrace();
}
}
this.status = "Getting level list..";
URL var1 = new URL("http://" + this.minecraft.host + "/listmaps.jsp?user=" + this.minecraft.session.username);
BufferedReader var4 = new BufferedReader(new InputStreamReader(var1.openConnection().getInputStream()));
this.levels = var4.readLine().split(";");
if(this.levels.length >= 5) {
this.setLevels(this.levels);
this.loaded = true;
return;
}
this.status = this.levels[0];
this.finished = true;
} catch (Exception var3) {
var3.printStackTrace();
this.status = "Failed to load levels";
this.finished = true;
}
}
protected void setLevels(String[] var1) {
for(int var2 = 0; var2 < 5; ++var2) {
((Button)this.buttons.get(var2)).active = !var1[var2].equals("-");
((Button)this.buttons.get(var2)).text = var1[var2];
((Button)this.buttons.get(var2)).visible = true;
}
}
public void onOpen() {
(new Thread(this)).start();
for(int var1 = 0; var1 < 5; ++var1) {
this.buttons.add(new Button(var1, this.width / 2 - 100, this.height / 6 + var1 * 24, "---"));
((Button)this.buttons.get(var1)).visible = false;
((Button)this.buttons.get(var1)).active = false;
}
this.buttons.add(new Button(5, this.width / 2 - 100, this.height / 6 + 120 + 12, "Load file..."));
this.buttons.add(new Button(6, this.width / 2 - 100, this.height / 6 + 168, "Cancel"));
}
protected final void onButtonClick(Button var1) {
if(!this.frozen) {
if(var1.active) {
if(this.loaded && var1.id < 5) {
this.openLevel(var1.id);
}
if(this.finished || this.loaded && var1.id == 5) {
this.frozen = true;
LevelDialog var2;
(var2 = new LevelDialog(this)).setDaemon(true);
SwingUtilities.invokeLater(var2);
}
if(this.finished || this.loaded && var1.id == 6) {
this.minecraft.setCurrentScreen(this.parent);
}
}
}
}
protected void openLevel(File var1) {
File var2 = var1;
Minecraft var4 = this.minecraft;
Level var5;
boolean var10000;
if((var5 = this.minecraft.levelIo.load(var2)) == null) {
var10000 = false;
} else {
var4.setLevel(var5);
var10000 = true;
}
this.minecraft.setCurrentScreen(this.parent);
}
protected void openLevel(int var1) {
this.minecraft.loadOnlineLevel(this.minecraft.session.username, var1);
this.minecraft.setCurrentScreen((GuiScreen)null);
this.minecraft.grabMouse();
}
public void render(int var1, int var2) {
drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624);
drawCenteredString(this.fontRenderer, this.title, this.width / 2, 20, 16777215);
if(this.frozen) {
drawCenteredString(this.fontRenderer, "Selecting file..", this.width / 2, this.height / 2 - 4, 16777215);
try {
Thread.sleep(20L);
} catch (InterruptedException var3) {
var3.printStackTrace();
}
} else {
if(!this.loaded) {
drawCenteredString(this.fontRenderer, this.status, this.width / 2, this.height / 2 - 4, 16777215);
}
super.render(var1, var2);
}
}
public final void onClose() {
super.onClose();
if(this.chooser != null) {
this.chooser.cancelSelection();
}
}
public final void tick() {
super.tick();
if(this.selectedFile != null) {
this.openLevel(this.selectedFile);
this.selectedFile = null;
}
}
}

View File

@ -1,12 +1,5 @@
package com.mojang.minecraft.gui;
import com.mojang.minecraft.gui.Button;
import com.mojang.minecraft.gui.GenerateLevelScreen;
import com.mojang.minecraft.gui.GuiScreen;
import com.mojang.minecraft.gui.LoadLevelScreen;
import com.mojang.minecraft.gui.OptionsScreen;
import com.mojang.minecraft.gui.SaveLevelScreen;
public final class PauseScreen extends GuiScreen {
public final void onOpen() {
@ -38,15 +31,15 @@ public final class PauseScreen extends GuiScreen {
this.minecraft.setCurrentScreen(new GenerateLevelScreen(this));
}
if(this.minecraft.session != null) {
if(var1.id == 2) {
this.minecraft.setCurrentScreen(new SaveLevelScreen(this));
}
//if(this.minecraft.session != null) {
//if(var1.id == 2) {
//this.minecraft.setCurrentScreen(new SaveLevelScreen(this));
//}
if(var1.id == 3) {
this.minecraft.setCurrentScreen(new LoadLevelScreen(this));
}
}
//if(var1.id == 3) {
//this.minecraft.setCurrentScreen(new LoadLevelScreen(this));
//}
//}
if(var1.id == 4) {
this.minecraft.setCurrentScreen((GuiScreen)null);

View File

@ -1,56 +0,0 @@
package com.mojang.minecraft.gui;
import com.mojang.minecraft.Minecraft;
import com.mojang.minecraft.gui.Button;
import com.mojang.minecraft.gui.GuiScreen;
import com.mojang.minecraft.gui.LevelNameScreen;
import com.mojang.minecraft.gui.LoadLevelScreen;
import java.io.File;
public final class SaveLevelScreen extends LoadLevelScreen {
public SaveLevelScreen(GuiScreen var1) {
super(var1);
this.title = "Save level";
this.saving = true;
}
public final void onOpen() {
super.onOpen();
((Button)this.buttons.get(5)).text = "Save file...";
}
protected final void setLevels(String[] var1) {
for(int var2 = 0; var2 < 5; ++var2) {
((Button)this.buttons.get(var2)).text = var1[var2];
((Button)this.buttons.get(var2)).visible = true;
((Button)this.buttons.get(var2)).active = this.minecraft.session.haspaid;
}
}
public final void render(int var1, int var2) {
super.render(var1, var2);
if(!this.minecraft.session.haspaid) {
drawFadingBox(this.width / 2 - 80, 72, this.width / 2 + 80, 120, -536870912, -536870912);
drawCenteredString(this.fontRenderer, "Premium only!", this.width / 2, 80, 16748688);
drawCenteredString(this.fontRenderer, "Purchase the game to be able", this.width / 2, 96, 14712960);
drawCenteredString(this.fontRenderer, "to save your levels online.", this.width / 2, 104, 14712960);
}
}
protected final void openLevel(File var1) {
if(!var1.getName().endsWith(".mine")) {
var1 = new File(var1.getParentFile(), var1.getName() + ".mine");
}
File var2 = var1;
Minecraft var3 = this.minecraft;
this.minecraft.levelIo.save(var3.level, var2);
this.minecraft.setCurrentScreen(this.parent);
}
protected final void openLevel(int var1) {
this.minecraft.setCurrentScreen(new LevelNameScreen(this, ((Button)this.buttons.get(var1)).text, var1));
}
}

View File

@ -41,14 +41,14 @@ public class Screen {
GL11.glDisable(3553);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glBegin(7);
//GL11.glBegin(7);
GL11.glColor4f(var7, var8, var12, var6);
GL11.glVertex2f((float)var2, (float)var1);
GL11.glVertex2f((float)var0, (float)var1);
//GL11.glVertex2f((float)var2, (float)var1);
//GL11.glVertex2f((float)var0, (float)var1);
GL11.glColor4f(var10, var11, var13, var9);
GL11.glVertex2f((float)var0, (float)var3);
GL11.glVertex2f((float)var2, (float)var3);
GL11.glEnd();
//GL11.glVertex2f((float)var0, (float)var3);
//GL11.glVertex2f((float)var2, (float)var3);
//GL11.glEnd();
GL11.glDisable(3042);
GL11.glEnable(3553);
}

View File

@ -22,7 +22,7 @@ public class NetworkManager
new ServerConnectThread(this, server, port, username, key, minecraft).start();
}
public ByteArrayOutputStream levelData;
// public ByteArrayOutputStream levelData;
public NetworkHandler netHandler;

View File

@ -19,6 +19,9 @@ import org.teavm.jso.typedarrays.Uint8Array;
import org.teavm.jso.webgl.WebGLFramebuffer;
import org.teavm.jso.webgl.WebGLRenderingContext;
import com.mojang.minecraft.Minecraft;
import com.mojang.minecraft.SessionData;
import net.PeytonPlayz585.lwjgl.PlatformInput;
import net.PeytonPlayz585.minecraft.MinecraftClient;
import net.PeytonPlayz585.teavm.WebGL2RenderingContext;
@ -107,7 +110,17 @@ public class MinecraftMain {
e.printStackTrace();
}
//Start Game Function
//Start Game
Minecraft minecraft = new Minecraft(canvas.getWidth(), canvas.getHeight(), true);
//minecraft.host = "127.0.0.1:25565";
minecraft.session = new SessionData("PeytonPlayz585", "TeaVM-WebGL");
minecraft.levelLoaded = true;
canvas.focus();
Thread thread = null;
thread = new Thread(minecraft);
thread.start();
minecraft.waiting = false;
}

View File

@ -1,5 +1,7 @@
package org.lwjgl.input;
import org.lwjgl.opengl.Display;
import net.PeytonPlayz585.lwjgl.PlatformInput;
/**
@ -89,4 +91,8 @@ public class Mouse {
return PlatformInput.isMouseGrabbed();
}
public static boolean isFocused() {
return Display.isActive() && isActuallyGrabbed();
}
}

View File

@ -1,76 +0,0 @@
package org.oyasunadev.minecraft;
import com.mojang.minecraft.MinecraftApplet;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: Oliver Yasuna
* Date: 9/23/12
* Time: 4:17 PM
*/
public class MCApplet extends MinecraftApplet
{
public MCApplet()
{
MP = false;
parameters = new HashMap();
}
public MCApplet(String username, String sessionid, boolean haspaid, String server, int port, String mppass)
{
MP = true;
parameters = new HashMap();
parameters.put("username", username);
parameters.put("sessionid", sessionid);
parameters.put("haspaid", String.valueOf(haspaid));
parameters.put("server", server);
parameters.put("port", String.valueOf(port));
parameters.put("mppass", mppass);
}
@Override
public URL getDocumentBase()
{
try {
return new URL("http://minecraft.net:80/play.jsp");
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public URL getCodeBase()
{
try {
return new URL("http://minecraft.net:80/");
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public String getParameter(String name)
{
if(MP)
{
return (String)parameters.get(name);
} else {
return super.getParameter(name);
}
}
private final boolean MP;
public final Map parameters;
}

View File

@ -1,49 +0,0 @@
package org.oyasunadev.minecraft;
import com.mojang.minecraft.Minecraft;
import com.mojang.minecraft.MinecraftApplet$1;
import javax.swing.*;
import java.awt.*;
public final class SPFrame extends JFrame
{
public SPFrame()
{
setTitle("Shadow Client Classic");
setSize(854, 480);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
if(getWidth() == width && getHeight() == height)
{
setUndecorated(true);
}
}
public void startMinecraft()
{
MCApplet applet = new MCApplet();
MinecraftApplet$1 canvas = new MinecraftApplet$1(applet);
Minecraft minecraft = new Minecraft(canvas, applet, getWidth(), getHeight(), false);
canvas.setSize(getWidth(), getHeight());
add(canvas, "Center");
pack();
new Thread(minecraft).start();
}
public void finish()
{
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getWidth()) / 2,
(Toolkit.getDefaultToolkit().getScreenSize().height - getHeight()) / 2);
}
}

View File

@ -1,43 +0,0 @@
package org.oyasunadev.minecraft;
import java.io.File;
import javax.swing.*;
/**
* Created with IntelliJ IDEA.
* User: Oliver Yasuna
* Date: 9/23/12
* Time: 4:04 PM
*/
public class Start
{
public static void main(String[] args)
{
new Start();
}
public Start()
{
System.setProperty("org.lwjgl.librarypath", new File("./run/native/linux").getAbsolutePath());
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
SPFrame spFrame = new SPFrame();
spFrame.setVisible(true);
spFrame.startMinecraft();
spFrame.finish();
}
}