aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/waypoint/Waypoints.java32
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsShareScreen.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/waypoint/WaypointCategory.java4
-rw-r--r--src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java34
5 files changed, 61 insertions, 17 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Waypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Waypoints.java
index 18096117..6866aba3 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Waypoints.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Waypoints.java
@@ -11,6 +11,7 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.JsonOps;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import de.hysky.skyblocker.utils.waypoint.WaypointCategory;
@@ -21,11 +22,14 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.toast.SystemToast;
+import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
@@ -33,6 +37,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
+import java.util.zip.GZIPInputStream;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
@@ -62,37 +67,42 @@ public class Waypoints {
}
}
- public static List<WaypointCategory> fromSkytilsBase64(String base64, String defaultIsland) {
+ public static List<WaypointCategory> fromSkytils(String waypointsString, String defaultIsland) {
try {
- if (base64.startsWith("<Skytils-Waypoint-Data>(V")) {
- int version = Integer.parseInt(base64.substring(26, base64.indexOf(')')));
+ if (waypointsString.startsWith("<Skytils-Waypoint-Data>(V")) {
+ int version = Integer.parseInt(waypointsString.substring(25, waypointsString.indexOf(')')));
+ waypointsString = waypointsString.substring(waypointsString.indexOf(':') + 1);
if (version == 1) {
- return fromSkytilsJson(new String(Base64.getDecoder().decode(base64.substring(base64.indexOf(':') + 1))), defaultIsland);
+ try (GZIPInputStream reader = new GZIPInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(waypointsString)))) {
+ return fromSkytilsJson(IOUtils.toString(reader, StandardCharsets.UTF_8), defaultIsland);
+ }
} else {
- LOGGER.error("[Skyblocker Waypoints] Unknown Skytils waypoint data version: " + version);
+ LOGGER.error("[Skyblocker Waypoints] Unknown Skytils waypoint data version: {}", version);
}
- } else return fromSkytilsJson(new String(Base64.getDecoder().decode(base64)), defaultIsland);
+ } else return fromSkytilsJson(new String(Base64.getDecoder().decode(waypointsString)), defaultIsland);
} catch (NumberFormatException e) {
LOGGER.error("[Skyblocker Waypoints] Encountered exception while parsing Skytils waypoint data version", e);
- } catch (IllegalArgumentException e) {
+ } catch (Exception e) {
LOGGER.error("[Skyblocker Waypoints] Encountered exception while decoding Skytils waypoint data", e);
}
return Collections.emptyList();
}
- public static List<WaypointCategory> fromSkytilsJson(String waypointCategories, String defaultIsland) {
+ public static List<WaypointCategory> fromSkytilsJson(String waypointCategoriesString, String defaultIsland) {
JsonArray waypointCategoriesJson;
try {
- waypointCategoriesJson = SkyblockerMod.GSON.fromJson(waypointCategories, JsonObject.class).getAsJsonArray("categories");
+ waypointCategoriesJson = SkyblockerMod.GSON.fromJson(waypointCategoriesString, JsonObject.class).getAsJsonArray("categories");
} catch (JsonSyntaxException e) {
+ // Handle the case where there is only a single json list of waypoints and no category data.
JsonObject waypointCategoryJson = new JsonObject();
waypointCategoryJson.addProperty("name", "New Category");
waypointCategoryJson.addProperty("island", defaultIsland);
- waypointCategoryJson.add("waypoints", SkyblockerMod.GSON.fromJson(waypointCategories, JsonArray.class));
+ waypointCategoryJson.add("waypoints", SkyblockerMod.GSON.fromJson(waypointCategoriesString, JsonArray.class));
waypointCategoriesJson = new JsonArray();
waypointCategoriesJson.add(waypointCategoryJson);
}
- return SKYTILS_CODEC.parse(JsonOps.INSTANCE, waypointCategoriesJson).resultOrPartial(LOGGER::error).orElseThrow();
+ List<WaypointCategory> waypointCategories = SKYTILS_CODEC.parse(JsonOps.INSTANCE, waypointCategoriesJson).resultOrPartial(LOGGER::error).orElseThrow();
+ return waypointCategories.stream().map(waypointCategory -> Location.from(waypointCategory.island()) == Location.UNKNOWN ? waypointCategory.withIsland(defaultIsland) : waypointCategory).toList();
}
public static String toSkytilsBase64(List<WaypointCategory> waypointCategories) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsShareScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsShareScreen.java
index aee21ec8..eaca845a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsShareScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsShareScreen.java
@@ -31,7 +31,7 @@ public class WaypointsShareScreen extends AbstractWaypointsScreen<WaypointsScree
GridWidget.Adder adder = gridWidget.createAdder(2);
adder.add(ButtonWidget.builder(Text.translatable("skyblocker.waypoints.importWaypointsSkytils"), buttonImport -> {
try {
- List<WaypointCategory> waypointCategories = Waypoints.fromSkytilsBase64(client.keyboard.getClipboard(), island);
+ List<WaypointCategory> waypointCategories = Waypoints.fromSkytils(client.keyboard.getClipboard(), island);
for (WaypointCategory waypointCategory : waypointCategories) {
selectedWaypoints.addAll(waypointCategory.waypoints());
waypoints.put(waypointCategory.island(), waypointCategory);
diff --git a/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java b/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
index 2f02b51f..5ba920c0 100644
--- a/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
+++ b/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
@@ -6,11 +6,13 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.ColorUtils;
import de.hysky.skyblocker.utils.render.RenderHelper;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.text.Text;
import net.minecraft.text.TextCodecs;
import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.Vec3d;
import java.util.Objects;
@@ -32,7 +34,7 @@ public class NamedWaypoint extends Waypoint {
Codec.INT.fieldOf("y").forGetter(waypoint -> waypoint.pos.getY()),
Codec.INT.fieldOf("z").forGetter(waypoint -> waypoint.pos.getZ()),
Codec.either(Codec.STRING, Codec.INT).xmap(either -> either.map(str -> str, Object::toString), Either::left).fieldOf("name").forGetter(waypoint -> waypoint.name.getString()),
- Codec.INT.fieldOf("color").forGetter(waypoint -> (int) (waypoint.alpha * 255) << 24 | (int) (waypoint.colorComponents[0] * 255) << 16 | (int) (waypoint.colorComponents[1] * 255) << 8 | (int) (waypoint.colorComponents[2] * 255)),
+ Codec.INT.optionalFieldOf("color", ColorHelper.Argb.getArgb(128, 0, 255, 0)).forGetter(waypoint -> (int) (waypoint.alpha * 255) << 24 | (int) (waypoint.colorComponents[0] * 255) << 16 | (int) (waypoint.colorComponents[1] * 255) << 8 | (int) (waypoint.colorComponents[2] * 255)),
Codec.BOOL.fieldOf("enabled").forGetter(Waypoint::shouldRender)
).apply(instance, NamedWaypoint::fromSkytils));
public final Text name;
@@ -69,7 +71,7 @@ public class NamedWaypoint extends Waypoint {
if (alpha == 0) {
alpha = DEFAULT_HIGHLIGHT_ALPHA;
}
- return new NamedWaypoint(new BlockPos(x, y, z), name, new float[]{((color & 0x00FF0000) >> 16) / 255f, ((color & 0x0000FF00) >> 8) / 255f, (color & 0x000000FF) / 255f}, alpha, enabled);
+ return new NamedWaypoint(new BlockPos(x, y, z), name, ColorUtils.getFloatComponents(color), alpha, enabled);
}
public NamedWaypoint copy() {
diff --git a/src/main/java/de/hysky/skyblocker/utils/waypoint/WaypointCategory.java b/src/main/java/de/hysky/skyblocker/utils/waypoint/WaypointCategory.java
index db2a6d82..8bfef7f4 100644
--- a/src/main/java/de/hysky/skyblocker/utils/waypoint/WaypointCategory.java
+++ b/src/main/java/de/hysky/skyblocker/utils/waypoint/WaypointCategory.java
@@ -29,6 +29,10 @@ public record WaypointCategory(String name, String island, List<NamedWaypoint> w
return new WaypointCategory(name, island(), waypoints());
}
+ public WaypointCategory withIsland(String island) {
+ return new WaypointCategory(name(), island, waypoints());
+ }
+
public WaypointCategory deepCopy() {
return new WaypointCategory(name(), island(), waypoints().stream().map(NamedWaypoint::copy).collect(Collectors.toList()));
}
diff --git a/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java b/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java
index 820b687d..cf6f56e9 100644
--- a/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java
+++ b/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java
@@ -1,17 +1,26 @@
package de.hysky.skyblocker.utils.waypoint;
import de.hysky.skyblocker.skyblock.waypoint.Waypoints;
+import net.minecraft.Bootstrap;
+import net.minecraft.SharedConstants;
import net.minecraft.util.math.BlockPos;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.util.List;
public class WaypointsTest {
+ @BeforeAll
+ public static void setup() {
+ SharedConstants.createGameVersion();
+ Bootstrap.initialize();
+ }
+
@Test
void testFromSkytilsBase64() {
String waypointCategoriesSkytilsBase64 = "eyJjYXRlZ29yaWVzIjpbeyJuYW1lIjoiY2F0ZWdvcnkiLCJ3YXlwb2ludHMiOlt7Im5hbWUiOiJ3YXlwb2ludCIsIngiOjAsInkiOjAsInoiOjAsImVuYWJsZWQiOmZhbHNlLCJjb2xvciI6LTg3MjM4MjIwOSwiYWRkZWRBdCI6MX0seyJuYW1lIjoxLCJ4IjotMSwieSI6MCwieiI6MSwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOjAsImFkZGVkQXQiOjF9XSwiaXNsYW5kIjoiaHViIn1dfQ==";
- List<WaypointCategory> waypointCategories = Waypoints.fromSkytilsBase64(waypointCategoriesSkytilsBase64, "");
+ List<WaypointCategory> waypointCategories = Waypoints.fromSkytils(waypointCategoriesSkytilsBase64, "");
List<WaypointCategory> expectedWaypointCategories = List.of(new WaypointCategory("category", "hub", List.of(new NamedWaypoint(BlockPos.ORIGIN, "waypoint", new float[]{0f, 0.5019608f, 1f}, 0.8f, false), new NamedWaypoint(new BlockPos(-1, 0, 1), "1", new float[]{0f, 0f, 0f}, true))));
Assertions.assertEquals(expectedWaypointCategories, waypointCategories);
@@ -30,7 +39,7 @@ public class WaypointsTest {
@Test
void testFromSkytilsBase64GlacialCaveWaypoints() {
String waypointCategoriesSkytilsBase64 = "eyJjYXRlZ29yaWVzIjogW3sibmFtZSI6ICJGcm96ZW4gVHJlYXN1cmUgTG9jYXRpb25zIiwid2F5cG9pbnRzIjogW3sibmFtZSI6ICIyNCIsIngiOiA2NCwieSI6IDc4LCJ6IjogMjgsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwODU0MDY3MTksImFkZGVkQXQiOiAxNjY5OTk5NzUwNjc3fSx7Im5hbWUiOiAiOSIsIngiOiA0NSwieSI6IDc5LCJ6IjogNDksImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwODUyNzM1OTksImFkZGVkQXQiOiAxNjY5OTk5NTEwMTA3fSx7Im5hbWUiOiAiMjAiLCJ4IjogNjAsInkiOiA3NiwieiI6IDUxLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiA5NTMzNTE5MzUsImFkZGVkQXQiOiAxNjY5OTk5NzQ5MzI3fSx7Im5hbWUiOiAiMjMiLCJ4IjogNjMsInkiOiA3NiwieiI6IDk1LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDIwNDYxMDUyLCJhZGRlZEF0IjogMTY2OTk5OTc1MDQ3N30seyJuYW1lIjogIjIyIiwieCI6IDYzLCJ5IjogNzYsInoiOiA1MiwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTA1MjQ0MjYxMSwiYWRkZWRBdCI6IDE2Njk5OTk3NTAyMjd9LHsibmFtZSI6ICI0MCIsIngiOiA5NCwieSI6IDc3LCJ6IjogNDIsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDk4NDYxMjg1NywiYWRkZWRBdCI6IDE2NzAwMDAyMjcwMjR9LHsibmFtZSI6ICIzOCIsIngiOiA5MSwieSI6IDc3LCJ6IjogMjcsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNTI3NzAyOTIsImFkZGVkQXQiOiAxNjcwMDAwMjI2NjI1fSx7Im5hbWUiOiAiMTUiLCJ4IjogNTAsInkiOiA4MCwieiI6IDg4LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDcxMjUxMTk5LCJhZGRlZEF0IjogMTY2OTk5OTUxMTUwNH0seyJuYW1lIjogIjE0IiwieCI6IDUwLCJ5IjogNzksInoiOiAzNCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTEwNDkzNjcwMywiYWRkZWRBdCI6IDE2Njk5OTk1MTEzMDZ9LHsibmFtZSI6ICIxOSIsIngiOiA1OCwieSI6IDc5LCJ6IjogODksImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDExNTU2NjE4MTgsImFkZGVkQXQiOiAxNjY5OTk5NTE3ODEwfSx7Im5hbWUiOiAiMzAiLCJ4IjogNzgsInkiOiA3NCwieiI6IDk5LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTE5NDIwNDAzLCJhZGRlZEF0IjogMTY3MDAwMDAyMTgyM30seyJuYW1lIjogIjExIiwieCI6IDQ2LCJ5IjogODAsInoiOiA4NCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTA3MTY0NDY2MiwiYWRkZWRBdCI6IDE2Njk5OTk1MTA3MDh9LHsibmFtZSI6ICI0MyIsIngiOiA5NywieSI6IDgxLCJ6IjogNzcsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNTE5ODM4NjUsImFkZGVkQXQiOiAxNjcwMDAwMjI3Njc2fSx7Im5hbWUiOiAiMTciLCJ4IjogNTUsInkiOiA3OSwieiI6IDM0LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTA1MTk5MDk4LCJhZGRlZEF0IjogMTY2OTk5OTUxMTkwNX0seyJuYW1lIjogIjQiLCJ4IjogMzksInkiOiA4MCwieiI6IDczLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTUzMjM2NDc5LCJhZGRlZEF0IjogMTY2OTk5OTE5ODkyN30seyJuYW1lIjogIjQxIiwieCI6IDk1LCJ5IjogNzYsInoiOiA1OCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTE1MTk5MTgwMSwiYWRkZWRBdCI6IDE2NzAwMDAyMjcyMjV9LHsibmFtZSI6ICI0MiIsIngiOiA5NywieSI6IDc1LCJ6IjogNzAsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNTE3MjE3MDYsImFkZGVkQXQiOiAxNjcwMDAwMjI3NDczfSx7Im5hbWUiOiAiMTAiLCJ4IjogNDUsInkiOiA3OSwieiI6IDcwLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDcyMzY1NTYxLCJhZGRlZEF0IjogMTY2OTk5OTUxMDUwOH0seyJuYW1lIjogIjI4IiwieCI6IDc1LCJ5IjogODIsInoiOiAyMCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTA1MjkwMTM1OSwiYWRkZWRBdCI6IDE2Njk5OTk5ODY0MjZ9LHsibmFtZSI6ICIzIiwieCI6IDM2LCJ5IjogODAsInoiOiA4MCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogOTUyNjI5NTAzLCJhZGRlZEF0IjogMTY2OTk5OTE5ODcyN30seyJuYW1lIjogIjciLCJ4IjogNDMsInkiOiA3NywieiI6IDUwLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTIwNTM0MjcxLCJhZGRlZEF0IjogMTY2OTk5OTE5OTQ2N30seyJuYW1lIjogIjgiLCJ4IjogNDMsInkiOiA3OSwieiI6IDczLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTUyNzEwMzk5LCJhZGRlZEF0IjogMTY2OTk5OTMxMTAyOX0seyJuYW1lIjogIjIiLCJ4IjogMzUsInkiOiA4LCJ6IjogNzEsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNTQzNDMxNjQsImFkZGVkQXQiOiAxNjY5OTk5MTk4NTY3fSx7Im5hbWUiOiAiMzQiLCJ4IjogODksInkiOiA3NywieiI6IDg0LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDg2NDU1Nzk3LCJhZGRlZEF0IjogMTY3MDAwMDAyMjUyOX0seyJuYW1lIjogIjI2IiwieCI6IDczLCJ5IjogNzYsInoiOiAzMSwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTExOTE1Nzc1OSwiYWRkZWRBdCI6IDE2Njk5OTk3NTEwNzd9LHsibmFtZSI6ICIxMiIsIngiOiA0NywieSI6IDc3LCJ6IjogNjUsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNzE4NDEyNzcsImFkZGVkQXQiOiAxNjY5OTk5NTEwOTA4fSx7Im5hbWUiOiAiMTYiLCJ4IjogNTIsInkiOiA3NSwieiI6IDQ1LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTM4NjIyNDU3LCJhZGRlZEF0IjogMTY2OTk5OTUxMTcwM30seyJuYW1lIjogIjMzIiwieCI6IDgyLCJ5IjogNzgsInoiOiAyNiwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTEwMzAzNDM2NywiYWRkZWRBdCI6IDE2NzAwMDAwMjIzNzl9LHsibmFtZSI6ICIyMSIsIngiOiA2MSwieSI6IDc4LCJ6IjogOTIsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwMjExODE5NDIsImFkZGVkQXQiOiAxNjY5OTk5NzQ5ODc3fSx7Im5hbWUiOiAiMjciLCJ4IjogNzMsInkiOiA3OSwieiI6IDUyLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDUxMDAwODI0LCJhZGRlZEF0IjogMTY2OTk5OTk4NjIzMH0seyJuYW1lIjogIjQ2IiwieCI6IDEwMywieSI6IDc0LCJ6IjogOTgsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDExMTg1Njg0MjUsImFkZGVkQXQiOiAxNjcwMDAwMjI4MjIzfSx7Im5hbWUiOiAiNDciLCJ4IjogMTA0LCJ5IjogNzgsInoiOiA2OCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogOTUzNDc5OTM1LCJhZGRlZEF0IjogMTY3MDAwMDM1Nzk3NH0seyJuYW1lIjogIjYiLCJ4IjogNDIsInkiOiA3NywieiI6IDU4LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDE4NDk0OTcwLCJhZGRlZEF0IjogMTY2OTk5OTE5OTMyNX0seyJuYW1lIjogIjUiLCJ4IjogNDEsInkiOiA3OSwieiI6IDgxLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTM2MzI4MTkxLCJhZGRlZEF0IjogMTY2OTk5OTE5OTEyMX0seyJuYW1lIjogIjM2IiwieCI6IDkwLCJ5IjogNzcsInoiOiA0NiwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTExOTA5MDQzMSwiYWRkZWRBdCI6IDE2NzAwMDAwMjI5Mjh9LHsibmFtZSI6ICIxIiwieCI6IDMyLCJ5IjogODAsInoiOiA3NCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTM4ODc3MzM3MSwiYWRkZWRBdCI6IDE2Njk5OTkxMDI4ODJ9LHsibmFtZSI6ICIzMSIsIngiOiA3OCwieSI6IDc3LCJ6IjogNDAsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwMTkyMTU4NjAsImFkZGVkQXQiOiAxNjcwMDAwMDIxOTc1fSx7Im5hbWUiOiAiMjkiLCJ4IjogNzYsInkiOiA3NiwieiI6IDU1LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMTUzNTY0NjU1LCJhZGRlZEF0IjogMTY2OTk5OTk4NjYyN30seyJuYW1lIjogIjI1IiwieCI6IDY2LCJ5IjogODEsInoiOiAyOCwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTA1MjcwNDc1MCwiYWRkZWRBdCI6IDE2Njk5OTk3NTA5Mjd9LHsibmFtZSI6ICIzNSIsIngiOiA5MCwieSI6IDc3LCJ6IjogMzgsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwMTkzNDY5MzMsImFkZGVkQXQiOiAxNjcwMDAwMDIyNzI0fSx7Im5hbWUiOiAiMTgiLCJ4IjogNTUsInkiOiA4MCwieiI6IDM4LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDg4NjE4NDkzLCJhZGRlZEF0IjogMTY2OTk5OTUxMjE1N30seyJuYW1lIjogIjM5IiwieCI6IDkyLCJ5IjogNzQsInoiOiAxMDgsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwODY4NDkwMTQsImFkZGVkQXQiOiAxNjcwMDAwMjI2ODc5fSx7Im5hbWUiOiAiMTMiLCJ4IjogNTAsInkiOiA3NiwieiI6IDUyLCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDcxOTcyMzQ0LCJhZGRlZEF0IjogMTY2OTk5OTUxMTEwMn0seyJuYW1lIjogIjQ0IiwieCI6IDk4LCJ5IjogNzcsInoiOiA3NiwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTA4NTg2NTk3OCwiYWRkZWRBdCI6IDE2NzAwMDAyMjc4ODF9LHsibmFtZSI6ICIzMiIsIngiOiA3OSwieSI6IDgwLCJ6IjogNzMsImVuYWJsZWQiOiB0cnVlLCJjb2xvciI6IDEwNTI3NzAyOTgsImFkZGVkQXQiOiAxNjcwMDAwMDIyMTc0fSx7Im5hbWUiOiAiMzciLCJ4IjogOTEsInkiOiA3NiwieiI6IDM4LCJlbmFibGVkIjogdHJ1ZSwiY29sb3IiOiAxMDUxMTMxMzkxLCJhZGRlZEF0IjogMTY3MDAwMDIyNjQyM30seyJuYW1lIjogIjQ1IiwieCI6IDk4LCJ5IjogNzgsInoiOiA3NSwiZW5hYmxlZCI6IHRydWUsImNvbG9yIjogMTIwMjg0NzczNywiYWRkZWRBdCI6IDE2NzAwMDAyMjgwNzN9XSwiaXNsYW5kIjogIndpbnRlciJ9XX0=";
- List<WaypointCategory> waypointCategories = Waypoints.fromSkytilsBase64(waypointCategoriesSkytilsBase64, "");
+ List<WaypointCategory> waypointCategories = Waypoints.fromSkytils(waypointCategoriesSkytilsBase64, "");
List<WaypointCategory> expectedWaypointCategories = List.of(new WaypointCategory("Frozen Treasure Locations", "winter", List.of(
new NamedWaypoint(new BlockPos(64, 78, 28), "24", new float[]{177 / 255f, 253 / 255f, 255 / 255f}, 64 / 255f, true),
new NamedWaypoint(new BlockPos(45, 79, 49), "9", new float[]{175 / 255f, 245 / 255f, 255 / 255f}, 64 / 255f, true),
@@ -88,7 +97,7 @@ public class WaypointsTest {
@Test
void testFromSkytilsBase64CrystalHollowsWaypoints() {
String waypointsSkytilsBase64 = "W3sibmFtZSI6IlNob3V0b3V0IFRlYmV5IGFuZCB0cmV2YW55YSIsIngiOjUxMCwieSI6NTMsInoiOjM5MywiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMDciLCJ4Ijo0NzksInkiOjM5LCJ6Ijo0MDgsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjExIiwieCI6NDk1LCJ5IjozNCwieiI6NDE4LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIwOSIsIngiOjQ4NSwieSI6MzMsInoiOjQwMiwiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMjMiLCJ4Ijo1MTQsInkiOjU1LCJ6IjozODMsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjA2IiwieCI6NDgzLCJ5Ijo0MiwieiI6NDA1LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIwMSIsIngiOjUwMiwieSI6NDgsInoiOjQwMywiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMTgiLCJ4Ijo1MDMsInkiOjU2LCJ6Ijo0MzYsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjAwIC0gU3RhcnQiLCJ4Ijo1MDMsInkiOjQ4LCJ6Ijo0MDAsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjEzIiwieCI6NDc4LCJ5Ijo0NCwieiI6NDE5LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIxOSIsIngiOjUwMSwieSI6NTcsInoiOjQzOCwiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMDIiLCJ4Ijo0OTYsInkiOjQ1LCJ6Ijo0MDcsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjA0IiwieCI6NDk1LCJ5Ijo1MywieiI6NDA0LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIwNSIsIngiOjQ3OSwieSI6NDksInoiOjQwNywiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMTIiLCJ4Ijo1MDQsInkiOjQxLCJ6Ijo0MTksImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjAzIiwieCI6NDkwLCJ5Ijo0NSwieiI6MzkyLCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIxMCIsIngiOjQ4OCwieSI6MzIsInoiOjQyMSwiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMjIiLCJ4Ijo1MDcsInkiOjUyLCJ6IjozODYsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjE2IiwieCI6NDg4LCJ5Ijo1NSwieiI6NDIxLCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiI5OSAtIEVuZCIsIngiOjUxMCwieSI6NTIsInoiOjM5MywiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMTUiLCJ4Ijo0ODYsInkiOjU1LCJ6Ijo0MjgsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjE0IiwieCI6NDc1LCJ5Ijo0NCwieiI6NDI5LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIxNyIsIngiOjUwOSwieSI6NTAsInoiOjQzMiwiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn0seyJuYW1lIjoiMjAiLCJ4Ijo1MDUsInkiOjU4LCJ6Ijo0MjYsImlzbGFuZCI6ImNyeXN0YWxfaG9sbG93cyIsImVuYWJsZWQiOnRydWUsImNvbG9yIjotNjU1MzZ9LHsibmFtZSI6IjA4IiwieCI6NDgwLCJ5IjozOCwieiI6NDA1LCJpc2xhbmQiOiJjcnlzdGFsX2hvbGxvd3MiLCJlbmFibGVkIjp0cnVlLCJjb2xvciI6LTY1NTM2fSx7Im5hbWUiOiIyMSIsIngiOjQ5NywieSI6NTUsInoiOjM5MSwiaXNsYW5kIjoiY3J5c3RhbF9ob2xsb3dzIiwiZW5hYmxlZCI6dHJ1ZSwiY29sb3IiOi02NTUzNn1d";
- List<WaypointCategory> waypointCategories = Waypoints.fromSkytilsBase64(waypointsSkytilsBase64, "crystal_hollows");
+ List<WaypointCategory> waypointCategories = Waypoints.fromSkytils(waypointsSkytilsBase64, "crystal_hollows");
List<WaypointCategory> expectedWaypointCategories = List.of(new WaypointCategory("New Category", "crystal_hollows", List.of(
new NamedWaypoint(new BlockPos(510, 53, 393), "Shoutout Tebey and trevanya", new float[]{1, 0, 0}, 1, true),
new NamedWaypoint(new BlockPos(479, 39, 408), "07", new float[]{1, 0, 0}, 1, true),
@@ -120,4 +129,23 @@ public class WaypointsTest {
Assertions.assertEquals(expectedWaypointCategories, waypointCategories);
}
+
+ @Test
+ void testFromSkytilsV1Gzip() {
+ String waypointsSkytilsV1Gzip = "<Skytils-Waypoint-Data>(V1):H4sIAAAAAAAC/51STWuEMBD9KyHntJjJl7u3UugfsIdC2UOq6SKk0cZIaxf/e+OC4moL4i2TmXnvzby54FwHc658aRp8RK8X7PSHiS+ctXVtO5Tpd4OyugoNJvhLd3VVurAs/Wy1NzH/HaM7yinBXXwpSfDP8HNICDZOv1lTxDD41hCsi8IUDyHGVCp+4JLGPi57MoMN2gf07EvtznaCl+kCnQJsgGeRgfM5/BJ4UHkFVhNwukm34sD6E8FlY7UbKnHpmqBdHtvmhE+tsejRWLtpqaM8BPfJKDGlS4mMrSXmla38NSu4lDDYsVItEg5ws46XyT8QKxa5j4UBCEhuPN1xKluYIBVUsZt55oujbJxJTObu3BxPmAL51yGhkU2tL4nuJBMCgP57XKf+FzPhnyPAAwAA";
+ List<WaypointCategory> waypointCategories = Waypoints.fromSkytils(waypointsSkytilsV1Gzip, "default_island");
+ List<WaypointCategory> expectedWaypointCategories = List.of(new WaypointCategory("Supply Safe Spots", "default_island", List.of(
+ new NamedWaypoint(new BlockPos(-141, 76, -90), "Square", new float[]{0, 1, 0}, 128 / 255f, true),
+ new NamedWaypoint(new BlockPos(-68, 76, -122), "Start Triangle", new float[]{0, 1, 0}, 128 / 255f, true),
+ new NamedWaypoint(new BlockPos(-90, 77, -128), "Triangle", new float[]{0, 1, 0}, 128 / 255f, true)
+ )), new WaypointCategory("Fuel Cell Safe Spots", "default_island", List.of(
+ new NamedWaypoint(new BlockPos(-81, 77, -133), "Triangle 2.0", new float[]{20 / 255f, 0, 1}, 1, true),
+ new NamedWaypoint(new BlockPos(-125, 77, -136), "X", new float[]{20 / 255f, 0, 1}, 1, true),
+ new NamedWaypoint(new BlockPos(-141, 76, -90), "Square", new float[]{20 / 255f, 0, 1}, 1, true),
+ new NamedWaypoint(new BlockPos(-135, 75, -123), "X 2.0", new float[]{20 / 255f, 0, 1}, 1, true),
+ new NamedWaypoint(new BlockPos(-70, 77, -121), "Triangle ", new float[]{20 / 255f, 0, 1}, 1, true)
+ )));
+
+ Assertions.assertEquals(expectedWaypointCategories, waypointCategories);
+ }
}