Lots of backend work
This commit is contained in:
4
src/main/java/tech/nevets/jaml/AutoUpdater.java
Normal file
4
src/main/java/tech/nevets/jaml/AutoUpdater.java
Normal file
@@ -0,0 +1,4 @@
|
||||
package tech.nevets.jaml;
|
||||
|
||||
public class AutoUpdater {
|
||||
}
|
||||
@@ -48,6 +48,7 @@ public class Config {
|
||||
YML_FILE.setComment("java.jdk8", "Set these to the bin directory of each JDK version");
|
||||
YML_FILE.addDefault("java.jdk16", "");
|
||||
YML_FILE.addDefault("java.jdk17", "");
|
||||
YML_FILE.addDefault("game.show-snapshots", false);
|
||||
YML_FILE.addDefault("launcher.default-profile", "default");
|
||||
YML_FILE.setComment("launcher.default-profile", "Set's the profile that will be loaded automatically");
|
||||
YML_FILE.addDefault("launcher.path","default");
|
||||
@@ -58,7 +59,8 @@ public class Config {
|
||||
YML_FILE.setComment("launcher.first-launch", "Do Not Change, will regenerate files");
|
||||
YML_FILE.addDefault("launcher.verbose", false);
|
||||
YML_FILE.setComment("launcher.verbose", "If true, will print out all the messages");
|
||||
YML_FILE.addDefault("launcher.version", "0.1.0");
|
||||
YML_FILE.addDefault("launcher.version", JAML.VERSION);
|
||||
YML_FILE.set("launcher.version", JAML.VERSION);
|
||||
YML_FILE.setComment("launcher.version", "Jaml version, don't change it!");
|
||||
|
||||
try {
|
||||
@@ -89,92 +91,4 @@ public class Config {
|
||||
public static void setValue(String path, Object data) {
|
||||
YML_FILE.set(path, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//package tech.nevets.jaml.util;
|
||||
//
|
||||
//import org.simpleyaml.configuration.file.YamlFile;
|
||||
//import tech.nevets.jaml.JAML;
|
||||
//
|
||||
//import java.io.IOException;
|
||||
//
|
||||
//public class Config {
|
||||
// private static final YamlFile YML_FILE = new YamlFile(JAML.path + "\\config.yml");
|
||||
//
|
||||
// public static void loadConfig() {
|
||||
// try {
|
||||
// if (!YML_FILE.exists()) {
|
||||
// System.out.println("Config file not found, creating new one...");
|
||||
// YML_FILE.createNewFile(true);
|
||||
// System.out.println("Config file created!");
|
||||
// } else {
|
||||
// System.out.println("Loading Config file...");
|
||||
// YML_FILE.loadWithComments();
|
||||
// System.out.println("Config file loaded!");
|
||||
// }
|
||||
// } catch (final Exception e) {
|
||||
// System.out.println("Error while loading config file!");
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
//
|
||||
// YML_FILE.setComment("java",
|
||||
// "\n"
|
||||
// + " JJJJJJJJJJJ AAA MMMMMMMM MMMMMMMM LLLLLLLLLLL \n"
|
||||
// + " J:::::::::J A:::A M:::::::M M:::::::M L:::::::::L \n"
|
||||
// + " J:::::::::J A:::::A M::::::::M M::::::::M L:::::::::L \n"
|
||||
// + " JJ:::::::JJ A:::::::A M:::::::::M M:::::::::M LL:::::::LL \n"
|
||||
// + " J:::::J A:::::::::A M::::::::::M M::::::::::M L:::::L \n"
|
||||
// + " J:::::J A:::::A:::::A M:::::::::::M M:::::::::::M L:::::L \n"
|
||||
// + " J:::::J A:::::A A:::::A M:::::::M::::M M::::M:::::::M L:::::L \n"
|
||||
// + " J:::::j A:::::A A:::::A M::::::M M::::M M::::M M::::::M L:::::L \n"
|
||||
// + " J:::::J A:::::A A:::::A M::::::M M::::M::::M M::::::M L:::::L \n"
|
||||
// + " JJJJJJJ J:::::J A:::::AAAAAAAAA:::::A M::::::M M:::::::M M::::::M L:::::L \n"
|
||||
// + " J:::::J J:::::J A:::::::::::::::::::::A M::::::M M:::::M M::::::M L:::::L \n"
|
||||
// + " J::::::J J::::::J A:::::AAAAAAAAAAAAA:::::A M::::::M MMMMM M::::::M L:::::L LLLLLL\n"
|
||||
// + " J:::::::JJJ:::::::J A:::::A A:::::A M::::::M M::::::M LL:::::::LLLLLLLLL:::::L\n"
|
||||
// + " JJ:::::::::::::JJ A:::::A A:::::A M::::::M M::::::M L::::::::::::::::::::::L\n"
|
||||
// + " JJ:::::::::JJ A:::::A A:::::A M::::::M M::::::M L::::::::::::::::::::::L\n"
|
||||
// + " JJJJJJJJJ AAAAAAA AAAAAAA MMMMMMMM MMMMMMMM LLLLLLLLLLLLLLLLLLLLLLLL\n"
|
||||
// );
|
||||
//
|
||||
// YML_FILE.addDefault("java.jdk8", "");
|
||||
// YML_FILE.setComment("java.jdk8", "Set these to the bin directory of each JDK version");
|
||||
// YML_FILE.addDefault("java.jdk16", "");
|
||||
// YML_FILE.addDefault("java.jdk17", "");
|
||||
// YML_FILE.addDefault("game.skin", "");
|
||||
// YML_FILE.setComment("game.skin", "Current skin being used, DO NOT change this");
|
||||
// YML_FILE.addDefault("launcher.default-profile", "default");
|
||||
// YML_FILE.setComment("launcher.default-profile", "Set's the profile that will be loaded automatically");
|
||||
// YML_FILE.addDefault("launcher.path","default");
|
||||
// YML_FILE.setComment("launcher.path","Path to JAML files\n" + "default: " + JAML.path.toString());
|
||||
// YML_FILE.addDefault("launcher.first-launch", true);
|
||||
// YML_FILE.setComment("launcher.first-launch", "Do Not Change, will regenerate files");
|
||||
// YML_FILE.addDefault("launcher.verbose", false);
|
||||
// YML_FILE.setComment("launcher.verbose", "If true, will print out all the messages");
|
||||
// YML_FILE.addDefault("launcher.version", "0.1.0");
|
||||
// YML_FILE.setComment("launcher.version", "Jaml version, don't change it!");
|
||||
//
|
||||
// try {
|
||||
// YML_FILE.save();
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static YamlFile getConfig() {
|
||||
// return YML_FILE;
|
||||
// }
|
||||
//
|
||||
// public static void saveConfig() {
|
||||
// try {
|
||||
// YML_FILE.save();
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static void setValue(String path, Object data) {
|
||||
// YML_FILE.set(path, data);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@@ -7,11 +7,10 @@ import java.nio.file.Path;
|
||||
public class JAML {
|
||||
public static Path path;
|
||||
public static GuiHandler guiHandler;
|
||||
public static final String VERSION = "0.8.0";
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
//TODO make bash script for jenkins to download optimized jre and bundle it with launch4j
|
||||
|
||||
GuiHandler.startup();
|
||||
|
||||
DiscordRP.start();
|
||||
@@ -19,11 +18,5 @@ public class JAML {
|
||||
DiscordRP.update("", "");
|
||||
guiHandler = new GuiHandler();
|
||||
|
||||
|
||||
// try {
|
||||
// System.out.println(VersionFetcher.getLatestVersion("release"));
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -9,48 +9,55 @@ import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Launcher {
|
||||
//TODO add progressbar for launch progress
|
||||
//TODO add console output option
|
||||
|
||||
public Launcher(int jdkVersion, int memoryAmount, String garbageCollection, boolean printConsole) throws IOException {
|
||||
ArrayList<String> commandArray = parseCommand(jdkVersion, memoryAmount, garbageCollection);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
public Launcher(int jdkVersion, int memoryAmount, String garbageCollection, boolean printConsole) {
|
||||
try {
|
||||
ArrayList<String> commandArray = parseCommand(jdkVersion, memoryAmount, garbageCollection);
|
||||
|
||||
for (String commandString : commandArray) {
|
||||
sb.append(commandString);
|
||||
sb.append(" ");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (String commandString : commandArray) {
|
||||
sb.append(commandString);
|
||||
sb.append(" ");
|
||||
}
|
||||
|
||||
String command = sb.toString();
|
||||
|
||||
System.out.println(command);
|
||||
|
||||
LaunchEvent e = new LaunchEvent();
|
||||
e.triggerEvent();
|
||||
|
||||
ProcessBuilder processBuilder = new ProcessBuilder();
|
||||
processBuilder.directory(ProfileUtils.activeProfile.getGamePath());
|
||||
processBuilder.command(command);
|
||||
Process process = processBuilder.start();
|
||||
|
||||
if (printConsole) {
|
||||
printResults(process);
|
||||
}
|
||||
|
||||
process.destroy();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String command = sb.toString();
|
||||
|
||||
System.out.println(command);
|
||||
|
||||
LaunchEvent e = new LaunchEvent();
|
||||
e.triggerEvent();
|
||||
|
||||
ProcessBuilder process = new ProcessBuilder();
|
||||
process.directory(ProfileUtils.activeProfile.getGamePath());
|
||||
process.command(command);
|
||||
Process processVar = process.start();
|
||||
|
||||
if (printConsole) {
|
||||
printResults(processVar);
|
||||
}
|
||||
|
||||
processVar.destroy();
|
||||
}
|
||||
|
||||
public static ArrayList<String> parseCommand(int jdkVersion, int memoryAmount, String garbageCollection) {
|
||||
ArrayList<String> cmd = new ArrayList<String>();
|
||||
ArrayList<String> cmd = new ArrayList<>();
|
||||
if (jdkVersion == 8) {
|
||||
cmd.add(("\"" + Config.getConfig().getString("java.jdk8") + "\\javaw.exe\""));
|
||||
cmd.add((Config.getConfig().getString("java.jdk8") + "\\java.exe\""));
|
||||
} else if (jdkVersion == 16) {
|
||||
cmd.add(("\"" + Config.getConfig().getString("java.jdk16") + "\\javaw.exe\""));
|
||||
cmd.add((Config.getConfig().getString("java.jdk16") + "\\java.exe\""));
|
||||
} else if (jdkVersion == 17) {
|
||||
cmd.add(("\"" + Config.getConfig().getString("java.jdk17") + "\\java.exe\""));
|
||||
cmd.add((Config.getConfig().getString("java.jdk17") + "\\java.exe\""));
|
||||
}
|
||||
|
||||
cmd.add(("-Xmx" + memoryAmount + "M"));
|
||||
cmd.add(("-Xms" + memoryAmount + "M"));
|
||||
cmd.add((garbageCollection));
|
||||
//cmd.add((garbageCollection));
|
||||
cmd.add("-Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=assets\\log_configs\\client-1.12.xml");
|
||||
cmd.add("-Djava.library.path=versions\\1.18.1\\natives\" \"-cp\" \"libraries\\com\\mojang\\blocklist\\1.0.6\\blocklist-1.0.6.jar;libraries\\com\\mojang\\patchy\\2.1.6\\patchy-2.1.6.jar;libraries\\com\\github\\oshi\\oshi-core\\5.8.2\\oshi-core-5.8.2.jar;libraries\\net\\java\\dev\\jna\\jna\\5.9.0\\jna-5.9.0.jar;libraries\\net\\java\\dev\\jna\\jna-platform\\5.9.0\\jna-platform-5.9.0.jar;libraries\\org\\slf4j\\slf4j-api\\1.8.0-beta4\\slf4j-api-1.8.0-beta4.jar;libraries\\org\\apache\\logging\\log4j\\log4j-slf4j18-impl\\2.14.1\\log4j-slf4j18-impl-2.14.1.jar;libraries\\com\\ibm\\icu\\icu4j\\69.1\\icu4j-69.1.jar;libraries\\com\\mojang\\javabridge\\1.2.24\\javabridge-1.2.24.jar;libraries\\net\\sf\\jopt-simple\\jopt-simple\\5.0.4\\jopt-simple-5.0.4.jar;libraries\\io\\netty\\netty-all\\4.1.68.Final\\netty-all-4.1.68.Final.jar;libraries\\com\\google\\guava\\failureaccess\\1.0.1\\failureaccess-1.0.1.jar;libraries\\com\\google\\guava\\guava\\31.0.1-jre\\guava-31.0.1-jre.jar;libraries\\org\\apache\\commons\\commons-lang3\\3.12.0\\commons-lang3-3.12.0.jar;libraries\\commons-io\\commons-io\\2.11.0\\commons-io-2.11.0.jar;libraries\\commons-codec\\commons-codec\\1.15\\commons-codec-1.15.jar;libraries\\com\\mojang\\brigadier\\1.0.18\\brigadier-1.0.18.jar;libraries\\com\\mojang\\datafixerupper\\4.0.26\\datafixerupper-4.0.26.jar;libraries\\com\\google\\code\\gson\\gson\\2.8.8\\gson-2.8.8.jar;libraries\\com\\mojang\\authlib\\3.2.38\\authlib-3.2.38.jar;libraries\\org\\apache\\commons\\commons-compress\\1.21\\commons-compress-1.21.jar;libraries\\org\\apache\\httpcomponents\\httpclient\\4.5.13\\httpclient-4.5.13.jar;libraries\\commons-logging\\commons-logging\\1.2\\commons-logging-1.2.jar;libraries\\org\\apache\\httpcomponents\\httpcore\\4.4.14\\httpcore-4.4.14.jar;libraries\\it\\unimi\\dsi\\fastutil\\8.5.6\\fastutil-8.5.6.jar;libraries\\org\\apache\\logging\\log4j\\log4j-api\\2.14.1\\log4j-api-2.14.1.jar;libraries\\org\\apache\\logging\\log4j\\log4j-core\\2.14.1\\log4j-core-2.14.1.jar;libraries\\org\\lwjgl\\lwjgl\\3.2.2\\lwjgl-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-jemalloc\\3.2.2\\lwjgl-jemalloc-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-openal\\3.2.2\\lwjgl-openal-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-opengl\\3.2.2\\lwjgl-opengl-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-glfw\\3.2.2\\lwjgl-glfw-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-stb\\3.2.2\\lwjgl-stb-3.2.2.jar;libraries\\org\\lwjgl\\lwjgl-tinyfd\\3.2.2\\lwjgl-tinyfd-3.2.2.jar;libraries\\com\\mojang\\text2speech\\1.11.3\\text2speech-1.11.3.jar;versions\\1.18.1\\1.18.1.jar\"");
|
||||
cmd.add("net.minecraft.client.main.Main");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package tech.nevets.jaml.auth;
|
||||
|
||||
import tech.nevets.jaml.util.DataCompressor;
|
||||
import tech.nevets.jaml.util.HttpUtils;
|
||||
|
||||
import java.net.URI;
|
||||
@@ -9,17 +10,78 @@ import java.util.Map;
|
||||
|
||||
public class AuthRequests {
|
||||
|
||||
public static void login() {
|
||||
String accountName = "account_name";
|
||||
String accountPassword = "password123";
|
||||
public static DataCompressor initGet() {
|
||||
try {
|
||||
URI liveLogin = new URI("https://login.live.com/oauth20_authorize.srf?client_id=000000004C12AE6F&redirect_uri=https://login.live.com/oauth20_desktop.srf&scope=service::user.auth.xboxlive.com::MBI_SSL&display=touch&response_type=token&locale=en");
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
|
||||
String response = HttpUtils.get(liveLogin, headers);
|
||||
String urlPost = "";
|
||||
String value = "";
|
||||
|
||||
System.out.println("Response: " + response);
|
||||
|
||||
String[] cutResponse = response.split("<");
|
||||
|
||||
for (String cut : cutResponse) {
|
||||
if (cut.contains("urlPost")) {
|
||||
urlPost = cut;
|
||||
}
|
||||
if (cut.contains("value")) {
|
||||
value = cut;
|
||||
}
|
||||
}
|
||||
|
||||
while (urlPost.indexOf(",urlPost:") < urlPost.indexOf("',at:true")) {
|
||||
urlPost = urlPost.substring(urlPost.indexOf(",urlPost:") + 10, urlPost.indexOf("',at:true"));
|
||||
}
|
||||
|
||||
while (value.indexOf("value=\"") < value.indexOf("\"/>',")) {
|
||||
value = value.substring(value.indexOf("value=\"") + 7, value.indexOf("\"/>',"));
|
||||
}
|
||||
|
||||
System.out.println("Param 1: " + urlPost);
|
||||
System.out.println("Param 2: " + value);
|
||||
|
||||
return new DataCompressor(urlPost, value);
|
||||
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
return new DataCompressor();
|
||||
}
|
||||
}
|
||||
|
||||
public static String loginMicrosoft() {
|
||||
DataCompressor urlPostPlusValue = initGet();
|
||||
String urlPost = urlPostPlusValue.getKey();
|
||||
String value = urlPostPlusValue.getValue();
|
||||
|
||||
String accountEmail = "SVTracey9@gmail.com";
|
||||
String accountPassword = "Dolly1000!!";
|
||||
|
||||
try {
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
|
||||
String json = "{ \"agent\": { \"name\": \"Minecraft\", \"version\": 1 }, \"username\": \"" + accountName + "\", \"password\": \"" + accountPassword + "\" }";
|
||||
HttpUtils.post(new URI("https://authserver.mojang.com/authenticate"), headers, json);
|
||||
Map<String,String> data = new HashMap<>();
|
||||
data.put("login", accountEmail);
|
||||
data.put("loginfmt", accountEmail);
|
||||
data.put("passwd", accountPassword);
|
||||
data.put("PPFT", value);
|
||||
|
||||
String response = HttpUtils.post(new URI(urlPost), headers, data);
|
||||
|
||||
System.out.println(response);
|
||||
|
||||
return "";
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void loginMSApi() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class FirstLaunchGui implements Runnable, ActionListener {
|
||||
//TODO Formatting
|
||||
//TODO Rework first launch logic
|
||||
private JFrame frame;
|
||||
private JPanel panel;
|
||||
|
||||
@@ -84,7 +84,7 @@ public class FirstLaunchGui implements Runnable, ActionListener {
|
||||
profile.setProfileName("default");
|
||||
|
||||
profile.setGamePath(new File(gamePathField.getText()));
|
||||
profile.setVersion(versionField.getText());
|
||||
//profile.setVersion(versionField.getText());
|
||||
profile.setLoader(loaderField.getText());
|
||||
profile.setOfflineMode(Boolean.parseBoolean(offlineModeField.getText()));
|
||||
try {
|
||||
|
||||
@@ -84,7 +84,7 @@ public class FirstLoginGui extends JFrame {
|
||||
profile.setProfileName(profileNameField.getText());
|
||||
|
||||
profile.setGamePath(new File(gamePathField.getText()));
|
||||
profile.setVersion(versionField.getText());
|
||||
//profile.setVersion(versionField.getText());
|
||||
profile.setLoader(loaderDropdown.getSelectedItem().toString());
|
||||
profile.setOfflineMode(offlineModeBox.isSelected());
|
||||
try {
|
||||
|
||||
@@ -7,6 +7,7 @@ import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GuiHandler {
|
||||
//TODO add config gui for easier config modification
|
||||
|
||||
public static final int SCREEN_WIDTH = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
|
||||
public static final int SCREEN_HEIGHT = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package tech.nevets.jaml.gui;
|
||||
|
||||
import tech.nevets.jaml.objects.Profile;
|
||||
import tech.nevets.jaml.objects.Version;
|
||||
import tech.nevets.jaml.util.LoaderUtils;
|
||||
import tech.nevets.jaml.util.ProfileUtils;
|
||||
import tech.nevets.jaml.util.VersionUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
@@ -10,13 +12,14 @@ import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class NewProfileGui extends JFrame {
|
||||
|
||||
private JPanel contentPane;
|
||||
|
||||
public NewProfileGui() {
|
||||
setUndecorated(true);
|
||||
setAlwaysOnTop(true);
|
||||
setResizable(false);
|
||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
addWindowListener(new WindowAdapter() {
|
||||
@@ -58,10 +61,16 @@ public class NewProfileGui extends JFrame {
|
||||
contentPane.add(gamePathField);
|
||||
contentPane.add(gamePathButton);
|
||||
|
||||
Version[] versionsArray = VersionUtils.versionsList;
|
||||
ArrayList<String> versions = new ArrayList<>();
|
||||
for (Version version : versionsArray) {
|
||||
versions.add(version.getId());
|
||||
}
|
||||
|
||||
JLabel versionLabel = new JLabel("Version:");
|
||||
versionLabel.setBounds(10, 98, 84, 31);
|
||||
contentPane.add(versionLabel);
|
||||
JTextField versionField = new JTextField(20);
|
||||
JComboBox<String> versionField = new JComboBox<>(versions.toArray(new String[versions.size()]));
|
||||
versionField.setBounds(94, 102, 231, 23);
|
||||
contentPane.add(versionField);
|
||||
|
||||
@@ -81,13 +90,13 @@ public class NewProfileGui extends JFrame {
|
||||
contentPane.add(offlineModeBox);
|
||||
|
||||
JButton button = new JButton("Create Profile");
|
||||
button.setBounds(64, 234, 217, 37);
|
||||
button.setBounds(24, 243, 217, 37);
|
||||
button.addActionListener(al -> {
|
||||
Profile profile = new Profile();
|
||||
profile.setProfileName(profileNameField.getText());
|
||||
|
||||
profile.setGamePath(new File(gamePathField.getText()));
|
||||
profile.setVersion(versionField.getText());
|
||||
profile.setVersion(versionField.getSelectedItem().toString());
|
||||
profile.setLoader(loaderDropdown.getSelectedItem().toString());
|
||||
profile.setOfflineMode(offlineModeBox.isSelected());
|
||||
try {
|
||||
@@ -100,6 +109,13 @@ public class NewProfileGui extends JFrame {
|
||||
this.dispose();
|
||||
});
|
||||
contentPane.add(button);
|
||||
|
||||
JButton cancelButton = new JButton("Cancel");
|
||||
cancelButton.setBounds(242, 243, 83, 37);
|
||||
cancelButton.addActionListener(al -> {
|
||||
this.dispose();
|
||||
});
|
||||
contentPane.add(cancelButton);
|
||||
}
|
||||
|
||||
private void removeFromArray() {
|
||||
|
||||
@@ -6,14 +6,19 @@ import tech.nevets.jaml.gui.panels.CustomProgressBarPanel;
|
||||
import tech.nevets.jaml.util.ImageUtils;
|
||||
import tech.nevets.jaml.util.LoaderUtils;
|
||||
import tech.nevets.jaml.util.ProfileUtils;
|
||||
import tech.nevets.jaml.util.VersionUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class StartupGui extends JFrame {
|
||||
JPanel contentPane;
|
||||
private static JLabel currentTaskLabel;
|
||||
private static CustomProgressBarPanel progressBar;
|
||||
private static final int TASKS = 7;
|
||||
private static int task = 0;
|
||||
|
||||
public StartupGui() {
|
||||
setUndecorated(true);
|
||||
@@ -43,7 +48,7 @@ public class StartupGui extends JFrame {
|
||||
progressBarOutline.setIcon(pgOutline);
|
||||
contentPane.add(progressBarOutline);
|
||||
|
||||
CustomProgressBarPanel progressBar = new CustomProgressBarPanel(pbWidth, pbHeight);
|
||||
progressBar = new CustomProgressBarPanel(pbWidth, pbHeight);
|
||||
progressBar.setBounds(pbX, pbY, pbWidth, pbHeight);
|
||||
contentPane.add(progressBar);
|
||||
|
||||
@@ -56,24 +61,45 @@ public class StartupGui extends JFrame {
|
||||
|
||||
setVisible(true);
|
||||
|
||||
|
||||
progressBar.setProgress(0);
|
||||
|
||||
currentTaskLabel.setText("Making Directories...");
|
||||
task++;
|
||||
makeDirs();
|
||||
smoothIncrease(progressBar, 20);
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Loading Config...");
|
||||
task++;
|
||||
Config.loadConfig();
|
||||
smoothIncrease(progressBar, 40);
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Downloading Version List...");
|
||||
task++;
|
||||
VersionUtils.downloadList();
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Loading Profiles...");
|
||||
task++;
|
||||
ProfileUtils.getProfileList();
|
||||
smoothIncrease(progressBar, 60);
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Loading Active Profile...");
|
||||
task++;
|
||||
ProfileUtils.getActiveProfile();
|
||||
smoothIncrease(progressBar, 80);
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Getting Game Loaders...");
|
||||
task++;
|
||||
LoaderUtils.getLoaders();
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Getting versions...");
|
||||
task++;
|
||||
VersionUtils.updateVersionsList();
|
||||
smoothIncrease();
|
||||
|
||||
currentTaskLabel.setText("Done!");
|
||||
smoothIncrease(progressBar, 100);
|
||||
smoothIncrease();
|
||||
|
||||
}
|
||||
|
||||
@@ -96,55 +122,40 @@ public class StartupGui extends JFrame {
|
||||
JAML.path = Path.of(System.getenv("JAML_HOME"));
|
||||
}
|
||||
|
||||
try {
|
||||
if (!JAML.path.toFile().exists()) {
|
||||
JAML.path.toFile().mkdirs();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("Invalid path, please check your config.yml and try again");
|
||||
if (!JAML.path.toFile().exists()) {
|
||||
JAML.path.toFile().mkdirs();
|
||||
}
|
||||
|
||||
try {
|
||||
Path profilePath = Path.of(JAML.path + "\\profiles\\");
|
||||
if (!profilePath.toFile().exists()) {
|
||||
profilePath.toFile().mkdirs();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Path profilePath = Path.of(JAML.path + "\\profiles\\");
|
||||
if (!profilePath.toFile().exists()) {
|
||||
profilePath.toFile().mkdirs();
|
||||
}
|
||||
|
||||
try {
|
||||
Path profilePath = Path.of(JAML.path + "\\assets\\");
|
||||
if (!profilePath.toFile().exists()) {
|
||||
profilePath.toFile().mkdirs();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Path dataPath = Path.of(JAML.path + "\\data\\");
|
||||
if (!dataPath.toFile().exists()) {
|
||||
dataPath.toFile().mkdirs();
|
||||
}
|
||||
|
||||
try {
|
||||
Path dataPath = Path.of(JAML.path + "\\data\\");
|
||||
if (!dataPath.toFile().exists()) {
|
||||
dataPath.toFile().mkdirs();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Path skinsPath = Path.of(JAML.path + "\\data\\skins\\");
|
||||
if (!skinsPath.toFile().exists()) {
|
||||
skinsPath.toFile().mkdirs();
|
||||
}
|
||||
|
||||
try {
|
||||
Path skinsPath = Path.of(JAML.path + "\\data\\skins\\");
|
||||
if (!skinsPath.toFile().exists()) {
|
||||
skinsPath.toFile().mkdirs();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Path versionManifestPath = Path.of(JAML.path + "\\data\\version-manifest\\");
|
||||
if (!versionManifestPath.toFile().exists()) {
|
||||
versionManifestPath.toFile().mkdirs();
|
||||
}
|
||||
|
||||
Path cachePath = Path.of(JAML.path + "\\cache");
|
||||
if (!cachePath.toFile().exists()) {
|
||||
cachePath.toFile().mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
private static void smoothIncrease(CustomProgressBarPanel pb, int to) {
|
||||
int i = pb.getProgress();
|
||||
while (i <= to) {
|
||||
pb.setProgress(i);
|
||||
private static void smoothIncrease() {
|
||||
int i = progressBar.getProgress();
|
||||
while (i <= (100 / TASKS) * task) {
|
||||
progressBar.setProgress(i);
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package tech.nevets.jaml.gui.panels;
|
||||
|
||||
|
||||
import tech.nevets.jaml.JAML;
|
||||
import tech.nevets.jaml.Launcher;
|
||||
import tech.nevets.jaml.util.ImageUtils;
|
||||
import tech.nevets.jaml.util.ProfileUtils;
|
||||
|
||||
@@ -18,7 +19,9 @@ public class HomePanel extends JPanel {
|
||||
|
||||
JButton launchButton = new JButton("Launch");
|
||||
launchButton.setBounds(512, 619, 196, 51);
|
||||
//launchButton.setIcon(); //TODO Create nice looking buttons and apply them to project
|
||||
launchButton.addActionListener(al -> {
|
||||
new Launcher(17, 6, "zgc", true);
|
||||
});
|
||||
add(launchButton);
|
||||
|
||||
JComboBox activeProfileDropdown = new JComboBox(ProfileUtils.profileList);
|
||||
|
||||
135
src/main/java/tech/nevets/jaml/util/CacheUtils.java
Normal file
135
src/main/java/tech/nevets/jaml/util/CacheUtils.java
Normal file
@@ -0,0 +1,135 @@
|
||||
package tech.nevets.jaml.util;
|
||||
|
||||
import com.google.gson.*;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import tech.nevets.jaml.JAML;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CacheUtils {
|
||||
public static final String CACHE_PATH = JAML.path + "\\cache\\";
|
||||
public static void generateCache(String cacheName) {
|
||||
try {
|
||||
File file = new File(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
if (!file.exists()) {
|
||||
file.createNewFile();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeCache(String cacheName, String[] values) {
|
||||
try {
|
||||
Writer writer = new FileWriter(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
|
||||
GsonBuilder builder = new GsonBuilder();
|
||||
builder.setPrettyPrinting();
|
||||
|
||||
Gson gson = builder.create();
|
||||
String jsonString = gson.toJson(values);
|
||||
|
||||
writer.write(jsonString);
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void addToCache(String cacheName, String value) {
|
||||
try {
|
||||
File cacheFile = new File(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
|
||||
if (!cacheFile.exists()) {
|
||||
generateCache(cacheName);
|
||||
}
|
||||
|
||||
String[] cacheArray = new Gson().fromJson(FileUtils.readFileToString(cacheFile, StandardCharsets.UTF_8), String[].class);
|
||||
ArrayList<String> cacheArrayList;
|
||||
|
||||
if (cacheArray == null) {
|
||||
cacheArrayList = new ArrayList<>();
|
||||
} else {
|
||||
cacheArrayList = new ArrayList<>(List.of(cacheArray));
|
||||
}
|
||||
|
||||
if (!cacheArrayList.contains(value)) {
|
||||
cacheArrayList.add(value);
|
||||
}
|
||||
|
||||
writeCache(cacheName, cacheArrayList.toArray(new String[cacheArrayList.size()]));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void addToCache(String cacheName, String[] values) {
|
||||
try {
|
||||
File cacheFile = new File(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
|
||||
if (!cacheFile.exists()) {
|
||||
generateCache(cacheName);
|
||||
}
|
||||
|
||||
String[] cacheArray = new Gson().fromJson(FileUtils.readFileToString(cacheFile, StandardCharsets.UTF_8), String[].class);
|
||||
ArrayList<String> cacheArrayList;
|
||||
|
||||
if (cacheArray == null) {
|
||||
cacheArrayList = new ArrayList<>();
|
||||
} else {
|
||||
cacheArrayList = new ArrayList<>(List.of(cacheArray));
|
||||
}
|
||||
|
||||
for (String value : values) {
|
||||
if (!cacheArrayList.contains(value)) {
|
||||
cacheArrayList.add(value);
|
||||
}
|
||||
}
|
||||
|
||||
writeCache(cacheName, cacheArrayList.toArray(new String[cacheArrayList.size()]));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeFromCache(String cacheName, String value) {
|
||||
try {
|
||||
File cacheFile = new File(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
String[] cacheArray = new Gson().fromJson(FileUtils.readFileToString(cacheFile, StandardCharsets.UTF_8), String[].class);
|
||||
ArrayList<String> cacheArrayList;
|
||||
|
||||
if (cacheArray == null) {
|
||||
cacheArrayList = new ArrayList<>();
|
||||
} else {
|
||||
cacheArrayList = new ArrayList<>(List.of(cacheArray));
|
||||
}
|
||||
|
||||
cacheArrayList.remove(value);
|
||||
|
||||
writeCache(cacheName, cacheArrayList.toArray(new String[cacheArrayList.size()]));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String[] getCache(String cacheName) {
|
||||
try {
|
||||
File cacheFile = new File(CACHE_PATH + "\\" + cacheName + ".json");
|
||||
|
||||
if (!cacheFile.exists()) {
|
||||
generateCache(cacheName);
|
||||
}
|
||||
|
||||
return new Gson().fromJson(FileUtils.readFileToString(cacheFile, StandardCharsets.UTF_8), String[].class);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return new String[]{};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,19 @@ package tech.nevets.jaml.util;
|
||||
|
||||
public class DataCompressor {
|
||||
|
||||
private final String data;
|
||||
private final String key;
|
||||
private final String salt;
|
||||
private String value;
|
||||
|
||||
private String data;
|
||||
private String key;
|
||||
private String salt;
|
||||
|
||||
public DataCompressor() {
|
||||
}
|
||||
|
||||
public DataCompressor(String key, String value) {
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public DataCompressor(String data, String key, String salt) {
|
||||
this.data = data;
|
||||
@@ -12,6 +22,10 @@ public class DataCompressor {
|
||||
this.salt = salt;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public String getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class HttpUtils {
|
||||
return response.body();
|
||||
} catch (IOException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
package tech.nevets.jaml.util;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import tech.nevets.jaml.JAML;
|
||||
import tech.nevets.jaml.objects.Version;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class VersionFetcher {
|
||||
|
||||
public static Version getVersion(String version) {
|
||||
Gson gson = new Gson();
|
||||
JsonObject versionManifestJson = getList();
|
||||
JsonArray versionsJsonArray = versionManifestJson.getAsJsonArray("versions");
|
||||
Version[] versionArray = gson.fromJson(versionsJsonArray, Version[].class);
|
||||
|
||||
for (Version value : versionArray) {
|
||||
if (value.getId().equalsIgnoreCase(version)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Version getVersion(String version, String type) {
|
||||
Gson gson = new Gson();
|
||||
JsonObject versionManifestJson = getList();
|
||||
JsonArray versionsJsonArray = versionManifestJson.getAsJsonArray("versions");
|
||||
Version[] versionArray = gson.fromJson(versionsJsonArray, Version[].class);
|
||||
|
||||
for (Version value : versionArray) {
|
||||
if (value.getType().equalsIgnoreCase(type)) {
|
||||
if (value.getId().equalsIgnoreCase(version)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param branch, release or snapshot
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String getLatestVersion(String branch) {
|
||||
JsonObject versionManifestJson = getList();
|
||||
JsonObject latestJsonObject = versionManifestJson.get("latest").getAsJsonObject();
|
||||
|
||||
return latestJsonObject.get(branch).getAsString();
|
||||
}
|
||||
|
||||
@SuppressWarnings("Deprecated")
|
||||
public static JsonObject getList() {
|
||||
try {
|
||||
URL versionManifestUrl = new URL("https://launchermeta.mojang.com/mc/game/version_manifest.json");
|
||||
FileUtils.copyURLToFile(versionManifestUrl, new File(JAML.path + "\\data\\version.json"));
|
||||
|
||||
File versionManifestFile = new File(JAML.path + "\\data\\version.json");
|
||||
|
||||
return new Gson().fromJson(FileUtils.readFileToString(versionManifestFile, StandardCharsets.UTF_8), JsonObject.class);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
144
src/main/java/tech/nevets/jaml/util/VersionUtils.java
Normal file
144
src/main/java/tech/nevets/jaml/util/VersionUtils.java
Normal file
@@ -0,0 +1,144 @@
|
||||
package tech.nevets.jaml.util;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import tech.nevets.jaml.Config;
|
||||
import tech.nevets.jaml.JAML;
|
||||
import tech.nevets.jaml.objects.Version;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class VersionUtils {
|
||||
public static Version[] versionsList;
|
||||
|
||||
public static Version[] getVersionsList() {
|
||||
Gson gson = new Gson();
|
||||
JsonObject versionManifestJson = getList();
|
||||
JsonArray versionsJsonArray = versionManifestJson.getAsJsonArray("versions");
|
||||
Version[] versionArray = gson.fromJson(versionsJsonArray, Version[].class);
|
||||
|
||||
if (Config.CONFIG.getBoolean("game.show-snapshots")) {
|
||||
return versionArray;
|
||||
} else {
|
||||
ArrayList<Version> versionArrayList = new ArrayList<>();
|
||||
for (Version version : versionArray) {
|
||||
if (version.getType().equalsIgnoreCase("release")) {
|
||||
versionArrayList.add(version);
|
||||
}
|
||||
}
|
||||
|
||||
return versionArrayList.toArray(new Version[versionArrayList.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
public static Version toVersion(String version) {
|
||||
Version[] versionArray = getVersionsList();
|
||||
|
||||
for (Version value : versionArray) {
|
||||
if (value.getId().equalsIgnoreCase(version)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param branch, release or snapshot
|
||||
* @return something
|
||||
*/
|
||||
public static String getLatestVersion(String branch) {
|
||||
JsonObject versionManifestJson = getList();
|
||||
JsonObject latestJsonObject = versionManifestJson.get("latest").getAsJsonObject();
|
||||
|
||||
return latestJsonObject.get(branch).getAsString();
|
||||
}
|
||||
|
||||
public static void downloadList() {
|
||||
try {
|
||||
URL versionManifestUrl = new URL("https://launchermeta.mojang.com/mc/game/version_manifest.json");
|
||||
FileUtils.copyURLToFile(versionManifestUrl, new File(JAML.path + "\\data\\version.json"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static JsonObject getList() {
|
||||
try {
|
||||
File versionManifestFile = new File(JAML.path + "\\data\\version.json");
|
||||
|
||||
return new Gson().fromJson(FileUtils.readFileToString(versionManifestFile, StandardCharsets.UTF_8), JsonObject.class);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void getLibs() {
|
||||
try {
|
||||
Version version = toVersion(ProfileUtils.getActiveProfile().getVersion());
|
||||
URL versionManifestUrl = version.getUrl();
|
||||
FileUtils.copyURLToFile(versionManifestUrl, new File(JAML.path + "\\data\\" + version.getId() + ".json"));
|
||||
|
||||
File versionFile = new File(JAML.path + "\\data\\" + version.getId() + ".json");
|
||||
JsonObject versionJson = new Gson().fromJson(FileUtils.readFileToString(versionFile, StandardCharsets.UTF_8), JsonObject.class);
|
||||
|
||||
JsonArray libsJson = versionJson.getAsJsonArray("libraries");
|
||||
ArrayList<String> cache = new ArrayList<>();
|
||||
String[] cacheArray = CacheUtils.getCache("libs");
|
||||
|
||||
if (cacheArray != null) {
|
||||
for (String value : CacheUtils.getCache("libs")) {
|
||||
cache.add(value);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO Account for only native downloads
|
||||
//TODO Implement OS Check and set constants accordingly
|
||||
if (!cache.contains(version.getId())) {
|
||||
for (int i = 0; i < libsJson.size(); i++) {
|
||||
JsonElement downloads = libsJson.get(i);
|
||||
JsonObject download = downloads.getAsJsonObject().getAsJsonObject("downloads");
|
||||
JsonElement artifact = download.getAsJsonObject().get("artifact");
|
||||
JsonElement classifiers = download.getAsJsonObject().get("classifiers");
|
||||
JsonElement pathJson;
|
||||
|
||||
if (artifact != null) {
|
||||
pathJson = artifact.getAsJsonObject().get("path");
|
||||
} else if (classifiers != null) {
|
||||
//TODO add logic for classifiers
|
||||
System.out.println("classifier");
|
||||
continue;
|
||||
} else {
|
||||
System.out.println("Something unexpected was in the libraries array...");
|
||||
return;
|
||||
}
|
||||
|
||||
String path = pathJson.getAsString();
|
||||
|
||||
String url = artifact.getAsJsonObject().get("url").toString();
|
||||
|
||||
FileUtils.copyURLToFile(new URL(url.replace("\"", "")), new File((ProfileUtils.getActiveProfile().getGamePath()) + "\\libraries\\" + path));
|
||||
}
|
||||
|
||||
CacheUtils.addToCache("libs", version.getId());
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void updateVersionsList() {
|
||||
versionsList = getVersionsList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user