Skip to content

Commit

Permalink
implement requesting squaremap player/map data
Browse files Browse the repository at this point in the history
  • Loading branch information
Owen3H committed Jul 19, 2024
1 parent 707927b commit 113a8a6
Show file tree
Hide file tree
Showing 10 changed files with 95 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/main/java/io/github/emcw/map/api/GPS.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public Route findRoute(Location loc, RouteType route) {
return new Route(null, 0, direction);
}

static @NotNull String cardinalDirection(Location origin, Location destination) {
static @NotNull String cardinalDirection(@NotNull Location origin, @NotNull Location destination) {
int deltaX = origin.getX() - destination.getX();
int deltaZ = origin.getZ() - destination.getZ();

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/github/emcw/map/api/Nations.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import io.github.emcw.map.entities.Nation;
import io.github.emcw.exceptions.MissingEntryException;
import io.github.emcw.interfaces.ILocatable;
import io.github.emcw.utils.DataParser;
import io.github.emcw.utils.parsers.DynmapParser;
import org.jetbrains.annotations.NotNull;

import java.util.Map;
Expand Down Expand Up @@ -36,8 +36,8 @@ private void updateCache(Boolean force) {
if (!empty() && !force) return;

// Parse map data into usable Nation objects.
DataParser.parseMapData(parent.getMapName(), true, true, false);
Cache<String, Nation> nations = DataParser.parsedNations(parent.getMapName());
DynmapParser.parseMapData(parent.getMapName(), true, true, false);
Cache<String, Nation> nations = DynmapParser.parsedNations(parent.getMapName());

if (!nations.asMap().isEmpty())
setCache(nations);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/github/emcw/map/api/Players.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import io.github.emcw.interfaces.ILocatable;
import io.github.emcw.map.entities.Player;
import io.github.emcw.map.entities.Resident;
import io.github.emcw.utils.DataParser;
import io.github.emcw.utils.parsers.DynmapParser;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -48,8 +48,8 @@ public void updateCache(Boolean force) {
if (!empty() && !force) return;

// Parse player data into usable Player objects.
DataParser.parsePlayerData(parent.getMapName());
Cache<String, Player> players = DataParser.parsedPlayers();
DynmapParser.parsePlayerData(parent.getMapName());
Cache<String, Player> players = DynmapParser.parsedPlayers();

// Make sure we have data to use.
if (!players.asMap().isEmpty())
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/github/emcw/map/api/Residents.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.github.emcw.EMCMap;
import io.github.emcw.map.entities.Resident;
import io.github.emcw.exceptions.MissingEntryException;
import io.github.emcw.utils.DataParser;
import io.github.emcw.utils.parsers.DynmapParser;
import org.jetbrains.annotations.NotNull;

import java.util.Map;
Expand Down Expand Up @@ -37,8 +37,8 @@ private void updateCache(Boolean force) {
if (!empty() && !force) return;

// Parse player data into usable Player objects.
DataParser.parseMapData(parent.getMapName(), false, false, true);
Cache<String, Resident> residents = DataParser.parsedResidents();
DynmapParser.parseMapData(parent.getMapName(), false, false, true);
Cache<String, Resident> residents = DynmapParser.parsedResidents();

// Make sure we're using valid data
if (!residents.asMap().isEmpty())
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/github/emcw/map/api/Towns.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import io.github.emcw.map.entities.Town;
import io.github.emcw.exceptions.MissingEntryException;
import io.github.emcw.interfaces.ILocatable;
import io.github.emcw.utils.DataParser;
import io.github.emcw.utils.parsers.DynmapParser;
import org.jetbrains.annotations.NotNull;

import java.util.Map;
Expand Down Expand Up @@ -36,8 +36,8 @@ private void updateCache(Boolean force) {
if (!empty() && !force) return;

// Parse map data into usable Town objects.
DataParser.parseMapData(parent.getMapName(), true, false, true);
Cache<String, Town> towns = DataParser.parsedTowns();
DynmapParser.parseMapData(parent.getMapName(), true, false, true);
Cache<String, Town> towns = DynmapParser.parsedTowns();

// Make sure were using valid data.
if (!towns.asMap().isEmpty())
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/io/github/emcw/map/entities/Location.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ public boolean isDefault() {
}

protected static @NotNull Location of(JsonObject obj) {
JsonArray xArr = keyAsArr(obj, "x"),
zArr = keyAsArr(obj, "z");
JsonArray xArr = keyAsArr(obj, "x");
JsonArray zArr = keyAsArr(obj, "z");

Integer xAverage = range(arrToIntArr(xArr)),
zAverage = range(arrToIntArr(zArr));
Integer xAverage = range(arrToIntArr(xArr));
Integer zAverage = range(arrToIntArr(zArr));

return new Location(xAverage, zAverage);
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/io/github/emcw/utils/GsonUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class GsonUtil {
.registerTypeAdapter(Duration.class, new DurationAdapter())
.setPrettyPrinting().create();

public static <T> String serialize(Object obj) {
public static String serialize(Object obj) {
return GSON.toJson(obj, getType(obj));
}

Expand Down Expand Up @@ -147,7 +147,7 @@ public static Map<String, Player> difference(JsonArray ops, JsonArray residents,
.collect(Collectors.toMap(BaseEntity::getName, Function.identity()));
}

static <T> JsonObject valueAsObj(Map.Entry<String, T> entry) {
public static <T> JsonObject valueAsObj(Map.Entry<String, T> entry) {
return (JsonObject) entryVal(entry);
}

Expand Down
58 changes: 58 additions & 0 deletions src/main/java/io/github/emcw/utils/http/SquaremapAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package io.github.emcw.utils.http;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.StreamSupport;

public final class SquaremapAPI {
private SquaremapAPI() {
}

@Contract("_ -> new")
private static @NotNull CompletableFuture<JsonElement> get(String type) {
return CompletableFuture.supplyAsync(() -> {
try {
JsonObject endpoint = Request.getEndpoints().getIfPresent("squaremap");
if (endpoint != null) return Request.send(endpoint.get(type).getAsString());

throw new NullPointerException("Error fetching " + "squaremap" + "! Received `null` as endpoint URL.");
} catch (Exception e) {
System.out.println("Exception occurred!\n" + e.getMessage());
return null;
}
});
}

public static JsonObject playerData() {
return get("players").join().getAsJsonObject();
}

public static JsonArray mapData() {
CompletableFuture<JsonElement> data = get("map");

try {
JsonArray markersets = data.join().getAsJsonArray();
JsonElement towny = markersets.asList().parallelStream()
.map(JsonElement::getAsJsonObject)
.filter(el -> el.get("id").getAsString().equals("towny"))
.findFirst()
.orElseThrow();

return towny.getAsJsonObject().get("markers").getAsJsonArray();
} catch (Exception e) {
System.out.println(
"Error fetching Aurora map data!\n" +
"Received response may be incorrectly formatted."
);
}

return new JsonArray();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.emcw.utils;
package io.github.emcw.utils.parsers;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
Expand Down Expand Up @@ -28,7 +28,7 @@
import static io.github.emcw.utils.GsonUtil.*;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DataParser {
public class DynmapParser {
static final Safelist whitelist = new Safelist().addAttributes("a", "href");

static final Cache<String, JsonObject> rawTowns = buildEmpty();
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/io/github/emcw/utils/parsers/SquaremapParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.github.emcw.utils.parsers;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jsoup.safety.Safelist;

public class SquaremapParser {
static final Safelist whitelist = new Safelist().addAttributes("a", "href");

@Contract(" -> new")
static <K, V> @NotNull Cache<K, V> buildEmpty() {
return Caffeine.newBuilder().build();
}
}

0 comments on commit 113a8a6

Please sign in to comment.