Skip to content

Commit b04782f

Browse files
committed
Fixes for poe2
1 parent 66f4b6b commit b04782f

File tree

8 files changed

+115
-56
lines changed

8 files changed

+115
-56
lines changed

app-core/src/main/java/com/mercury/platform/core/ChatHelper.java

Lines changed: 19 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mercury.platform.core;
22

33
import com.mercury.platform.shared.AsSubscriber;
4+
import com.mercury.platform.shared.MainWindowHWNDFetch;
45
import com.mercury.platform.shared.config.Configuration;
56
import com.mercury.platform.shared.config.descriptor.TaskBarDescriptor;
67
import com.mercury.platform.shared.entity.message.MercuryError;
@@ -206,59 +207,34 @@ private void findInStashTab(String toBeFound) {
206207

207208
private void gameToFront() {
208209
if (SystemUtils.IS_OS_WINDOWS) {
209-
WindowUtils.getAllWindows(false).forEach(window -> {
210+
for (DesktopWindow window : MainWindowHWNDFetch.INSTANCE.getMainWindowList()) {
210211
char[] className = new char[512];
211212
User32.INSTANCE.GetClassName(window.getHWND(), className, 512);
212-
if (Native.toString(className).equals("POEWindowClass")) {
213-
User32.INSTANCE.ShowWindow(window.getHWND(), 5);
214-
215-
boolean isAtFront = User32.INSTANCE.SetForegroundWindow(window.getHWND());
216-
int counter = 0;
217-
while (!isAtFront && counter < 10) {
218-
isAtFront = User32.INSTANCE.SetForegroundWindow(window.getHWND());
219-
try {
220-
Thread.sleep(10);
221-
} catch (InterruptedException e) {
222-
e.printStackTrace();
223-
}
224-
counter++;
225-
}
226213

227-
User32.INSTANCE.SetFocus(window.getHWND());
214+
User32.INSTANCE.ShowWindow(window.getHWND(), 5);
215+
216+
boolean isAtFront = User32.INSTANCE.SetForegroundWindow(window.getHWND());
217+
int counter = 0;
218+
while (!isAtFront && counter < 10) {
219+
isAtFront = User32.INSTANCE.SetForegroundWindow(window.getHWND());
220+
try {
221+
Thread.sleep(10);
222+
} catch (InterruptedException e) {
223+
e.printStackTrace();
224+
}
225+
counter++;
228226
}
229-
});
230-
// User32.INSTANCE.EnumWindows((hWnd, arg1) -> {
231-
// char[] className = new char[512];
232-
// User32.INSTANCE.GetClassName(hWnd, className, 512);
233-
// String wText = Native.toString(className);
234-
//
235-
//
236-
// if (wText.isEmpty()) {
237-
// System.out.println("wText is empty");
238-
// return true;
239-
// }
240-
// if (wText.equals("POEWindowClass")) {
241-
// System.out.println("wText equals poe class");
242-
// User32.INSTANCE.SetForegroundWindow(hWnd);
243-
// User32.INSTANCE.SetFocus(hWnd);
244-
// return false;
245-
// }
246-
// System.out.println("after if statement");
247-
// return true;
248-
// }, null);
227+
228+
User32.INSTANCE.SetFocus(window.getHWND());
229+
230+
}
249231
}
250232

251233
}
252234

253235
private boolean isGameOpen() {
254236
if (SystemUtils.IS_OS_WINDOWS) {
255-
WinDef.HWND poeWindowClass = WindowUtils.getAllWindows(false).stream().filter(window -> {
256-
char[] className = new char[512];
257-
User32.INSTANCE.GetClassName(window.getHWND(), className, 512);
258-
return Native.toString(className).equals("POEWindowClass");
259-
}).map(DesktopWindow::getHWND).findFirst().orElse(null);
260-
261-
return poeWindowClass != null;
237+
return MainWindowHWNDFetch.INSTANCE.getMainWindow().isPresent();
262238
} else {
263239
return true;
264240
}

app-core/src/main/java/com/mercury/platform/core/utils/interceptor/TradeIncMessagesInterceptor.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mercury.platform.core.utils.interceptor;
22

33
import com.mercury.platform.core.utils.interceptor.filter.MessageMatcher;
4+
import com.mercury.platform.shared.MainWindowHWNDFetch;
45
import com.mercury.platform.shared.messageparser.MessageParser;
56
import com.mercury.platform.shared.config.Configuration;
67
import com.mercury.platform.shared.config.configration.PlainConfigurationService;
@@ -75,12 +76,20 @@ public void processMessage(String message) {
7576
private class EngIncLocalizationMatcher extends LocalizationMatcher {
7677
@Override
7778
public boolean isSuitableFor(String message) {
78-
return message.contains("@From") && super.isSuitableFor(message);
79+
if (MainWindowHWNDFetch.INSTANCE.isPoe2()) {
80+
return (message.contains("@")) && super.isSuitableFor(message);
81+
} else {
82+
return (message.contains("@From")) && super.isSuitableFor(message);
83+
}
7984
}
8085

8186
@Override
8287
public String trimString(String src) {
83-
return StringUtils.substringAfter(src, "@From");
88+
if (MainWindowHWNDFetch.INSTANCE.isPoe2()) {
89+
return StringUtils.substringAfter(src, "@");
90+
} else {
91+
return StringUtils.substringAfter(src, "@From");
92+
}
8493
}
8594
}
8695

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package com.mercury.platform.core.utils.interceptor.plain;
22

3+
import com.mercury.platform.shared.MainWindowHWNDFetch;
34
import org.apache.commons.lang3.StringUtils;
45

56
public class EngIncLocalizationMatcher extends LocalizationMatcher {
67
@Override
78
public boolean isSuitableFor(String message) {
8-
return message.contains("@From");
9+
if (MainWindowHWNDFetch.INSTANCE.isPoe2()) {
10+
return message.contains("@");
11+
} else {
12+
return message.contains("@From");
13+
}
914
}
1015

1116
@Override
@@ -15,6 +20,10 @@ public boolean isIncoming() {
1520

1621
@Override
1722
public String trimString(String message) {
18-
return StringUtils.substringAfter(message, "@From ");
23+
if (MainWindowHWNDFetch.INSTANCE.isPoe2()) {
24+
return StringUtils.substringAfter(message, "@");
25+
} else {
26+
return StringUtils.substringAfter(message, "@From");
27+
}
1928
}
2029
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.mercury.platform.shared;
2+
3+
import com.sun.jna.Native;
4+
import com.sun.jna.platform.DesktopWindow;
5+
import com.sun.jna.platform.WindowUtils;
6+
import com.sun.jna.platform.win32.User32;
7+
import com.sun.jna.platform.win32.WinDef;
8+
import org.apache.logging.log4j.LogManager;
9+
import org.apache.logging.log4j.Logger;
10+
11+
import java.util.List;
12+
import java.util.Optional;
13+
import java.util.stream.Collectors;
14+
15+
public class MainWindowHWNDFetch {
16+
private Logger logger = LogManager.getLogger(MainWindowHWNDFetch.class.getSimpleName());
17+
public static MainWindowHWNDFetch INSTANCE = MainWindowHWNDFetch.MainWindowHWNDFetchHolder.HOLDER_INSTANCE;
18+
19+
private boolean isPoe2;
20+
21+
private static class MainWindowHWNDFetchHolder {
22+
static final MainWindowHWNDFetch HOLDER_INSTANCE = new MainWindowHWNDFetch();
23+
}
24+
25+
public void initialize(boolean isPoe2) {
26+
this.isPoe2 = isPoe2;
27+
}
28+
29+
public boolean isPoe2() {
30+
return isPoe2;
31+
}
32+
33+
public Optional<DesktopWindow> getMainWindow() {
34+
List<DesktopWindow> windowList = getMainWindowList();
35+
if (windowList.isEmpty()) {
36+
return Optional.empty();
37+
} else {
38+
return Optional.ofNullable(windowList.get(0));
39+
}
40+
}
41+
42+
public List<DesktopWindow> getMainWindowList() {
43+
List<DesktopWindow> windowList = WindowUtils.getAllWindows(false).stream().filter(x -> isPoe(x)).collect(Collectors.toList());
44+
return windowList;
45+
}
46+
47+
public boolean isPoe(DesktopWindow desktopWindow) {
48+
// if (this.isPoe2) {
49+
// return desktopWindow.getTitle().contains("PathOfExile");
50+
// } else {
51+
char[] className = new char[512];
52+
User32.INSTANCE.GetClassName(desktopWindow.getHWND(), className, 512);
53+
return Native.toString(className).equals("POEWindowClass");
54+
// }
55+
}
56+
}

app-core/src/main/java/com/mercury/platform/shared/VulkanManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
public class VulkanManager {
1616
private static final int POE_WINDOWED_FULLSCREEN = 0x94000000;
1717
private static final int POE_WINDOWED = 0x14cf0000;
18-
private static final int WS_VISIBLE = 0x10000000;
18+
private static final int WS_VISIBLE = 0x10000000;
1919
public static VulkanManager INSTANCE = VulkanManagerManagerHolder.HOLDER_INSTANCE;
2020
protected VulkanDescriptor vulkanSnapshot = new VulkanDescriptor();
2121

app-ui/src/main/java/com/mercury/platform/ui/adr/components/AdrManagerFrame.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ private void initRootPanel() {
107107
addComponent.setBorder(BorderFactory.createCompoundBorder(
108108
BorderFactory.createEmptyBorder(2, 2, 2, 2),
109109
BorderFactory.createMatteBorder(1, 1, 1, 1, AppThemeColor.BORDER)));
110+
110111
addComponent.addActionListener(action -> {
111112
MercuryStoreUI.adrSelectSubject.onNext(null);
112113
MercuryStoreUI.adrStateSubject.onNext(new AdrPageDefinition<>(AdrPageState.MAIN, null));

app-ui/src/main/resources/notes/patch/patch-notes-new.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
[
2+
{
3+
"version": "1.3.4.1",
4+
"minorChanges": [
5+
{
6+
"changed": "Path of Exile 2 support, atm needs configuration in file that's why its marked as pre release. Read more at github"
7+
}
8+
]
9+
},
210
{
311
"version": "1.3.4",
412
"minorChanges": [

app/src/main/java/com/mercury/platform/AppMain.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@
44
import com.mercury.platform.core.ProdStarter;
55
import com.mercury.platform.core.utils.FileMonitor;
66
import com.mercury.platform.core.utils.error.ErrorHandler;
7+
import com.mercury.platform.shared.MainWindowHWNDFetch;
78
import com.mercury.platform.shared.config.Configuration;
89
import com.mercury.platform.shared.store.MercuryStoreCore;
910
import com.mercury.platform.ui.frame.other.MercuryLoadingFrame;
1011
import com.mercury.platform.ui.frame.titled.GamePathChooser;
1112
import com.mercury.platform.ui.frame.titled.TestCasesFrame;
1213
import com.mercury.platform.ui.manager.FramesManager;
1314
import com.sun.jna.Native;
15+
import com.sun.jna.platform.DesktopWindow;
1416
import com.sun.jna.platform.WindowUtils;
1517
import com.sun.jna.platform.win32.User32;
18+
import com.sun.jna.platform.win32.WinDef;
1619
import org.apache.commons.lang3.BooleanUtils;
1720
import org.apache.commons.lang3.StringUtils;
1821
import org.apache.commons.lang3.SystemUtils;
@@ -23,6 +26,7 @@
2326
import java.io.File;
2427
import java.util.Arrays;
2528
import java.util.Optional;
29+
import java.util.stream.Collectors;
2630

2731
public class AppMain {
2832

@@ -42,11 +46,14 @@ public static void main(String[] args) {
4246
boolean standalone = BooleanUtils.toBoolean(System.getProperty("standalone"));
4347
boolean dev = BooleanUtils.toBoolean(System.getProperty("dev"));
4448
boolean hideLoadingIcon = BooleanUtils.toBoolean(System.getProperty("hideLoadingIcon"));
49+
boolean isPoe2 = BooleanUtils.toBoolean(System.getProperty("poe2"));
50+
MainWindowHWNDFetch.INSTANCE.initialize(isPoe2);
4551

4652
logger.warn("loaded runtime settings: ");
4753
logger.warn("standalone=" + standalone);
4854
logger.warn("dev=" + dev);
4955
logger.warn("hideLoadingIcon=" + hideLoadingIcon);
56+
logger.warn("isPoe2=" + isPoe2);
5057

5158

5259
new ErrorHandler();
@@ -110,14 +117,7 @@ private static boolean isValidGamePath(String gamePath) {
110117

111118
private static String getGamePath() {
112119
if (SystemUtils.IS_OS_WINDOWS) {
113-
return WindowUtils.getAllWindows(false).stream().filter(window -> {
114-
char[] className = new char[512];
115-
User32.INSTANCE.GetClassName(window.getHWND(), className, 512);
116-
return Native.toString(className).equals("POEWindowClass");
117-
}).map(it -> {
118-
String filePath = it.getFilePath();
119-
return StringUtils.substringBeforeLast(filePath, "\\");
120-
}).findAny().orElse(null);
120+
return MainWindowHWNDFetch.INSTANCE.getMainWindow().map(x -> StringUtils.substringBeforeLast(x.getFilePath(), "\\")).orElse(null);
121121
} else {
122122
return null;
123123
}

0 commit comments

Comments
 (0)