From 7b52d539e26531f5235136b4d72fe2d2d5ee3d6c Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Wed, 3 Feb 2021 20:38:00 +0100 Subject: [PATCH 1/6] - Beta version of a fix to use hotbars on the multiple gui size/resolutions --- .../net/kdt/pojavlaunch/BaseMainActivity.java | 24 +++++++++++-------- .../net/kdt/pojavlaunch/MainActivity.java | 16 +++++++++++++ .../kdt/pojavlaunch/utils/MCOptionUtils.java | 11 +++++++++ 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index 8517a62bf..b09688e2a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -10,7 +10,6 @@ import android.view.View.*; import android.view.inputmethod.*; import android.widget.*; -import androidx.annotation.RequiresApi; import androidx.drawerlayout.widget.*; import com.google.android.material.navigation.*; import java.io.*; @@ -661,7 +660,8 @@ public class BaseMainActivity extends LoggableActivity { texture.setDefaultBufferSize((int)(width*scaleFactor),(int)(height*scaleFactor)); CallbackBridge.windowWidth = (int)(width*scaleFactor); CallbackBridge.windowHeight = (int)(height*scaleFactor); - //CallbackBridge.sendUpdateWindowSize((int)(width*scaleFactor),(int)(height*scaleFactor)); + + //Load Minecraft options: MCOptionUtils.load(); MCOptionUtils.set("overrideWidth", ""+CallbackBridge.windowWidth); MCOptionUtils.set("overrideHeight", ""+CallbackBridge.windowHeight); @@ -1025,7 +1025,7 @@ public class BaseMainActivity extends LoggableActivity { } public int mcscale(int input) { - return this.guiScale * input; + return (int)((this.guiScale * input)/scaleFactor); } /* @@ -1181,15 +1181,19 @@ public class BaseMainActivity extends LoggableActivity { public int handleGuiBar(int x, int y) { if (!CallbackBridge.isGrabbing()) return -1; - - int barheight = mcscale(20); - int barwidth = mcscale(180); - int barx = (CallbackBridge.physicalWidth / 2) - (barwidth / 2); - int bary = CallbackBridge.physicalHeight - barheight; - if (x < barx || x >= barx + barwidth || y < bary || y >= bary + barheight) { + + int mcGuiScale = Integer.parseInt(MCOptionUtils.get("guiScale")); + if(mcGuiScale == 0) mcGuiScale = (Math.min(CallbackBridge.windowHeight, CallbackBridge.windowWidth)/240); + mcGuiScale = Math.min(mcGuiScale, (Math.min(CallbackBridge.windowHeight, CallbackBridge.windowWidth)/240)); + + int barHeight = mcscale(5 * mcGuiScale); + int barWidth = mcscale(45 * mcGuiScale); + int barX = (CallbackBridge.physicalWidth / 2) - (barWidth / 2); + int barY = CallbackBridge.physicalHeight - barHeight; + if (x < barX || x >= barX + barWidth || y < barY || y >= barY + barHeight) { return -1; } - return hotbarKeys[((x - barx) / mcscale(180 / 9)) % 9]; + return hotbarKeys[((x - barX) / mcscale((45 * mcGuiScale) / 9)) % 9]; } /* public int handleGuiBar(int x, int y, MotionEvent e) { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 0af7d43f7..60a800e04 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -4,8 +4,13 @@ import android.os.*; import android.view.*; import android.view.View.*; import android.widget.*; + +import androidx.annotation.Nullable; + import net.kdt.pojavlaunch.customcontrols.*; import net.kdt.pojavlaunch.prefs.*; +import net.kdt.pojavlaunch.utils.MCOptionUtils; + import org.lwjgl.glfw.*; import java.io.*; import com.google.gson.*; @@ -17,6 +22,7 @@ public class MainActivity extends BaseMainActivity { private View.OnClickListener mClickListener; private View.OnTouchListener mTouchListener; + private FileObserver fileObserver; @Override public void onCreate(Bundle savedInstanceState) { @@ -98,6 +104,16 @@ public class MainActivity extends BaseMainActivity { return false; } }; + + + fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { + @Override + public void onEvent(int i, @Nullable String s) { + //FIXME Make sure the multithreading nature of this event doesn't cause any problems ? + MCOptionUtils.load(); + } + }; + fileObserver.startWatching(); ControlData[] specialButtons = ControlData.getSpecialButtons(); specialButtons[0].specialButtonListener 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 06dfeb519..9f1ae6f44 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 @@ -39,6 +39,17 @@ public class MCOptionUtils mLineList.add(key + ":" + value); } + + public static String get(String key){ + for (int i = 0; i < mLineList.size(); i++) { + String line = mLineList.get(i); + if (line.startsWith(key + ":")) { + String value = mLineList.get(i); + return value.substring(value.indexOf(":")+1); + } + } + return null; + } public static void save() { StringBuilder result = new StringBuilder(); From 4fcfbd2ab8e41280a6c5cebdbab3ff45e06cbcfa Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Wed, 3 Feb 2021 21:52:44 +0100 Subject: [PATCH 2/6] - Refactored the function name from calculateMcScale to getMcScale since we changed how it behaves - Optimized auto scale operations - Removed some junk I've put there myself - Getting a value will load the setting list if not done already. --- .../net/kdt/pojavlaunch/BaseMainActivity.java | 26 +++++++++---------- .../net/kdt/pojavlaunch/MainActivity.java | 1 + .../kdt/pojavlaunch/utils/MCOptionUtils.java | 3 +++ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index b09688e2a..cc3854199 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -666,7 +666,7 @@ public class BaseMainActivity extends LoggableActivity { MCOptionUtils.set("overrideWidth", ""+CallbackBridge.windowWidth); MCOptionUtils.set("overrideHeight", ""+CallbackBridge.windowHeight); MCOptionUtils.save(); - calculateMcScale(); + getMcScale(); // Should we do that? if (!isCalled) { isCalled = true; @@ -698,7 +698,7 @@ public class BaseMainActivity extends LoggableActivity { CallbackBridge.windowWidth = (int)(width*scaleFactor); CallbackBridge.windowHeight = (int)(height*scaleFactor); CallbackBridge.sendUpdateWindowSize((int)(width*scaleFactor),(int)(height*scaleFactor)); - calculateMcScale(); + getMcScale(); } @Override @@ -1171,29 +1171,27 @@ public class BaseMainActivity extends LoggableActivity { return true; } - public void calculateMcScale() { - int scale = 1; - while (CallbackBridge.physicalWidth / (scale + 1) >= 320 && CallbackBridge.physicalHeight / (scale + 1) >= 240) { - scale++; + public void getMcScale() { + //Get the scale stored in game files, used auto scale if found or if the stored scaled is bigger than the authorized size. + this.guiScale = Integer.parseInt(MCOptionUtils.get("guiScale")); + + int scale = Math.max(Math.min(CallbackBridge.windowWidth / 320, CallbackBridge.windowHeight / 240), 1); + if(scale < this.guiScale || guiScale == 0){ + this.guiScale = scale; } - this.guiScale = scale; } public int handleGuiBar(int x, int y) { if (!CallbackBridge.isGrabbing()) return -1; - int mcGuiScale = Integer.parseInt(MCOptionUtils.get("guiScale")); - if(mcGuiScale == 0) mcGuiScale = (Math.min(CallbackBridge.windowHeight, CallbackBridge.windowWidth)/240); - mcGuiScale = Math.min(mcGuiScale, (Math.min(CallbackBridge.windowHeight, CallbackBridge.windowWidth)/240)); - - int barHeight = mcscale(5 * mcGuiScale); - int barWidth = mcscale(45 * mcGuiScale); + int barHeight = mcscale(20); + int barWidth = mcscale(180); int barX = (CallbackBridge.physicalWidth / 2) - (barWidth / 2); int barY = CallbackBridge.physicalHeight - barHeight; if (x < barX || x >= barX + barWidth || y < barY || y >= barY + barHeight) { return -1; } - return hotbarKeys[((x - barX) / mcscale((45 * mcGuiScale) / 9)) % 9]; + return hotbarKeys[((x - barX) / mcscale(180 / 9)) % 9]; } /* public int handleGuiBar(int x, int y, MotionEvent e) { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 60a800e04..8fb081055 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -111,6 +111,7 @@ public class MainActivity extends BaseMainActivity { public void onEvent(int i, @Nullable String s) { //FIXME Make sure the multithreading nature of this event doesn't cause any problems ? MCOptionUtils.load(); + getMcScale(); } }; fileObserver.startWatching(); 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 9f1ae6f44..9e271bf5c 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 @@ -41,6 +41,9 @@ public class MCOptionUtils } public static String get(String key){ + if (mLineList == null){ + load(); + } for (int i = 0; i < mLineList.size(); i++) { String line = mLineList.get(i); if (line.startsWith(key + ":")) { From 5a5dc351f0c2655c225084e642d741b6de3a3d1f Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Thu, 4 Feb 2021 11:12:44 +0100 Subject: [PATCH 3/6] - Added deprecated FileObserver Constructor for older APIs --- .../net/kdt/pojavlaunch/MainActivity.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 8fb081055..cfb6bca79 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -105,15 +105,26 @@ public class MainActivity extends BaseMainActivity { } }; + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){ + fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { + @Override + public void onEvent(int i, @Nullable String s) { + //FIXME Make sure the multithreading nature of this event doesn't cause any problems ? + MCOptionUtils.load(); + getMcScale(); + } + }; + }else{ + fileObserver = new FileObserver(Tools.DIR_GAME_NEW + "/options.txt", FileObserver.MODIFY) { + @Override + public void onEvent(int i, @Nullable String s) { + //FIXME Make sure the multithreading nature of this event doesn't cause any problems ? + MCOptionUtils.load(); + getMcScale(); + } + }; + } - fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { - @Override - public void onEvent(int i, @Nullable String s) { - //FIXME Make sure the multithreading nature of this event doesn't cause any problems ? - MCOptionUtils.load(); - getMcScale(); - } - }; fileObserver.startWatching(); ControlData[] specialButtons = ControlData.getSpecialButtons(); From 641e502bb359eb5eed6d5b6d191c98e8872d81c2 Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Thu, 4 Feb 2021 11:35:45 +0100 Subject: [PATCH 4/6] - Removed older handleGuiBar function --- .../net/kdt/pojavlaunch/BaseMainActivity.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index cc3854199..be294589e 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -1193,20 +1193,5 @@ public class BaseMainActivity extends LoggableActivity { } return hotbarKeys[((x - barX) / mcscale(180 / 9)) % 9]; } -/* - public int handleGuiBar(int x, int y, MotionEvent e) { - if (!CallbackBridge.isGrabbing()) { - return -1; - } - // int screenHeight = CallbackBridge.windowHeight; - int barheight = mcscale(20); - int barwidth = mcscale(180); - int barx = (CallbackBridge.windowWidth / 2) - (barwidth / 2); - if (x < barx || x >= barx + barwidth || y < 0 || y >= 0 + barheight) { - return -1; - } - return hotbarKeys[((x - barx) / mcscale(20)) % 9]; - } -*/ } From bd6342d256b0d9db90e782abce91cf8883265198 Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Thu, 4 Feb 2021 11:38:32 +0100 Subject: [PATCH 5/6] - Added a null check, default to auto scale. --- .../src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index be294589e..aa811d992 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -1173,7 +1173,9 @@ public class BaseMainActivity extends LoggableActivity { public void getMcScale() { //Get the scale stored in game files, used auto scale if found or if the stored scaled is bigger than the authorized size. - this.guiScale = Integer.parseInt(MCOptionUtils.get("guiScale")); + String str = MCOptionUtils.get("guiScale"); + this.guiScale = (str == null ? 0 :Integer.parseInt(str)); + int scale = Math.max(Math.min(CallbackBridge.windowWidth / 320, CallbackBridge.windowHeight / 240), 1); if(scale < this.guiScale || guiScale == 0){ From c6c05b2247c0aba0f487c246dafd2d06263301f6 Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Thu, 4 Feb 2021 11:53:56 +0100 Subject: [PATCH 6/6] - Fixed wrong constructor for android pie --- .../src/main/java/net/kdt/pojavlaunch/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index cfb6bca79..0f32384bc 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -105,7 +105,7 @@ public class MainActivity extends BaseMainActivity { } }; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){ + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){ fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) { @Override public void onEvent(int i, @Nullable String s) {