From 2b185ea7e4a64aff28eac8152b7d3dca1a97e33a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 13 Jul 2023 15:42:10 +0800 Subject: Add DungeonRoomsDFU --- .../skyblock/dungeon/secrets/DungeonRoomsDFU.java | 90 + .../assets/skyblocker/dungeons/dungeonrooms.json | 890 ++++ .../dungeonrooms/catacombs/1x1/Admin-0.skeleton | Bin 0 -> 58563 bytes .../dungeonrooms/catacombs/1x1/Andesite-2.skeleton | 3 + .../catacombs/1x1/Arrow-Trap-1.skeleton | 2 + .../dungeonrooms/catacombs/1x1/Banners-1.skeleton | Bin 0 -> 64846 bytes .../dungeonrooms/catacombs/1x1/Basement-1.skeleton | 171 + .../dungeonrooms/catacombs/1x1/Beams-2.skeleton | Bin 0 -> 44003 bytes .../catacombs/1x1/Big-Red-Flag-2.skeleton | 368 ++ .../catacombs/1x1/Black-Flag-3.skeleton | Bin 0 -> 80358 bytes .../catacombs/1x1/Blue-Skulls-1.skeleton | 124 + .../dungeonrooms/catacombs/1x1/Cage-1.skeleton | Bin 0 -> 63211 bytes .../dungeonrooms/catacombs/1x1/Cages-2.skeleton | 183 + .../dungeonrooms/catacombs/1x1/Carpets-1.skeleton | Bin 0 -> 64811 bytes .../dungeonrooms/catacombs/1x1/Cell-1.skeleton | Bin 0 -> 64308 bytes .../dungeonrooms/catacombs/1x1/Chains-2.skeleton | 81 + .../catacombs/1x1/Cobble-Wall-Pillar-2.skeleton | 3 + .../dungeonrooms/catacombs/1x1/Dip-2.skeleton | 5 + .../dungeonrooms/catacombs/1x1/Dome-2.skeleton | Bin 0 -> 79412 bytes .../catacombs/1x1/Double-Diamond-3.skeleton | 102 + .../dungeonrooms/catacombs/1x1/Drop-2.skeleton | 379 ++ .../dungeonrooms/catacombs/1x1/Dueces-3.skeleton | 99 + .../dungeonrooms/catacombs/1x1/Duncan-1.skeleton | 88 + .../dungeonrooms/catacombs/1x1/End-2.skeleton | Bin 0 -> 64325 bytes .../catacombs/1x1/Golden-Oasis-1.skeleton | Bin 0 -> 83617 bytes .../dungeonrooms/catacombs/1x1/Granite-2.skeleton | 104 + .../dungeonrooms/catacombs/1x1/Hall-0.skeleton | 1 + .../catacombs/1x1/Hanging-Vines-1.skeleton | Bin 0 -> 53653 bytes .../catacombs/1x1/Jumping-Skulls-1.skeleton | Bin 0 -> 83519 bytes .../dungeonrooms/catacombs/1x1/Knight-3.skeleton | 297 ++ .../catacombs/1x1/Lava-Pool-3.skeleton | 140 + .../dungeonrooms/catacombs/1x1/Leaves-1.skeleton | Bin 0 -> 55283 bytes .../catacombs/1x1/Locked-Away-1.skeleton | 204 + .../dungeonrooms/catacombs/1x1/Logs-4.skeleton | Bin 0 -> 48472 bytes .../catacombs/1x1/Long-Hall-3.skeleton | Bin 0 -> 80178 bytes .../catacombs/1x1/Lots-Of-Floors-3.skeleton | Bin 0 -> 73427 bytes .../catacombs/1x1/Mini-Rail-Track-3.skeleton | Bin 0 -> 53305 bytes .../dungeonrooms/catacombs/1x1/Mirror-1.skeleton | Bin 0 -> 78266 bytes .../catacombs/1x1/Multicolored-1.skeleton | 107 + .../dungeonrooms/catacombs/1x1/Mural-1.skeleton | 54 + .../dungeonrooms/catacombs/1x1/Mushroom-1.skeleton | 16 + .../catacombs/1x1/Overgrown-3.skeleton | Bin 0 -> 47989 bytes .../catacombs/1x1/Overgrown-Chains-2.skeleton | Bin 0 -> 41038 bytes .../dungeonrooms/catacombs/1x1/Painting-2.skeleton | 126 + .../dungeonrooms/catacombs/1x1/Perch-2.skeleton | 357 ++ .../dungeonrooms/catacombs/1x1/Pillars-1.skeleton | 76 + .../catacombs/1x1/Prison-Cell-1.skeleton | 8 + .../catacombs/1x1/Quad-Lava-2.skeleton | 116 + .../dungeonrooms/catacombs/1x1/Raccoon-4.skeleton | 166 + .../catacombs/1x1/Red-Green-3.skeleton | Bin 0 -> 74912 bytes .../catacombs/1x1/Redstone-Key-3.skeleton | 216 + .../catacombs/1x1/Sand-Dragon-1.skeleton | Bin 0 -> 45728 bytes .../catacombs/1x1/Sarcophagus-3.skeleton | Bin 0 -> 92226 bytes .../catacombs/1x1/Scaffolding-2.skeleton | 133 + .../catacombs/1x1/Silvers-Sword-1.skeleton | 444 ++ .../dungeonrooms/catacombs/1x1/Slabs-2.skeleton | 138 + .../dungeonrooms/catacombs/1x1/Sloth-1.skeleton | 118 + .../catacombs/1x1/Small-Stairs-2.skeleton | Bin 0 -> 56358 bytes .../dungeonrooms/catacombs/1x1/Spikes-3.skeleton | 62 + .../dungeonrooms/catacombs/1x1/Steps-1.skeleton | Bin 0 -> 67431 bytes .../catacombs/1x1/Stone-Window-2.skeleton | Bin 0 -> 61197 bytes .../dungeonrooms/catacombs/1x1/Temple-3.skeleton | Bin 0 -> 72491 bytes .../catacombs/1x1/Tombstone-2.skeleton | Bin 0 -> 58520 bytes .../dungeonrooms/catacombs/1x1/Tomioka-0.skeleton | 40 + .../dungeonrooms/catacombs/1x1/Water-2.skeleton | 67 + .../catacombs/1x1/Waterfall-2.skeleton | Bin 0 -> 59034 bytes .../dungeonrooms/catacombs/1x2/Archway-3.skeleton | Bin 0 -> 136707 bytes .../dungeonrooms/catacombs/1x2/Balcony-4.skeleton | 386 ++ .../dungeonrooms/catacombs/1x2/Bridges-6.skeleton | Bin 0 -> 206352 bytes .../dungeonrooms/catacombs/1x2/Crypt-5.skeleton | Bin 0 -> 136054 bytes .../dungeonrooms/catacombs/1x2/Doors-5.skeleton | Bin 0 -> 144063 bytes .../dungeonrooms/catacombs/1x2/Gold-1.skeleton | 161 + .../catacombs/1x2/Grand-Library-4.skeleton | Bin 0 -> 133414 bytes .../catacombs/1x2/Grass-Ruin-3.skeleton | 381 ++ .../dungeonrooms/catacombs/1x2/Mage-4.skeleton | Bin 0 -> 175192 bytes .../dungeonrooms/catacombs/1x2/Pedestal-5.skeleton | 166 + .../catacombs/1x2/Pressure-Plates-6.skeleton | 251 + .../catacombs/1x2/Purple-Flags-5.skeleton | 457 ++ .../catacombs/1x2/Redstone-Warrior-3.skeleton | Bin 0 -> 172930 bytes .../dungeonrooms/catacombs/1x2/Skull-2.skeleton | Bin 0 -> 103929 bytes .../dungeonrooms/catacombs/1x3/Catwalk-6.skeleton | Bin 0 -> 235573 bytes .../catacombs/1x3/Deathmite-6.skeleton | Bin 0 -> 197472 bytes .../dungeonrooms/catacombs/1x3/Diagonal-4.skeleton | 819 +++ .../dungeonrooms/catacombs/1x3/Gravel-6.skeleton | Bin 0 -> 213444 bytes .../dungeonrooms/catacombs/1x3/Red-Blue-4.skeleton | 203 + .../dungeonrooms/catacombs/1x3/Wizard-4.skeleton | 495 ++ .../dungeonrooms/catacombs/1x4/Hallway-3.skeleton | 170 + .../dungeonrooms/catacombs/1x4/Mossy-4.skeleton | Bin 0 -> 178910 bytes .../dungeonrooms/catacombs/1x4/Pit-5.skeleton | Bin 0 -> 245807 bytes .../catacombs/1x4/Quartz-Knight-7.skeleton | 574 +++ .../catacombs/1x4/Waterfall-8.skeleton | Bin 0 -> 360357 bytes .../dungeonrooms/catacombs/2x2/Atlas-6.skeleton | 591 +++ .../dungeonrooms/catacombs/2x2/Buttons-5.skeleton | 220 + .../catacombs/2x2/Cathedral-8.skeleton | 552 ++ .../dungeonrooms/catacombs/2x2/Flags-7.skeleton | Bin 0 -> 367714 bytes .../catacombs/2x2/Mithril-Cave-10.skeleton | 959 ++++ .../dungeonrooms/catacombs/2x2/Museum-5.skeleton | Bin 0 -> 361843 bytes .../catacombs/2x2/Rail-Track-9.skeleton | 353 ++ .../dungeonrooms/catacombs/2x2/Stairs-4.skeleton | 330 ++ .../catacombs/2x2/Super-Tall-6.skeleton | Bin 0 -> 636422 bytes .../catacombs/L-shape/Chambers-5.skeleton | 502 ++ .../catacombs/L-shape/Dino-Dig-Site-4.skeleton | Bin 0 -> 277016 bytes .../catacombs/L-shape/Lava-Ravine-6.skeleton | Bin 0 -> 334310 bytes .../catacombs/L-shape/Layers-8.skeleton | Bin 0 -> 188086 bytes .../catacombs/L-shape/Market-5.skeleton | 496 ++ .../catacombs/L-shape/Melon-7.skeleton | Bin 0 -> 152375 bytes .../catacombs/L-shape/Spider-9.skeleton | Bin 0 -> 360145 bytes .../dungeonrooms/catacombs/L-shape/Well-7.skeleton | 474 ++ .../catacombs/L-shape/Withermancers-4.skeleton | Bin 0 -> 265367 bytes .../catacombs/Puzzle/Blaze-Room-1-High.skeleton | Bin 0 -> 104517 bytes .../catacombs/Puzzle/Blaze-Room-1-Low.skeleton | 145 + .../catacombs/Puzzle/Boxes-Room.skeleton | Bin 0 -> 60502 bytes .../catacombs/Puzzle/Creeper-Room.skeleton | 11 + .../dungeonrooms/catacombs/Puzzle/Defusal.skeleton | 20 + .../catacombs/Puzzle/Ice-Path.skeleton | 64 + .../catacombs/Puzzle/Ice-Silverfish-Room.skeleton | 298 ++ .../catacombs/Puzzle/Teleport-Pad-Room.skeleton | 8 + .../catacombs/Puzzle/Three-Chests.skeleton | 4 + .../catacombs/Puzzle/Tic-Tac-Toe-1.skeleton | 58 + .../catacombs/Puzzle/Trivia-Room.skeleton | Bin 0 -> 81769 bytes .../catacombs/Puzzle/Water Puzzle.skeleton | Bin 0 -> 79227 bytes .../catacombs/Trap/Trap-Hard-4.skeleton | Bin 0 -> 60019 bytes .../catacombs/Trap/Trap-Very-Hard-3.skeleton | 66 + .../skyblocker/dungeons/secretlocations.json | 5391 ++++++++++++++++++++ 124 files changed, 20183 insertions(+) create mode 100644 src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonRoomsDFU.java create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms.json create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Admin-0.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Andesite-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Arrow-Trap-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Banners-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Basement-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Beams-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Big-Red-Flag-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Black-Flag-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Blue-Skulls-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Cage-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Cages-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Carpets-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Cell-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Chains-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Cobble-Wall-Pillar-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Dip-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Dome-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Double-Diamond-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Drop-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Dueces-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Duncan-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/End-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Golden-Oasis-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Granite-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Hall-0.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Hanging-Vines-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Jumping-Skulls-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Knight-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Lava-Pool-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Leaves-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Locked-Away-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Logs-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Long-Hall-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Lots-Of-Floors-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Mini-Rail-Track-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Mirror-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Multicolored-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Mural-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Mushroom-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Overgrown-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Overgrown-Chains-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Painting-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Perch-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Pillars-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Prison-Cell-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Quad-Lava-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Raccoon-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Red-Green-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Redstone-Key-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Sand-Dragon-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Sarcophagus-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Scaffolding-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Silvers-Sword-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Slabs-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Sloth-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Small-Stairs-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Spikes-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Steps-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Stone-Window-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Temple-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Tombstone-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Tomioka-0.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Water-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Waterfall-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Archway-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Balcony-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Bridges-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Crypt-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Doors-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Gold-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Grand-Library-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Grass-Ruin-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Mage-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Pedestal-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Pressure-Plates-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Purple-Flags-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Redstone-Warrior-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x2/Skull-2.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Catwalk-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Deathmite-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Diagonal-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Gravel-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Red-Blue-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x3/Wizard-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x4/Hallway-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x4/Mossy-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x4/Pit-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x4/Quartz-Knight-7.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x4/Waterfall-8.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Atlas-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Buttons-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Cathedral-8.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Flags-7.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Mithril-Cave-10.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Museum-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Rail-Track-9.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Stairs-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/2x2/Super-Tall-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Chambers-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Dino-Dig-Site-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Lava-Ravine-6.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Layers-8.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Market-5.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Melon-7.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Spider-9.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Well-7.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/L-shape/Withermancers-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Blaze-Room-1-High.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Blaze-Room-1-Low.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Boxes-Room.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Creeper-Room.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Defusal.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Ice-Path.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Ice-Silverfish-Room.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Teleport-Pad-Room.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Three-Chests.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Tic-Tac-Toe-1.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Trivia-Room.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Puzzle/Water Puzzle.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Trap/Trap-Hard-4.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/Trap/Trap-Very-Hard-3.skeleton create mode 100644 src/test/resources/assets/skyblocker/dungeons/secretlocations.json (limited to 'src/test') diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonRoomsDFU.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonRoomsDFU.java new file mode 100644 index 00000000..305d1efb --- /dev/null +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonRoomsDFU.java @@ -0,0 +1,90 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.secrets; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +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; + +public class DungeonRoomsDFU { + private static final Logger LOGGER = LoggerFactory.getLogger(DungeonRoomsDFU.class); + private static final String DUNGEONS_DATA_DIR = "/assets/skyblocker/dungeons"; + private static final String DUNGEON_ROOMS_DATA_DIR = DUNGEONS_DATA_DIR + "/dungeonrooms"; + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + private static final HashMap>> ROOMS = new HashMap<>(); + private static JsonObject roomsJson; + private static JsonObject waypointsJson; + + public static void main(String[] args) { + load().join(); + } + + private static CompletableFuture load() { + try { + List> dungeonFutures = new ArrayList<>(); + //noinspection DataFlowIssue + File dungeons = new File(DungeonRoomsDFU.class.getResource(DUNGEON_ROOMS_DATA_DIR).getFile()); + int resourcePathIndex = dungeons.getPath().indexOf(DUNGEON_ROOMS_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> roomShapeFutures = new ArrayList<>(); + for (File roomShape : roomShapes) { + roomShapeFutures.add(CompletableFuture.supplyAsync(() -> readRooms(roomShape, resourcePathIndex)).thenAccept(rooms -> ROOMS.get(dungeon.getName()).put(roomShape.getName(), rooms))); + } + dungeonFutures.add(CompletableFuture.allOf(roomShapeFutures.toArray(CompletableFuture[]::new)).thenRun(() -> LOGGER.info("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()))); + } + dungeonFutures.add(CompletableFuture.runAsync(() -> { + //noinspection DataFlowIssue + try (BufferedReader roomsReader = new BufferedReader(new InputStreamReader(DungeonRoomsDFU.class.getResourceAsStream(DUNGEONS_DATA_DIR + "/dungeonrooms.json"))); + BufferedReader waypointsReader = new BufferedReader(new InputStreamReader(DungeonRoomsDFU.class.getResourceAsStream(DUNGEONS_DATA_DIR + "/secretlocations.json")))) { + roomsJson = GSON.fromJson(roomsReader, JsonObject.class); + waypointsJson = GSON.fromJson(waypointsReader, JsonObject.class); + LOGGER.info("Loaded dungeon secrets json"); + } catch (Exception e) { + LOGGER.error("Failed to load dungeon secrets json", e); + } + })); + return 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) { + throw new RuntimeException("Failed to load dungeon secrets", e); + } + } + + private static HashMap readRooms(File roomShape, int resourcePathIndex) { + HashMap data = new HashMap<>(); + File[] rooms = roomShape.listFiles(); + if (rooms == null) { + LOGGER.error("Failed to load dungeon secrets room shape {}", roomShape.getName()); + return data; + } + for (File room : rooms) { + String name = room.getName(); + //noinspection DataFlowIssue + try (ObjectInputStream in = new ObjectInputStream(new InflaterInputStream(DungeonRoomsDFU.class.getResourceAsStream(room.getPath().substring(resourcePathIndex))))) { + data.put(name.substring(0, name.length() - 9), (long[]) in.readObject()); + LOGGER.info("Loaded dungeon secrets room {}", name); + } catch (NullPointerException | IOException | ClassNotFoundException e) { + LOGGER.error("Failed to load dungeon secrets room " + name, e); + } + } + LOGGER.info("Loaded dungeon secrets room shape {} with {} rooms", roomShape.getName(), data.size()); + return data; + } +} diff --git a/src/test/resources/assets/skyblocker/dungeons/dungeonrooms.json b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms.json new file mode 100644 index 00000000..f7d50d36 --- /dev/null +++ b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms.json @@ -0,0 +1,890 @@ +{ + "copyright":"Copyright 2021 Quantizr(_risk)", + "license":"GPL-3.0 License ", + "Entrance Room": { + "category": "General", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Fairy Room": { + "category": "General", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Miniboss Room": { + "category": "General", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Blood Room": { + "category": "General", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Boss Room": { + "category": "General", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Trivia-Room": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/739026749781835786/769725317274140733" + }, + "Three-Chests": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732032683890311260/734367658476044289" + }, + "Water Puzzle": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "null" + }, + "Blaze-Room-1-Low": { + "category": "Puzzle", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732386618056638576/732409365872508938", + "sbp": "blaze" + }, + "Blaze-Room-1-High": { + "category": "Puzzle", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732386618056638576/732409365872508938", + "sbp": "blaze" + }, + "Boxes-Room": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732393810750865468/796097575710883920" + }, + "Ice-Silverfish-Room": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732392830437294162/734613698194440232" + }, + "Creeper-Room": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732393043679903864/734613061125799967" + }, + "Defusal": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/779899404453806120/779899693210927145" + }, + "Ice-Path": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732392995051143188/732796910229913670" + }, + "Teleport-Pad-Room": { + "category": "Puzzle", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732393155017834616/732393341374824488" + }, + "Tic-Tac-Toe-1": { + "category": "Puzzle", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732386638214332517/733858846048518215", + "sbp": "tictactoe" + }, + "Trap-Hard-4": { + "category": "Trap", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733916299964710933/733922649360695366", + "sbp": "arrow" + }, + "Trap-Very-Hard-3": { + "category": "Trap", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750984996155686912/756322825350152242", + "sbp": "crusher" + }, + "Admin-0": { + "category": "1x1", + "secrets": 0, + "fairysoul": true, + "dsg": "/channels/727426780381577291/750984974794227844/752939761534238880" + }, + "Banners-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733845562000146552/733846122761682954", + "sbp": "banners" + }, + "Basement-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368906472488990/823744642846818314", + "sbp": "basement" + }, + "Blue-Skulls-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733898880655294516/733899092597669891", + "sbp": "blue-skulls" + }, + "Cage-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733879290353025055/733879414399434773", + "sbp": "cage" + }, + "Arrow-Trap-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/761340021344567317/766954830027423764", + "sbp": "arrow-trap" + }, + "Carpets-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368732333637672/793225115340505099", + "sbp": "carpets" + }, + "Golden-Oasis-1": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750952925248880640/750955896707874846", + "sbp": "golden-oasis" + }, + "Jumping-Skulls-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/741109587108823088/741110218015899648", + "sbp": "jumping-skulls" + }, + "Duncan-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985143325294672/766951315715653634", + "sbp": "duncan" + }, + "Leaves-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": true, + "dsg": "/channels/727426780381577291/734299006246846514/734299567599648840", + "sbp": "leaves" + }, + "Mirror-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733906682408730676/733906866769231960", + "sbp": "mirror" + }, + "Mural-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733927175492993064/733928355807756308", + "sbp": "mural" + }, + "Sanctuary-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985107640156210/769371253869248532", + "sbp": "sanctuary" + }, + "Sand-Dragon-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985055026806865/759159016211087401", + "sbp": "sand-dragon" + }, + "Hanging-Vines-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985016443404339/756992222234280045", + "sbp": "hanging-vines" + }, + "Silvers-Sword-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368880295444500/791782731498520597", + "sbp": "silvers-sword" + }, + "Sloth-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732404646529859614/733866850353676399", + "sbp": "sloth" + }, + "Steps-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733981651469598781/733982190412627988", + "sbp": "steps" + }, + "Hall-0": { + "category": "1x1", + "secrets": 0, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985072399614012/760732650653614100" + }, + "Tomioka-0": { + "category": "1x1", + "secrets": 0, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733858157008388157/733858193695834133" + }, + "Cell-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/741308041378398309/744400045188579461", + "sbp": "cell" + }, + "Locked-Away-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368759085039618/791687775674040320", + "sbp": "locked-away" + }, + "Mushroom-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732499836091367467/733871633688690749", + "sbp": "mushroom" + }, + "Prison-Cell-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732199219619692574/732399578942275634", + "sbp": "prison-cell" + }, + "Andesite-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750970140652208228/750976087143481376", + "sbp": "andesite" + }, + "Scaffolding-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732794387016319017/759325264848617482", + "sbp": "scaffolding" + }, + "Multicolored-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733822576194879509/733904367844851752", + "sbp": "multicolored" + }, + "Cobble-Wall-Pillar-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/737685130449125509/737686110523752508", + "sbp": "cobble-wall-pillar" + }, + "Quad-Lava-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/727426780381577291/734721591648452628/734948461794820196", + "sbp": "quad-lava" + }, + "Beams-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368654315389009/779118152176762911", + "sbp": "beams" + }, + "Big-Red-Flag-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733854519934451732/733854644564131902", + "sbp": "big-red-flag" + }, + "Cages-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879793359709933618/879804036449194014", + "sbp": "cages" + }, + "Chains-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733456615927185439/733460684851118080", + "sbp": "chains" + }, + "Dip-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733823742274175016/733901751471570954", + "sbp": "dip" + }, + "Dome-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368678352814131/779904763823128577", + "sbp": "dome" + }, + "Drop-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733828110432206899/733829191270793216", + "sbp": "drop" + }, + "End-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879929045641465857/879929282141491292", + "sbp": "end" + }, + "Granite-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733907465011200001/733907705361858582", + "sbp": "granite" + }, + "Overgrown-Chains-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879792534841344082/879962065371021322", + "sbp": "overgrown-chains" + }, + "Painting-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368462421786655/783514346479157268", + "sbp": "painting" + }, + "Perch-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733839339427201135/733841512420605973", + "sbp": "perch" + }, + "Slabs-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/735238062187085984/735238264591482880", + "sbp": "slabs" + }, + "Small-Stairs-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368511872237599/789160479125012531", + "sbp": "small-stairs" + }, + "Tombstone-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368894225121280/793146978712289290", + "sbp": "tombstone" + }, + "Double-Diamond-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/880155380058046474/880155606240100402", + "sbp": "double-diamond" + }, + "Water-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733522388377141289/733985939843579916", + "sbp": "water" + }, + "Waterfall-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733536654639235083/734330554870399048", + "sbp": "waterfall" + }, + "Raccoon-4": { + "category": "1x1", + "secrets": 4, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733927767502225409/733928650755407933", + "sbp": "raccoon" + }, + "Black-Flag-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368576175374346/803798156818120704", + "sbp": "black-flag" + }, + "Dueces-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/736416554215800873/736416920416419961", + "sbp": "dueces" + }, + "Knight-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/739944030825087117/741310655583486033", + "sbp": "knight" + }, + "Pillars-1": { + "category": "1x1", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985035418566706/757896936274657340", + "sbp": "pillars" + }, + "Lava-Pool-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/750985126506266636/762941546084564993", + "sbp": "lava-pool" + }, + "Lava-Skull-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368436408188938/776261030211747891", + "sbp": "lava-skull" + }, + "Long-Hall-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879896823026831401/879897603091869697", + "sbp": "long-hall" + }, + "Mini-Rail-Track-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/761340120141791272/767639390896914442", + "sbp": "mini-rail-track" + }, + "Trinity-4": { + "category": "1x1", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/761340075111088149/771204594017370122", + "sbp": "trinity" + }, + "Lots-Of-Floors-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733856132086628459/733856220544368720", + "sbp": "lots-of-floors" + }, + "Overgrown-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368622778286111/779264739544662016", + "sbp": "overgrown" + }, + "Red-Green-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879828980935577610/879921473542828082", + "sbp": "red-green" + }, + "Redstone-Key-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733879689533456484/733880517736398900", + "sbp": "redstone-key" + }, + "Sarcophagus-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/734660581004673075/734661195663015967", + "sbp": "sarcophagus" + }, + "Spikes-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733868639572197459/733868731297431660", + "sbp": "spikes" + }, + "Stone-Window-2": { + "category": "1x1", + "secrets": 2, + "fairysoul": true, + "dsg": "/channels/727426780381577291/769368930724610070/802218309969903646", + "sbp": "stone-window" + }, + "Temple-3": { + "category": "1x1", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/769368563160317972/778664588996509706", + "sbp": "temple" + }, + "Logs-4": { + "category": "1x1", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/734220175800401970/734297922153218068", + "sbp": "logs" + }, + "Gold-1": { + "category": "1x2", + "secrets": 1, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732406315137368126/733900679181238343", + "sbp": "gold" + }, + "Skull-2": { + "category": "1x2", + "secrets": 2, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732805467721695292/732807820776439818", + "sbp": "skull" + }, + "Archway-3": { + "category": "1x2", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733909034654236742/733909154254815305", + "sbp": "archway" + }, + "Grass-Ruin-3": { + "category": "1x2", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879932963939307551/879933264696082432", + "sbp": "grass-ruin" + }, + "Redstone-Warrior-3": { + "category": "1x2", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/737886448740728965/737887558591053936", + "sbp": "redstone-warrior" + }, + "Balcony-4": { + "category": "1x2", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733845349164122146/733845463152984114", + "sbp": "balcony" + }, + "Grand-Library-4": { + "category": "1x2", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879896240836456458/879900771699794013", + "sbp": "grand-library" + }, + "Mage-4": { + "category": "1x2", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732835428377296937/733823880753578075", + "sbp": "mage" + }, + "Crypt-5": { + "category": "1x2", + "secrets": 5, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733455710578409592/733856625802346562", + "sbp": "crypt" + }, + "Doors-5": { + "category": "1x2", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732810268568059937/732811162986479656", + "sbp": "doors" + }, + "Pedestal-5": { + "category": "1x2", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733033960342290533/733914274157822062", + "sbp": "pedestal" + }, + "Purple-Flags-5": { + "category": "1x2", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732416718244151398/733876200761458699", + "sbp": "purple-flags" + }, + "Bridges-6": { + "category": "1x2", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/739403470494498896/739406168253792306", + "sbp": "bridges" + }, + "Pressure-Plates-6": { + "category": "1x2", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/761340150789308446/766599389463707668", + "sbp": "pressure-plate" + }, + "Diagonal-4": { + "category": "1x3", + "secrets": 4, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733846259936526356/733848085549285436", + "sbp": "diagonal" + }, + "Red-Blue-4": { + "category": "1x3", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733825061726715904/733825904354001038", + "sbp": "red-blue" + }, + "Wizard-4": { + "category": "1x3", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/739247421917364324/739249863845478493", + "sbp": "wizard" + }, + "Catwalk-6": { + "category": "1x3", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732389363031474226/733856410579763372", + "sbp": "catwalk" + }, + "Deathmite-6": { + "category": "1x3", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/734266445869088808/734267107880992848", + "sbp": "deathmite" + }, + "Gravel-6": { + "category": "1x3", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733874409089138778/733877168752295986", + "sbp": "gravel" + }, + "Hallway-3": { + "category": "1x4", + "secrets": 3, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732407914333077616/733909116866527243", + "sbp": "hallway" + }, + "Mossy-4": { + "category": "1x4", + "secrets": 4, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733881124173905930/733885339369865288", + "sbp": "mossy" + }, + "Pit-5": { + "category": "1x4", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733831210870243348/733831342793556038", + "sbp": "pit" + }, + "Quartz-Knight-7": { + "category": "1x4", + "secrets": 7, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732199310690746368/733869839680012370", + "sbp": "quartz-knight" + }, + "Waterfall-8": { + "category": "1x4", + "secrets": 8, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879791869821849620/879904013309591612", + "sbp": "waterfall" + }, + "Stairs-4": { + "category": "2x2", + "secrets": 4, + "fairysoul": true, + "dsg": "/channels/727426780381577291/733291327470698546/734217944040734851", + "sbp": "stairs" + }, + "Buttons-5": { + "category": "2x2", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/761340098864087110/762900777571319818", + "sbp": "buttons" + }, + "Museum-5": { + "category": "2x2", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/737882727130595390/739341655530012764", + "sbp": "museum" + }, + "Atlas-6": { + "category": "2x2", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/737877644107841637/737879380189249588", + "sbp": "atlas" + }, + "Super-Tall-6": { + "category": "2x2", + "secrets": 6, + "fairysoul": true, + "dsg": "/channels/727426780381577291/739237284385128600/739242994385027234", + "sbp": "super-tall" + }, + "Flags-7": { + "category": "2x2", + "secrets": 7, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733046323556777988/733827872740999189", + "sbp": "flags" + }, + "Mithril-Cave-10": { + "category": "2x2", + "secrets": 10, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879793274766913616/879813440057798697", + "sbp": "mithril-cave" + }, + "Cathedral-8": { + "category": "2x2", + "secrets": 8, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733869699305046067/733871215797731480", + "sbp": "cathedral" + }, + "Rail-Track-9": { + "category": "2x2", + "secrets": 9, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732199320048369754/733842101976170556", + "sbp": "rail-track" + }, + "Dino-Dig-Site-4": { + "category": "L-shape", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/756412502996287539/756498573536788550", + "sbp": "dino-dig-site" + }, + "Chambers-5": { + "category": "L-shape", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732407775468191846/733855957934669845", + "sbp": "chambers" + }, + "Market-5": { + "category": "L-shape", + "secrets": 5, + "fairysoul": false, + "dsg": "/channels/727426780381577291/733840047941353562/733845015960354876", + "sbp": "market" + }, + "Withermancers-4": { + "category": "L-shape", + "secrets": 4, + "fairysoul": false, + "dsg": "/channels/727426780381577291/756271429153980477/756414928142860308", + "sbp": "withermancers" + }, + "Lava-Ravine-6": { + "category": "L-shape", + "secrets": 6, + "fairysoul": false, + "dsg": "/channels/727426780381577291/739254148024893522/739261066667884544", + "sbp": "lava-ravine" + }, + "Melon-7": { + "category": "L-shape", + "secrets": 7, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732813026830319659/732814245045075980", + "sbp": "melon" + }, + "Well-7": { + "category": "L-shape", + "secrets": 7, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732809439371067466/733912767811027046", + "sbp": "well" + }, + "Layers-8": { + "category": "L-shape", + "secrets": 8, + "fairysoul": false, + "dsg": "/channels/727426780381577291/879905397031440394/879905775072460800", + "sbp": "layers" + }, + "Spider-9": { + "category": "L-shape", + "secrets": 9, + "fairysoul": false, + "dsg": "/channels/727426780381577291/732154637506969650/733875583536201820", + "sbp": "spider" + } +} \ No newline at end of file diff --git a/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Admin-0.skeleton b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Admin-0.skeleton new file mode 100644 index 00000000..a6e1faec Binary files /dev/null and b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Admin-0.skeleton differ diff --git a/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Andesite-2.skeleton b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Andesite-2.skeleton new file mode 100644 index 00000000..7f30a897 --- /dev/null +++ b/src/test/resources/assets/skyblocker/dungeons/dungeonrooms/catacombs/1x1/Andesite-2.skeleton @@ -0,0 +1,3 @@ +x𶗱挒閽|]uG擰*厈燖09鎦灗tI45瓧裦 +愿 +顑{鄩垕B惱>w)\鹐锟_鈔骭机烤?_军逅逅Kwr肕奋=份嵛r琵W/頮菘w醻鐍稔帼棹濑忐恂掰纩铪狺閪u磴~育M7葸t育M7葸t育M7葸t育M7葸t育M7葸t育M7葸t育M7葸t育M7?n哄罟wv擕/羁砬黴6忹w唼噊缜}镧~u磴铍拮蒋{_骶題蓰瑚u镫拮蒋{_齄椏涨帼棹濑霃麐燋蹢鷔_菹瀰瀰瀰瀰瀰瀰瀰瀰瀰瀰瀰瀰瀰瀰 /靇乜皐皴鲝 {.韂诨磜i镆蕙終{楒.韂诨磜i镆蕙終{楒.奎舯k轱镆掊?鳟?O鳙燋e漱朂+鸚霪靇倏e漱朂+鸚霪Y骋骋骋锄g销泾烨~霏舡鱵糇窥溝镜镜镜镜镜镜镜镜镜镜镜镜镜镜觉椏w醻鐍锴帼鑯v篬f瓄瓄蜗赙}vntntntntntntntntntntntntntn琮淃w顆铟顝頞钕=鱵uswpt窥鶡輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀輀渘揸茭}e霟迎_荹漑;;;;;;;;;;;;;;;;;;;;;;;>坶荠髻慰蟰~唛荛<衴狊@鐏:t<衴狊@鐏:t<衴狊@鐏~鴣>痫t>衹P鳌頒輫u>詝P鳌頒輫u>詝P鳌頒輫u>詝P鳌頒輫u>襺H鲬#軬簭t>襺H鲬#軬簭t>襺H鲬#軬簭t>襺H鲬#軬簭t>謢X鞅頲萸簭u>謢X鞅頲萸簭u>謢X鞅頲萸簭u>謢X鞅頲萸篛t熻>複ⅪD鲏'篛t熻>複ⅪD鲏'篛t熻>複ⅪD鲏'篛t熻>複ⅪD鲏荮篛u熽>諁T鳗頢荮篛u熽>諁T鳗頢荮篛u熽>諁T鳗頢荮篛u熽>諁T鳗3輌合t熼>觹L鳈3輌合t熼>觹L鳈3輌合t熼>觹L鳈3輌合t熼>觹L鞴顂葭合u熾>讅\鞴顂葭合u熾>讅\鞴顂葭合u熾>讅\鞴顂葭合u熾>讅B鲄 /t_杈衹←B鲄 /t_杈衹←B鲄 /t_杈衹←B鲄 /t_杈衹R鳐頚輻/u_昃詝R鳐頚輻/u_昃詝R鳐頚輻/u_昃詝R鳐頚輻/u_昃襺J鲿+軼函t_榫襺J鲿+軼函t_榫襺J鲿+軼函t_榫襺J鲿+軼函t_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑簅t哞狙}{F鲘7簅t哞狙}{F鲘7簅t哞狙}{F鲘7簅t哞狙}{F鲘莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝;輜猴t唛居}N鳚;輜猴t唛居}N鳚;輜猴t唛居}N鳚;輜猴t唛居}N鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}A鲀t?鑯旋狖A鲀t?鑯旋狖A鲀t?鑯旋狖A鲀t?鑯旋Q鳎頖輳u?陗札Q鳎頖輳u?陗札Q鳎頖輳u?陗札Q鳎頖輳u?陗引I鲹'軴簾t?閪引I鲹'軴簾t?閪引I鲹'軴簾t?閪引I鲹'軴簾t?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖莜篲u筷~正U鳙頦莜篲u筷~正U鳙頦莜篲u筷~正U鳙頦莜篲u筷~正U鳙7{呒箧7锛y缤;o辻笪泈藜箧澐弚&>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>q鰤砄渳忪g8'>}8欮矍7黠?镘镙|螐頞钕~/畀頾铒~顭頦?>罹題蓰瑚u镫拮蒋{_骶題蓰瑚奎肟>頮䙌齫亏奎乔莭頩氐発a茁畢] v-靂氐発a茁畢 ;v,靀乇碿i且帴K;杤,鞽诒碿i且帴K;杤,韝黛消筩e鞘帟+;VvX俦瞔e鞘帟+;>{庳秣鱯资灂=k{嘱Y鄢秅m馅灥=k{嘱Y鄢秅m馅灥=/廀銅钯爻眊c掀瀺={6鰈熨爻眊c掀瀺={6鰈熨|8鼷c灼緧_O;穠n碥诠祍k缰苇漑;穠n碥邬楹秣/欢鰊?荥蔟圎濢禁凔俪灜灜灜灊灊灊灊灊灊灊灊灊灊灊灊濷縸繜縪铧竟篼骖燈~縮亏pt趬譔紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x砟k'^;褛壸N紇獾瘽x睇>←B鲄 /t_杈衹←B鲄 /t_杈衹←B鲄 /t_杈衹←B鲄 /u_鳐頚輻/u_昃詝R鳐頚輻/u_昃詝R鳐頚輻/u_昃詝R鳐頚輻/u_昃襺J鲿+軼函t_榫襺J鲿+軼函t_榫襺J鲿+軼函t_榫襺J鲿+軼函t_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑函u_刖謢Z鞯頺葑簅t哞狙}{F鲘7簅t哞狙}{F鲘7簅t哞狙}{F鲘7簅t哞狙}{F鲘莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝頪莘簅u哧菊}V鳝;輜猴t唛居}N鳚;輜猴t唛居}N鳚;輜猴t唛居}N鳚;輜猴t唛居}N鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}^鹘顊蓣猴u唠咀}A鲀t?鑯旋狖A鲀t?鑯旋狖A鲀t?鑯旋狖A鲀t?鑯旋Q鳎頖輳u?陗札Q鳎頖輳u?陗札Q鳎頖輳u?陗札Q鳎頖輳u?陗引I鲹'軴簾t?閪引I鲹'軴簾t?閪引I鲹'軴簾t?閪引I鲹'軴簾t?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹簾u?雫铸Y鞒頶菹篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖/篲t胯~妖ⅪE鲖莜篲u筷~正U鳙頦莜篲u筷~正U鳙頦莜篲u筷~正U鳙頦莜篲u筷~正U鳙7給z唪鹃|御蜑7{揿y崇蜑7{揿y崇蜑7{讅|7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7鴑疠嗷羨冿 |7孄W鱫钸輜窟惯?鴾轃軣__葸|镱顭頦?笞題蓰瑚u镫拮蒋{_骶題蓰?}7x铥c呔w轢xw彷厀轢xw彷厀轢xw皴_>>狍>轶>轶>轶>轶>轶>隚弦;+铿汲蛭;+铿汲蛭;+铿汲蛭淑瘆绡}绡}绡}绡}绡}藦k飈汲裎;飈汲裎;飈汲裎;飢鷊|x珑?咻zw胼瓀忿輟w胼瓀忿輟w胼璤熮38fp锑橊耒S鬏/僟 ~2鴈鹚鄺/僟 ~2鴈鹚鄺/僟 ~2鴈鹚鄺/脽?崗?鷜wpt亢煗:t<衴狊@鐏:t<衴狊3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 i鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 <3xf鹛鄼3僩 jp袜毩5僰 \3竑p袜毩5僰&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽j鷖5搆?窔\3筬r弯毶5搆媲讎亢抗炕鴾?莜~}蓰瑚u镫拮蒋{_骶題蓰瑚u炕纡泾罹轠xo峤咓轠xo峤咓轠x镉3筱蠜>铉;K,匠粑;K,匠粑;K,匠粑蛎綊k&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5搆&譒畽\3筬r弯毶5唢g勤;飈汲裎;飈汲裎;飈汲裎歧o}鏾}鏾}鏾}鏾}鏾:虽椛/揰&縷靠岡銅钯俪砱g衔灊=;{v鲮熨俪砱g衔濷疞^櫦2ye蚴鋾+揥&疞^鶁耥_葸苓莜頶邅};衱狅@邅}棼t输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29er输斏)揝&N櫆29eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼,NY湶8eq殊斉)婼柉痆湶8e哄腚,NY湶|}葩斉)婼具啐??莜~}蓰瑚u镫拮蒋{_骶題蓰瑚u:e:哄腓柉懿竐q蒜柵-媅,nY懿竐q蓑ut脬腓?罨W暞編n}d?镧帴K;杤,鞽诒碿i且帴K;杤|~蒡ut俗-_G穦葩炁=媨,頨艹竒q镶炁=媨柉編n瑰腈具熫楷靀郾禼m勤幍k;講X郾禼m勤幍k;講<鎻gm掀瀺={6鰈熨爻眊c掀瀺={6鰈熨爻眊c掀幁[;秜l碡诒礳k侵幁[;秜|zk裰蝓q俗-㖞芊蹼hk缥螡;;wv铎苜钩sg缥螡;;wv~:lq剽芭a嬅niq剽芭a唢O钕/畀頾頦鞒顯邅};衱狅@邅}魙:lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[8lq剽芭a嬅-[秞臌鱛菘u纩蔟圎濢禁凔{擕雏孄淃畸圎諁镓愣{躹徾顀=n磺m鞲份愣{躹徾顀=n磺m鞲份愣{