diff --git a/libraries/launcher/formatting-profile.xml b/libraries/launcher/formatting-profile.xml new file mode 100644 index 00000000..bebc783e --- /dev/null +++ b/libraries/launcher/formatting-profile.xml @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/launcher/net/minecraft/Launcher.java b/libraries/launcher/net/minecraft/Launcher.java index 796e4829..ce9b59d4 100644 --- a/libraries/launcher/net/minecraft/Launcher.java +++ b/libraries/launcher/net/minecraft/Launcher.java @@ -68,7 +68,8 @@ import java.util.TreeMap; /** * WARNING: This class is reflectively accessed by legacy Forge versions. *

- * Changing field and method declarations without further testing is not recommended. + * Changing field and method declarations without further testing is not + * recommended. */ public final class Launcher extends Applet implements AppletStub { @@ -80,11 +81,10 @@ public final class Launcher extends Applet implements AppletStub { private final URL documentBase; private boolean active = false; - public Launcher(Applet applet) { - this(applet, null); - } + public Launcher(Applet applet) { this(applet, null); } - public Launcher(Applet applet, URL documentBase) { + public Launcher(Applet applet, URL documentBase) + { setLayout(new BorderLayout()); this.add(applet, "Center"); @@ -108,7 +108,8 @@ public final class Launcher extends Applet implements AppletStub { } } - public void replace(Applet applet) { + public void replace(Applet applet) + { wrappedApplet = applet; applet.setStub(this); @@ -127,17 +128,14 @@ public final class Launcher extends Applet implements AppletStub { } @Override - public boolean isActive() { - return active; - } + public boolean isActive() { return active; } @Override - public URL getDocumentBase() { - return documentBase; - } + public URL getDocumentBase() { return documentBase; } @Override - public URL getCodeBase() { + public URL getCodeBase() + { try { // TODO: 2022-10-27 Can this be changed to https? return new URL("http://www.minecraft.net/game/"); @@ -147,7 +145,8 @@ public final class Launcher extends Applet implements AppletStub { } @Override - public String getParameter(String name) { + public String getParameter(String name) + { String param = params.get(name); if (param != null) @@ -162,62 +161,54 @@ public final class Launcher extends Applet implements AppletStub { } @Override - public void resize(int width, int height) { - wrappedApplet.resize(width, height); - } + public void resize(int width, int height) { wrappedApplet.resize(width, height); } @Override - public void resize(Dimension size) { - wrappedApplet.resize(size); - } + public void resize(Dimension size) { wrappedApplet.resize(size); } @Override - public void init() { + public void init() + { if (wrappedApplet != null) wrappedApplet.init(); } @Override - public void start() { + public void start() + { wrappedApplet.start(); active = true; } @Override - public void stop() { + public void stop() + { wrappedApplet.stop(); active = false; } @Override - public void destroy() { - wrappedApplet.destroy(); - } + public void destroy() { wrappedApplet.destroy(); } @Override - public void appletResize(int width, int height) { - wrappedApplet.resize(width, height); - } + public void appletResize(int width, int height) { wrappedApplet.resize(width, height); } @Override - public void setVisible(boolean visible) { + public void setVisible(boolean visible) + { super.setVisible(visible); wrappedApplet.setVisible(visible); } @Override - public void paint(Graphics graphics) { - } + public void paint(Graphics graphics) {} @Override - public void update(Graphics graphics) { - } + public void update(Graphics graphics) {} - public void setParameter(String name, String value) { - params.put(name, value); - } + public void setParameter(String name, String value) { params.put(name, value); } } diff --git a/libraries/launcher/org/prismlauncher/EntryPoint.java b/libraries/launcher/org/prismlauncher/EntryPoint.java index be180d6a..88d5d8be 100644 --- a/libraries/launcher/org/prismlauncher/EntryPoint.java +++ b/libraries/launcher/org/prismlauncher/EntryPoint.java @@ -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; } } } diff --git a/libraries/launcher/org/prismlauncher/launcher/LauncherFactory.java b/libraries/launcher/org/prismlauncher/launcher/LauncherFactory.java index 4844a774..1f7ea91b 100644 --- a/libraries/launcher/org/prismlauncher/launcher/LauncherFactory.java +++ b/libraries/launcher/org/prismlauncher/launcher/LauncherFactory.java @@ -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; - } } } diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java index 8aec7c28..9eda8caf 100644 --- a/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java +++ b/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java @@ -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())); 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; diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java index d5b7961a..e7b4599b 100644 --- a/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java +++ b/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java @@ -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); } } } diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java index 96b422b2..3cc10238 100644 --- a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java +++ b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java @@ -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 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) { diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java index b7109962..5395acec 100644 --- a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java +++ b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java @@ -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); } } } diff --git a/libraries/launcher/org/prismlauncher/utils/Parameters.java b/libraries/launcher/org/prismlauncher/utils/Parameters.java index d019aa41..3378775f 100644 --- a/libraries/launcher/org/prismlauncher/utils/Parameters.java +++ b/libraries/launcher/org/prismlauncher/utils/Parameters.java @@ -68,7 +68,8 @@ public final class Parameters { private final Map> map = new HashMap<>(); - public void add(String key, String value) { + public void add(String key, String value) + { List params = map.get(key); if (params == null) { @@ -80,7 +81,8 @@ public final class Parameters { params.add(value); } - public List getList(String key) throws ParameterNotFoundException { + public List getList(String key) throws ParameterNotFoundException + { List params = map.get(key); if (params == null) @@ -89,7 +91,8 @@ public final class Parameters { return params; } - public List getList(String key, List def) { + public List getList(String key, List def) + { List 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 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 params = map.get(key); if (params == null || params.isEmpty()) diff --git a/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java b/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java index ad9e57fd..6e882387 100644 --- a/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java +++ b/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java @@ -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. *

- * Resolves a method that matches the following signature - * + * Resolves a method that matches the following signature * public static void main(String[] args) { *

* } @@ -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. *

- * Resolves a method that matches the following signature - * + * Resolves a method that matches the following signature * public static void main(String[] args) { *

* } * * - * @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)); } } diff --git a/libraries/launcher/org/prismlauncher/utils/StringUtils.java b/libraries/launcher/org/prismlauncher/utils/StringUtils.java index a371b0cb..08e6770e 100644 --- a/libraries/launcher/org/prismlauncher/utils/StringUtils.java +++ b/libraries/launcher/org/prismlauncher/utils/StringUtils.java @@ -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;