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 aa38a8c4c8..6f56d6d916 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 @@ -24,10 +24,12 @@ */ package net.runelite.http.api.worlds; +import java.util.EnumSet; + public class World { private int id; - private int mask; + private EnumSet types; private String address; private String activity; private int location; @@ -36,7 +38,7 @@ public class World @Override public String toString() { - return "World{" + "id=" + id + ", mask=" + mask + ", address=" + address + ", activity=" + activity + ", location=" + location + ", players=" + players + '}'; + return "World{" + "id=" + id + ", types=" + types + ", address=" + address + ", activity=" + activity + ", location=" + location + ", players=" + players + '}'; } public int getId() @@ -49,14 +51,14 @@ public class World this.id = id; } - public int getMask() + public EnumSet getTypes() { - return mask; + return types; } - public void setMask(int mask) + public void setTypes(EnumSet types) { - this.mask = mask; + this.types = types; } public String getAddress() diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java new file mode 100644 index 0000000000..3b9c9a139b --- /dev/null +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018, UniquePassive + * 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; + +public enum WorldType +{ + MEMBERS, + PVP, + BOUNTY, + SKILL_TOTAL, + PVP_HIGH_RISK, + LAST_MAN_STANDING, + DEADMAN, + SEASONAL_DEADMAN +} diff --git a/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java b/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java new file mode 100644 index 0000000000..52d0486926 --- /dev/null +++ b/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018, UniquePassive + * 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.service.worlds; + +import net.runelite.http.api.worlds.WorldType; + +enum ServiceWorldType +{ + MEMBERS(WorldType.MEMBERS, 1), + PVP(WorldType.PVP, 1 << 2), + BOUNTY(WorldType.BOUNTY, 1 << 5), + SKILL_TOTAL(WorldType.SKILL_TOTAL, 1 << 7), + PVP_HIGH_RISK(WorldType.PVP_HIGH_RISK, 1 << 10), + LAST_MAN_STANDING(WorldType.LAST_MAN_STANDING, 1 << 14), + DEADMAN(WorldType.DEADMAN, 1 << 29), + SEASONAL_DEADMAN(WorldType.SEASONAL_DEADMAN, 1 << 30); + + private final WorldType apiType; + private final int mask; + + private ServiceWorldType(WorldType apiType, int mask) + { + this.apiType = apiType; + this.mask = mask; + } + + public WorldType getApiType() + { + return apiType; + } + + public int getMask() + { + return mask; + } +} diff --git a/http-service/src/main/java/net/runelite/http/service/worlds/WorldsService.java b/http-service/src/main/java/net/runelite/http/service/worlds/WorldsService.java index e896357769..d44e6cf175 100644 --- a/http-service/src/main/java/net/runelite/http/service/worlds/WorldsService.java +++ b/http-service/src/main/java/net/runelite/http/service/worlds/WorldsService.java @@ -27,10 +27,12 @@ package net.runelite.http.service.worlds; import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import net.runelite.http.api.RuneliteAPI; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldResult; +import net.runelite.http.api.worlds.WorldType; import okhttp3.HttpUrl; import okhttp3.Request; import okhttp3.Response; @@ -71,7 +73,7 @@ public class WorldsService { World world = new World(); world.setId(buf.getShort() & 0xFFFF); - world.setMask(buf.getInt()); + world.setTypes(getTypes(buf.getInt())); world.setAddress(readString(buf)); world.setActivity(readString(buf)); world.setLocation(buf.get() & 0xFF); @@ -85,6 +87,21 @@ public class WorldsService return result; } + private static EnumSet getTypes(int mask) + { + EnumSet types = EnumSet.noneOf(WorldType.class); + + for (ServiceWorldType type : ServiceWorldType.values()) + { + if ((mask & type.getMask()) != 0) + { + types.add(type.getApiType()); + } + } + + return types; + } + private static String readString(ByteBuffer buf) { byte b; 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 8942e54958..d6cbc0f6fb 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 @@ -26,18 +26,23 @@ package net.runelite.http.service.worlds; import java.io.IOException; import java.io.InputStream; +import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldResult; +import net.runelite.http.api.worlds.WorldType; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okio.Buffer; import org.junit.After; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.sql2o.tools.IOUtils; public class WorldsServiceTest { + private final MockWebServer server = new MockWebServer(); @Before @@ -67,7 +72,11 @@ public class WorldsServiceTest worlds.setUrl(server.url("/")); WorldResult worldResult = worlds.listWorlds(); - Assert.assertEquals(82, worldResult.getWorlds().size()); + assertEquals(82, worldResult.getWorlds().size()); + + World world = worldResult.findWorld(385); + assertNotNull(world); + assertTrue(world.getTypes().contains(WorldType.SKILL_TOTAL)); } }