From 572d92378ab83f26ea4a8039c49b7cb0a55c28be Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sun, 13 May 2018 21:28:10 -0600 Subject: [PATCH] Allow get/setVarbitValue to operate on arbitrary varp sets --- .../src/main/java/net/runelite/api/Client.java | 5 +++-- .../client/plugins/devtools/DevToolsPlugin.java | 4 ++-- .../java/net/runelite/mixins/VarbitMixin.java | 15 +++++++++------ 3 files changed, 14 insertions(+), 10 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 966ead302d..3dd46af5a8 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -173,6 +173,7 @@ public interface Client extends GameEngine int[][] getXteaKeys(); + @VisibleForDevtools int[] getVarps(); @VisibleForDevtools @@ -193,10 +194,10 @@ public interface Client extends GameEngine void setSetting(Varbits varbit, int value); @VisibleForDevtools - int getVarbitValue(int varbit); + int getVarbitValue(int[] varps, int varbitId); @VisibleForDevtools - void setVarbitValue(int varbit, int value); + void setVarbitValue(int[] varps, int varbit, int value); HashTable getWidgetFlags(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index 0b04d5705e..5316d7bd4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -174,7 +174,7 @@ public class DevToolsPlugin extends Plugin case "getvar": { int varbit = Integer.parseInt(args[0]); - int value = client.getVarbitValue(varbit); + int value = client.getVarbitValue(client.getVarps(), varbit); client.addChatMessage(ChatMessageType.SERVER, "", "Varbit " + varbit + ": " + value, null); break; } @@ -182,7 +182,7 @@ public class DevToolsPlugin extends Plugin { int varbit = Integer.parseInt(args[0]); int value = Integer.parseInt(args[1]); - client.setVarbitValue(varbit, value); + client.setVarbitValue(client.getVarps(), varbit, value); client.addChatMessage(ChatMessageType.SERVER, "", "Set varbit " + varbit + " to " + value, null); eventBus.post(new VarbitChanged()); // fake event break; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java index 0ebcb1c99c..d10c7e892e 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java @@ -57,7 +57,7 @@ public abstract class VarbitMixin implements RSClient public int getVar(Varbits varbit) { int varbitId = varbit.getId(); - return getVarbitValue(varbitId); + return getVarbitValue(getVarps(), varbitId); } @Inject @@ -65,12 +65,12 @@ public abstract class VarbitMixin implements RSClient public void setSetting(Varbits varbit, int value) { int varbitId = varbit.getId(); - setVarbitValue(varbitId, value); + setVarbitValue(getVarps(), varbitId, value); } @Inject @Override - public int getVarbitValue(int varbitId) + public int getVarbitValue(int[] varps, int varbitId) { RSVarbit v = varbitCache.getIfPresent(varbitId); if (v == null) @@ -81,7 +81,11 @@ public abstract class VarbitMixin implements RSClient varbitCache.put(varbitId, v); } - int[] varps = getVarps(); + if (v.getIndex() == 0 && v.getLeastSignificantBit() == 0 && v.getMostSignificantBit() == 0) + { + throw new IndexOutOfBoundsException("Varbit " + varbitId + " does not exist"); + } + int value = varps[v.getIndex()]; int lsb = v.getLeastSignificantBit(); int msb = v.getMostSignificantBit(); @@ -91,7 +95,7 @@ public abstract class VarbitMixin implements RSClient @Inject @Override - public void setVarbitValue(int varbitId, int value) + public void setVarbitValue(int[] varps, int varbitId, int value) { RSVarbit v = varbitCache.getIfPresent(varbitId); if (v == null) @@ -102,7 +106,6 @@ public abstract class VarbitMixin implements RSClient varbitCache.put(varbitId, v); } - int[] varps = getVarps(); int lsb = v.getLeastSignificantBit(); int msb = v.getMostSignificantBit(); int mask = (1 << ((msb - lsb) + 1)) - 1;