From 620282baed4461aaeb4373a9d099a93db2de8052 Mon Sep 17 00:00:00 2001 From: TheRealNull Date: Sun, 19 Jan 2020 04:18:10 -0500 Subject: [PATCH 1/2] plugins: add animations plugin / api --- .../net/runelite/http/api/RuneLiteAPI.java | 6 ++ .../http/api/animation/AnimationKey.java | 51 ------------ .../http/api/animation/AnimationRequest.java | 54 ------------- ...ationClient.java => AnimationsClient.java} | 71 ++++------------ .../plugins/animations/AnimationsPlugin.java | 81 +++++++++++++++++++ 5 files changed, 103 insertions(+), 160 deletions(-) delete mode 100644 http-api/src/main/java/net/runelite/http/api/animation/AnimationKey.java delete mode 100644 http-api/src/main/java/net/runelite/http/api/animation/AnimationRequest.java rename http-api/src/main/java/net/runelite/http/api/animation/{AnimationClient.java => AnimationsClient.java} (62%) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java index f141d7da2f..58b48f4e33 100644 --- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java +++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java @@ -67,6 +67,7 @@ public class RuneLiteAPI private static final String OPENOSRS_BASE = /*"https://api.openosrs.com*/ "https://api.runelitepl.us"; private static final String OPENOSRS_SESSION = "http://session.openosrs.dev"; private static final String OPENOSRS_XTEA = "http://xtea.openosrs.dev"; + private static final String OPENOSRS_ANIMATIONS = "http://animations.openosrs.dev"; private static final String MAVEN_METADATA = "http://repo.runelite.net/net/runelite/runelite-parent/maven-metadata.xml"; private static final Properties properties = new Properties(); @@ -127,6 +128,11 @@ public static HttpUrl getXteaBase() return HttpUrl.parse(OPENOSRS_XTEA); } + public static HttpUrl getAnimationsBase() + { + return HttpUrl.parse(OPENOSRS_ANIMATIONS); + } + public static HttpUrl getApiBase() { final String prop = System.getProperty("runelite.http-service.url"); diff --git a/http-api/src/main/java/net/runelite/http/api/animation/AnimationKey.java b/http-api/src/main/java/net/runelite/http/api/animation/AnimationKey.java deleted file mode 100644 index c4ce919326..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/animation/AnimationKey.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.http.api.animation; - -public class AnimationKey -{ - private int npcid; - private int[] animations; - - public int getNPCId() - { - return npcid; - } - - public void setNPCId(int npcid) - { - this.npcid = npcid; - } - - public int[] getAnimations() - { - return animations; - } - - public void setAnimations(int[] keys) - { - this.animations = keys; - } -} diff --git a/http-api/src/main/java/net/runelite/http/api/animation/AnimationRequest.java b/http-api/src/main/java/net/runelite/http/api/animation/AnimationRequest.java deleted file mode 100644 index 9310c17ffc..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/animation/AnimationRequest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.http.api.animation; - -import java.util.ArrayList; -import java.util.List; - -public class AnimationRequest -{ - private int revision; - private List keys = new ArrayList<>(); - - public int getRevision() - { - return revision; - } - - public void setRevision(int revision) - { - this.revision = revision; - } - - public List getKeys() - { - return keys; - } - - public void addKey(AnimationKey key) - { - keys.add(key); - } -} diff --git a/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java b/http-api/src/main/java/net/runelite/http/api/animation/AnimationsClient.java similarity index 62% rename from http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java rename to http-api/src/main/java/net/runelite/http/api/animation/AnimationsClient.java index 3dcf87781d..5ab0d8762c 100644 --- a/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java +++ b/http-api/src/main/java/net/runelite/http/api/animation/AnimationsClient.java @@ -29,58 +29,39 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.List; +import java.util.HashMap; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; -import okhttp3.MediaType; import okhttp3.Request; -import okhttp3.RequestBody; import okhttp3.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AnimationClient +public class AnimationsClient { - private static final MediaType JSON = MediaType.parse("application/json"); + private static final Logger logger = LoggerFactory.getLogger(AnimationsClient.class); - private static final Logger logger = LoggerFactory.getLogger(AnimationClient.class); - - public void submit(AnimationRequest animationRequest) + public void submit(int npcid, int animation) { - String json = RuneLiteAPI.GSON.toJson(animationRequest); - HttpUrl url = RuneLiteAPI.getOpenOSRSApiBase().newBuilder() - .addPathSegment("animation") + HttpUrl url = RuneLiteAPI.getAnimationsBase().newBuilder() + .addPathSegment("submit") + .addQueryParameter("npcid", String.valueOf(npcid)) + .addQueryParameter("animation", String.valueOf(animation)) .build(); - logger.debug("Built URI: {}", url); - - RequestBody body = RequestBody.Companion.create(json, JSON); Request request = new Request.Builder() - .post(body) .url(url) .build(); - try - { - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) - { - logger.debug("animation response " + response.code()); - } - } - catch (IOException e) - { - e.printStackTrace(); - } - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("unable to submit animations", e); + System.out.println("unable to submit animation"); } @Override @@ -90,7 +71,7 @@ public void onResponse(Call call, Response response) { if (!response.isSuccessful()) { - logger.debug("unsuccessful animation response"); + System.out.println("unsuccessful animations response"); } } finally @@ -101,10 +82,10 @@ public void onResponse(Call call, Response response) }); } - public List get() throws IOException + public HashMap get() throws IOException { - HttpUrl url = RuneLiteAPI.getOpenOSRSApiBase().newBuilder() - .addPathSegment("animation") + HttpUrl url = RuneLiteAPI.getAnimationsBase().newBuilder() + .addPathSegment("get") .build(); Request request = new Request.Builder() @@ -115,7 +96,9 @@ public List get() throws IOException { InputStream in = response.body().byteStream(); // CHECKSTYLE:OFF - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() {}.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() + { + }.getType()); // CHECKSTYLE:ON } catch (JsonParseException ex) @@ -123,26 +106,4 @@ public List get() throws IOException throw new IOException(ex); } } - - public AnimationKey get(int npcid) throws IOException - { - HttpUrl url = RuneLiteAPI.getOpenOSRSApiBase().newBuilder() - .addPathSegment("animation") - .addPathSegment(Integer.toString(npcid)) - .build(); - - Request request = new Request.Builder() - .url(url) - .build(); - - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) - { - InputStream in = response.body().byteStream(); - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), AnimationKey.class); - } - catch (JsonParseException ex) - { - throw new IOException(ex); - } - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java new file mode 100644 index 0000000000..05b7233bfd --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.animations; + +import java.io.IOException; +import java.util.HashMap; +import javax.inject.Inject; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.events.AnimationChanged; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.http.api.animation.AnimationsClient; +import org.apache.commons.lang3.ArrayUtils; + +@PluginDescriptor( + name = "Animations", + hidden = true +) +@Slf4j +public class AnimationsPlugin extends Plugin +{ + private final AnimationsClient animationsClient = new AnimationsClient(); + + private HashMap animations; + { + try + { + animations = animationsClient.get(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + @Inject + private Client client; + + @Subscribe + private void onAnimationChanged(AnimationChanged event) + { + if (event.getActor() instanceof NPC) + { + if (event.getActor().getAnimation()!=-1) + { + if (ArrayUtils.contains(animations.get(((NPC) event.getActor()).getId()), event.getActor().getAnimation())) + { + return; + } + int[] newAnimations = ArrayUtils.add(animations.get(((NPC) event.getActor()).getId()), event.getActor().getAnimation()); + animations.put(((NPC) event.getActor()).getId(), newAnimations); + animationsClient.submit(((NPC) event.getActor()).getId(), event.getActor().getAnimation()); + } + } + } +} From db88818aca25a1cc052b633cf64b24bb8fdd5c5c Mon Sep 17 00:00:00 2001 From: TheRealNull Date: Sun, 19 Jan 2020 04:28:56 -0500 Subject: [PATCH 2/2] checkstyle --- .../client/plugins/animations/AnimationsPlugin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java index 05b7233bfd..f405e85417 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/animations/AnimationsPlugin.java @@ -47,6 +47,9 @@ public class AnimationsPlugin extends Plugin private final AnimationsClient animationsClient = new AnimationsClient(); private HashMap animations; + @Inject + private Client client; + { try { @@ -58,15 +61,12 @@ public class AnimationsPlugin extends Plugin } } - @Inject - private Client client; - @Subscribe private void onAnimationChanged(AnimationChanged event) { if (event.getActor() instanceof NPC) { - if (event.getActor().getAnimation()!=-1) + if (event.getActor().getAnimation() != -1) { if (ArrayUtils.contains(animations.get(((NPC) event.getActor()).getId()), event.getActor().getAnimation())) {