aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java36
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json3
3 files changed, 30 insertions, 11 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index e6961819..c7b84b25 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -407,6 +407,8 @@ public class SkyblockerConfig implements ConfigData {
}
public static class Dungeons {
+ public boolean secretWaypoints = true;
+ public boolean noLoadSecretWaypoints = false;
@ConfigEntry.Gui.Tooltip()
public boolean croesusHelper = true;
public boolean enableMap = true;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
index 6e72c1c4..8be626d2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
@@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon.secrets;
import com.google.gson.JsonObject;
import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
@@ -12,7 +13,10 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.zip.InflaterInputStream;
@@ -29,10 +33,17 @@ public class DungeonSecrets {
return roomsLoaded != null && roomsLoaded.isDone();
}
+ /**
+ * Loads the dungeon secrets asynchronously from {@code /assets/skyblocker/dungeons}.
+ * Use {@link #isRoomsLoaded()} to check for completion of loading.
+ */
public static void init() {
+ if (SkyblockerConfig.get().locations.dungeons.noLoadSecretWaypoints) {
+ return;
+ }
CompletableFuture.runAsync(() -> {
- List<CompletableFuture<Void>> dungeonFutures = Collections.synchronizedList(new ArrayList<>());
try {
+ List<CompletableFuture<Void>> dungeonFutures = new ArrayList<>();
//noinspection DataFlowIssue
File dungeons = new File(SkyblockerMod.class.getResource(DUNGEONS_DATA_DIR).getFile());
int resourcePathIndex = dungeons.getPath().indexOf(DUNGEONS_DATA_DIR);
@@ -53,17 +64,20 @@ public class DungeonSecrets {
}
dungeonFutures.add(CompletableFuture.allOf(roomShapeFutures.toArray(CompletableFuture[]::new)).thenRun(() -> LOGGER.debug("Loaded dungeon secrets for dungeon {} with {} room shapes and {} rooms total", dungeon.getName(), ROOMS.get(dungeon.getName()).size(), ROOMS.get(dungeon.getName()).values().stream().mapToInt(HashMap::size).sum())));
}
- } catch (NullPointerException e) {
+ // Execute with MinecraftClient as executor since we need to wait for MinecraftClient#resourceManager to be set
+ dungeonFutures.add(CompletableFuture.runAsync(() -> {
+ try (BufferedReader roomsReader = MinecraftClient.getInstance().getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "dungeons/dungeonrooms.json")); BufferedReader waypointsReader = MinecraftClient.getInstance().getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "dungeons/secretlocations.json"))) {
+ roomsJson = SkyblockerMod.GSON.fromJson(roomsReader, JsonObject.class);
+ waypointsJson = SkyblockerMod.GSON.fromJson(waypointsReader, JsonObject.class);
+ LOGGER.debug("Loaded dungeon secrets json");
+ } catch (Exception e) {
+ LOGGER.error("Failed to load dungeon secrets json", e);
+ }
+ }, MinecraftClient.getInstance()));
+ roomsLoaded = CompletableFuture.allOf(dungeonFutures.toArray(CompletableFuture[]::new)).thenRun(() -> LOGGER.info("Loaded dungeon secrets for {} dungeon(s), {} room shapes, and {} rooms total", ROOMS.size(), ROOMS.values().stream().mapToInt(HashMap::size).sum(), ROOMS.values().stream().map(HashMap::values).flatMap(Collection::stream).mapToInt(HashMap::size).sum()));
+ } catch (Exception e) {
LOGGER.error("Failed to load dungeon secrets", e);
}
- try (BufferedReader roomsReader = MinecraftClient.getInstance().getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "dungeons/dungeonrooms.json")); BufferedReader waypointsReader = MinecraftClient.getInstance().getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "dungeons/secretlocations.json"))) {
- roomsJson = SkyblockerMod.GSON.fromJson(roomsReader, JsonObject.class);
- waypointsJson = SkyblockerMod.GSON.fromJson(waypointsReader, JsonObject.class);
- LOGGER.debug("Loaded dungeon secrets json");
- } catch (IOException e) {
- LOGGER.error("Failed to load dungeon secrets json", e);
- }
- roomsLoaded = CompletableFuture.allOf(dungeonFutures.toArray(CompletableFuture[]::new)).thenRun(() -> LOGGER.info("Loaded dungeon secrets for {} dungeon(s), {} room shapes, and {} rooms total", ROOMS.size(), ROOMS.values().stream().mapToInt(HashMap::size).sum(), ROOMS.values().stream().map(HashMap::values).flatMap(Collection::stream).mapToInt(HashMap::size).sum()));
});
}
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 016d6d28..16684a41 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -198,6 +198,9 @@
"text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker": "Solve Hungry Hiker",
"text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "Solve Treasure Hunter",
"text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints": "Dungeon Secret Waypoints",
+ "text.autoconfig.skyblocker.option.locations.dungeons.noLoadSecretWaypoints": "Not Load Secret Waypoints",
+ "text.autoconfig.skyblocker.option.locations.dungeons.noLoadSecretWaypoints.@Tooltip": "This option can save around 40 MB of ram if enabled, but Secret Waypoint will require a restart after turning off this option to work.",
"text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Helper",
"text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Gray out chests that have already been opened.",
"text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Enable Map",