Attempt to mimic clang-format
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
@ -71,25 +71,25 @@ import java.util.logging.Logger;
|
||||
public final class EntryPoint {
|
||||
private static final Logger LOGGER = Logger.getLogger("EntryPoint");
|
||||
|
||||
private EntryPoint() {
|
||||
}
|
||||
private EntryPoint() {}
|
||||
|
||||
public static void main(String[] args) {
|
||||
public static void main(String[] args)
|
||||
{
|
||||
ExitCode exitCode = listen();
|
||||
|
||||
if (exitCode != ExitCode.NORMAL) {
|
||||
LOGGER.warning("Exiting with " + exitCode);
|
||||
|
||||
//noinspection CallToSystemExit
|
||||
// noinspection CallToSystemExit
|
||||
System.exit(exitCode.numericalCode);
|
||||
}
|
||||
}
|
||||
|
||||
private static PreLaunchAction parseLine(String input, Parameters params) throws ParseException {
|
||||
private static PreLaunchAction parseLine(String input, Parameters params) throws ParseException
|
||||
{
|
||||
if (input.isEmpty()) // TODO: 2022-11-01 Should we just ignore this?
|
||||
throw new ParseException("Unexpected empty string! You should not pass empty newlines to stdin.");
|
||||
|
||||
|
||||
if ("launch".equalsIgnoreCase(input))
|
||||
return PreLaunchAction.LAUNCH;
|
||||
else if ("abort".equalsIgnoreCase(input))
|
||||
@ -98,8 +98,8 @@ public final class EntryPoint {
|
||||
String[] pair = StringUtils.splitStringPair(' ', input);
|
||||
if (pair == null)
|
||||
throw new ParseException(String.format(
|
||||
"Could not split input string '%s' by space. All input provided from stdin must be either 'launch', 'abort', or " +
|
||||
"in the format '[param name] [param]'.",
|
||||
"Could not split input string '%s' by space. All input provided from stdin must be either 'launch', 'abort', or "
|
||||
+ "in the format '[param name] [param]'.",
|
||||
input));
|
||||
|
||||
params.add(pair[0], pair[1]);
|
||||
@ -108,7 +108,8 @@ public final class EntryPoint {
|
||||
}
|
||||
}
|
||||
|
||||
private static ExitCode listen() {
|
||||
private static ExitCode listen()
|
||||
{
|
||||
Parameters parameters = new Parameters();
|
||||
PreLaunchAction preLaunchAction = PreLaunchAction.PROCEED;
|
||||
|
||||
@ -116,7 +117,7 @@ public final class EntryPoint {
|
||||
String line;
|
||||
|
||||
while (preLaunchAction == PreLaunchAction.PROCEED) {
|
||||
//noinspection NestedAssignment
|
||||
// noinspection NestedAssignment
|
||||
if ((line = reader.readLine()) != null)
|
||||
preLaunchAction = parseLine(line, parameters);
|
||||
else
|
||||
@ -157,23 +158,15 @@ public final class EntryPoint {
|
||||
}
|
||||
|
||||
private enum PreLaunchAction {
|
||||
PROCEED,
|
||||
LAUNCH,
|
||||
ABORT
|
||||
PROCEED, LAUNCH, ABORT
|
||||
}
|
||||
|
||||
private enum ExitCode {
|
||||
NORMAL(0),
|
||||
ABORT(1),
|
||||
ERROR(2),
|
||||
ILLEGAL_ARGUMENT(3),
|
||||
REFLECTION_EXCEPTION(4);
|
||||
NORMAL(0), ABORT(1), ERROR(2), ILLEGAL_ARGUMENT(3), REFLECTION_EXCEPTION(4);
|
||||
|
||||
private final int numericalCode;
|
||||
|
||||
ExitCode(int numericalCode) {
|
||||
this.numericalCode = numericalCode;
|
||||
}
|
||||
ExitCode(int numericalCode) { this.numericalCode = numericalCode; }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -46,36 +46,31 @@ import org.prismlauncher.utils.Parameters;
|
||||
|
||||
public final class LauncherFactory {
|
||||
|
||||
private LauncherFactory() {
|
||||
}
|
||||
private LauncherFactory()
|
||||
{}
|
||||
|
||||
public static Launcher createLauncher(String launcherType, Parameters parameters) {
|
||||
return createLauncher(LauncherType.valueOf(launcherType.toUpperCase()), parameters);
|
||||
}
|
||||
public static Launcher createLauncher(String launcherType, Parameters parameters)
|
||||
{ return createLauncher(LauncherType.valueOf(launcherType.toUpperCase()), parameters); }
|
||||
|
||||
public static Launcher createLauncher(LauncherType launcherType, Parameters parameters) {
|
||||
public static Launcher createLauncher(LauncherType launcherType, Parameters parameters)
|
||||
{
|
||||
LauncherProvider launcherProvider = launcherType.getLauncherProvider();
|
||||
|
||||
return launcherProvider.provide(parameters);
|
||||
}
|
||||
|
||||
public static Launcher createLauncher(Parameters parameters) {
|
||||
return createLauncher(parameters.getString("launcher"), parameters);
|
||||
}
|
||||
public static Launcher createLauncher(Parameters parameters)
|
||||
{ return createLauncher(parameters.getString("launcher"), parameters); }
|
||||
|
||||
public enum LauncherType {
|
||||
STANDARD(StandardLauncher.getProvider()),
|
||||
LEGACY(LegacyLauncher.getProvider());
|
||||
STANDARD(StandardLauncher.getProvider()), LEGACY(LegacyLauncher.getProvider());
|
||||
|
||||
private final LauncherProvider launcherProvider;
|
||||
|
||||
LauncherType(LauncherProvider launcherProvider) {
|
||||
this.launcherProvider = launcherProvider;
|
||||
}
|
||||
LauncherType(LauncherProvider launcherProvider) { this.launcherProvider = launcherProvider; }
|
||||
|
||||
public LauncherProvider getLauncherProvider() { return launcherProvider; }
|
||||
|
||||
public LauncherProvider getLauncherProvider() {
|
||||
return launcherProvider;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -80,7 +80,8 @@ public abstract class AbstractLauncher implements Launcher {
|
||||
|
||||
protected final String mainClassName;
|
||||
|
||||
protected AbstractLauncher(Parameters params) {
|
||||
protected AbstractLauncher(Parameters params)
|
||||
{
|
||||
this.mcParams = Collections.unmodifiableList(params.getList("param", new ArrayList<String>()));
|
||||
this.mainClassName = params.getString("mainClass", "net.minecraft.client.Minecraft");
|
||||
|
||||
@ -99,10 +100,12 @@ public abstract class AbstractLauncher implements Launcher {
|
||||
this.width = Integer.parseInt(sizePair[0]);
|
||||
this.height = Integer.parseInt(sizePair[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new ParseException(String.format("Could not parse window parameters from '%s'", windowParams), e);
|
||||
throw new ParseException(String.format("Could not parse window parameters from '%s'", windowParams),
|
||||
e);
|
||||
}
|
||||
} else {
|
||||
throw new ParseException(String.format("Invalid window size parameters '%s'. Format: [height]x[width]", windowParams));
|
||||
throw new ParseException(
|
||||
String.format("Invalid window size parameters '%s'. Format: [height]x[width]", windowParams));
|
||||
}
|
||||
} else {
|
||||
this.width = DEFAULT_WINDOW_WIDTH;
|
||||
|
@ -66,16 +66,13 @@ import java.util.List;
|
||||
|
||||
public final class StandardLauncher extends AbstractLauncher {
|
||||
|
||||
public StandardLauncher(Parameters params) {
|
||||
super(params);
|
||||
}
|
||||
public StandardLauncher(Parameters params) { super(params); }
|
||||
|
||||
public static LauncherProvider getProvider() {
|
||||
return new StandardLauncherProvider();
|
||||
}
|
||||
public static LauncherProvider getProvider() { return new StandardLauncherProvider(); }
|
||||
|
||||
@Override
|
||||
public void launch() throws Throwable {
|
||||
public void launch() throws Throwable
|
||||
{
|
||||
// window size, title and state
|
||||
|
||||
// FIXME: there is no good way to maximize the minecraft window from here.
|
||||
@ -104,9 +101,7 @@ public final class StandardLauncher extends AbstractLauncher {
|
||||
|
||||
private static class StandardLauncherProvider implements LauncherProvider {
|
||||
@Override
|
||||
public Launcher provide(Parameters parameters) {
|
||||
return new StandardLauncher(parameters);
|
||||
}
|
||||
public Launcher provide(Parameters parameters) { return new StandardLauncher(parameters); }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -82,7 +82,8 @@ public final class LegacyFrame extends Frame /* TODO consider JFrame */ {
|
||||
|
||||
private final Launcher launcher;
|
||||
|
||||
public LegacyFrame(String title, Applet applet) {
|
||||
public LegacyFrame(String title, Applet applet)
|
||||
{
|
||||
super(title);
|
||||
|
||||
launcher = new Launcher(applet);
|
||||
@ -98,35 +99,24 @@ public final class LegacyFrame extends Frame /* TODO consider JFrame */ {
|
||||
addWindowListener(new ForceExitHandler());
|
||||
}
|
||||
|
||||
public void start (
|
||||
String user,
|
||||
String session,
|
||||
int width,
|
||||
int height,
|
||||
boolean maximize,
|
||||
String serverAddress,
|
||||
String serverPort,
|
||||
boolean isDemo
|
||||
) {
|
||||
// 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.
|
||||
public void start(String user, String session, int width, int height, boolean maximize, String serverAddress,
|
||||
String serverPort, boolean isDemo)
|
||||
{
|
||||
// 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.
|
||||
|
||||
Path mpticketFile =
|
||||
Paths.get(System.getProperty("user.dir"), "..", "mpticket");
|
||||
Path mpticketFile = Paths.get(System.getProperty("user.dir"), "..", "mpticket");
|
||||
|
||||
Path mpticketFileCorrupt =
|
||||
Paths.get(System.getProperty("user.dir"), "..", "mpticket.corrupt");
|
||||
Path mpticketFileCorrupt = Paths.get(System.getProperty("user.dir"), "..", "mpticket.corrupt");
|
||||
|
||||
if (Files.exists(mpticketFile)) {
|
||||
try {
|
||||
List<String> lines = Files.readAllLines(mpticketFile, StandardCharsets.UTF_8);
|
||||
|
||||
if (lines.size() < 3) {
|
||||
Files.move(
|
||||
mpticketFile,
|
||||
mpticketFileCorrupt,
|
||||
StandardCopyOption.REPLACE_EXISTING
|
||||
);
|
||||
Files.move(mpticketFile, mpticketFileCorrupt, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
LOGGER.warning("Mpticket file is corrupted!");
|
||||
} else {
|
||||
@ -175,10 +165,12 @@ public final class LegacyFrame extends Frame /* TODO consider JFrame */ {
|
||||
private final class ForceExitHandler extends WindowAdapter {
|
||||
|
||||
@Override
|
||||
public void windowClosing(WindowEvent event) {
|
||||
public void windowClosing(WindowEvent event)
|
||||
{
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
public void run()
|
||||
{
|
||||
try {
|
||||
Thread.sleep(30000L);
|
||||
} catch (InterruptedException e) {
|
||||
|
@ -83,7 +83,8 @@ public final class LegacyLauncher extends AbstractLauncher {
|
||||
private final boolean usesApplet;
|
||||
private final String cwd;
|
||||
|
||||
public LegacyLauncher(Parameters params) {
|
||||
public LegacyLauncher(Parameters params)
|
||||
{
|
||||
super(params);
|
||||
|
||||
user = params.getString("userName");
|
||||
@ -97,12 +98,11 @@ public final class LegacyLauncher extends AbstractLauncher {
|
||||
cwd = System.getProperty("user.dir");
|
||||
}
|
||||
|
||||
public static LauncherProvider getProvider() {
|
||||
return new LegacyLauncherProvider();
|
||||
}
|
||||
public static LauncherProvider getProvider() { return new LegacyLauncherProvider(); }
|
||||
|
||||
@Override
|
||||
public void launch() throws Throwable {
|
||||
public void launch() throws Throwable
|
||||
{
|
||||
Class<?> main = ClassLoader.getSystemClassLoader().loadClass(this.mainClassName);
|
||||
Field gameDirField = ReflectionUtils.getMinecraftGameDirField(main);
|
||||
|
||||
@ -119,13 +119,8 @@ public final class LegacyLauncher extends AbstractLauncher {
|
||||
try {
|
||||
LegacyFrame window = new LegacyFrame(title, ReflectionUtils.createAppletClass(this.appletClass));
|
||||
|
||||
window.start(
|
||||
this.user,
|
||||
this.session,
|
||||
this.width, this.height, this.maximize,
|
||||
this.serverAddress, this.serverPort,
|
||||
this.mcParams.contains("--demo")
|
||||
);
|
||||
window.start(this.user, this.session, this.width, this.height, this.maximize, this.serverAddress,
|
||||
this.serverPort, this.mcParams.contains("--demo"));
|
||||
} catch (Throwable e) {
|
||||
LOGGER.log(Level.SEVERE, "Running applet wrapper failed with exception; falling back to main class", e);
|
||||
}
|
||||
@ -137,9 +132,7 @@ public final class LegacyLauncher extends AbstractLauncher {
|
||||
|
||||
private static class LegacyLauncherProvider implements LauncherProvider {
|
||||
@Override
|
||||
public Launcher provide(Parameters parameters) {
|
||||
return new LegacyLauncher(parameters);
|
||||
}
|
||||
public Launcher provide(Parameters parameters) { return new LegacyLauncher(parameters); }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -68,7 +68,8 @@ public final class Parameters {
|
||||
|
||||
private final Map<String, List<String>> map = new HashMap<>();
|
||||
|
||||
public void add(String key, String value) {
|
||||
public void add(String key, String value)
|
||||
{
|
||||
List<String> params = map.get(key);
|
||||
|
||||
if (params == null) {
|
||||
@ -80,7 +81,8 @@ public final class Parameters {
|
||||
params.add(value);
|
||||
}
|
||||
|
||||
public List<String> getList(String key) throws ParameterNotFoundException {
|
||||
public List<String> getList(String key) throws ParameterNotFoundException
|
||||
{
|
||||
List<String> params = map.get(key);
|
||||
|
||||
if (params == null)
|
||||
@ -89,7 +91,8 @@ public final class Parameters {
|
||||
return params;
|
||||
}
|
||||
|
||||
public List<String> getList(String key, List<String> def) {
|
||||
public List<String> getList(String key, List<String> def)
|
||||
{
|
||||
List<String> params = map.get(key);
|
||||
|
||||
if (params == null || params.isEmpty())
|
||||
@ -98,7 +101,8 @@ public final class Parameters {
|
||||
return params;
|
||||
}
|
||||
|
||||
public String getString(String key) throws ParameterNotFoundException {
|
||||
public String getString(String key) throws ParameterNotFoundException
|
||||
{
|
||||
List<String> list = getList(key);
|
||||
|
||||
if (list.isEmpty())
|
||||
@ -107,7 +111,8 @@ public final class Parameters {
|
||||
return list.get(0);
|
||||
}
|
||||
|
||||
public String getString(String key, String def) {
|
||||
public String getString(String key, String def)
|
||||
{
|
||||
List<String> params = map.get(key);
|
||||
|
||||
if (params == null || params.isEmpty())
|
||||
|
@ -38,7 +38,6 @@
|
||||
|
||||
package org.prismlauncher.utils;
|
||||
|
||||
|
||||
import java.applet.Applet;
|
||||
import java.io.File;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
@ -53,8 +52,7 @@ public final class ReflectionUtils {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger("ReflectionUtils");
|
||||
|
||||
private ReflectionUtils() {
|
||||
}
|
||||
private ReflectionUtils() {}
|
||||
|
||||
/**
|
||||
* Instantiate an applet class by name
|
||||
@ -65,13 +63,16 @@ public final class ReflectionUtils {
|
||||
*
|
||||
* @throws ClassNotFoundException if the provided class name cannot be found
|
||||
* @throws NoSuchMethodException if the no-args constructor cannot be found
|
||||
* @throws IllegalAccessException if the constructor cannot be accessed via method handles
|
||||
* @throws IllegalAccessException if the constructor cannot be accessed via
|
||||
* method handles
|
||||
* @throws Throwable any exceptions from the class's constructor
|
||||
*/
|
||||
public static Applet createAppletClass(String appletClassName) throws Throwable {
|
||||
public static Applet createAppletClass(String appletClassName) throws Throwable
|
||||
{
|
||||
Class<?> appletClass = ClassLoader.getSystemClassLoader().loadClass(appletClassName);
|
||||
|
||||
MethodHandle appletConstructor = MethodHandles.lookup().findConstructor(appletClass, MethodType.methodType(void.class));
|
||||
MethodHandle appletConstructor = MethodHandles.lookup().findConstructor(appletClass,
|
||||
MethodType.methodType(void.class));
|
||||
return (Applet) appletConstructor.invoke();
|
||||
}
|
||||
|
||||
@ -82,7 +83,8 @@ public final class ReflectionUtils {
|
||||
*
|
||||
* @return The found field.
|
||||
*/
|
||||
public static Field getMinecraftGameDirField(Class<?> minecraftMainClass) {
|
||||
public static Field getMinecraftGameDirField(Class<?> minecraftMainClass)
|
||||
{
|
||||
LOGGER.fine("Resolving minecraft game directory field");
|
||||
// Field we're looking for is always
|
||||
// private static File obfuscatedName = null;
|
||||
@ -94,7 +96,6 @@ public final class ReflectionUtils {
|
||||
|
||||
int fieldModifiers = field.getModifiers();
|
||||
|
||||
|
||||
// Must be static
|
||||
if (!Modifier.isStatic(fieldModifiers)) {
|
||||
LOGGER.log(Level.FINE, "Rejecting field {0} because it is not static", field.getName());
|
||||
@ -113,7 +114,8 @@ public final class ReflectionUtils {
|
||||
continue;
|
||||
}
|
||||
|
||||
LOGGER.log(Level.FINE, "Identified field {0} to match conditions for minecraft game directory field", field.getName());
|
||||
LOGGER.log(Level.FINE, "Identified field {0} to match conditions for minecraft game directory field",
|
||||
field.getName());
|
||||
|
||||
return field;
|
||||
}
|
||||
@ -124,8 +126,7 @@ public final class ReflectionUtils {
|
||||
/**
|
||||
* Resolve main entrypoint and returns method handle for it.
|
||||
* <p>
|
||||
* Resolves a method that matches the following signature
|
||||
* <code>
|
||||
* Resolves a method that matches the following signature <code>
|
||||
* public static void main(String[] args) {
|
||||
* <p>
|
||||
* }
|
||||
@ -135,34 +136,39 @@ public final class ReflectionUtils {
|
||||
*
|
||||
* @return The method handle for the resolved entrypoint
|
||||
*
|
||||
* @throws NoSuchMethodException If no method matching the correct signature can be found
|
||||
* @throws NoSuchMethodException If no method matching the correct signature
|
||||
* can be found
|
||||
* @throws IllegalAccessException If method handles cannot access the entrypoint
|
||||
*/
|
||||
public static MethodHandle findMainEntrypoint(Class<?> entrypointClass) throws NoSuchMethodException, IllegalAccessException {
|
||||
return MethodHandles.lookup().findStatic(entrypointClass, "main", MethodType.methodType(void.class, String[].class));
|
||||
public static MethodHandle findMainEntrypoint(Class<?> entrypointClass)
|
||||
throws NoSuchMethodException, IllegalAccessException
|
||||
{
|
||||
return MethodHandles.lookup().findStatic(entrypointClass, "main",
|
||||
MethodType.methodType(void.class, String[].class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve main entrypoint and returns method handle for it.
|
||||
* <p>
|
||||
* Resolves a method that matches the following signature
|
||||
* <code>
|
||||
* Resolves a method that matches the following signature <code>
|
||||
* public static void main(String[] args) {
|
||||
* <p>
|
||||
* }
|
||||
* </code>
|
||||
*
|
||||
* @param entrypointClassName The name of the entrypoint class to resolve the method from
|
||||
* @param entrypointClassName The name of the entrypoint class to resolve the
|
||||
* method from
|
||||
*
|
||||
* @return The method handle for the resolved entrypoint
|
||||
*
|
||||
* @throws ClassNotFoundException If a class cannot be found with the provided name
|
||||
* @throws NoSuchMethodException If no method matching the correct signature can be found
|
||||
* @throws ClassNotFoundException If a class cannot be found with the provided
|
||||
* name
|
||||
* @throws NoSuchMethodException If no method matching the correct signature
|
||||
* can be found
|
||||
* @throws IllegalAccessException If method handles cannot access the entrypoint
|
||||
*/
|
||||
public static MethodHandle findMainMethod(String entrypointClassName)
|
||||
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException {
|
||||
return findMainEntrypoint(ClassLoader.getSystemClassLoader().loadClass(entrypointClassName));
|
||||
}
|
||||
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException
|
||||
{ return findMainEntrypoint(ClassLoader.getSystemClassLoader().loadClass(entrypointClassName)); }
|
||||
|
||||
}
|
||||
|
@ -38,10 +38,10 @@ package org.prismlauncher.utils;
|
||||
|
||||
public final class StringUtils {
|
||||
|
||||
private StringUtils() {
|
||||
}
|
||||
private StringUtils() {}
|
||||
|
||||
public static String[] splitStringPair(char splitChar, String input) {
|
||||
public static String[] splitStringPair(char splitChar, String input)
|
||||
{
|
||||
int splitPoint = input.indexOf(splitChar);
|
||||
if (splitPoint == -1)
|
||||
return null;
|
||||
|
Reference in New Issue
Block a user