aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java104
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Admin-0.skeletonbin0 -> 54016 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Andesite-2.skeletonbin0 -> 60071 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Arrow-Trap-1.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Banners-1.skeleton1
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Basement-1.skeleton1
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Beams-2.skeletonbin0 -> 40812 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Big-Red-Flag-2.skeletonbin0 -> 54393 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Black-Flag-3.skeletonbin0 -> 73609 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Blue-Skulls-1.skeleton61
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Cage-1.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Cages-2.skeletonbin0 -> 79289 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Carpets-1.skeleton42
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Cell-1.skeleton4
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Chains-2.skeleton101
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Cobble-Wall-Pillar-2.skeleton17
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Dip-2.skeletonbin0 -> 52231 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Dome-2.skeletonbin0 -> 67944 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Double-Diamond-3.skeletonbin0 -> 59887 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Drop-2.skeleton55
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Dueces-3.skeletonbin0 -> 73824 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Duncan-1.skeletonbin0 -> 50596 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/End-2.skeletonbin0 -> 58841 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Golden-Oasis-1.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Granite-2.skeletonbin0 -> 63175 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Hall-0.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Hanging-Vines-1.skeletonbin0 -> 50358 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Jumping-Skulls-1.skeletonbin0 -> 65927 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Knight-3.skeletonbin0 -> 56966 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Lava-Pool-3.skeletonbin0 -> 56989 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Leaves-1.skeleton39
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Locked-Away-1.skeleton2
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Logs-4.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Long-Hall-3.skeletonbin0 -> 69349 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Lots-Of-Floors-3.skeleton109
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Mini-Rail-Track-3.skeletonbin0 -> 49753 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Mirror-1.skeleton32
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Multicolored-1.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Mural-1.skeleton145
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Mushroom-1.skeletonbin0 -> 57976 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Overgrown-3.skeleton84
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Overgrown-Chains-2.skeleton114
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Painting-2.skeleton23
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Perch-2.skeletonbin0 -> 67789 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Pillars-1.skeletonbin0 -> 46942 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Prison-Cell-1.skeletonbin0 -> 60737 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Quad-Lava-2.skeletonbin0 -> 60820 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Raccoon-4.skeleton218
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Red-Green-3.skeletonbin0 -> 69223 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Redstone-Key-3.skeletonbin0 -> 66524 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Sand-Dragon-1.skeletonbin0 -> 43279 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Sarcophagus-3.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Scaffolding-2.skeleton133
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Silvers-Sword-1.skeleton149
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Slabs-2.skeleton80
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Sloth-1.skeletonbin0 -> 57924 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Small-Stairs-2.skeletonbin0 -> 52757 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Spikes-3.skeletonbin0 -> 60850 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Steps-1.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Stone-Window-2.skeleton89
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Temple-3.skeletonbin0 -> 66367 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Tombstone-2.skeletonbin0 -> 54558 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Tomioka-0.skeleton3
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Water-2.skeletonbin0 -> 65555 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x1/Waterfall-2.skeletonbin0 -> 54937 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Archway-3.skeleton44
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Balcony-4.skeletonbin0 -> 185339 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Bridges-6.skeletonbin0 -> 183319 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Crypt-5.skeletonbin0 -> 125018 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Doors-5.skeletonbin0 -> 130184 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Gold-1.skeleton48
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Grand-Library-4.skeletonbin0 -> 122338 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Grass-Ruin-3.skeletonbin0 -> 175744 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Mage-4.skeleton97
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Pedestal-5.skeleton240
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Pressure-Plates-6.skeleton137
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Purple-Flags-5.skeletonbin0 -> 168083 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Redstone-Warrior-3.skeletonbin0 -> 156903 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x2/Skull-2.skeleton12
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Catwalk-6.skeleton492
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Deathmite-6.skeletonbin0 -> 180745 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Diagonal-4.skeleton25
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Gravel-6.skeleton34
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Red-Blue-4.skeletonbin0 -> 101936 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x3/Wizard-4.skeletonbin0 -> 182969 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x4/Hallway-3.skeleton351
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x4/Mossy-4.skeletonbin0 -> 168322 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x4/Pit-5.skeletonbin0 -> 227109 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x4/Quartz-Knight-7.skeleton248
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/1x4/Waterfall-8.skeletonbin0 -> 320732 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Atlas-6.skeleton125
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Buttons-5.skeletonbin0 -> 271044 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Cathedral-8.skeletonbin0 -> 235514 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Flags-7.skeleton271
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Mithril-Cave-10.skeletonbin0 -> 475695 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Museum-5.skeletonbin0 -> 315072 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Rail-Track-9.skeleton133
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Stairs-4.skeleton222
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/2x2/Super-Tall-6.skeletonbin0 -> 593719 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Chambers-5.skeletonbin0 -> 188127 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Dino-Dig-Site-4.skeletonbin0 -> 239108 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Lava-Ravine-6.skeletonbin0 -> 302614 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Layers-8.skeletonbin0 -> 175879 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Market-5.skeleton181
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Melon-7.skeleton134
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Spider-9.skeletonbin0 -> 320358 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Well-7.skeletonbin0 -> 284551 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/L-shape/Withermancers-4.skeletonbin0 -> 240571 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Blaze-Room-1-High.skeletonbin0 -> 90873 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Blaze-Room-1-Low.skeletonbin0 -> 91661 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Boxes-Room.skeletonbin0 -> 55570 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Creeper-Room.skeletonbin0 -> 66692 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Defusal.skeletonbin0 -> 60485 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Ice-Path.skeletonbin0 -> 56698 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Ice-Silverfish-Room.skeletonbin0 -> 62071 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Teleport-Pad-Room.skeletonbin0 -> 61237 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Three-Chests.skeleton2
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Tic-Tac-Toe-1.skeleton4
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Trivia-Room.skeleton61
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Puzzle/Water Puzzle.skeletonbin0 -> 68504 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Trap/Trap-Hard-4.skeletonbin0 -> 56218 bytes
-rw-r--r--src/main/resources/assets/skyblocker/dungeons/catacombs/Trap/Trap-Very-Hard-3.skeletonbin0 -> 59774 bytes
-rw-r--r--src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonRoomsDFU.java137
123 files changed, 4528 insertions, 100 deletions
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 b689f828..9a9752fb 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
@@ -16,9 +16,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
-import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
+import java.net.URL;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.zip.InflaterInputStream;
@@ -29,6 +32,7 @@ public class DungeonSecrets {
private static final HashMap<String, HashMap<String, HashMap<String, int[]>>> ROOMS = new HashMap<>();
/**
* Maps the block identifier string to a custom numeric block id used in dungeon rooms data.
+ *
* @implNote Not using {@link net.minecraft.registry.Registry#getId(Object) Registry#getId(Block)} and {@link net.minecraft.block.Blocks Blocks} since this is also used by {@link me.xmrvizzy.skyblocker.skyblock.dungeon.secrets.DungeonRoomsDFU DungeonRoomsDFU}, which runs outside of Minecraft.
*/
@SuppressWarnings("JavadocReference")
@@ -79,63 +83,63 @@ public class DungeonSecrets {
}
private static void load() {
- 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);
- //noinspection DataFlowIssue
- for (File dungeon : dungeons.listFiles()) {
- if (!dungeon.isDirectory()) {
- continue;
- }
- File[] roomShapes = dungeon.listFiles();
- if (roomShapes == null) {
- LOGGER.error("Failed to load dungeon secrets for dungeon {}", dungeon.getName());
- continue;
- }
- ROOMS.put(dungeon.getName(), new HashMap<>());
- List<CompletableFuture<Void>> roomShapeFutures = new ArrayList<>();
- for (File roomShape : roomShapes) {
- roomShapeFutures.add(CompletableFuture.supplyAsync(() -> readRooms(roomShape, resourcePathIndex)).thenAccept(rooms -> ROOMS.get(dungeon.getName()).put(roomShape.getName(), rooms)));
+ List<CompletableFuture<Void>> dungeonFutures = new ArrayList<>();
+ URL dungeonsURL = SkyblockerMod.class.getResource(DUNGEONS_DATA_DIR);
+ if (dungeonsURL == null) {
+ LOGGER.error("Failed to load dungeon secrets, unable to find dungeon rooms data directory");
+ return;
+ }
+ Path dungeonsDir = Path.of(dungeonsURL.getPath());
+ int resourcePathIndex = dungeonsDir.toString().indexOf(DUNGEONS_DATA_DIR);
+ try (DirectoryStream<Path> dungeons = Files.newDirectoryStream(dungeonsDir, Files::isDirectory)) {
+ for (Path dungeon : dungeons) {
+ try (DirectoryStream<Path> roomShapes = Files.newDirectoryStream(dungeon, Files::isDirectory)) {
+ List<CompletableFuture<Void>> roomShapeFutures = new ArrayList<>();
+ HashMap<String, HashMap<String, int[]>> roomShapesMap = new HashMap<>();
+ for (Path roomShape : roomShapes) {
+ roomShapeFutures.add(CompletableFuture.supplyAsync(() -> readRooms(roomShape, resourcePathIndex)).thenAccept(rooms -> roomShapesMap.put(roomShape.getFileName().toString(), rooms)));
+ }
+ ROOMS.put(dungeon.getFileName().toString(), roomShapesMap);
+ dungeonFutures.add(CompletableFuture.allOf(roomShapeFutures.toArray(CompletableFuture[]::new)).thenRun(() -> LOGGER.info("Loaded dungeon secrets for dungeon {} with {} room shapes and {} rooms total", dungeon.getFileName(), roomShapesMap.size(), roomShapesMap.values().stream().mapToInt(HashMap::size).sum())));
+ } catch (IOException e) {
+ LOGGER.error("Failed to load dungeon secrets for dungeon " + dungeon.getFileName(), e);
}
- 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())));
}
- // 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