From f6a3d222b4986ab7beab54b650797f2821f5852c Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 29 Nov 2021 17:50:52 -0500 Subject: [PATCH] world hopper: allow selecting multiple region filters --- .../plugins/worldhopper/RegionFilterMode.java | 28 ++++++++++++++----- .../worldhopper/WorldHopperConfig.java | 10 ++++--- .../worldhopper/WorldHopperPlugin.java | 5 +++- .../worldhopper/WorldSwitcherPanel.java | 5 ++-- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/RegionFilterMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/RegionFilterMode.java index 2a1a244b89..0b88556032 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/RegionFilterMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/RegionFilterMode.java @@ -24,16 +24,13 @@ */ package net.runelite.client.plugins.worldhopper; -import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import net.runelite.http.api.worlds.WorldRegion; -@NoArgsConstructor -@AllArgsConstructor -public enum RegionFilterMode +@RequiredArgsConstructor +enum RegionFilterMode { - NONE, AUSTRALIA(WorldRegion.AUSTRALIA), GERMANY(WorldRegion.GERMANY), UNITED_KINGDOM(WorldRegion.UNITED_KINGDOM) @@ -54,5 +51,22 @@ public enum RegionFilterMode }; @Getter - private WorldRegion region; + private final WorldRegion region; + + static RegionFilterMode of(WorldRegion region) + { + switch (region) + { + case UNITED_STATES_OF_AMERICA: + return UNITED_STATES; + case UNITED_KINGDOM: + return UNITED_KINGDOM; + case AUSTRALIA: + return AUSTRALIA; + case GERMANY: + return GERMANY; + default: + throw new IllegalStateException(); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java index 44c33c22ab..8996dd12f4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java @@ -27,6 +27,8 @@ package net.runelite.client.plugins.worldhopper; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import java.util.Collections; +import java.util.Set; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @@ -76,9 +78,9 @@ public interface WorldHopperConfig extends Config description = "Limit quick-hopping to worlds of a specific region", position = 3 ) - default RegionFilterMode quickHopRegionFilter() + default Set quickHopRegionFilter() { - return RegionFilterMode.NONE; + return Collections.emptySet(); } @ConfigItem( @@ -142,9 +144,9 @@ public interface WorldHopperConfig extends Config description = "Restrict sidebar worlds to one region", position = 8 ) - default RegionFilterMode regionFilter() + default Set regionFilter() { - return RegionFilterMode.NONE; + return Collections.emptySet(); } @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 52c1e6d231..ef3bcaf423 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -36,6 +36,7 @@ import java.util.EnumSet; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; @@ -533,6 +534,8 @@ public class WorldHopperPlugin extends Plugin int worldIdx = worlds.indexOf(currentWorld); int totalLevel = client.getTotalLevel(); + final Set regionFilter = config.quickHopRegionFilter(); + World world; do { @@ -564,7 +567,7 @@ public class WorldHopperPlugin extends Plugin world = worlds.get(worldIdx); // Check world region if filter is enabled - if (config.quickHopRegionFilter() != RegionFilterMode.NONE && world.getRegion() != config.quickHopRegionFilter().getRegion()) + if (!regionFilter.isEmpty() && !regionFilter.contains(RegionFilterMode.of(world.getRegion()))) { continue; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java index 0f7b34773f..8d6f7705e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java @@ -34,6 +34,7 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import javax.swing.JPanel; import javax.swing.SwingUtilities; @@ -68,7 +69,7 @@ class WorldSwitcherPanel extends PluginPanel @Setter(AccessLevel.PACKAGE) private SubscriptionFilterMode subscriptionFilterMode; @Setter(AccessLevel.PACKAGE) - private RegionFilterMode regionFilterMode; + private Set regionFilterMode; WorldSwitcherPanel(WorldHopperPlugin plugin) { @@ -249,7 +250,7 @@ class WorldSwitcherPanel extends PluginPanel break; } - if (regionFilterMode.getRegion() != null && !regionFilterMode.getRegion().equals(world.getRegion())) + if (!regionFilterMode.isEmpty() && !regionFilterMode.contains(RegionFilterMode.of(world.getRegion()))) { continue; }