0.7.0 release
This commit is contained in:
parent
c1ec34804c
commit
aa4a911f0b
47
build.gradle
47
build.gradle
@ -1,13 +1,13 @@
|
||||
//import edu.sc.seis.launch4j.tasks.Launch4jLibraryTask
|
||||
import edu.sc.seis.launch4j.tasks.Launch4jLibraryTask
|
||||
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'com.github.johnrengelman.shadow' version '5.2.0'
|
||||
// id 'edu.sc.seis.launch4j' version '2.5.1'
|
||||
id 'edu.sc.seis.launch4j' version '2.5.1'
|
||||
}
|
||||
|
||||
group 'tech.nevets.jaml'
|
||||
version '0.6.0'
|
||||
version '0.7.0'
|
||||
def build = 'stable'
|
||||
|
||||
repositories {
|
||||
@ -41,28 +41,19 @@ shadowJar {
|
||||
}
|
||||
}
|
||||
|
||||
//launch4j {
|
||||
// mainClassName = 'tech.nevets.jaml.JAML'
|
||||
// outfile = 'JAML.exe'
|
||||
// jarTask = project.tasks.shadowJar
|
||||
// fileDescription = 'Just Another Minecraft Launcher'
|
||||
//
|
||||
//}
|
||||
//
|
||||
//task Build(type: Launch4jLibraryTask) {
|
||||
// mainClassName = 'tech.nevets.jaml.JAML'
|
||||
// outfile = 'JAML.exe'
|
||||
// jarTask = project.tasks.shadowJar
|
||||
// fileDescription = 'Just Another Minecraft Launcher'
|
||||
// bundledJre64Bit = true
|
||||
// bundledJrePath = ''
|
||||
//}
|
||||
//
|
||||
//task winBuild(type: Launch4jLibraryTask) {
|
||||
// mainClassName = 'tech.nevets.jaml.JAML'
|
||||
// outfile = 'JAML.exe'
|
||||
// jarTask = project.tasks.shadowJar
|
||||
// fileDescription = 'Just Another Minecraft Launcher'
|
||||
// bundledJre64Bit = true
|
||||
// bundledJrePath = ''
|
||||
//}
|
||||
launch4j {
|
||||
mainClassName = 'tech.nevets.jaml.JAML'
|
||||
outfile = 'JAML.exe'
|
||||
jarTask = project.tasks.shadowJar
|
||||
fileDescription = 'Just Another Minecraft Launcher'
|
||||
icon = "${projectDir}/src/main/resources/assets/icon.ico"
|
||||
productName = 'JAML'
|
||||
version = "$this.version"
|
||||
textVersion = "$this.version"
|
||||
copyright = "GPL3"
|
||||
companyName = "nevets.tech"
|
||||
downloadUrl = "https://git.nevets.tech/Steven/JAML"
|
||||
bundledJrePath = './jre'
|
||||
bundledJre64Bit = true
|
||||
bundledJreAsFallback = true
|
||||
}
|
@ -52,6 +52,8 @@ public class Config {
|
||||
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.keep-open", false);
|
||||
YML_FILE.setComment("launcher.keep-open", "Keeps the launcher open after launching the game");
|
||||
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);
|
||||
|
@ -9,8 +9,8 @@ public class JAML {
|
||||
public static GuiHandler guiHandler;
|
||||
|
||||
public static void main(String[] args) {
|
||||
//TODO Create logic to check for first launch without the use of config
|
||||
//TODO make guiHandler run first with the initial splash screen while backend is starting, then start homeGui when done. (Possibly multithreaded)
|
||||
|
||||
//TODO make bash script for jenkins to download optimized jre and bundle it with launch4j
|
||||
|
||||
GuiHandler.startup();
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package tech.nevets.jaml;
|
||||
|
||||
import tech.nevets.jaml.events.LaunchEvent;
|
||||
import tech.nevets.jaml.util.ProfileUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
@ -7,9 +8,9 @@ import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Launch {
|
||||
public class Launcher {
|
||||
|
||||
public Launch(int jdkVersion, int memoryAmount, String garbageCollection, boolean printConsole) throws IOException {
|
||||
public Launcher(int jdkVersion, int memoryAmount, String garbageCollection, boolean printConsole) throws IOException {
|
||||
ArrayList<String> commandArray = parseCommand(jdkVersion, memoryAmount, garbageCollection);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
@ -22,6 +23,9 @@ public class Launch {
|
||||
|
||||
System.out.println(command);
|
||||
|
||||
LaunchEvent e = new LaunchEvent();
|
||||
e.triggerEvent();
|
||||
|
||||
ProcessBuilder process = new ProcessBuilder();
|
||||
process.directory(ProfileUtils.activeProfile.getGamePath());
|
||||
process.command(command);
|
27
src/main/java/tech/nevets/jaml/events/LaunchEvent.java
Normal file
27
src/main/java/tech/nevets/jaml/events/LaunchEvent.java
Normal file
@ -0,0 +1,27 @@
|
||||
package tech.nevets.jaml.events;
|
||||
|
||||
import tech.nevets.jaml.Config;
|
||||
import tech.nevets.jaml.gui.GuiHandler;
|
||||
import tech.nevets.jaml.listeners.LaunchListener;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LaunchEvent {
|
||||
private List<LaunchListener> listeners = new ArrayList<>();
|
||||
|
||||
public void addListener(LaunchListener eventListener) {
|
||||
listeners.add(eventListener);
|
||||
}
|
||||
|
||||
public void triggerEvent() {
|
||||
if (!Config.CONFIG.getBoolean("launcher.keep-open")) {
|
||||
for (LaunchListener ll : listeners){
|
||||
for (JFrame frame : GuiHandler.frames) {
|
||||
ll.hideGui(frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -6,6 +6,8 @@ import tech.nevets.jaml.util.ProfileUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@ -15,6 +17,12 @@ public class FirstLoginGui extends JFrame {
|
||||
public FirstLoginGui() {
|
||||
setResizable(false);
|
||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
removeFromArray();
|
||||
}
|
||||
});
|
||||
setBounds(100, 100, 360, 330);
|
||||
contentPane = new JPanel();
|
||||
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||
@ -90,4 +98,8 @@ public class FirstLoginGui extends JFrame {
|
||||
});
|
||||
contentPane.add(button);
|
||||
}
|
||||
|
||||
private void removeFromArray() {
|
||||
GuiHandler.removeFromFramesArray(this);
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
package tech.nevets.jaml.gui;
|
||||
|
||||
import tech.nevets.jaml.Config;
|
||||
import tech.nevets.jaml.JAML;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GuiHandler {
|
||||
|
||||
@ -12,8 +12,16 @@ public class GuiHandler {
|
||||
public static final int SCREEN_HEIGHT = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
|
||||
|
||||
private static StartupGui startupFrame;
|
||||
public static ArrayList<JFrame> frames = new ArrayList<>();
|
||||
|
||||
public GuiHandler() {
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("Using default look and feel");
|
||||
}
|
||||
|
||||
if (Config.getConfig().getBoolean("launcher.first-launch")) {
|
||||
FirstLaunchGui firstLaunchGui = new FirstLaunchGui();
|
||||
Thread firstLaunchThread = new Thread(firstLaunchGui);
|
||||
@ -22,12 +30,14 @@ public class GuiHandler {
|
||||
|
||||
startupFrame.dispose();
|
||||
|
||||
|
||||
Thread homeGuiThread = new Thread(() -> {
|
||||
HomeGui frame = new HomeGui();
|
||||
frame.setTitle("JAML");
|
||||
frame.setIconImage(new ImageIcon(JAML.path + "\\assets\\icon.png").getImage());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setVisible(true);
|
||||
HomeGui homeFrame = new HomeGui();
|
||||
homeFrame.setTitle("JAML");
|
||||
homeFrame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("assets/icon.png")).getImage());
|
||||
homeFrame.setLocationRelativeTo(null);
|
||||
homeFrame.setVisible(true);
|
||||
addToFramesArray(homeFrame);
|
||||
});
|
||||
homeGuiThread.start();
|
||||
|
||||
@ -39,12 +49,20 @@ public class GuiHandler {
|
||||
|
||||
public void startNewProfileGui() {
|
||||
Thread newProfileGuiThread = new Thread(() -> {
|
||||
NewProfileGui frame = new NewProfileGui();
|
||||
frame.setTitle("Create New Profile");
|
||||
frame.setIconImage(new ImageIcon(JAML.path + "\\assets\\icon.png").getImage());
|
||||
frame.setVisible(true);
|
||||
NewProfileGui newProfileFrame = new NewProfileGui();
|
||||
newProfileFrame.setTitle("Create New Profile");
|
||||
newProfileFrame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("assets/icon.png")).getImage());
|
||||
newProfileFrame.setVisible(true);
|
||||
addToFramesArray(newProfileFrame);
|
||||
});
|
||||
newProfileGuiThread.start();
|
||||
}
|
||||
|
||||
public static void addToFramesArray(JFrame frame) {
|
||||
frames.add(frame);
|
||||
}
|
||||
|
||||
public static void removeFromFramesArray(JFrame frame) {
|
||||
frames.remove(frame);
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
package tech.nevets.jaml.gui;
|
||||
|
||||
import tech.nevets.jaml.JAML;
|
||||
import tech.nevets.jaml.gui.panels.HomePanel;
|
||||
import tech.nevets.jaml.gui.panels.ProfilePanel;
|
||||
import tech.nevets.jaml.gui.panels.UsersPanel;
|
||||
import tech.nevets.jaml.listeners.RightClickListener;
|
||||
import tech.nevets.jaml.util.ImageUtils;
|
||||
import tech.nevets.jaml.util.ProfileUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.event.WindowListener;
|
||||
|
||||
public class HomeGui extends JFrame {
|
||||
|
||||
@ -25,6 +25,12 @@ public class HomeGui extends JFrame {
|
||||
SpringLayout springLayout = new SpringLayout();
|
||||
getContentPane().setLayout(springLayout);
|
||||
addMouseListener(new RightClickListener());
|
||||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
removeFromArray();
|
||||
}
|
||||
});
|
||||
|
||||
tabPanel = new JTabbedPane();
|
||||
springLayout.putConstraint(SpringLayout.NORTH, tabPanel, 0, SpringLayout.NORTH, getContentPane());
|
||||
@ -48,4 +54,8 @@ public class HomeGui extends JFrame {
|
||||
tabPanel.addMouseListener(new RightClickListener());
|
||||
|
||||
}
|
||||
|
||||
private void removeFromArray() {
|
||||
GuiHandler.removeFromFramesArray(this);
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,8 @@ import tech.nevets.jaml.util.ProfileUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@ -17,7 +19,14 @@ public class NewProfileGui extends JFrame {
|
||||
setUndecorated(true);
|
||||
setResizable(false);
|
||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
removeFromArray();
|
||||
}
|
||||
});
|
||||
setBounds(100, 100, 360, 330);
|
||||
setLocationRelativeTo(null);
|
||||
contentPane = new JPanel();
|
||||
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||
setContentPane(contentPane);
|
||||
@ -92,6 +101,10 @@ public class NewProfileGui extends JFrame {
|
||||
});
|
||||
contentPane.add(button);
|
||||
}
|
||||
|
||||
private void removeFromArray() {
|
||||
GuiHandler.removeFromFramesArray(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,11 +13,13 @@ import java.nio.file.Path;
|
||||
|
||||
public class StartupGui extends JFrame {
|
||||
JPanel contentPane;
|
||||
private static JLabel currentTaskLabel;
|
||||
|
||||
public StartupGui() {
|
||||
setUndecorated(true);
|
||||
setResizable(false);
|
||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
setIconImage(new ImageIcon(getClass().getClassLoader().getResource("assets/icon.png")).getImage());
|
||||
setSize(GuiHandler.SCREEN_WIDTH / 3, GuiHandler.SCREEN_HEIGHT / 3);
|
||||
contentPane = new JPanel();
|
||||
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||
@ -25,6 +27,10 @@ public class StartupGui extends JFrame {
|
||||
contentPane.setLayout(null);
|
||||
setLocationRelativeTo(null);
|
||||
|
||||
currentTaskLabel = new JLabel("");
|
||||
currentTaskLabel.setBounds(30, 279, 176, 20);
|
||||
contentPane.add(currentTaskLabel);
|
||||
|
||||
int pbWidth = (int) (getWidth() / 1.1);
|
||||
int pbHeight = getHeight() / 24;
|
||||
int pbX = (getWidth() - pbWidth) / 2;
|
||||
@ -52,22 +58,24 @@ public class StartupGui extends JFrame {
|
||||
|
||||
|
||||
progressBar.setProgress(0);
|
||||
currentTaskLabel.setText("Making Directories...");
|
||||
makeDirs();
|
||||
smoothIncrease(progressBar, 20);
|
||||
currentTaskLabel.setText("Loading Config...");
|
||||
currentTaskLabel.repaint();
|
||||
Config.loadConfig();
|
||||
sleep();
|
||||
smoothIncrease(progressBar, 40);
|
||||
currentTaskLabel.setText("Loading Profiles...");
|
||||
ProfileUtils.getProfileList();
|
||||
sleep();
|
||||
smoothIncrease(progressBar, 60);
|
||||
currentTaskLabel.setText("Loading Active Profile...");
|
||||
ProfileUtils.getActiveProfile();
|
||||
sleep();
|
||||
smoothIncrease(progressBar, 80);
|
||||
currentTaskLabel.setText("Getting Game Loaders...");
|
||||
LoaderUtils.getLoaders();
|
||||
sleep();
|
||||
currentTaskLabel.setText("Done!");
|
||||
smoothIncrease(progressBar, 100);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void sleep() {
|
||||
@ -78,6 +86,10 @@ public class StartupGui extends JFrame {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setCurrentTask(String currentTask) {
|
||||
currentTaskLabel.setText(currentTask);
|
||||
}
|
||||
|
||||
private static void makeDirs() {
|
||||
if (System.getenv("JAML_HOME") == null) {
|
||||
JAML.path = Path.of(System.getenv("APPDATA") + "\\.jaml\\");
|
||||
@ -134,11 +146,6 @@ public class StartupGui extends JFrame {
|
||||
int i = pb.getProgress();
|
||||
while (i <= to) {
|
||||
pb.setProgress(i);
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class HomePanel extends JPanel {
|
||||
|
||||
JLabel backgroundIcon = new JLabel("");
|
||||
backgroundIcon.setBounds(0, 25, 1264, 542);
|
||||
ImageIcon backgroundImg = new ImageIcon(JAML.path + "\\assets\\background.png");
|
||||
ImageIcon backgroundImg = new ImageIcon(getClass().getClassLoader().getResource("assets/background.png"));
|
||||
backgroundImg = ImageUtils.resizeIcon(backgroundImg, backgroundIcon.getWidth(), backgroundIcon.getHeight());
|
||||
backgroundIcon.setIcon(backgroundImg);
|
||||
add(backgroundIcon);
|
||||
|
16
src/main/java/tech/nevets/jaml/listeners/LaunchListener.java
Normal file
16
src/main/java/tech/nevets/jaml/listeners/LaunchListener.java
Normal file
@ -0,0 +1,16 @@
|
||||
package tech.nevets.jaml.listeners;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.EventListener;
|
||||
|
||||
public class LaunchListener implements EventListener {
|
||||
public void hideGui(JFrame frame) {
|
||||
frame.setVisible(false);
|
||||
System.out.println("Frame: " + frame.getName() + " was hidden!");
|
||||
}
|
||||
|
||||
public void closeGui(JFrame frame) {
|
||||
frame.dispose();
|
||||
System.out.println("Frame: " + frame.getName() + " was closed!");
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@ package tech.nevets.jaml.listeners;
|
||||
|
||||
import tech.nevets.jaml.gui.RightClickGui;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 79 KiB |
Binary file not shown.
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 706 KiB |
5
src/main/resources/start.txt
Normal file
5
src/main/resources/start.txt
Normal file
@ -0,0 +1,5 @@
|
||||
```
|
||||
#!/bin/bash
|
||||
java -Xms16G -Xmx16G -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=assets/log_configs/client-1.12.xml "-DFabricMcEmu= net.minecraft.client.main.Main " "-Djava.library.path=versions/1.18.2/natives" "-cp" "libraries/com/mojang/logging/1.0.0/logging-1.0.0.jar:libraries/com/mojang/blocklist/1.0.10/blocklist-1.0.10.jar:libraries/com/mojang/patchy/2.2.10/patchy-2.2.10.jar:libraries/com/github/oshi/oshi-core/5.8.5/oshi-core-5.8.5.jar:libraries/net/java/dev/jna/jna/5.10.0/jna-5.10.0.jar:libraries/net/java/dev/jna/jna-platform/5.10.0/jna-platform-5.10.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.17.0/log4j-slf4j18-impl-2.17.0.jar:libraries/com/ibm/icu/icu4j/70.1/icu4j-70.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.1.27/datafixerupper-4.1.27.jar:libraries/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar:libraries/com/mojang/authlib/3.3.39/authlib-3.3.39.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.17.0/log4j-api-2.17.0.jar:libraries/org/apache/logging/log4j/log4j-core/2.17.0/log4j-core-2.17.0.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.12.4/text2speech-1.12.4.jar:versions/fabric-loader-0.13.3-1.18.2/fabric-loader-0.13.3-1.18.2.jar" net.minecraft.client.Main --username <your username here> --version 1.18.2 --gameDir . --assetsDir assets --assetIndex 1.18 --uuid <your uuid here> --accessToken 00000000000000000000000000000000 --clientId 0000 --xuid 0000 --userType mojang --versionType release
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user