diff --git a/src/main/java/net/earthmc/emcapi/endpoint/NearbyEndpoint.java b/src/main/java/net/earthmc/emcapi/endpoint/NearbyEndpoint.java index 67f6873..70729cf 100644 --- a/src/main/java/net/earthmc/emcapi/endpoint/NearbyEndpoint.java +++ b/src/main/java/net/earthmc/emcapi/endpoint/NearbyEndpoint.java @@ -29,25 +29,35 @@ public NearbyContext getObjectOrNull(JsonElement element) { JsonObject jsonObject = JSONUtil.getJsonElementAsJsonObjectOrNull(element); if (jsonObject == null) throw new BadRequestResponse("Your query contains a value that is not a JSON object"); + String targetTypeString = JSONUtil.getJsonElementAsStringOrNull(jsonObject.get("target_type")); + String searchTypeString = JSONUtil.getJsonElementAsStringOrNull(jsonObject.get("search_type")); + if (targetTypeString == null || searchTypeString == null) throw new BadRequestResponse("You did not specify a target or search type"); + + NearbyType targetType; + NearbyType searchType; try { - NearbyType targetType = NearbyType.valueOf(jsonObject.get("target_type").getAsString().toUpperCase()); - NearbyType searchType = NearbyType.valueOf(jsonObject.get("search_type").getAsString().toUpperCase()); + targetType = NearbyType.valueOf(targetTypeString); + searchType = NearbyType.valueOf(searchTypeString); + } catch (IllegalArgumentException e) { + throw new BadRequestResponse("Your target or search type is invalid"); + } - JsonElement targetElement = jsonObject.get("target"); - int radius = jsonObject.get("radius").getAsInt(); - if (targetType.equals(NearbyType.COORDINATE)) { - JsonArray jsonArray = JSONUtil.getJsonElementAsJsonArrayOrNull(targetElement); - if (jsonArray == null) throw new BadRequestResponse("Your target is not a valid JSON array"); + Integer radius = JSONUtil.getJsonElementAsIntegerOrNull(jsonObject.get("radius")); + if (radius == null) throw new BadRequestResponse("You did not specify a radius"); - Pair pair = new Pair<>(jsonArray.get(0).getAsInt(), jsonArray.get(1).getAsInt()); + JsonElement targetElement = jsonObject.get("target"); + if (targetType.equals(NearbyType.COORDINATE)) { + JsonArray jsonArray = JSONUtil.getJsonElementAsJsonArrayOrNull(targetElement); + if (jsonArray == null) throw new BadRequestResponse("Your target is not a valid JSON array"); - return new NearbyContext(targetType, pair, searchType, radius); - } else if (targetType.equals(NearbyType.TOWN)) { - String target = JSONUtil.getJsonElementAsStringOrNull(targetElement); - return new NearbyContext(targetType, target, searchType, radius); - } - } catch (Exception e) { - throw new BadRequestResponse("Your query contains an invalid JSON object"); + Pair pair = new Pair<>(jsonArray.get(0).getAsInt(), jsonArray.get(1).getAsInt()); + + return new NearbyContext(targetType, pair, searchType, radius); + } else if (targetType.equals(NearbyType.TOWN)) { + String target = JSONUtil.getJsonElementAsStringOrNull(targetElement); + if (target == null) throw new BadRequestResponse("Your target is not a valid string"); + + return new NearbyContext(targetType, target, searchType, radius); } return null; diff --git a/src/main/java/net/earthmc/emcapi/util/JSONUtil.java b/src/main/java/net/earthmc/emcapi/util/JSONUtil.java index a23acce..7257c59 100644 --- a/src/main/java/net/earthmc/emcapi/util/JSONUtil.java +++ b/src/main/java/net/earthmc/emcapi/util/JSONUtil.java @@ -14,6 +14,8 @@ public static JsonObject getJsonObjectFromString(String string) { } public static String getJsonElementAsStringOrNull(JsonElement element) { + if (element == null) return null; + if (!element.isJsonPrimitive()) return null; JsonPrimitive primitive = element.getAsJsonPrimitive(); @@ -23,6 +25,8 @@ public static String getJsonElementAsStringOrNull(JsonElement element) { } public static Integer getJsonElementAsIntegerOrNull(JsonElement element) { + if (element == null) return null; + if (!element.isJsonPrimitive()) return null; JsonPrimitive primitive = element.getAsJsonPrimitive(); @@ -32,11 +36,15 @@ public static Integer getJsonElementAsIntegerOrNull(JsonElement element) { } public static JsonArray getJsonElementAsJsonArrayOrNull(JsonElement element) { + if (element == null) return null; + if (!element.isJsonArray()) return null; return element.getAsJsonArray(); } public static JsonObject getJsonElementAsJsonObjectOrNull(JsonElement element) { + if (element == null) return null; + if (!element.isJsonObject()) return null; return element.getAsJsonObject(); }