From d62af8979820d962c1d244720c815c55afb66b07 Mon Sep 17 00:00:00 2001 From: TheRealNull Date: Mon, 4 Jan 2021 01:52:35 -0500 Subject: [PATCH 1/2] project: wrap up loose ends in api, upstream to fix the broken things --- .../main/java/net/runelite/api/Client.java | 2 ++ .../java/net/runelite/api/ScriptEvent.java | 23 +++++++++++++++---- .../runelite/api/events/RemovedFriend.java | 11 +++++---- .../runelite/client/config/ConfigManager.java | 9 +++++++- .../externalplugins/ExternalPluginClient.java | 1 - .../client/plugins/camera/CameraPlugin.java | 16 +++++++++++++ .../friendnotes/FriendNotesPlugin.java | 2 +- .../runelite/mixins/RSFriendSystemMixin.java | 2 +- 8 files changed, 52 insertions(+), 14 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 6505ca4775..a1b9b76029 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -2071,4 +2071,6 @@ public interface Client extends GameShell Widget getWidget(int param1); Widget getScriptActiveWidget(); + + ScriptEvent createScriptEvent(Object[] args); } diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java index b94fbbc44a..361a71e3b1 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java @@ -40,13 +40,19 @@ public interface ScriptEvent String NAME = "event_opbase"; /** - * Gets the widget of the event. - * - * @return the widget - * @see Widget + * Gets the widget the {@link #WIDGET_ID} and {@link #WIDGET_INDEX} args + * are substituted with */ Widget getSource(); + /** + * Sets the widget the {@link #WIDGET_ID} and {@link #WIDGET_INDEX} args + * are substituted with. This is useful for running widget listeners + * + * @see Widget#getOnLoadListener() + */ + ScriptEvent setSource(Widget widget); + /** * Gets the menu index of the event * @@ -80,4 +86,11 @@ public interface ScriptEvent * @return */ int getTypedKeyChar(); -} + + /** + * Executes a cs2 script specified by this event + * + * This method must be ran on the client thread and is not reentrant + */ + void run(); +} \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/events/RemovedFriend.java b/runelite-api/src/main/java/net/runelite/api/events/RemovedFriend.java index dc244b8ff8..3d109ef982 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/RemovedFriend.java +++ b/runelite-api/src/main/java/net/runelite/api/events/RemovedFriend.java @@ -25,15 +25,16 @@ package net.runelite.api.events; import lombok.Value; +import net.runelite.api.Nameable; /** - * An event where a request to remove a friend is sent to the server. + * An event trigger when a player is removed from the friend or ignore list. */ @Value -public class RemovedFriend implements Event +public class RemovedFriend { /** - * The name of the removed friend. + * The removed friend or ignore entry */ - String name; -} + private final Nameable nameable; +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 0c33297e11..01d8ebfe1d 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -85,6 +85,7 @@ import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.PlayerChanged; import net.runelite.api.events.UsernameChanged; +import net.runelite.api.events.WorldChanged; import net.runelite.client.RuneLite; import net.runelite.client.account.AccountSession; import net.runelite.client.eventbus.EventBus; @@ -1041,7 +1042,13 @@ public class ConfigManager { updateRSProfile(); } - + + @Subscribe + private void onWorldChanged(WorldChanged ev) + { + updateRSProfile(); + } + @Subscribe private void onPlayerChanged(PlayerChanged ev) { diff --git a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java index 984b5f367a..0df12bf1ed 100644 --- a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java +++ b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java @@ -69,7 +69,6 @@ public class ExternalPluginClient .newBuilder() .addPathSegments("manifest.js") .build(); - System.out.println(manifest.uri()); try (Response res = okHttpClient.newCall(new Request.Builder().url(manifest).build()).execute()) { if (res.code() != 200) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java index 7f9c9284b5..3c2076a1aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java @@ -132,6 +132,14 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener { addZoomTooltip(sideSlider); } + + Widget settingsInit = client.getWidget(WidgetInfo.SETTINGS_INIT); + if (settingsInit != null) + { + client.createScriptEvent(settingsInit.getOnLoadListener()) + .setSource(settingsInit) + .run(); + } }); } @@ -152,6 +160,14 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener { sideSlider.setOnMouseRepeatListener((Object[]) null); } + + Widget settingsInit = client.getWidget(WidgetInfo.SETTINGS_INIT); + if (settingsInit != null) + { + client.createScriptEvent(settingsInit.getOnLoadListener()) + .setSource(settingsInit) + .run(); + } }); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index c3b4426a2a..94fe830cc1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -327,7 +327,7 @@ public class FriendNotesPlugin extends Plugin public void onRemovedFriend(RemovedFriend event) { // Delete a friend's note if they are removed - final String displayName = Text.toJagexName(event.getName()); + final String displayName = Text.toJagexName(event.getNameable().getName()); log.debug("Remove friend: '{}'", displayName); setFriendNote(displayName, null); } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java index 06e7325fae..3d0e13f268 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java @@ -19,7 +19,7 @@ public abstract class RSFriendSystemMixin implements RSFriendSystem @Inject public void rl$removeFriend(String friendName) { - RemovedFriend removedFriend = new RemovedFriend(friendName); + RemovedFriend removedFriend = new RemovedFriend(client.getFriendManager().getFriendContainer().findByName(friendName)); client.getCallbacks().post(removedFriend); } From 517878046d92cb928a32e572b41453b8d1bbe26b Mon Sep 17 00:00:00 2001 From: TheRealNull Date: Mon, 4 Jan 2021 02:13:56 -0500 Subject: [PATCH 2/2] project: loose ends -blue --- .../main/java/net/runelite/api/Client.java | 2 + .../net/runelite/mixins/RSClientMixin.java | 54 +++++++++++-------- .../java/net/runelite/rs/api/RSClient.java | 6 --- runescape-client/src/main/java/Client.java | 9 ++-- .../src/main/java/SecureRandomFuture.java | 2 +- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index a1b9b76029..bbfd3731b9 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -2073,4 +2073,6 @@ public interface Client extends GameShell Widget getScriptActiveWidget(); ScriptEvent createScriptEvent(Object[] args); + + int getViewportColor(); } 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 c8fd262848..919067d7b0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -234,6 +234,9 @@ public abstract class RSClientMixin implements RSClient @Inject private static boolean allWidgetsAreOpTargetable = false; + @Inject + public static int viewportColor; + @Inject private static Set unhiddenCasts = new HashSet(); @@ -1557,27 +1560,27 @@ public abstract class RSClientMixin implements RSClient if (widget.getContentType() == WidgetType.VIEWPORT) { - client.setViewportColor(0); + viewportColor = 0; } else if (widget.getContentType() == WidgetType.RECTANGLE) { if (renderX == client.getViewportXOffset() && renderY == client.getViewportYOffset() - && widget.getWidth() == client.getViewportWidth() && widget.getHeight() == client.getViewportHeight() - && widget.getOpacity() > 0 && widget.isFilled() && client.isGpu()) - { - int textColor = widget.getTextColor(); - int alpha = widget.getOpacity() & 0xFF; - int inverseAlpha = 256 - alpha; - int viewportColor = client.getViewportColor(); - int c1 = (alpha * (textColor & 0xff00ff) >> 8 & 0xFF00FF) + (alpha * (textColor & 0x00FF00) >> 8 & 0x00FF00); - int c2 = (inverseAlpha * (viewportColor & 0xff00ff) >> 8 & 0xFF00FF) + (inverseAlpha * (viewportColor & 0x00FF00) >> 8 & 0x00FF00); - int outAlpha = alpha + ((viewportColor >>> 24) * (255 - alpha) * 0x8081 >>> 23); - client.setViewportColor(outAlpha << 24 | c1 + c2); - widget.setHidden(true); - hiddenWidgets.add(widget); - continue; + && widget.getWidth() == client.getViewportWidth() && widget.getHeight() == client.getViewportHeight() + && widget.getOpacity() > 0 && widget.isFilled() && client.isGpu()) + { + int tc = widget.getTextColor(); + int alpha = widget.getOpacity() & 0xFF; + int inverseAlpha = 256 - alpha; + int vpc = viewportColor; + int c1 = (alpha * (tc & 0xff00ff) >> 8 & 0xFF00FF) + (alpha * (tc & 0x00FF00) >> 8 & 0x00FF00); + int c2 = (inverseAlpha * (vpc & 0xff00ff) >> 8 & 0xFF00FF) + (inverseAlpha * (vpc & 0x00FF00) >> 8 & 0x00FF00); + int outAlpha = alpha + ((vpc >>> 24) * (255 - alpha) * 0x8081 >>> 23); + viewportColor = outAlpha << 24 | c1 + c2; + widget.setHidden(true); + hiddenWidgets.add(widget); + continue; + } } - } WidgetNode childNode = componentTable.get(widget.getId()); @@ -1678,11 +1681,11 @@ public abstract class RSClientMixin implements RSClient for (int i = hiddenWidgets.size() - 1; i >= 0; i--) { Widget widget = hiddenWidgets.get(i); - if (WidgetInfo.TO_GROUP(widget.getId()) == group) - { - widget.setHidden(false); - hiddenWidgets.remove(i); - } + if (WidgetInfo.TO_GROUP(widget.getId()) == group) + { + widget.setHidden(false); + hiddenWidgets.remove(i); + } } } } @@ -2072,7 +2075,9 @@ public abstract class RSClientMixin implements RSClient public void setOutdatedScript(String outdatedScript) { if (!outdatedScripts.contains(outdatedScript)) + { outdatedScripts.add(outdatedScript); + } } @Inject @@ -2107,5 +2112,12 @@ public abstract class RSClientMixin implements RSClient { return getVarbitDefinition(id); } + + @Inject + @Override + public int getViewportColor() + { + return viewportColor; + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index c72d2eaf7b..148e635658 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -1309,12 +1309,6 @@ public interface RSClient extends RSGameShell, Client @Import("pcmSampleLength") void setPcmSampleLength(int var0); - @Import("viewportColor") - int getViewportColor(); - - @Import("viewportColor") - void setViewportColor(int i); - @Import("changedVarps") int[] getChangedVarps(); diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index 8615e843e3..1e5c93adcf 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -931,8 +931,7 @@ public final class Client extends GameShell implements Usernamed { @ObfuscatedGetter( intValue = -380994417 ) - @Export("viewportColor") - public static int viewportColor; + public static int field730; @ObfuscatedName("il") static boolean field649; @ObfuscatedName("im") @@ -1369,7 +1368,7 @@ public final class Client extends GameShell implements Usernamed { field788 = 0; // L: 374 oculusOrbNormalSpeed = 12; // L: 376 oculusOrbSlowedSpeed = 6; // L: 377 - viewportColor = 0; // L: 378 + field730 = 0; // L: 378 field649 = false; // L: 379 field732 = 0; // L: 380 field843 = false; // L: 381 @@ -5625,8 +5624,8 @@ public final class Client extends GameShell implements Usernamed { if (ServerPacket.field2146 == var1.serverPacket) { // L: 6617 var16 = var3.readInt(); // L: 6618 - if (var16 != viewportColor) { // L: 6619 - viewportColor = var16; // L: 6620 + if (var16 != field730) { // L: 6619 + field730 = var16; // L: 6620 WorldMapCacheName.method664(); // L: 6621 } diff --git a/runescape-client/src/main/java/SecureRandomFuture.java b/runescape-client/src/main/java/SecureRandomFuture.java index 881e7c5ee6..c5bd39688f 100644 --- a/runescape-client/src/main/java/SecureRandomFuture.java +++ b/runescape-client/src/main/java/SecureRandomFuture.java @@ -202,7 +202,7 @@ public class SecureRandomFuture { var17 = (Decimator.oculusOrbFocalPointY >> 7) + class41.baseY; // L: 4384 PacketBufferNode var18 = ItemContainer.getPacketBufferNode(ClientPacket.field2269, Client.packetWriter.isaacCipher); // L: 4387 var18.packetBuffer.method5578(var16); // L: 4388 - var18.packetBuffer.method5587(Client.viewportColor); // L: 4389 + var18.packetBuffer.method5587(Client.field730); // L: 4389 var18.packetBuffer.method5739(var17); // L: 4390 var18.packetBuffer.writeByte(var15); // L: 4391 Client.packetWriter.addNode(var18); // L: 4392