From 2cfc13fa676fb8981c13f5fa60286af8b5d7b2c5 Mon Sep 17 00:00:00 2001 From: Firebarrage Date: Sat, 16 Mar 2024 20:36:39 -0500 Subject: [PATCH 1/2] Adds functionality to hide specific items from the discord loot logger. --- .../DiscordLootLoggerConfig.java | 7 ++ .../DiscordLootLoggerPlugin.java | 65 +++++++++++++------ 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerConfig.java b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerConfig.java index e12ba8e5..fcef3ae4 100644 --- a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerConfig.java +++ b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerConfig.java @@ -33,6 +33,13 @@ default boolean sendScreenshot() ) String lootNpcs(); + @ConfigItem( + keyName = "hiddenItems", + name = "Hidden items", + description = "Items that should not trigger a notification, comma separated. Accepts wildcards." + ) + default String hiddenItems() {return "";}; + @ConfigItem( keyName = "includeLowValueItems", name = "Include Low Value Items", diff --git a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java index e991d776..e59f3f22 100644 --- a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java +++ b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java @@ -2,16 +2,10 @@ import com.google.common.base.Splitter; import com.google.common.base.Strings; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import com.google.inject.Provides; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import javax.imageio.ImageIO; -import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.ItemComposition; @@ -31,17 +25,22 @@ import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.Text; import net.runelite.client.util.WildcardMatcher; -import static net.runelite.http.api.RuneLiteAPI.GSON; import net.runelite.http.api.loottracker.LootRecordType; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; +import okhttp3.*; + +import javax.imageio.ImageIO; +import javax.inject.Inject; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import static net.runelite.http.api.RuneLiteAPI.GSON; @Slf4j @PluginDescriptor( @@ -66,6 +65,9 @@ public class DiscordLootLoggerPlugin extends Plugin private List lootNpcs; + private LoadingCache hiddenItemsCache; + private Collection hiddenItemNames; + private static String itemImageUrl(int itemId) { return "https://static.runelite.net/cache/item/icon/" + itemId + ".png"; @@ -78,11 +80,25 @@ private static String itemImageUrl(int itemId) protected void startUp() { lootNpcs = Collections.emptyList(); + String s = config.hiddenItems(); + hiddenItemNames = s != null ? Text.fromCSV(s) : Collections.emptyList(); + hiddenItemsCache = CacheBuilder.newBuilder() + .maximumSize(512L) + .expireAfterAccess(10, TimeUnit.MINUTES) + .build(new CacheLoader() { + @Override + public Boolean load(Integer itemId) throws Exception { + ItemComposition itemComp = itemManager.getItemComposition(itemId); + return hiddenItemNames.stream() + .noneMatch(hiddenItem -> WildcardMatcher.matches(hiddenItem, itemComp.getName())); + } + }); } @Override protected void shutDown() { + hiddenItemsCache.invalidateAll(); } @Provides @@ -98,6 +114,9 @@ public void onConfigChanged(ConfigChanged configChanged) { String s = config.lootNpcs(); lootNpcs = s != null ? Text.fromCSV(s) : Collections.emptyList(); + s = config.hiddenItems(); + hiddenItemNames = s != null ? Text.fromCSV(s) : Collections.emptyList(); + hiddenItemsCache.invalidateAll(); } } @@ -147,8 +166,16 @@ private String getPlayerName() return client.getLocalPlayer().getName(); } + private Collection filterHiddenItems(Collection items){ + return items.stream() + .filter(item -> hiddenItemsCache.getUnchecked(item.getId())) + .collect(Collectors.toList()); + } + private void processLoot(String name, Collection items) { + items = filterHiddenItems(items); + WebhookBody webhookBody = new WebhookBody(); boolean sendMessage = false; From 349522d4f2324954c4f01f8cccccb352a106e608 Mon Sep 17 00:00:00 2001 From: Firebarrage Date: Sun, 17 Mar 2024 12:31:09 -0500 Subject: [PATCH 2/2] Updating imports to follow RuneLite's style guide --- .../DiscordLootLoggerPlugin.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java index e59f3f22..fc4758e1 100644 --- a/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java +++ b/src/main/java/info/sigterm/plugins/discordlootlogger/DiscordLootLoggerPlugin.java @@ -6,6 +6,17 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.inject.Provides; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import javax.imageio.ImageIO; +import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.ItemComposition; @@ -26,19 +37,15 @@ import net.runelite.client.util.Text; import net.runelite.client.util.WildcardMatcher; import net.runelite.http.api.loottracker.LootRecordType; -import okhttp3.*; - -import javax.imageio.ImageIO; -import javax.inject.Inject; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.HttpUrl; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; import static net.runelite.http.api.RuneLiteAPI.GSON;