From eadc31db1b703f6f5823fde32a9125588fd56834 Mon Sep 17 00:00:00 2001 From: ThatGamerBlue Date: Wed, 20 Apr 2022 22:25:34 +0100 Subject: [PATCH 1/2] try and fix the crash --- buildSrc/src/main/kotlin/Dependencies.kt | 2 +- .../net/runelite/mixins/RSClientMixin.java | 68 +++++++++++++------ 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index ac7be415f9..72c11cf4aa 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -27,7 +27,7 @@ object ProjectVersions { const val launcherVersion = "2.2.0" const val rlVersion = "1.8.18" - const val openosrsVersion = "4.24.0" + const val openosrsVersion = "4.24.1" const val rsversion = 204 const val cacheversion = 165 diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 4698164f1f..ea0babcfa0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1027,6 +1027,9 @@ public abstract class RSClientMixin implements RSClient RSRuneLiteMenuEntry var1 = rl$menuEntries[var0]; RSRuneLiteMenuEntry var2 = rl$menuEntries[var0 + 1]; + assert var1.getIdx() == var0; + assert var2.getIdx() == var0 + 1; + rl$menuEntries[var0] = var2; rl$menuEntries[var0 + 1] = var1; @@ -1047,6 +1050,10 @@ public abstract class RSClientMixin implements RSClient { for (int i = optionCount; i < tmpOptionsCount; ++i) { + RSRuneLiteMenuEntry entry = rl$menuEntries[i]; + if (entry == null) { + rl$logger.error("about to crash: opcnt:{} tmpopcnt:{} i:{}", optionCount, tmpOptionsCount, i); + } rl$menuEntries[i].setConsumer(null); } } @@ -1676,11 +1683,15 @@ public abstract class RSClientMixin implements RSClient { RSRuneLiteMenuEntry menuEntry = null; - int i; - for (i = client.getMenuOptionCount() - 1; i >= 0; --i) + for (int i = client.getMenuOptionCount() - 1; i >= 0; --i) { - if (client.getMenuOptions()[i].equals(option) && client.getMenuTargets()[i].equals(target) && client.getMenuIdentifiers()[i] == id && client.getMenuOpcodes()[i] == opcode) - { + if (client.getMenuOpcodes()[i] == opcode + && client.getMenuIdentifiers()[i] == id + && client.getMenuArguments1()[i] == param0 + && client.getMenuArguments2()[i] == param1 + && option.equals(client.getMenuOptions()[i]) + && (option.equals(target) || target.equals(client.getMenuTargets()[i])) + ) { menuEntry = rl$menuEntries[i]; break; } @@ -1688,11 +1699,11 @@ public abstract class RSClientMixin implements RSClient if (menuEntry == null && option.equals(target)) { - if (tmpMenuOptionsCount < 500) + int i; + if (client.getMenuOptionCount() < 500) { - int var10000 = tmpMenuOptionsCount; - tmpMenuOptionsCount = (var10000 + 1); - i = var10000; + i = client.getMenuOptionCount(); + client.setMenuOptionCount(client.getMenuOptionCount() + 1); } else { @@ -1707,13 +1718,16 @@ public abstract class RSClientMixin implements RSClient client.getMenuArguments2()[i] = param1; client.getMenuForceLeftClick()[i] = false; menuEntry = rl$menuEntries[i]; + if (menuEntry == null) { + menuEntry = rl$menuEntries[i] = newRuneliteMenuEntry(i); + } } - MenuOptionClicked menuOptionClicked = null; - + MenuOptionClicked event; if (menuEntry == null) { - menuOptionClicked = new MenuOptionClicked(newBareRuneliteMenuEntry()); + MenuEntry tmpEntry = client.createMenuEntry(option, target, id, opcode, param0, param1, false); + event = new MenuOptionClicked(tmpEntry); if (canvasX != -1 || canvasY != -1) { @@ -1722,16 +1736,21 @@ public abstract class RSClientMixin implements RSClient } else { - menuOptionClicked = new MenuOptionClicked(menuEntry); + client.getLogger().trace("Menu click op {} targ {} action {} id {} p0 {} p1 {}", option, target, opcode, id, param0, param1); + event = new MenuOptionClicked(menuEntry); - client.getCallbacks().post(menuOptionClicked); + client.getCallbacks().post(event); if (menuEntry.getConsumer() != null) { - menuEntry.getConsumer().accept(menuEntry); + try { + menuEntry.getConsumer().accept(menuEntry); + } catch (Exception ex) { + client.getLogger().warn("exception in menu callback", ex); + } } - if (menuOptionClicked.isConsumed()) + if (event.isConsumed()) { return; } @@ -1752,9 +1771,9 @@ public abstract class RSClientMixin implements RSClient { client.getLogger().info( "|MenuAction|: MenuOption={} MenuTarget={} Id={} Opcode={}/{} Param0={} Param1={} CanvasX={} CanvasY={}", - menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), menuOptionClicked.getId(), - menuOptionClicked.getMenuAction(), opcode + (decremented ? 2000 : 0), - menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), canvasX, canvasY + event.getMenuOption(), event.getMenuTarget(), event.getId(), + event.getMenuAction(), opcode + (decremented ? 2000 : 0), + event.getParam0(), event.getParam1(), canvasX, canvasY ); if (menuEntry != null) @@ -1766,9 +1785,16 @@ public abstract class RSClientMixin implements RSClient } } - copy$menuAction(menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), - menuOptionClicked.getMenuAction() == UNKNOWN ? opcode : menuOptionClicked.getMenuAction().getId(), - menuOptionClicked.getId(), menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), + if (opcode == MenuAction.WIDGET_CONTINUE.getId()) { + Widget widget = client.getWidget(param1); + if (widget == null || param0 > -1 && widget.getChild(param0) == null) { + return; + } + } + + copy$menuAction(event.getParam0(), event.getParam1(), + event.getMenuAction() == UNKNOWN ? opcode : event.getMenuAction().getId(), + event.getId(), event.getMenuOption(), event.getMenuTarget(), canvasX, canvasY); } From ca072340368d8e8fcc029b52e84b8b68df45c4d2 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Wed, 20 Apr 2022 23:31:41 +0200 Subject: [PATCH 2/2] project(bs-things): Checkstylee --- .../net/runelite/mixins/RSClientMixin.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index ea0babcfa0..f155bf7dbb 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1051,7 +1051,8 @@ public abstract class RSClientMixin implements RSClient for (int i = optionCount; i < tmpOptionsCount; ++i) { RSRuneLiteMenuEntry entry = rl$menuEntries[i]; - if (entry == null) { + if (entry == null) + { rl$logger.error("about to crash: opcnt:{} tmpopcnt:{} i:{}", optionCount, tmpOptionsCount, i); } rl$menuEntries[i].setConsumer(null); @@ -1691,7 +1692,8 @@ public abstract class RSClientMixin implements RSClient && client.getMenuArguments2()[i] == param1 && option.equals(client.getMenuOptions()[i]) && (option.equals(target) || target.equals(client.getMenuTargets()[i])) - ) { + ) + { menuEntry = rl$menuEntries[i]; break; } @@ -1718,7 +1720,8 @@ public abstract class RSClientMixin implements RSClient client.getMenuArguments2()[i] = param1; client.getMenuForceLeftClick()[i] = false; menuEntry = rl$menuEntries[i]; - if (menuEntry == null) { + if (menuEntry == null) + { menuEntry = rl$menuEntries[i] = newRuneliteMenuEntry(i); } } @@ -1743,9 +1746,12 @@ public abstract class RSClientMixin implements RSClient if (menuEntry.getConsumer() != null) { - try { + try + { menuEntry.getConsumer().accept(menuEntry); - } catch (Exception ex) { + } + catch (Exception ex) + { client.getLogger().warn("exception in menu callback", ex); } } @@ -1785,9 +1791,11 @@ public abstract class RSClientMixin implements RSClient } } - if (opcode == MenuAction.WIDGET_CONTINUE.getId()) { + if (opcode == MenuAction.WIDGET_CONTINUE.getId()) + { Widget widget = client.getWidget(param1); - if (widget == null || param0 > -1 && widget.getChild(param0) == null) { + if (widget == null || param0 > -1 && widget.getChild(param0) == null) + { return; } }