diff --git a/build.gradle b/build.gradle index e2ce63f3..276c4607 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ repositories { } } -def lastSupportedVersion = "1.10.36" +def lastSupportedVersion = "1.11.7" def runeLiteVersion = getRuneLiteVersion() def supportedCheck = false if (supportedCheck) { @@ -24,9 +24,8 @@ if (supportedCheck) { throw new Exception("Out of date (last supported: " + lastSupportedVersion + " current client: " + runeLiteVersion + ")") } } - static def getRuneLiteVersion() { - URL url = new URL("http://repo.runelite.net/net/runelite/client/maven-metadata.xml") + URL url = new URL("https://repo.runelite.net/net/runelite/client/maven-metadata.xml") URLConnection urlConnection = url.openConnection() BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( urlConnection.getInputStream())) diff --git a/src/main/java/net/runelite/client/callback/ClientThread.java b/src/main/java/net/runelite/client/callback/ClientThread.java index b9033f65..e983bfa5 100644 --- a/src/main/java/net/runelite/client/callback/ClientThread.java +++ b/src/main/java/net/runelite/client/callback/ClientThread.java @@ -70,28 +70,20 @@ public void invokeLater(BooleanSupplier r) { invokes.add(r); } + public void invokeAtTickEnd(Runnable r) + { + invokesAtTickEnd.add(() -> + { + r.run(); + return true; + }); + } + /** * Invokes queued actions on the client thread */ void invoke() { - assert client.isClientThread(); - Iterator ir = invokes.iterator(); - while (ir.hasNext()) { - BooleanSupplier r = ir.next(); - boolean remove = true; - try { - remove = r.getAsBoolean(); - } catch (ThreadDeath d) { - throw d; - } catch (Throwable e) { - log.warn("Exception in invoke", e); - } - if (remove) { - ir.remove(); - } else { - log.trace("Deferring task {}", r); - } - } + invokeList(invokes); } void invokeTickEnd() { @@ -118,4 +110,4 @@ private void invokeList(ConcurrentLinkedQueue invokes) { } } } -} \ No newline at end of file +} diff --git a/src/main/java/net/runelite/client/modified/BotModule.java b/src/main/java/net/runelite/client/modified/BotModule.java index 1e5e75e7..43a70421 100644 --- a/src/main/java/net/runelite/client/modified/BotModule.java +++ b/src/main/java/net/runelite/client/modified/BotModule.java @@ -34,6 +34,7 @@ import net.runelite.client.game.NPCManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.PluginManager; +import net.runelite.client.rs.ClientLoader; import net.runelite.client.task.Scheduler; import net.runelite.client.util.DeferredEventBus; import net.runelite.client.util.ExecutorServiceExceptionLogger; @@ -47,7 +48,7 @@ public class BotModule extends AbstractModule { private final OkHttpClient okHttpClient; - private final Supplier clientLoader; + private final ClientLoader clientLoader; private final RuntimeConfigLoader configSupplier; private final boolean developerMode; private final boolean safeMode; @@ -60,7 +61,7 @@ public class BotModule extends AbstractModule { private final boolean noupdate = false; - public BotModule(OkHttpClient okHttpClient, Supplier clientLoader, RuntimeConfigLoader configSupplier, boolean developerMode, boolean safeMode, File sessionfile, File config) { + public BotModule(OkHttpClient okHttpClient, ClientLoader clientLoader, RuntimeConfigLoader configSupplier, boolean developerMode, boolean safeMode, File sessionfile, File config) { this.okHttpClient = okHttpClient; this.clientLoader = clientLoader; this.configSupplier = configSupplier; @@ -144,7 +145,7 @@ else if (entry.getValue() instanceof Double) @Singleton Applet provideApplet() { - return clientLoader.get(); + return (Applet) clientLoader.get(); } @Provides diff --git a/src/main/java/net/runelite/client/modified/RuneLite.java b/src/main/java/net/runelite/client/modified/RuneLite.java index 369ef2bd..b7138393 100644 --- a/src/main/java/net/runelite/client/modified/RuneLite.java +++ b/src/main/java/net/runelite/client/modified/RuneLite.java @@ -49,7 +49,6 @@ import net.runelite.client.game.WorldService; import net.runelite.client.plugins.PluginManager; import net.runelite.client.rs.ClientLoader; -import net.runelite.client.rs.ClientUpdateCheckMode; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.WidgetOverlay; import net.runelite.rsb.botLauncher.BotLite; @@ -175,23 +174,11 @@ public static ArgumentAcceptingOptionSpec[] handleParsing(OptionParser parser .withValuesConvertedBy(new ConfigFileConverter()) .defaultsTo(DEFAULT_CONFIG_FILE); - final ArgumentAcceptingOptionSpec updateMode = parser - .accepts("rs", "Select client type") - .withRequiredArg() - .ofType(ClientUpdateCheckMode.class) - .defaultsTo(ClientUpdateCheckMode.AUTO) - .withValuesConvertedBy(new EnumConverter<>(ClientUpdateCheckMode.class) { - @Override - public ClientUpdateCheckMode convert(String v) { - return super.convert(v.toUpperCase()); - } - }); - final ArgumentAcceptingOptionSpec proxyInfo = parser .accepts("proxy", "Designates a proxy ip address to be used to make the bot server connections") .withRequiredArg().ofType(String.class); - return (ArgumentAcceptingOptionSpec[]) new ArgumentAcceptingOptionSpec[]{sessionfile, configfile, updateMode, proxyInfo}; + return (ArgumentAcceptingOptionSpec[]) new ArgumentAcceptingOptionSpec[]{sessionfile, configfile, proxyInfo}; } /** @@ -260,7 +247,6 @@ public static void initializeClient(ArgumentAcceptingOptionSpec[] optionSpecs { final RuntimeConfigLoader runtimeConfigLoader = new RuntimeConfigLoader(okHttpClient); final ClientLoader clientLoader = new ClientLoader(okHttpClient, - options.valueOf(optionSpecs[Options.UPDATE_MODE.getIndex()].ofType(ClientUpdateCheckMode.class)), runtimeConfigLoader, (String) options.valueOf("jav_config")); diff --git a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseClientWrapper.java b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseClientWrapper.java index 1b7d7890..64980603 100644 --- a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseClientWrapper.java +++ b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseClientWrapper.java @@ -1,5 +1,6 @@ package net.runelite.rsb.wrappers.client_wrapper; +import com.jagex.oldscape.pub.OAuthApi; import net.runelite.api.*; import net.runelite.api.annotations.Varp; import net.runelite.api.clan.ClanChannel; @@ -12,27 +13,17 @@ import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.api.widgets.WidgetModalMode; import net.runelite.api.worldmap.MapElementConfig; import net.runelite.api.worldmap.WorldMap; -import net.runelite.api.RuneLiteObjectController; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.applet.Applet; import java.awt.*; -import java.lang.reflect.Method; import java.util.EnumSet; import java.util.List; import java.util.Map; import java.util.function.IntPredicate; -import com.jagex.oldscape.pub.OAuthApi; -import com.jagex.oldscape.pub.OtlTokenRequester; -import com.jagex.oldscape.pub.OtlTokenResponse; - - - - /* Base class for wrapping runelite Client, along with some weird Applet shenanigans. @@ -81,14 +72,12 @@ public List getNpcs() { return wrappedClient.getNpcs(); } - @Override public NPC[] getCachedNPCs() { - return wrappedClient.getCachedNPCs(); + return (NPC[]) wrappedClient.getTopLevelWorldView().npcs().stream().toArray(); } - @Override public Player[] getCachedPlayers() { - return wrappedClient.getCachedPlayers(); + return (Player[]) wrappedClient.getTopLevelWorldView().players().stream().toArray(); } @Override @@ -235,6 +224,11 @@ public int getWorld() { return wrappedClient.getWorld(); } + @Override + public String getWorldHost() { + return wrappedClient.getWorldHost(); + } + @Override public int getCanvasHeight() { return wrappedClient.getCanvasHeight(); @@ -784,6 +778,26 @@ public LocalPoint getLocalDestinationLocation() { return wrappedClient.getLocalDestinationLocation(); } + @Override + public void registerRuneLiteObject(RuneLiteObjectController controller) { + wrappedClient.registerRuneLiteObject(controller); + } + + @Override + public void removeRuneLiteObject(RuneLiteObjectController controller) { + wrappedClient.removeRuneLiteObject(controller); + } + + @Override + public boolean isRuneLiteObjectRegistered(RuneLiteObjectController controller) { + return wrappedClient.isRuneLiteObjectRegistered(controller); + } + + @Override + public List getActiveMidiRequests() { + return wrappedClient.getActiveMidiRequests(); + } + @Override public Projectile createProjectile(int id, int plane, int startX, int startY, int startZ, int startCycle, int endCycle, int slope, int startHeight, int endHeight, @Nullable Actor target, int targetX, int targetY) { return wrappedClient.createProjectile(id, plane, startX, startY, startZ, startCycle, endCycle, slope, startHeight, endHeight, target, targetX, targetY); @@ -1643,19 +1657,4 @@ public void setDraw2DMask(int mask) { public int getDraw2DMask() { return wrappedClient.getDraw2DMask(); } - - @Override - public List getActiveMidiRequests() { - return wrappedClient.getActiveMidiRequests(); - } - - @Override - public boolean isRuneLiteObjectRegistered(RuneLiteObjectController controller) {return wrappedClient.isRuneLiteObjectRegistered(controller);} - - @Override - public void removeRuneLiteObject(RuneLiteObjectController controller) {wrappedClient.removeRuneLiteObject(controller);} - - @Override - public void registerRuneLiteObject(RuneLiteObjectController controller) {wrappedClient.registerRuneLiteObject(controller);} - } diff --git a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseWidgetWrapper.java b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseWidgetWrapper.java index 2bd8691d..4dee60b3 100644 --- a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseWidgetWrapper.java +++ b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/BaseWidgetWrapper.java @@ -779,8 +779,8 @@ public void setOnScrollWheelListener(Object... objects) { @Override public void clearActions() { wrappedWidget.clearActions(); } - @Override - public int[] getVarTransmitTrigger() { return wrappedWidget.getVarTransmitTrigger(); } - + public int[] getVarTransmitTrigger() { + return wrappedWidget.getVarTransmitTrigger(); + } } diff --git a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/RSClient.java b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/RSClient.java index a32d3fbb..785f9b5b 100644 --- a/src/main/java/net/runelite/rsb/wrappers/client_wrapper/RSClient.java +++ b/src/main/java/net/runelite/rsb/wrappers/client_wrapper/RSClient.java @@ -8,10 +8,7 @@ import net.runelite.api.worldmap.MapElementConfig; import net.runelite.client.callback.ClientThread; import net.runelite.api.RuneLiteObjectController; -import com.jagex.oldscape.pub.OAuthApi; -import com.jagex.oldscape.pub.OtlTokenRequester; -import com.jagex.oldscape.pub.OtlTokenResponse; -import com.jagex.oldscape.pub.RefreshAccessTokenRequester; + import javax.annotation.Nullable; import java.time.Instant; import java.util.*; @@ -347,7 +344,10 @@ private void runTask(FutureTask task) { @SneakyThrows private void runOnClientThread(Runnable method) { - final var task = new FutureTask(() -> { method.run();return null; } ); + final var task = new FutureTask(() -> { + method.run(); + return null; + }); runTask(task); task.get(); } @@ -357,7 +357,7 @@ private T convertResult(T result) { return (T) new WidgetWrapper(concreteResult); } else if (result instanceof Widget[] concreteResult) { WidgetWrapper[] convertedResult = new WidgetWrapper[concreteResult.length]; - for (int i = 0 ; i < concreteResult.length ; i++) { + for (int i = 0; i < concreteResult.length; i++) { convertedResult[i] = new WidgetWrapper(concreteResult[i]); } return (T) convertedResult; @@ -367,7 +367,7 @@ private T convertResult(T result) { private Widget[] convertArg(Widget[] arg) { Widget[] convertedArg = new Widget[arg.length]; - for (int i = 0 ; i < arg.length ; i++) { + for (int i = 0; i < arg.length; i++) { if (arg[i] instanceof WidgetWrapper widgetWrapper) { convertedArg[i] = widgetWrapper.wrappedWidget; } else { @@ -424,6 +424,7 @@ public Widget getWidget(int groupId, int childId) { // tested, no need to runOnC public Widget getWidget(int packedID) { // tested, no need to runOnClientThread return convertResult(super.getWidget(packedID)); } + @Override public MapElementConfig getMapElementConfig(int id) { return convertResult(super.getMapElementConfig(id)); @@ -470,6 +471,11 @@ public void setAnimationInterpolationFilter(IntPredicate intPredicate) { super.setAnimationInterpolationFilter(intPredicate); } + @Override + public String getWorldHost() { + return super.getWorldHost(); + } + @Override public int getCameraMode() { return super.getCameraMode(); @@ -516,7 +522,9 @@ public double getCameraFocalPointY() { } @Override - public boolean isWidgetSelected() {return super.isWidgetSelected();} + public boolean isWidgetSelected() { + return super.isWidgetSelected(); + } @Override @Nullable @@ -585,6 +593,26 @@ public LocalPoint getLocalDestinationLocation() { // tested, causes freezes with return runOnClientThread(super::getLocalDestinationLocation); } + @Override + public void registerRuneLiteObject(RuneLiteObjectController controller) { + super.registerRuneLiteObject(controller); + } + + @Override + public void removeRuneLiteObject(RuneLiteObjectController controller) { + super.removeRuneLiteObject(controller); + } + + @Override + public boolean isRuneLiteObjectRegistered(RuneLiteObjectController controller) { + return super.isRuneLiteObjectRegistered(controller); + } + + @Override + public List getActiveMidiRequests() { + return super.getActiveMidiRequests(); + } + @Override public int getArraySizes(int i) { return super.getArraySizes(i); @@ -627,75 +655,23 @@ public int getDraw2DMask() { return super.getDraw2DMask(); } - @Override - public List getActiveMidiRequests() { - return convertResult(super.getActiveMidiRequests()); - } - - @Override - public boolean isRuneLiteObjectRegistered(RuneLiteObjectController controller) { - return super.isRuneLiteObjectRegistered(controller); - } - - @Override - public void removeRuneLiteObject(RuneLiteObjectController controller) { - super.removeRuneLiteObject(controller); - } - - @Override - public void registerRuneLiteObject(RuneLiteObjectController controller) { - super.registerRuneLiteObject(controller); - } - - public void px(OtlTokenRequester requester) { - px(requester); - } - - public long qx() { - return qx(); - } - - public boolean pz() { - return pz(); - } - - public boolean pi() { - return pi(); - } - - public boolean ps() { - return ps(); - } - - public void setOtlTokenRequester(OtlTokenRequester requester) { - setOtlTokenRequester(requester); - } - - public void pr(RefreshAccessTokenRequester requester) { - pr(requester); + public void setClient(int client) { + setClient(client); } - public void pn(OtlTokenRequester requester) { - pn(requester); + public long qu() { + return qu(); } - public void pm(RefreshAccessTokenRequester requester) { - pm(requester); + public boolean isOnLoginScreen() { + return isOnLoginScreen(); } - public void setRefreshTokenRequester(RefreshAccessTokenRequester requester) { - setRefreshTokenRequester(requester); + public boolean pf() { + return pf(); } - - public void setClient(int client) { - setClient(client); + public void pg(int a) { + pg(a); } - - public long qu() { return qu(); } - - public boolean isOnLoginScreen() { return isOnLoginScreen(); } - -public boolean pf() { return pf(); } -public void pg(int a) { pg(a); } }