diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/World.java b/http-api/src/main/java/net/runelite/http/api/worlds/World.java index 2c1e6f6798..70bc2c8237 100644 --- a/http-api/src/main/java/net/runelite/http/api/worlds/World.java +++ b/http-api/src/main/java/net/runelite/http/api/worlds/World.java @@ -38,4 +38,9 @@ public class World private String activity; private int location; private int players; + + public WorldRegion getRegion() + { + return WorldRegion.valueOf(location); + } } diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldRegion.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldRegion.java new file mode 100644 index 0000000000..2c391e91f4 --- /dev/null +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldRegion.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2020, melky + * 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.worlds; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Holds the data for each world's region (location) + */ +@AllArgsConstructor +@Getter +public enum WorldRegion +{ + UNITED_STATES_OF_AMERICA("US", "USA"), + UNITED_KINGDOM("GB", "GBR"), + AUSTRALIA("AU", "AUS"), + GERMANY("DE", "DEU"); + + /** + * ISO-3166-1 alpha-2 country code + */ + private final String alpha2; + /** + * ISO-3166-1 alpha-3 country code + */ + private final String alpha3; + + /** + * Gets the region using the location id + * {@link WorldRegion} value. + * + * @param locationId the location id of world + * @return WorldRegion the region of the world + */ + public static WorldRegion valueOf(int locationId) + { + switch (locationId) + { + case 0: + return UNITED_STATES_OF_AMERICA; + case 1: + return UNITED_KINGDOM; + case 3: + return AUSTRALIA; + case 7: + return GERMANY; + default: + return null; + } + } +} diff --git a/http-service/src/test/java/net/runelite/http/service/worlds/WorldsServiceTest.java b/http-service/src/test/java/net/runelite/http/service/worlds/WorldsServiceTest.java index 152a6e4e5a..a083bba0df 100644 --- a/http-service/src/test/java/net/runelite/http/service/worlds/WorldsServiceTest.java +++ b/http-service/src/test/java/net/runelite/http/service/worlds/WorldsServiceTest.java @@ -77,6 +77,11 @@ public class WorldsServiceTest World world = worldResult.findWorld(385); assertNotNull(world); assertTrue(world.getTypes().contains(WorldType.SKILL_TOTAL)); + + for (World testWorld : worldResult.getWorlds()) + { + assertNotNull("Missing a region in WorldRegion enum", testWorld.getRegion()); + } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java index 2aea475eb0..d3f6315ba2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java @@ -43,6 +43,7 @@ import lombok.Getter; import net.runelite.client.ui.FontManager; import net.runelite.client.util.ImageUtil; import net.runelite.http.api.worlds.World; +import net.runelite.http.api.worlds.WorldRegion; import net.runelite.http.api.worlds.WorldType; class WorldTableRow extends JPanel @@ -57,7 +58,6 @@ class WorldTableRow extends JPanel private static final int PING_COLUMN_WIDTH = 35; private static final Color CURRENT_WORLD = new Color(66, 227, 17); - private static final Color UNAVAILABLE_WORLD = Color.GRAY.darker().darker(); private static final Color DANGEROUS_WORLD = new Color(251, 62, 62); private static final Color TOURNAMENT_WORLD = new Color(79, 145, 255); private static final Color MEMBERS_WORLD = new Color(210, 193, 53); @@ -326,26 +326,36 @@ class WorldTableRow extends JPanel worldField = new JLabel(world.getId() + ""); - JLabel flag = new JLabel(getFlag(world.getLocation())); - - column.add(flag, BorderLayout.WEST); + ImageIcon flagIcon = getFlag(world.getRegion()); + if (flagIcon != null) + { + JLabel flag = new JLabel(flagIcon); + column.add(flag, BorderLayout.WEST); + } column.add(worldField, BorderLayout.CENTER); return column; } - private ImageIcon getFlag(int locationId) + private static ImageIcon getFlag(WorldRegion region) { - switch (locationId) + if (region == null) { - case 0: + return null; + } + + switch (region) + { + case UNITED_STATES_OF_AMERICA: return FLAG_US; - case 1: + case UNITED_KINGDOM: return FLAG_UK; - case 3: + case AUSTRALIA: return FLAG_AUS; - default: + case GERMANY: return FLAG_GER; + default: + return null; } } }