From 2d9c26387a41cb519438182f7d877f821476b378 Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Mon, 29 Jun 2020 02:08:26 +0200 Subject: [PATCH] add getVarbitCount and warn instead of throw when varb doesnt exist --- .../src/main/java/net/runelite/api/Client.java | 5 +++++ .../main/java/net/runelite/mixins/VarbitMixin.java | 12 +++++++++++- .../java/net/runelite/rs/api/RSAbstractArchive.java | 3 +++ .../src/main/java/net/runelite/rs/api/RSClient.java | 3 +++ 4 files changed, 22 insertions(+), 1 deletion(-) 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 8b03591b67..6efbd4f892 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -809,6 +809,11 @@ public interface Client extends GameShell */ void setVarbitValue(int[] varps, int varbit, int value); + /** + * @return the total number of VarbitDefinition + */ + int getVarbitCount(); + /** * Gets the widget flags table. * 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 68b193e97b..ab0998a537 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/VarbitMixin.java @@ -16,6 +16,8 @@ import net.runelite.rs.api.RSVarbitDefinition; @Mixin(RSClient.class) public abstract class VarbitMixin implements RSClient { + private static final int VARBITS_GROUP = 14; + @Shadow("client") private static RSClient client; @@ -69,7 +71,8 @@ public abstract class VarbitMixin implements RSClient if (v.getIndex() == 0 && v.getLeastSignificantBit() == 0 && v.getMostSignificantBit() == 0) { - throw new IndexOutOfBoundsException("Varbit " + varbitId + " does not exist"); + getLogger().debug("Varbit {} doesn't exist!", varbitId); + return 0; } int value = varps[v.getIndex()]; @@ -152,4 +155,11 @@ public abstract class VarbitMixin implements RSClient { return getVarcs().getVarcMap(); } + + @Inject + @Override + public int getVarbitCount() + { + return getConfigArchive().getGroupFileCount(VARBITS_GROUP); + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSAbstractArchive.java b/runescape-api/src/main/java/net/runelite/rs/api/RSAbstractArchive.java index 052bc4ee74..653bd83962 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSAbstractArchive.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSAbstractArchive.java @@ -7,4 +7,7 @@ public interface RSAbstractArchive extends IndexDataBase { @Import("takeFile") byte[] getConfigData(int archiveId, int fileId); + + @Import("getGroupFileCount") + int getGroupFileCount(int group); } 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 df02ac9afa..597b93e4f1 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 @@ -457,6 +457,9 @@ public interface RSClient extends RSGameShell, Client @Import("SpriteBuffer_spritePalette") void setIndexedSpritePalette(int[] indexedSpritePalette); + @Import("archive2") + RSArchive getConfigArchive(); + @Import("archive6") RSArchive getMusicTracks();