itemmanager: updated to use local resources for stats, also addding discord client service. (#1000)
* Add Discord Client * Add Discord message and embed utilities * Add plugin config base * Add base plugin and NPC Loot Log * Fixes Removes duplicated code Add local player death events * Add getIcon method * Remove unused Import * Move Item Stats from ItemManager to local resources. Add & Update Discord Embed Service. Remove DiscordWebHook plugin, it was pretty bad, can do better. * Fix lombok @NonNull tag. * Remove old imports. * Fix travis.
This commit is contained in:
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import java.io.IOException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class DiscordClient
|
||||||
|
{
|
||||||
|
public static final Gson gson = new Gson();
|
||||||
|
private static final MediaType JSON = MediaType.parse("application/json");
|
||||||
|
|
||||||
|
public void message(HttpUrl url, DiscordMessage discordMessage)
|
||||||
|
{
|
||||||
|
log.info("Message being sent");
|
||||||
|
message(url, discordMessage, 0, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void message(HttpUrl url, DiscordMessage discordMessage, int retryAttempt, int maxAttempts)
|
||||||
|
{
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.post(RequestBody.create(JSON, gson.toJson(discordMessage)))
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
log.info("Attempting to message with {}", discordMessage);
|
||||||
|
|
||||||
|
RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback()
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call call, IOException e)
|
||||||
|
{
|
||||||
|
log.warn("Unable to submit discord post.", e);
|
||||||
|
if (retryAttempt < maxAttempts)
|
||||||
|
{
|
||||||
|
message(url, discordMessage, retryAttempt + 1, maxAttempts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call call, Response response) throws IOException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (response.body() == null)
|
||||||
|
{
|
||||||
|
log.error("API Call - Reponse was null.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (response.body().string().contains("You are being rate limited") && retryAttempt < maxAttempts)
|
||||||
|
{
|
||||||
|
log.error("You are being rate limited, retrying...");
|
||||||
|
message(url, discordMessage, retryAttempt + 1, maxAttempts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
response.close();
|
||||||
|
log.debug("Submitted discord log record");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import net.runelite.http.api.discord.embed.AuthorEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.FieldEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.FooterEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.ImageEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.ProviderEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.ThumbnailEmbed;
|
||||||
|
import net.runelite.http.api.discord.embed.VideoEmbed;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class DiscordEmbed
|
||||||
|
{
|
||||||
|
String title;
|
||||||
|
String type;
|
||||||
|
String description;
|
||||||
|
String url;
|
||||||
|
String timestamp;
|
||||||
|
String iconurl;
|
||||||
|
String color;
|
||||||
|
FooterEmbed footer;
|
||||||
|
ImageEmbed image;
|
||||||
|
ThumbnailEmbed thumbnail;
|
||||||
|
VideoEmbed video;
|
||||||
|
ProviderEmbed provider;
|
||||||
|
AuthorEmbed author;
|
||||||
|
List<FieldEmbed> fields = new ArrayList<>();
|
||||||
|
|
||||||
|
public DiscordEmbed()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordEmbed(String title, String description)
|
||||||
|
{
|
||||||
|
this(title, description, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordEmbed(String title, String description, String url)
|
||||||
|
{
|
||||||
|
setTitle(title);
|
||||||
|
setDescription(description);
|
||||||
|
setUrl(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DiscordMessage toDiscordMessage(DiscordEmbed embed, String username, String avatarURL)
|
||||||
|
{
|
||||||
|
return DiscordMessage.builder()
|
||||||
|
.username(username)
|
||||||
|
.avatarUrl(avatarURL)
|
||||||
|
.content("")
|
||||||
|
.embed(embed)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordMessage toDiscordMessage(String username, String avatarUrl)
|
||||||
|
{
|
||||||
|
return DiscordEmbed.toDiscordMessage(this, username, avatarUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DiscordEmbedBuilder
|
||||||
|
{
|
||||||
|
List<FieldEmbed> fields = new ArrayList<>();
|
||||||
|
|
||||||
|
public DiscordEmbedBuilder field(FieldEmbed field)
|
||||||
|
{
|
||||||
|
fields.add(field);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class DiscordMessage
|
||||||
|
{
|
||||||
|
String username;
|
||||||
|
String content;
|
||||||
|
@SerializedName("avatar_url")
|
||||||
|
String avatarUrl;
|
||||||
|
@SerializedName("tts")
|
||||||
|
boolean textToSpeech;
|
||||||
|
List<DiscordEmbed> embeds = new ArrayList<>();
|
||||||
|
|
||||||
|
public DiscordMessage()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordMessage(String username, String content, String avatar_url)
|
||||||
|
{
|
||||||
|
this(username, content, avatar_url, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DiscordMessage(String username, String content, String avatar_url, boolean tts)
|
||||||
|
{
|
||||||
|
setUsername(username);
|
||||||
|
setContent(content);
|
||||||
|
setAvatarUrl(avatar_url);
|
||||||
|
setTextToSpeech(tts);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username)
|
||||||
|
{
|
||||||
|
if (username != null)
|
||||||
|
{
|
||||||
|
this.username = username.substring(0, Math.min(31, username.length()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.username = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DiscordMessageBuilder
|
||||||
|
{
|
||||||
|
List<DiscordEmbed> embeds = new ArrayList<>();
|
||||||
|
|
||||||
|
public DiscordMessageBuilder embed(DiscordEmbed embed)
|
||||||
|
{
|
||||||
|
embeds.add(embed);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class AuthorEmbed
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
String url;
|
||||||
|
String icon_url;
|
||||||
|
String proxy_icon_url;
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class FieldEmbed
|
||||||
|
{
|
||||||
|
@NonNull
|
||||||
|
String name;
|
||||||
|
@NonNull
|
||||||
|
String value;
|
||||||
|
boolean inline;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class FooterEmbed
|
||||||
|
{
|
||||||
|
String text;
|
||||||
|
String icon_url;
|
||||||
|
String proxy_icon_url;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class ImageEmbed
|
||||||
|
{
|
||||||
|
String url;
|
||||||
|
String proxy_url;
|
||||||
|
int height;
|
||||||
|
int width;
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class ProviderEmbed
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
String url;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class ThumbnailEmbed
|
||||||
|
{
|
||||||
|
String url;
|
||||||
|
String proxy_url;
|
||||||
|
int height;
|
||||||
|
int width;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Forsco <https://github.com/forsco>
|
||||||
|
* 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.discord.embed;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class VideoEmbed
|
||||||
|
{
|
||||||
|
String url;
|
||||||
|
int height;
|
||||||
|
int width;
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ import lombok.Value;
|
|||||||
@Value
|
@Value
|
||||||
public class ItemStats
|
public class ItemStats
|
||||||
{
|
{
|
||||||
|
private String name;
|
||||||
private boolean quest;
|
private boolean quest;
|
||||||
private boolean equipable;
|
private boolean equipable;
|
||||||
private double weight;
|
private double weight;
|
||||||
@@ -76,7 +77,7 @@ public class ItemStats
|
|||||||
newEquipment = equipment;
|
newEquipment = equipment;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ItemStats(quest, equipable, newWeight, newEquipment);
|
return new ItemStats(name, quest, equipable, newWeight, newEquipment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,14 @@ import com.google.common.cache.CacheBuilder;
|
|||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -50,116 +55,7 @@ import static net.runelite.api.Constants.HIGH_ALCHEMY_MULTIPLIER;
|
|||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.ItemDefinition;
|
import net.runelite.api.ItemDefinition;
|
||||||
import net.runelite.api.ItemID;
|
import net.runelite.api.ItemID;
|
||||||
import static net.runelite.api.ItemID.AGILITY_CAPE;
|
import static net.runelite.api.ItemID.*;
|
||||||
import static net.runelite.api.ItemID.AGILITY_CAPET;
|
|
||||||
import static net.runelite.api.ItemID.AGILITY_CAPET_13341;
|
|
||||||
import static net.runelite.api.ItemID.AGILITY_CAPE_13340;
|
|
||||||
import static net.runelite.api.ItemID.BOOTS_OF_LIGHTNESS;
|
|
||||||
import static net.runelite.api.ItemID.BOOTS_OF_LIGHTNESS_89;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_11861;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13589;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13590;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13601;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13602;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13613;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13614;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13625;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13626;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13637;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13638;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13677;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13678;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_21076;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_21078;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_11853;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13581;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13582;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13593;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13594;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13605;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13606;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13617;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13618;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13629;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13630;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13669;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13670;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_21064;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_21066;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_11859;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13587;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13588;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13599;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13600;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13611;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13612;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13623;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13624;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13635;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13636;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13675;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13676;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_21073;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_21075;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_11851;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13579;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13580;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13591;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13592;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13603;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13604;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13615;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13616;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13627;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13628;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13667;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13668;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_21061;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_21063;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_11857;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13585;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13586;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13597;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13598;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13609;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13610;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13621;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13622;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13633;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13634;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13673;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13674;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_21070;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_21072;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_11855;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13583;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13584;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13595;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13596;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13607;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13608;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13619;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13620;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13631;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13632;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13671;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13672;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_21067;
|
|
||||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_21069;
|
|
||||||
import static net.runelite.api.ItemID.MAX_CAPE;
|
|
||||||
import static net.runelite.api.ItemID.MAX_CAPE_13342;
|
|
||||||
import static net.runelite.api.ItemID.PENANCE_GLOVES;
|
|
||||||
import static net.runelite.api.ItemID.PENANCE_GLOVES_10554;
|
|
||||||
import static net.runelite.api.ItemID.SPOTTED_CAPE;
|
|
||||||
import static net.runelite.api.ItemID.SPOTTED_CAPE_10073;
|
|
||||||
import static net.runelite.api.ItemID.SPOTTIER_CAPE;
|
|
||||||
import static net.runelite.api.ItemID.SPOTTIER_CAPE_10074;
|
|
||||||
import net.runelite.api.Sprite;
|
import net.runelite.api.Sprite;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.PostItemDefinition;
|
import net.runelite.api.events.PostItemDefinition;
|
||||||
@@ -174,33 +70,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class ItemManager
|
public class ItemManager
|
||||||
{
|
{
|
||||||
@Value
|
|
||||||
private static class ImageKey
|
|
||||||
{
|
|
||||||
private final int itemId;
|
|
||||||
private final int itemQuantity;
|
|
||||||
private final boolean stackable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Value
|
|
||||||
private static class OutlineKey
|
|
||||||
{
|
|
||||||
private final int itemId;
|
|
||||||
private final int itemQuantity;
|
|
||||||
private final Color outlineColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Client client;
|
|
||||||
private final ScheduledExecutorService scheduledExecutorService;
|
|
||||||
private final ClientThread clientThread;
|
|
||||||
|
|
||||||
private final ItemClient itemClient = new ItemClient();
|
|
||||||
private Map<Integer, ItemPrice> itemPrices = Collections.emptyMap();
|
|
||||||
private Map<Integer, ItemStats> itemStats = Collections.emptyMap();
|
|
||||||
private final LoadingCache<ImageKey, AsyncBufferedImage> itemImages;
|
|
||||||
private final LoadingCache<Integer, ItemDefinition> itemDefinitions;
|
|
||||||
private final LoadingCache<OutlineKey, BufferedImage> itemOutlines;
|
|
||||||
|
|
||||||
// Worn items with weight reducing property have a different worn and inventory ItemID
|
// Worn items with weight reducing property have a different worn and inventory ItemID
|
||||||
private static final ImmutableMap<Integer, Integer> WORN_ITEMS = ImmutableMap.<Integer, Integer>builder().
|
private static final ImmutableMap<Integer, Integer> WORN_ITEMS = ImmutableMap.<Integer, Integer>builder().
|
||||||
put(BOOTS_OF_LIGHTNESS_89, BOOTS_OF_LIGHTNESS).
|
put(BOOTS_OF_LIGHTNESS_89, BOOTS_OF_LIGHTNESS).
|
||||||
@@ -263,7 +132,16 @@ public class ItemManager
|
|||||||
put(AGILITY_CAPET_13341, AGILITY_CAPET).
|
put(AGILITY_CAPET_13341, AGILITY_CAPET).
|
||||||
put(AGILITY_CAPE_13340, AGILITY_CAPE).
|
put(AGILITY_CAPE_13340, AGILITY_CAPE).
|
||||||
build();
|
build();
|
||||||
|
private final Client client;
|
||||||
|
private final ScheduledExecutorService scheduledExecutorService;
|
||||||
|
private final ClientThread clientThread;
|
||||||
|
private final ItemClient itemClient = new ItemClient();
|
||||||
|
private final ImmutableMap<Integer, ItemStats> itemStatMap;
|
||||||
|
private final LoadingCache<ImageKey, AsyncBufferedImage> itemImages;
|
||||||
|
private final LoadingCache<Integer, ItemDefinition> itemDefinitions;
|
||||||
|
private final LoadingCache<OutlineKey, BufferedImage> itemOutlines;
|
||||||
|
private Map<Integer, ItemPrice> itemPrices = Collections.emptyMap();
|
||||||
|
private Map<Integer, ItemStats> itemStats = Collections.emptyMap();
|
||||||
@Inject
|
@Inject
|
||||||
public ItemManager(Client client, ScheduledExecutorService executor, ClientThread clientThread)
|
public ItemManager(Client client, ScheduledExecutorService executor, ClientThread clientThread)
|
||||||
{
|
{
|
||||||
@@ -309,6 +187,16 @@ public class ItemManager
|
|||||||
return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor);
|
return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
|
final Type typeToken = new TypeToken<Map<Integer, ItemStats>>()
|
||||||
|
{
|
||||||
|
}.getType();
|
||||||
|
|
||||||
|
final InputStream statsFile = getClass().getResourceAsStream("/item_stats.json");
|
||||||
|
final Map<Integer, ItemStats> stats = gson.fromJson(new InputStreamReader(statsFile), typeToken);
|
||||||
|
itemStatMap = ImmutableMap.copyOf(stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadPrices()
|
private void loadPrices()
|
||||||
@@ -352,7 +240,6 @@ public class ItemManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameStateChanged(final GameStateChanged event)
|
public void onGameStateChanged(final GameStateChanged event)
|
||||||
{
|
{
|
||||||
@@ -392,7 +279,7 @@ public class ItemManager
|
|||||||
/**
|
/**
|
||||||
* Look up an item's price
|
* Look up an item's price
|
||||||
*
|
*
|
||||||
* @param itemID item id
|
* @param itemID item id
|
||||||
* @param ignoreUntradeableMap should the price returned ignore the {@link UntradeableItemMapping}
|
* @param ignoreUntradeableMap should the price returned ignore the {@link UntradeableItemMapping}
|
||||||
* @return item price
|
* @return item price
|
||||||
*/
|
*/
|
||||||
@@ -473,7 +360,7 @@ public class ItemManager
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return itemStats.get(canonicalize(itemId));
|
return itemStatMap.get(canonicalize(itemId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -629,4 +516,20 @@ public class ItemManager
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
private static class ImageKey
|
||||||
|
{
|
||||||
|
private final int itemId;
|
||||||
|
private final int itemQuantity;
|
||||||
|
private final boolean stackable;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
private static class OutlineKey
|
||||||
|
{
|
||||||
|
private final int itemId;
|
||||||
|
private final int itemQuantity;
|
||||||
|
private final Color outlineColor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package net.runelite.client.game;
|
||||||
|
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public class ItemStat
|
||||||
|
{
|
||||||
|
private int slot;
|
||||||
|
|
||||||
|
private int astab;
|
||||||
|
private int aslash;
|
||||||
|
private int acrush;
|
||||||
|
private int amagic;
|
||||||
|
private int arange;
|
||||||
|
|
||||||
|
private int dstab;
|
||||||
|
private int dslash;
|
||||||
|
private int dcrush;
|
||||||
|
private int dmagic;
|
||||||
|
private int drange;
|
||||||
|
|
||||||
|
private int str;
|
||||||
|
private int rstr;
|
||||||
|
private int mdmg;
|
||||||
|
private int prayer;
|
||||||
|
private int aspeed;
|
||||||
|
}
|
||||||
@@ -48,7 +48,7 @@ import net.runelite.http.api.item.ItemStats;
|
|||||||
public class ItemStatOverlay extends Overlay
|
public class ItemStatOverlay extends Overlay
|
||||||
{
|
{
|
||||||
// Unarmed attack speed is 6
|
// Unarmed attack speed is 6
|
||||||
private static final ItemStats UNARMED = new ItemStats(false, true, 0,
|
private static final ItemStats UNARMED = new ItemStats("", false, true, 0,
|
||||||
ItemEquipmentStats.builder()
|
ItemEquipmentStats.builder()
|
||||||
.aspeed(6)
|
.aspeed(6)
|
||||||
.build());
|
.build());
|
||||||
|
|||||||
63437
runelite-client/src/main/resources/item_stats.json
Normal file
63437
runelite-client/src/main/resources/item_stats.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user