diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 471cfaff36..94e17f22fa 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -361,6 +361,8 @@ public static List getJavaArgs(Context ctx) { "-Dext.net.resolvPath=" +new File(Tools.DIR_DATA,"resolv.conf").getAbsolutePath(), + "-Dlog4j2.formatMsgNoLookups=true", //Log4j RCE mitigation + "-Dnet.minecraft.clientmodname=" + Tools.APP_NAME, "-Dfml.earlyprogresswindow=false" //Forge 1.14+ workaround }; @@ -538,7 +540,6 @@ private static int getDetectedVersion() { public static native void setupExitTrap(Context context); // Obtain AWT screen pixels to render on Android SurfaceView public static native int[] renderAWTScreenFrame(/* Object canvas, int width, int height */); - static { System.loadLibrary("pojavexec"); System.loadLibrary("pojavexec_awt"); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java index 579cbbf43e..353f5343f9 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/MCOptionUtils.java @@ -16,7 +16,9 @@ import java.io.IOException; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; public class MCOptionUtils { @@ -56,9 +58,28 @@ public static void set(String key, String value) { parameterMap.put(key,value); } + /** Set an array of String, instead of a simple value. Not supported on all options */ + public static void set(String key, List values){ + parameterMap.put(key, values.toString()); + } + public static String get(String key){ return parameterMap.get(key); } + + /** @return A list of values from an array stored as a string */ + public static List getAsList(String key){ + String value = get(key); + + // Fallback if the value doesn't exist + if (value == null) return new ArrayList<>(); + + // Remove the edges + value = value.replace("[", "").replace("]", ""); + if (value.isEmpty()) return new ArrayList<>(); + + return Arrays.asList(value.split(",")); + } public static void save() { StringBuilder result = new StringBuilder(); @@ -89,6 +110,8 @@ public static int getMcScale() { return guiScale; } + /** Add a file observer to reload options on file change + * Listeners get notified of the change */ private static void setupFileObserver(){ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){ fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { @@ -111,6 +134,7 @@ public void onEvent(int i, @Nullable String s) { fileObserver.startWatching(); } + /** Notify the option listeners */ public static void notifyListeners(){ for(WeakReference weakReference : optionListeners){ MCOptionListener optionListener = weakReference.get(); @@ -120,10 +144,12 @@ public static void notifyListeners(){ } } + /** Add an option listener, notice how we don't have a reference to it */ public static void addMCOptionListener(MCOptionListener listener){ optionListeners.add(new WeakReference<>(listener)); } + /** Remove a listener from existence, or at least, its reference here */ public static void removeMCOptionListener(MCOptionListener listener){ for(WeakReference weakReference : optionListeners){ MCOptionListener optionListener = weakReference.get();