world hopper: allow selecting multiple region filters

This commit is contained in:
Adam
2021-11-29 17:50:52 -05:00
parent 095a0e6257
commit f6a3d222b4
4 changed files with 34 additions and 14 deletions

View File

@@ -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();
}
}
}

View File

@@ -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<RegionFilterMode> 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<RegionFilterMode> regionFilter()
{
return RegionFilterMode.NONE;
return Collections.emptySet();
}
@ConfigItem(

View File

@@ -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<RegionFilterMode> 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;
}

View File

@@ -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> 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;
}