From 3470158943acb9fc4439ea255fe3ea0fbc7dbc85 Mon Sep 17 00:00:00 2001
From: MinecraftZuriki <33717810+MinecraftZuriki@users.noreply.github.com>
Date: Fri, 17 Nov 2017 02:19:41 +1100
Subject: Support for classic multiplayer via mpticket

---
 libraries/launcher/org/multimc/LegacyFrame.java | 51 ++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 2 deletions(-)

(limited to 'libraries/launcher')

diff --git a/libraries/launcher/org/multimc/LegacyFrame.java b/libraries/launcher/org/multimc/LegacyFrame.java
index 8883f424..c9ee6aad 100644
--- a/libraries/launcher/org/multimc/LegacyFrame.java
+++ b/libraries/launcher/org/multimc/LegacyFrame.java
@@ -23,9 +23,12 @@ import java.awt.event.WindowEvent;
 import java.awt.event.WindowListener;
 import java.awt.image.BufferedImage;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Scanner;
 
 public class LegacyFrame extends Frame implements WindowListener
 {
@@ -48,12 +51,56 @@ public class LegacyFrame extends Frame implements WindowListener
         try {
             appletWrap = new Launcher( mcApplet, new URL ( "http://www.minecraft.net/game" ) );
         } catch ( MalformedURLException ignored ) {}
+        
+        // Implements support for launching in to multiplayer on classic servers using a mpticket
+        // file generated by an external program and stored in the instance's root folder.
+        File mpticketFile = null;
+        Scanner fileReader = null;
+        try {
+            mpticketFile = new File(System.getProperty("user.dir") + "/../mpticket").getCanonicalFile();
+            fileReader = new Scanner(new FileInputStream(mpticketFile), "ascii");
+            String[] mpticketParams = new String[3];
+            
+            for(int i=0;i<3;i++) {
+                if(fileReader.hasNextLine()) {
+                    mpticketParams[i] = fileReader.nextLine();
+                } else {
+                    throw new IllegalArgumentException();
+                }
+            }
+            
+            // Assumes parameters are valid and in the correct order
+            appletWrap.setParameter("server", mpticketParams[0]);
+            appletWrap.setParameter("port", mpticketParams[1]);
+            appletWrap.setParameter("mppass", mpticketParams[2]);
+            
+            fileReader.close();
+            mpticketFile.delete();
+        }
+        catch (FileNotFoundException e) {}
+        catch (IllegalArgumentException e) {
+            
+            fileReader.close();
+            File mpticketFileCorrupt = new File(System.getProperty("user.dir") + "/../mpticket.corrupt");
+            if(mpticketFileCorrupt.exists()) {
+                mpticketFileCorrupt.delete();
+            }
+            mpticketFile.renameTo(mpticketFileCorrupt);
+            
+            System.err.println("Malformed mpticket file, missing argument.");
+            e.printStackTrace(System.err);
+            System.exit(-1);
+        }
+        catch (Exception e) {
+            e.printStackTrace(System.err);
+            System.exit(-1);
+        }
         appletWrap.setParameter ( "username", user );
         appletWrap.setParameter ( "sessionid", session );
         appletWrap.setParameter ( "stand-alone", "true" ); // Show the quit button.
         appletWrap.setParameter ( "haspaid", "true" ); // Some old versions need this for world saves to work.
-		appletWrap.setParameter ( "demo", "false" );
-		appletWrap.setParameter("fullscreen", "false");
+        appletWrap.setParameter ( "demo", "false" );
+        appletWrap.setParameter ( "fullscreen", "false" );
         mcApplet.setStub(appletWrap);
         this.add ( appletWrap );
         appletWrap.setPreferredSize ( new Dimension (winSizeW, winSizeH) );
-- 
cgit