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 d1135ffe34..44c33c22ab 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 @@ -136,6 +136,17 @@ public interface WorldHopperConfig extends Config return SubscriptionFilterMode.BOTH; } + @ConfigItem( + keyName = "regionFilter", + name = "Filter worlds by region", + description = "Restrict sidebar worlds to one region", + position = 8 + ) + default RegionFilterMode regionFilter() + { + return RegionFilterMode.NONE; + } + @ConfigItem( keyName = "displayPing", name = "Display current ping", 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 f0d4f88185..6fbd1a4c09 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 @@ -209,7 +209,8 @@ public class WorldHopperPlugin extends Plugin overlayManager.add(worldHopperOverlay); - panel.setFilterMode(config.subscriptionFilter()); + panel.setSubscriptionFilterMode(config.subscriptionFilter()); + panel.setRegionFilterMode(config.regionFilter()); // The plugin has its own executor for pings, as it blocks for a long time hopperExecutorService = new ExecutorServiceExceptionLogger(Executors.newSingleThreadScheduledExecutor()); @@ -272,7 +273,11 @@ public class WorldHopperPlugin extends Plugin } break; case "subscriptionFilter": - panel.setFilterMode(config.subscriptionFilter()); + panel.setSubscriptionFilterMode(config.subscriptionFilter()); + updateList(); + break; + case "regionFilter": + panel.setRegionFilterMode(config.regionFilter()); updateList(); break; } 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 2f0d428712..0f7b34773f 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 @@ -66,7 +66,9 @@ class WorldSwitcherPanel extends PluginPanel private final ArrayList rows = new ArrayList<>(); private final WorldHopperPlugin plugin; @Setter(AccessLevel.PACKAGE) - private SubscriptionFilterMode filterMode; + private SubscriptionFilterMode subscriptionFilterMode; + @Setter(AccessLevel.PACKAGE) + private RegionFilterMode regionFilterMode; WorldSwitcherPanel(WorldHopperPlugin plugin) { @@ -231,7 +233,7 @@ class WorldSwitcherPanel extends PluginPanel { World world = worlds.get(i); - switch (filterMode) + switch (subscriptionFilterMode) { case FREE: if (world.getTypes().contains(WorldType.MEMBERS)) @@ -247,6 +249,11 @@ class WorldSwitcherPanel extends PluginPanel break; } + if (regionFilterMode.getRegion() != null && !regionFilterMode.getRegion().equals(world.getRegion())) + { + continue; + } + rows.add(buildRow(world, i % 2 == 0, world.getId() == plugin.getCurrentWorld() && plugin.getLastWorld() != 0, plugin.isFavorite(world))); }