From c7c80fde116452b05e8846a8c7a3e7147961b2f2 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 01:41:17 +0100 Subject: [PATCH 01/22] kotlin rewrite, oneconfig instead of forge config, refactor --- $buildDir/classes/java/main/drm_logo_x128.png | Bin 0 -> 24661 bytes .gitignore | 1 + build.gradle | 165 +++-- gradle.properties | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 52271 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- settings.gradle | 21 + .../quantizr/dungeonrooms/DRMConfig.java | 157 +++++ .../quantizr/dungeonrooms/DungeonRooms.java | 324 --------- .../dungeonrooms/commands/RoomCommand.java | 614 ------------------ .../dungeons/catacombs/DungeonManager.java | 175 ----- .../dungeons/catacombs/RoomDetection.java | 453 ------------- .../dungeons/catacombs/Waypoints.java | 329 ---------- .../quantizr/dungeonrooms/gui/LinkGUI.java | 112 ---- .../dungeonrooms/gui/WaypointsGUI.java | 263 -------- .../dungeonrooms/handlers/ConfigHandler.java | 244 ------- .../dungeonrooms/handlers/OpenLink.java | 138 ---- .../dungeonrooms/handlers/PacketHandler.java | 41 -- .../handlers/ScoreboardHandler.java | 77 --- .../dungeonrooms/handlers/TextRenderer.java | 48 -- .../quantizr/dungeonrooms/utils/MapUtils.java | 451 ------------- .../quantizr/dungeonrooms/utils/Utils.java | 203 ------ .../dungeonrooms/utils/WaypointUtils.java | 272 -------- .../quantizr/dungeonrooms/ChatTransmitter.kt | 71 ++ .../quantizr/dungeonrooms/DungeonRooms.kt | 288 ++++++++ .../quantizr/dungeonrooms/RoomDataLoader.kt | 113 ++++ .../dungeonrooms/commands/RoomCommand.kt | 595 +++++++++++++++++ .../dungeonrooms/dungeons/DungeonManager.kt | 172 +++++ .../dungeonrooms/dungeons/RoomDetection.kt | 608 +++++++++++++++++ .../dungeonrooms/dungeons/Waypoints.kt | 346 ++++++++++ .../quantizr/dungeonrooms/gui/LinkGUI.kt | 101 +++ .../quantizr/dungeonrooms/gui/WaypointsGUI.kt | 338 ++++++++++ .../dungeonrooms/handlers/ConfigHandler.kt | 82 +++ .../dungeonrooms/handlers/OpenLink.kt | 105 +++ .../dungeonrooms/handlers/PacketHandler.kt | 40 ++ .../handlers/ScoreboardHandler.kt | 66 ++ .../dungeonrooms/handlers/TextRenderer.kt | 73 +++ .../dungeonrooms/roomdata/RoomColor.kt | 5 + .../quantizr/dungeonrooms/utils/MapUtils.kt | 447 +++++++++++++ .../quantizr/dungeonrooms/utils/Utils.kt | 164 +++++ .../dungeonrooms/utils/WaypointUtils.kt | 264 ++++++++ src/main/resources/drm_logo_x128.png | Bin 0 -> 24661 bytes src/main/resources/mcmod.info | 2 +- 43 files changed, 4186 insertions(+), 3787 deletions(-) create mode 100644 $buildDir/classes/java/main/drm_logo_x128.png create mode 100644 gradle.properties create mode 100644 settings.gradle create mode 100644 src/main/java/io/github/quantizr/dungeonrooms/DRMConfig.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/DungeonRooms.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/commands/RoomCommand.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/DungeonManager.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/RoomDetection.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/Waypoints.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/gui/LinkGUI.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/handlers/OpenLink.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/handlers/PacketHandler.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/handlers/TextRenderer.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/utils/MapUtils.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/utils/Utils.java delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/utils/WaypointUtils.java create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/gui/LinkGUI.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/PacketHandler.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/TextRenderer.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt create mode 100644 src/main/resources/drm_logo_x128.png diff --git a/$buildDir/classes/java/main/drm_logo_x128.png b/$buildDir/classes/java/main/drm_logo_x128.png new file mode 100644 index 0000000000000000000000000000000000000000..63a9fc46f981098a99ce7bf5bb1747c35fbef2a6 GIT binary patch literal 24661 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 KxXB`yi=wLh?h>n^W`&;EuMhpRVzB0+F_p( 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 literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index 2c770e0..f2cf39e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ build # other eclipse run +/$buildDir/ diff --git a/build.gradle b/build.gradle index 38570f3..f59cc7e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,66 +1,151 @@ -// For those who want the bleeding edge -buildscript { - repositories { - jcenter() - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" +plugins { + id 'idea' + id 'java' + id 'com.github.johnrengelman.shadow' version '7.1.2' + id 'dev.architectury.architectury-pack200' version '0.1.3' + id 'gg.essential.loom' version '0.10.0.+' + id 'org.jetbrains.kotlin.jvm' version '1.6.21' + id 'net.kyori.blossom' version '1.3.0' +} + +tasks.wrapper { + gradleVersion = '7.4' + // You can either download the binary-only version of Gradle (BIN) or + // the full version (with sources and documentation) of Gradle (ALL) + distributionType = Wrapper.DistributionType.ALL +} +version = '3.3.2' +group = 'io.github.quantizr.DungeonRooms' +archivesBaseName = 'Dungeon_Rooms' +var mod_name = 'DRM' +var mod_id = 'dungeonrooms' + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(8)) +} + +blossom { + replaceToken("@VER@", version) + replaceToken("@NAME@", mod_name) + replaceToken("@ID@", mod_id) +} + +loom { + launchConfigs { + client { + arg('--tweakClass', 'cc.polyfrost.oneconfigwrapper.OneConfigWrapper') } } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT' + runs { + 'client' { + property('devauth.enabled','true') + client() + } + } + forge { + pack200Provider.set(new dev.architectury.pack200.java.Pack200Adapter()) } } -apply plugin: 'net.minecraftforge.gradle.forge' -version = "3.3.2" -group= "io.github.quantizr.DungeonRooms" // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "Dungeon_Rooms" -sourceCompatibility = targetCompatibility = 1.8 +sourceSets.main { + output.setResourcesDir(file('$buildDir/classes/java/main')) +} -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" + +repositories { + mavenCentral() + maven { url 'https://repo.polyfrost.cc/releases' } + maven { url 'https://jitpack.io' } + maven {url 'https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1'} } +configurations { + implementation.extendsFrom shadowImpl +} -sourceSets { - main { - output.resourcesDir = java.outputDir - } + +test { + useJUnitPlatform() } -minecraft { - version = "1.8.9-11.15.1.2318-1.8.9" - runDir = "run" +dependencies { + minecraft('com.mojang:minecraft:1.8.9') + mappings('de.oceanlabs.mcp:mcp_stable:22-1.8.9') + forge('net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9') + + + implementation 'org.jetbrains:annotations-java5:23.0.0' + + compileOnly 'org.projectlombok:lombok:1.18.24' + annotationProcessor 'org.projectlombok:lombok:1.18.24' + + - mappings = "stable_22" + testCompileOnly 'org.projectlombok:lombok:1.18.24' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' + modRuntimeOnly('me.djtheredstoner:DevAuth-forge-legacy:1.1.0') + + compileOnly 'cc.polyfrost:oneconfig-1.8.9-forge:0.1.0-alpha+' // Should not be included in jar + implementation 'cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-alpha+' // Should be included in jar } +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} -jar { - manifest.attributes( - 'Main-Class': 'DungeonRoomsInstallerFrame' - ) +tasks.withType(Jar) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE + archivesBaseName = 'dungeonsguide-lts' + manifest { + attributes['ModSide'] = 'CLIENT' + attributes['TweakOrder'] = '0' + attributes['TweakClass'] = 'cc.polyfrost.oneconfigwrapper.OneConfigWrapper' + attributes['ForceLoadAsMod'] = 'true' + attributes['FMLCorePluginContainsFMLMod'] = 'true' +// this['TweakClass'] = 'org.spongepowered.asm.launch.MixinTweaker' +// this['MixinConfigs'] = 'mixins.examplemod.json' + } } -processResources { - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' +tasks.shadowJar { + + archiveFileName = jar.archiveFileName + + relocate 'org.java_websocket', 'kr.syeyoung.org.java_websocket' + + relocate 'org.joml', 'kr.syeyoung.org.joml' + + relocate 'com.github.benmanes.caffeine', 'kr.syeyoung.com.github.benmanes.caffeine' - // replace version and mcversion - expand 'version':project.version, 'mcversion':project.minecraft.version + dependencies { + include(dependency('org.joml:joml:..*')) + include(dependency('com.github.ben-manes.caffeine:caffeine:..*')) + include(dependency('org.java-websocket:Java-WebSocket:1.5.3')) + include(dependency('org.slf4j:slf4j-api:1.7.25')) + include(dependency('org.json:json:20220924')) + include(dependency('com.twelvemonkeys..*:.*')) + include(dependency('cc.polyfrost:oneconfig-wrapper-launchwrapper:..*')) } +} + + +tasks.named('remapJar') { + archiveClassifier = 'all' + from(tasks.shadowJar) + input = tasks.shadowJar.archiveFile +} - // copy everything else, thats not the mcmod.info + +tasks.assemble.dependsOn tasks.remapJar + +processResources { + inputs.property 'version', project.version from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' + duplicatesStrategy = 'include' + include 'mcmod.info' + expand 'version': project.version } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..6c41dec --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx2G +loom.platform=forge \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 30d399d8d2bf522ff5de94bf434a7cc43a9a74b5..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch literal 59821 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 literal 52271 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 p { + String text = "§eDungeon Rooms: Practice Mode has been enabled.\n§e Waypoints will ONLY show up while you are pressing " + practiceModeKeyBind.getDisplay() + "\n§r (Hotkey is configurable in Minecraft Controls menu)"; + ChatTransmitter.addToQueue(text); + }); + } + @Switch(name = "Display Room Names In Gui", subcategory = "General") + public static boolean guiToggled = true; + + + @Switch(name = "Display Welcome/MOTD", subcategory = "General") + public static boolean motdToggled = true; + @KeyBind( + name = "Quick Access Gui Key", + subcategory = "General" + ) + public static OneKeyBind waypointGuiKey = new OneKeyBind(UKeyboard.KEY_P); + + + @Dropdown( + name = "Secret Image Provider", + options = {"gui", "dsg", "sbp"}, + subcategory = "Secret Images" + ) + public static int imageHotkeyOpen = 0; + @KeyBind( + name = "Keybinding For Opening Room Images from DSG/SBP", + size = 2, + subcategory = "Secret Images" + ) + public static OneKeyBind openSecretImages = new OneKeyBind(UKeyboard.KEY_O); + + @Switch( + name = "Waypoints Enabled", + category = "Waypoints", + subcategory = "Preferences", + size = 2 + ) + public static boolean waypointsEnabled = true; + @Switch( + name = "Double-Tap Sneak to Hide Nearby", + category = "Waypoints", + subcategory = "Preferences" + ) + public static boolean sneakToDisable = true; + + @Switch( + name = "Disable when all secrets found", + category = "Waypoints", + subcategory = "Preferences" + ) + public static boolean disableWhenAllFound = true; + + @Info( + text = "See Waypoints when key is pressed, useful for practice", + category = "Waypoints", + subcategory = "Practice Mode", + size = 2, + type = InfoType.INFO + ) + boolean dummy = false; + + @KeyBind( + name = "Keybinding For Practice Mode", + category = "Waypoints", + subcategory = "Practice Mode" + ) + public static OneKeyBind practiceModeKeyBind = new OneKeyBind(UKeyboard.KEY_I); + + @Switch( + name = "Practice Mode", + category = "Waypoints", + subcategory = "Practice Mode" + ) + public static boolean practiceModeOn = false; + + + @Checkbox( + name = "Show Entrance Waypoints", + category = "Waypoints", + subcategory = "Visibility" + ) + public static boolean showEntrance = true; + + @Checkbox( + name = "Show Superboom Waypoints", + category = "Waypoints", + subcategory = "Visibility" + ) + public static boolean showSuperboom = true; + + @Checkbox( + name = "Show Secret Waypoints", + category = "Waypoints", + subcategory = "Visibility" + ) + public static boolean showSecrets = true; + + + @Checkbox( + name = "Show Fairy Soul Waypoints", + category = "Waypoints", + subcategory = "Visibility" + ) + public static boolean showFairySouls = true; + + @Checkbox( + name = "Show Stonk Waypoints", + category = "Waypoints", + subcategory = "Visibility" + ) + public static boolean showStonk = true; + + + @Switch( + name = "Show Waypoint Text", + category = "Waypoints", + subcategory = "Appearance" + ) + public static boolean showWaypointText = true; + + @Switch( + name = "Show Bounding Box", + category = "Waypoints", + subcategory = "Appearance" + ) + public static boolean showBoundingBox = true; + + @Switch( + name = "Show Beacon", + category = "Waypoints", + subcategory = "Appearance" + ) + public static boolean showBeacon = true; + + + @Slider(name = "Offset x", min = 0, max = 100, subcategory = "Hud") + public static int textLocX = 50; + + @Slider(name = "Offset y", min = 0, max = 100, subcategory = "Hud") + public static int textLocY = 5; + + +} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/DungeonRooms.java b/src/main/java/io/github/quantizr/dungeonrooms/DungeonRooms.java deleted file mode 100644 index ed5532d..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/DungeonRooms.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import io.github.quantizr.dungeonrooms.commands.RoomCommand; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.Waypoints; -import io.github.quantizr.dungeonrooms.gui.WaypointsGUI; -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler; -import io.github.quantizr.dungeonrooms.handlers.OpenLink; -import io.github.quantizr.dungeonrooms.handlers.PacketHandler; -import io.github.quantizr.dungeonrooms.handlers.TextRenderer; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.DungeonManager; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.RoomDetection; -import io.github.quantizr.dungeonrooms.utils.Utils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.event.ClickEvent; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.ClientCommandHandler; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventHandler; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.network.FMLNetworkEvent; -import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.lwjgl.input.Keyboard; - -import java.io.*; -import java.net.URL; -import java.net.URLConnection; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.*; - -@Mod(modid = DungeonRooms.MODID, version = DungeonRooms.VERSION) -public class DungeonRooms -{ - public static final String MODID = "dungeonrooms"; - public static final String VERSION = "3.3.2"; - - Minecraft mc = Minecraft.getMinecraft(); - public static Logger logger; - - public static JsonObject roomsJson; - public static JsonObject waypointsJson; - public static HashMap> ROOM_DATA = new HashMap<>(); - - public static boolean usingSBPSecrets = false; - public static KeyBinding[] keyBindings = new KeyBinding[3]; - public static String imageHotkeyOpen = "gui"; - static int tickAmount = 1; - - public static List textToDisplay = null; - public static int textLocX = 50; - public static int textLocY = 5; - - public static List motd = null; - public static String configDir; - public static boolean firstLogin = false; - - @EventHandler - public void preInit(final FMLPreInitializationEvent event) { - ClientCommandHandler.instance.registerCommand(new RoomCommand()); - configDir = event.getModConfigurationDirectory().toString(); - - //initialize logger - logger = LogManager.getLogger(DungeonRooms.class); - Utils.setLogLevel(LogManager.getLogger(DungeonRooms.class), Level.INFO); - } - - @EventHandler - public void init(FMLInitializationEvent event) { - long time1 = System.currentTimeMillis(); - - //start room data loading executors first or else it will block later and slow down loading by ~200ms - List paths = Utils.getAllPaths("catacombs"); - final ExecutorService executor = Executors.newFixedThreadPool(4); //don't need 8 threads cause it's just 1x1 that takes longest - Future> future1x1 = executor.submit(() -> Utils.pathsToRoomData("1x1", paths)); - Future> future1x2 = executor.submit(() -> Utils.pathsToRoomData("1x2", paths)); - Future> future1x3 = executor.submit(() -> Utils.pathsToRoomData("1x3", paths)); - Future> future1x4 = executor.submit(() -> Utils.pathsToRoomData("1x4", paths)); - Future> future2x2 = executor.submit(() -> Utils.pathsToRoomData("2x2", paths)); - Future> futureLShape = executor.submit(() -> Utils.pathsToRoomData("L-shape", paths)); - Future> futurePuzzle = executor.submit(() -> Utils.pathsToRoomData("Puzzle", paths)); - Future> futureTrap = executor.submit(() -> Utils.pathsToRoomData("Trap", paths)); - - //register classes - MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.EVENT_BUS.register(new DungeonManager()); - MinecraftForge.EVENT_BUS.register(new RoomDetection()); - MinecraftForge.EVENT_BUS.register(new Waypoints()); - - //reload config - ConfigHandler.reloadConfig(); - - //register keybindings - keyBindings[0] = new KeyBinding("Open Room Images in DSG/SBP", Keyboard.KEY_O, "Dungeon Rooms Mod"); - keyBindings[1] = new KeyBinding("Open Waypoint Config Menu", Keyboard.KEY_P, "Dungeon Rooms Mod"); - keyBindings[2] = new KeyBinding("Show Waypoints in Practice Mode", Keyboard.KEY_I, "Dungeon Rooms Mod"); - for (KeyBinding keyBinding : keyBindings) { - ClientRegistry.registerKeyBinding(keyBinding); - } - - //get room and waypoint info - try (BufferedReader roomsReader = new BufferedReader(new InputStreamReader(mc.getResourceManager() - .getResource(new ResourceLocation("dungeonrooms", "dungeonrooms.json")).getInputStream())); - BufferedReader waypointsReader = new BufferedReader(new InputStreamReader(mc.getResourceManager() - .getResource(new ResourceLocation("dungeonrooms", "secretlocations.json")).getInputStream())) - ) { - Gson gson = new Gson(); - roomsJson = gson.fromJson(roomsReader, JsonObject.class); - logger.info("DungeonRooms: Loaded dungeonrooms.json"); - - waypointsJson = gson.fromJson(waypointsReader, JsonObject.class); - logger.info("DungeonRooms: Loaded secretlocations.json"); - } catch (IOException e) { - e.printStackTrace(); - } - - - //set RoomData to futures - this will block if the rest of init was fast - try { - long time2 = System.currentTimeMillis(); - ROOM_DATA.put("1x1", future1x1.get()); - long time3 = System.currentTimeMillis(); - ROOM_DATA.put("1x2", future1x2.get()); - ROOM_DATA.put("1x3", future1x3.get()); - ROOM_DATA.put("1x4", future1x4.get()); - ROOM_DATA.put("2x2", future2x2.get()); - ROOM_DATA.put("L-shape", futureLShape.get()); - ROOM_DATA.put("Puzzle", futurePuzzle.get()); - ROOM_DATA.put("Trap", futureTrap.get()); - long time4 = System.currentTimeMillis(); - logger.debug("DungeonRooms: Time(ms) for init before get futures: " + (time2 - time1)); - logger.debug("DungeonRooms: Blocked Time(ms) for 1x1: " + (time3 - time2)); - logger.debug("DungeonRooms: Blocked Time(ms) remaining for other rooms: " + (time4 - time3)); - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - executor.shutdown(); - } - - @EventHandler - public void postInit(final FMLPostInitializationEvent event) { - usingSBPSecrets = Loader.isModLoaded("sbp"); - DungeonRooms.logger.info("DungeonRooms: SBP Dungeon Secrets detection: " + usingSBPSecrets); - } - - /** - * Modified from Danker's Skyblock Mod under the GNU General Public License v3.0 - * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE - * @author bowser0000 - */ - @SubscribeEvent - public void onServerConnect(FMLNetworkEvent.ClientConnectedToServerEvent event) { - if (mc.getCurrentServerData() == null) return; - if (mc.getCurrentServerData().serverIP.toLowerCase().contains("hypixel.")) { - logger.info("DungeonRooms: Connecting to Hypixel..."); - - //Packets are used in this mod solely to detect when the player picks up an item. No packets are modified or created. - event.manager.channel().pipeline().addBefore("packet_handler", "drm_packet_handler", new PacketHandler()); - logger.info("DungeonRooms: Packet Handler added"); - - new Thread(() -> { - try { - while (mc.thePlayer == null) { - //Yes, I'm too lazy to code something proper so I'm busy-waiting, shut up. no :) -carmel - //It usually waits for less than half a second - Thread.sleep(100); - } - Thread.sleep(3000); - if (mc.getCurrentServerData().serverIP.toLowerCase().contains("hypixel.")) { - logger.info("DungeonRooms: Checking for conflicting keybindings..."); - Utils.checkForConflictingHotkeys(); - - logger.info("DungeonRooms: Checking for updates..."); - URL url = new URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest"); - URLConnection request = url.openConnection(); - request.connect(); - JsonParser json = new JsonParser(); - JsonObject latestRelease = json.parse(new InputStreamReader((InputStream) request.getContent())).getAsJsonObject(); - - String latestTag = latestRelease.get("tag_name").getAsString(); - DefaultArtifactVersion currentVersion = new DefaultArtifactVersion(VERSION); - DefaultArtifactVersion latestVersion = new DefaultArtifactVersion(latestTag.substring(1)); - - if (currentVersion.compareTo(latestVersion) < 0) { - String releaseURL = "https://github.com/Quantizr/DungeonRoomsMod/releases/latest"; - ChatComponentText update = new ChatComponentText(EnumChatFormatting.GREEN + "" + EnumChatFormatting.BOLD + " [UPDATE] "); - update.setChatStyle(update.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, releaseURL))); - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Dungeon Rooms Mod is outdated. Please update to " + latestTag + ".\n").appendSibling(update)); - } else { - logger.info("DungeonRooms: No update found"); - } - - logger.info("DungeonRooms: Getting MOTD..."); - url = new URL("https://gist.githubusercontent.com/Quantizr/01aca53e61cef5dfd08989fec600b204/raw/"); - BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8)); - String line; - motd = new ArrayList<>(); - while ((line = in.readLine()) != null) { - motd.add(line); - } - in.close(); - logger.info("DungeonRooms: MOTD has been checked"); - } - } catch (IOException | InterruptedException e) { - mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Dungeon Rooms: An error has occured. See logs for more details.")); - e.printStackTrace(); - } - - }).start(); - } - } - - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; - EntityPlayerSP player = mc.thePlayer; - - tickAmount++; - if (tickAmount % 20 == 0) { - if (player != null) { - Utils.checkForSkyblock(); - Utils.checkForCatacombs(); - tickAmount = 0; - } - } - } - - @SubscribeEvent - public void onKey(InputEvent.KeyInputEvent event) { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - if (keyBindings[0].isPressed()) { - if (!Utils.inCatacombs) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this hotkey inside of a dungeon room")); - return; - } - switch (imageHotkeyOpen) { - case "gui": - OpenLink.checkForLink("gui"); - break; - case "dsg": - OpenLink.checkForLink("dsg"); - break; - case "sbp": - OpenLink.checkForLink("sbp"); - break; - default: - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: hotkeyOpen config value improperly set, do \"/room set \" to change the value")); - break; - } - } - if (keyBindings[1].isPressed()) { - mc.addScheduledTask(() -> mc.displayGuiScreen(new WaypointsGUI())); - } - if (keyBindings[2].isPressed()) { - if (Waypoints.enabled && !Waypoints.practiceModeOn) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Run \"/room toggle practice\" to enable Practice Mode.")); - } else if (!Waypoints.enabled && Waypoints.practiceModeOn) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Waypoints must be enabled for Practice Mode to work.")); - } - } - } - - @SubscribeEvent - public void renderPlayerInfo(final RenderGameOverlayEvent.Post event) { - if (event.type != RenderGameOverlayEvent.ElementType.ALL) return; - if (Utils.inSkyblock) { - if (textToDisplay != null && !textToDisplay.isEmpty()) { - ScaledResolution scaledResolution = new ScaledResolution(mc); - int y = 0; - for (String line:textToDisplay) { - int roomStringWidth = mc.fontRendererObj.getStringWidth(line); - TextRenderer.drawText(mc, line, ((scaledResolution.getScaledWidth() * textLocX) / 100) - (roomStringWidth / 2), - ((scaledResolution.getScaledHeight() * textLocY) / 100) + y, 1D, true); - y += mc.fontRendererObj.FONT_HEIGHT; - } - } - } - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/commands/RoomCommand.java b/src/main/java/io/github/quantizr/dungeonrooms/commands/RoomCommand.java deleted file mode 100644 index 21c1e02..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/commands/RoomCommand.java +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.commands; - -import com.google.gson.JsonObject; -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.DungeonManager; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.RoomDetection; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.Waypoints; -import io.github.quantizr.dungeonrooms.gui.WaypointsGUI; -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler; -import io.github.quantizr.dungeonrooms.handlers.OpenLink; -import io.github.quantizr.dungeonrooms.utils.MapUtils; -import io.github.quantizr.dungeonrooms.utils.Utils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -import java.awt.*; -import java.awt.datatransfer.StringSelection; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class RoomCommand extends CommandBase { - - @Override - public String getCommandName() { - return "room"; - } - - @Override - public String getCommandUsage(ICommandSender arg0) { - return "/" + getCommandName(); - } - - @Override - public List getCommandAliases() { - return Collections.singletonList("drm"); - } - - @Override - public int getRequiredPermissionLevel() { - return 0; - } - - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { - if (args.length == 1) { - return getListOfStringsMatchingLastWord(args, "help", "waypoints", "move", "toggle", "set", "discord"); - } - if (args.length > 1) { - if (args[0].equalsIgnoreCase("toggle")) { - return getListOfStringsMatchingLastWord(args, "help", "gui", "waypointtext", "waypointboundingbox", "waypointbeacon"); - } else if (args[0].equalsIgnoreCase("set")) { - return getListOfStringsMatchingLastWord(args, "gui", "dsg", "sbp"); - } - } - return null; - } - - @Override - public void processCommand(ICommandSender arg0, String[] arg1) { - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayer player = (EntityPlayer) arg0; - - if (arg1.length < 1) { - if (!Utils.inCatacombs) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command in dungeons or run \"/room help\" for additional options")); - } else { - if (DungeonManager.gameStage == 2) { - for (String line : DungeonRooms.textToDisplay) { - player.addChatMessage(new ChatComponentText(line)); - } - player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN - + "Dungeon Rooms: You can also run \"/room help\" for additional options")); - } else { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command while clearing rooms or run \"/room help\" for additional options")); - } - } - } else { - switch (arg1[0].toLowerCase()) { - case "help": - player.addChatMessage(new ChatComponentText("\n" - + EnumChatFormatting.GOLD + "Dungeon Rooms Mod Version " + DungeonRooms.VERSION + "\n" - + EnumChatFormatting.DARK_PURPLE + "Hotkeys: (Configurable in Controls Menu)\n" - + EnumChatFormatting.AQUA + " " + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[1].getKeyCode()) + EnumChatFormatting.WHITE + " - Opens Secret Waypoints configuration GUI\n" - + EnumChatFormatting.AQUA + " " + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[0].getKeyCode()) + EnumChatFormatting.WHITE + " - (old) Opens images of secret locations\n" - + EnumChatFormatting.AQUA + " " + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[2].getKeyCode()) + EnumChatFormatting.WHITE + " - View waypoints in Practice Mode (\"/room toggle practice\")\n" - + EnumChatFormatting.DARK_PURPLE + "Commands:\n" - + EnumChatFormatting.AQUA + " /room" + EnumChatFormatting.WHITE + " - Tells you in chat what room you are standing in.\n" - + EnumChatFormatting.AQUA + " /room help" + EnumChatFormatting.WHITE + " - Displays this message.\n" - + EnumChatFormatting.AQUA + " /room waypoints" + EnumChatFormatting.WHITE + " - Opens Secret Waypoints config GUI, alternatively can be opened with hotkey\n" - + EnumChatFormatting.AQUA + " /room move " + EnumChatFormatting.WHITE + " - Moves the GUI room name text to a coordinate. and are numbers between 0 and 100. Default is 50 for and 5 for .\n" - + EnumChatFormatting.AQUA + " /room toggle [argument]" + EnumChatFormatting.WHITE + " - Run \"/room toggle help\" for full list of toggles.\n" - + EnumChatFormatting.AQUA + " /room set " + EnumChatFormatting.WHITE + " - Configure whether the hotkey opens the selector GUI or directly goes to DSG/SBP.\n" - + EnumChatFormatting.AQUA + " /room discord" + EnumChatFormatting.WHITE + " - Opens the Discord invite for this mod in your browser.\n" /* + - + EnumChatFormatting.AQUA + " /room open" + EnumChatFormatting.WHITE + " - Opens the gui for opening either DSG or SBP.\n" - + EnumChatFormatting.AQUA + " /room dsg" + EnumChatFormatting.WHITE + " - Directly opens DSG in the Discord client.\n" - + EnumChatFormatting.AQUA + " /room sbp" + EnumChatFormatting.WHITE + " - Directly opens the SBP secrets (if you have the mod installed).\n" */ - )); - break; - - case "gui": - case "open": - if (!Utils.inCatacombs) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command in dungeons")); - return; - } - OpenLink.checkForLink("gui"); - break; - - case "dsg": - if (!Utils.inCatacombs) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command in dungeons")); - return; - } - OpenLink.checkForLink("dsg"); - break; - - case "sbp": - if (!Utils.inCatacombs) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command in dungeons")); - return; - } - OpenLink.checkForLink("sbp"); - break; - - case "set": - switch (arg1[1].toLowerCase()) { - case "gui": - DungeonRooms.imageHotkeyOpen = "gui"; - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Hotkey has been set to open: GUI")); - ConfigHandler.writeStringConfig("gui", "hotkeyOpen", "gui"); - break; - case "dsg": - DungeonRooms.imageHotkeyOpen = "dsg"; - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Hotkey has been set to open: DSG")); - ConfigHandler.writeStringConfig("gui", "hotkeyOpen", "dsg"); - break; - case "sbp": - DungeonRooms.imageHotkeyOpen = "sbp"; - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Hotkey has been set to open: SBP")); - ConfigHandler.writeStringConfig("gui", "hotkeyOpen", "sbp"); - break; - default: - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Valid options are ")); - break; - } - break; - - case "wp": - case "waypoint": - case "waypoints": - new Thread(() -> { mc.addScheduledTask(() -> mc.displayGuiScreen(new WaypointsGUI())); }).start(); - break; - - case "move": - DungeonRooms.textLocX = Integer.parseInt(arg1[1]); - DungeonRooms.textLocY = Integer.parseInt(arg1[2]); - ConfigHandler.writeIntConfig("gui", "scaleX", DungeonRooms.textLocX); - ConfigHandler.writeIntConfig("gui", "scaleY", DungeonRooms.textLocY); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Room GUI has been moved to " + arg1[1] + ", " + arg1[2])); - break; - - case "toggle": - String toggleHelp = "\n" - + EnumChatFormatting.GOLD + " Dungeon Rooms Mod Toggle Commands:" + "\n" - + EnumChatFormatting.AQUA + " /room toggle gui" + EnumChatFormatting.WHITE + " - Toggles displaying current room in gui.\n" - + EnumChatFormatting.AQUA + " /room toggle motd" + EnumChatFormatting.WHITE + " - Toggles displaying the Welcome/MOTD message at the start of a dungeon run.\n" - + EnumChatFormatting.AQUA + " /room toggle practice" + EnumChatFormatting.WHITE + " - Toggles Practice Mode, where waypoints are only displayed when holding down " + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[2].getKeyCode()) +"\".\n" - + EnumChatFormatting.AQUA + " /room toggle waypoints" + EnumChatFormatting.WHITE + " - Toggles Waypoints, does the same thing as pressing \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[1].getKeyCode()) +"\" then clicking \"Waypoints\".\n" - + EnumChatFormatting.AQUA + " /room toggle waypointtext" + EnumChatFormatting.WHITE + " - Toggles displaying waypoint names above waypoints.\n" - + EnumChatFormatting.AQUA + " /room toggle waypointboundingbox" + EnumChatFormatting.WHITE + " - Toggles displaying the bounding box on waypoints.\n" - + EnumChatFormatting.AQUA + " /room toggle waypointbeacon" + EnumChatFormatting.WHITE + " - Toggles displaying the beacon above waypoints.\n"; - - if (arg1.length == 1) { - player.addChatMessage(new ChatComponentText(toggleHelp)); - break; - } else { - switch (arg1[1].toLowerCase()) { - case "gui": - DungeonManager.guiToggled = !DungeonManager.guiToggled; - ConfigHandler.writeBooleanConfig("toggles", "guiToggled", DungeonManager.guiToggled); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Display room names in GUI has been set to: " + DungeonManager.guiToggled)); - break; - - case "welcome": - case "motd": - DungeonManager.motdToggled = !DungeonManager.motdToggled; - ConfigHandler.writeBooleanConfig("toggles", "motdToggled", DungeonManager.motdToggled); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Display Welcome/MOTD has been set to: " + DungeonManager.motdToggled)); - break; - - case "practice": - case "practicemode": - Waypoints.practiceModeOn = !Waypoints.practiceModeOn; - ConfigHandler.writeBooleanConfig("waypoint", "practiceModeOn", Waypoints.practiceModeOn); - if (Waypoints.practiceModeOn) { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Practice Mode has been enabled.\n" - + "§e Waypoints will only show up while you are pressing \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[2].getKeyCode()) + "\".\n" - + "§r (Hotkey is configurable in Minecraft Controls menu)" - )); - } else { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Practice Mode has been disabled.")); - } - break; - - case "waypoint": - case "waypoints": - Waypoints.enabled = !Waypoints.enabled; - ConfigHandler.writeBooleanConfig("waypoint", "waypointsToggled", Waypoints.enabled); - if (Waypoints.enabled) { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Waypoints will now automatically show up when you enter a new dungeon room.")); - } else { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Waypoints have been disabled.")); - } - break; - - case "text": - case "waypointtext": - Waypoints.showWaypointText = !Waypoints.showWaypointText; - ConfigHandler.writeBooleanConfig("waypoint", "showWaypointText", Waypoints.showWaypointText); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Show Waypoint Text has been set to: " + Waypoints.showWaypointText)); - break; - - case "boundingbox": - case "waypointboundingbox": - Waypoints.showBoundingBox = !Waypoints.showBoundingBox; - ConfigHandler.writeBooleanConfig("waypoint", "showBoundingBox", Waypoints.showBoundingBox); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Show Waypoint Bounding Box has been set to: " + Waypoints.showBoundingBox)); - break; - - case "beacon": - case "waypointbeacon": - Waypoints.showBeacon = !Waypoints.showBeacon; - ConfigHandler.writeBooleanConfig("waypoint", "showBeacon", Waypoints.showBeacon); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Show Waypoint Beacon has been set to: " + Waypoints.showBeacon)); - break; - - /* - case "dev": - case "coord": - AutoRoom.coordToggled = !AutoRoom.coordToggled; - ConfigHandler.writeBooleanConfig("toggles", "coordToggled", AutoRoom.coordToggled); - player.addChatMessage(new ChatComponentText("Display dev coords has been set to: " + AutoRoom.coordToggled)); - break; - */ - - case "override": - Utils.dungeonOverride = !Utils.dungeonOverride; - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Force inCatacombs has been set to: " + Utils.dungeonOverride)); - break; - - case "help": - default: - player.addChatMessage(new ChatComponentText(toggleHelp)); - break; - } - } - break; - - case "reload": - ConfigHandler.reloadConfig(); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Reloaded config file")); - break; - - case "discord": - try { - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Opening Dungeon Rooms Discord invite in browser...")); - Desktop.getDesktop().browse(new URI("https://discord.gg/7B5RbsArYK")); - } catch (IOException | URISyntaxException e) { - e.printStackTrace(); - } - break; - - case "relative": - if (!RoomDetection.roomDirection.equals("undefined") && RoomDetection.roomCorner != null) { - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos relativePos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos(), RoomDetection.roomDirection, RoomDetection.roomCorner); - player.addChatMessage(new ChatComponentText("Dungeon Rooms: You are looking at relative blockPos: " + relativePos)); - } - } else { - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Unable to get relative blockPos at this time.")); - } - break; - - case "json": - if (!Utils.inCatacombs && DungeonManager.gameStage != 2 && DungeonManager.gameStage != 3) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Use this command in dungeons")); - return; - } - if (DungeonRooms.roomsJson.get(RoomDetection.roomName) != null) { - JsonObject json = DungeonRooms.roomsJson.get(RoomDetection.roomName).getAsJsonObject(); - json.addProperty("name", RoomDetection.roomName); //add room name property - player.addChatMessage(new ChatComponentText(json.toString())); - } - break; - - //return available information about a room - case "roominfo": - if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Not in room clearing phase of dungeons")); - } - if (DungeonManager.entranceMapCorners != null) { - player.addChatMessage(new ChatComponentText("dev: entranceMapCorners = " + new ArrayList<>(Arrays.asList(DungeonManager.entranceMapCorners)))); - } else { - player.addChatMessage(new ChatComponentText("dev: entranceMapCorners = null")); - } - if (DungeonManager.entrancePhysicalNWCorner != null) { - player.addChatMessage(new ChatComponentText("dev: entrancePhysicalNWCorner = " + DungeonManager.entrancePhysicalNWCorner)); - } else { - player.addChatMessage(new ChatComponentText("dev: entrancePhysicalNWCorner = null")); - } - player.addChatMessage(new ChatComponentText("dev: currentMapSegments = " + RoomDetection.currentMapSegments)); - player.addChatMessage(new ChatComponentText("dev: currentPhysicalSegments = " + RoomDetection.currentPhysicalSegments)); - player.addChatMessage(new ChatComponentText("dev: roomName = " + RoomDetection.roomName)); - player.addChatMessage(new ChatComponentText("dev: roomSize = " + RoomDetection.roomSize)); - player.addChatMessage(new ChatComponentText("dev: roomColor = " + RoomDetection.roomColor)); - player.addChatMessage(new ChatComponentText("dev: roomCategory = " + RoomDetection.roomCategory)); - - player.addChatMessage(new ChatComponentText("dev: roomDirection = " + RoomDetection.roomDirection)); - if (RoomDetection.roomCorner != null) { - player.addChatMessage(new ChatComponentText("dev: roomCorner = " + RoomDetection.roomCorner)); - } else { - player.addChatMessage(new ChatComponentText("dev: roomCorner = null")); - } - break; - - //returns the list of BlockPos which were checked against ".skeleton" room data files before room was determined - case "blocksused": - if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Not in room clearing phase of dungeons")); - } - player.addChatMessage(new ChatComponentText(RoomDetection.blocksUsed.toString())); - break; - - //The following is for adding new rooms - case "add": - World world = mc.theWorld; - if (!Utils.inCatacombs || DungeonManager.gameStage != 2 || RoomDetection.roomDirection.equals("undefined") || RoomDetection.roomCorner == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Current dungeon room is undefined")); - return; - } - switch (arg1[1].toLowerCase()) { - case "chest": - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos viewingPos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos(), RoomDetection.roomDirection, RoomDetection.roomCorner); - if (world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock() == Blocks.chest) { - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Chest\",\n" + - " \"category\":\"chest\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Chest\",\n" + - " \"category\":\"chest\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}"), - null - ); - } else { - player.addChatMessage(new ChatComponentText("You are not looking at a Chest Secret")); - } - } else { - player.addChatMessage(new ChatComponentText("You are not looking at anything")); - } - break; - case "wither": - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos viewingPos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos(), RoomDetection.roomDirection, RoomDetection.roomCorner); - if (world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock() == Blocks.skull) { - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Wither Essence\",\n" + - " \"category\":\"wither\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Wither Essence\",\n" + - " \"category\":\"wither\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}"), - null - ); - } else { - player.addChatMessage(new ChatComponentText("You are not looking at a Wither Essence Secret")); - } - } else { - player.addChatMessage(new ChatComponentText("You are not looking at anything")); - } - break; - case "superboom": - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos viewingPos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos(), RoomDetection.roomDirection, RoomDetection.roomCorner); - if (world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock() == Blocks.stonebrick) { - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Superboom\",\n" + - " \"category\":\"superboom\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Superboom\",\n" + - " \"category\":\"superboom\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}"), - null - ); - } else { - player.addChatMessage(new ChatComponentText("You are not looking at a Superboom entrance")); - } - } else { - player.addChatMessage(new ChatComponentText("You are not looking at anything")); - } - break; - case "lever": - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos viewingPos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos(), RoomDetection.roomDirection, RoomDetection.roomCorner); - if (world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock() == Blocks.lever) { - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Lever\",\n" + - " \"category\":\"lever\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Lever\",\n" + - " \"category\":\"lever\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}"), - null - ); - } else { - player.addChatMessage(new ChatComponentText("You are not looking at a Lever")); - } - } else { - player.addChatMessage(new ChatComponentText("You are not looking at anything")); - } - break; - case "fairysoul": - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.getBlockPos() != null) { - BlockPos viewingPos = MapUtils.actualToRelative(mc.objectMouseOver.getBlockPos().up(1), RoomDetection.roomDirection, RoomDetection.roomCorner); - if (world.getBlockState(mc.objectMouseOver.getBlockPos().up(1)).getBlock() == Blocks.air) { - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"Fairy Soul\",\n" + - " \"category\":\"fairysoul\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"Fairy Soul\",\n" + - " \"category\":\"fairysoul\",\n" + - " \"x\":" + viewingPos.getX() + ",\n" + - " \"y\":" + viewingPos.getY() + ",\n" + - " \"z\":" + viewingPos.getZ() + "\n" + - "}"), - null - ); - } else { - player.addChatMessage(new ChatComponentText("You are not looking at the block below a Fairy Soul")); - } - } else { - player.addChatMessage(new ChatComponentText("You are not looking at anything")); - } - break; - case "item": - BlockPos playerPos = MapUtils.actualToRelative(new BlockPos(player.posX,player.posY,player.posZ), RoomDetection.roomDirection, RoomDetection.roomCorner); - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Item\",\n" + - " \"category\":\"item\",\n" + - " \"x\":" + playerPos.getX() + ",\n" + - " \"y\":" + playerPos.getY() + ",\n" + - " \"z\":" + playerPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Item\",\n" + - " \"category\":\"item\",\n" + - " \"x\":" + playerPos.getX() + ",\n" + - " \"y\":" + playerPos.getY() + ",\n" + - " \"z\":" + playerPos.getZ() + "\n" + - "}"), - null - ); - break; - case "entrance": - BlockPos entrancePos = MapUtils.actualToRelative(new BlockPos(player.posX,player.posY + 1, player.posZ), RoomDetection.roomDirection, RoomDetection.roomCorner); - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Entrance\",\n" + - " \"category\":\"entrance\",\n" + - " \"x\":" + entrancePos.getX() + ",\n" + - " \"y\":" + entrancePos.getY() + ",\n" + - " \"z\":" + entrancePos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Entrance\",\n" + - " \"category\":\"entrance\",\n" + - " \"x\":" + entrancePos.getX() + ",\n" + - " \"y\":" + entrancePos.getY() + ",\n" + - " \"z\":" + entrancePos.getZ() + "\n" + - "}"), - null - ); - break; - case "bat": - BlockPos batPos = MapUtils.actualToRelative(new BlockPos(player.posX,player.posY + 1, player.posZ), RoomDetection.roomDirection, RoomDetection.roomCorner); - player.addChatMessage(new ChatComponentText("{\n" + - " \"secretName\":\"# - Bat\",\n" + - " \"category\":\"bat\",\n" + - " \"x\":" + batPos.getX() + ",\n" + - " \"y\":" + batPos.getY() + ",\n" + - " \"z\":" + batPos.getZ() + "\n" + - "}")); - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .setContents( - new StringSelection("{\n" + - " \"secretName\":\"# - Bat\",\n" + - " \"category\":\"bat\",\n" + - " \"x\":" + batPos.getX() + ",\n" + - " \"y\":" + batPos.getY() + ",\n" + - " \"z\":" + batPos.getZ() + "\n" + - "}"), - null - ); - break; - default: - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Valid options are ")); - break; - } - break; - - default: - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Run \"/room\" by itself to see the room name or run \"/room help\" for additional options")); - } - } - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/DungeonManager.java b/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/DungeonManager.java deleted file mode 100644 index 6771ebd..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/DungeonManager.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.dungeons.catacombs; - -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.utils.MapUtils; -import io.github.quantizr.dungeonrooms.utils.Utils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.Vec3; -import net.minecraftforge.client.event.ClientChatReceivedEvent; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; - -public class DungeonManager { - Minecraft mc = Minecraft.getMinecraft(); - public static int gameStage = 0; //0: Not in Dungeon, 1: Entrance/Not Started, 2: Room Clear, 3: Boss, 4: Done - - public static boolean guiToggled = true; - public static boolean motdToggled = true; - - public static Integer[][] map; - public static Point[] entranceMapCorners; - public static Point entrancePhysicalNWCorner; - - public static int tickAmount = 0; - - long bloodTime = Long.MAX_VALUE; - - boolean oddRun = true; //if current run number is even or odd - - @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true) - public void onChat(ClientChatReceivedEvent event) { - if (!Utils.inCatacombs) return; - String message = event.message.getFormattedText(); - - //gameStage set from 0 to 1 in the onTick function later - if (message.startsWith("§e[NPC] §bMort§f: §rHere, I found this map when I first entered the dungeon.§r")) { - gameStage = 2; - DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - } else if (message.startsWith("§r§c[BOSS] The Watcher§r§f: You have proven yourself. You may pass.§r")) { - bloodTime = System.currentTimeMillis() + 5000; //5 seconds because additional messages might come through - DungeonRooms.logger.info("DungeonRooms: bloodDone has been set to True"); - } else if (System.currentTimeMillis() > bloodTime && ((message.startsWith("§r§c[BOSS] ") && !message.contains(" The Watcher§r§f:")) || message.startsWith("§r§4[BOSS] "))) { - if (gameStage != 3) { - gameStage = 3; - DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - - //this part mostly so /room json doesn't error out - RoomDetection.resetCurrentRoom(); - RoomDetection.roomName = "Boss Room"; - RoomDetection.roomCategory = "General"; - //RoomDetection.newRoom() //uncomment to display Boss Room in gui - } - } else if (message.contains("§r§c☠ §r§eDefeated §r")) { - gameStage = 4; - DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - RoomDetection.resetCurrentRoom(); - } - } - - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; - EntityPlayerSP player = mc.thePlayer; - - if (!Utils.inCatacombs) return; //From this point forward, everything assumes that Utils.inCatacombs == true - tickAmount++; - - if ((gameStage == 0 || gameStage == 1) && tickAmount % 20 == 0) { - - if (DungeonRooms.firstLogin) { - DungeonRooms.firstLogin = false; - mc.thePlayer.addChatMessage(new ChatComponentText("§d§l--- Dungeon Rooms Mod ---\n" - + "§e This appears to be your first time using DRM v" + DungeonRooms.VERSION + ".\n" - + "§e Press \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[1].getKeyCode()) - +"\" to configure Secret Waypoint settings, If you do not wish to use Waypoints, you can instead press \"" - + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[0].getKeyCode()) - +"\" while inside a dungeon room to view images of the secrets for that room.\n" - + "§r (If you need help, join the Discord! Run \"/room discord\" to open the Discord invite.)\n" - + "§d§l------------------------" - )); - } - - if (gameStage == 0) { - Utils.checkForConflictingHotkeys(); - gameStage = 1; - DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - } - - Integer[][] map = MapUtils.updatedMap(); - if (map != null) { - DungeonRooms.logger.warn("DungeonRooms: Run started but gameStage is not on 2"); - gameStage = 2; - DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - return; - } - - if (gameStage == 1 && entrancePhysicalNWCorner == null) { - if (!player.getPositionVector().equals(new Vec3(0.0D,0.0D,0.0D))) { - //this point is calculated using math, not scanning, which may cause issues when reconnecting to a run - entrancePhysicalNWCorner = MapUtils.getClosestNWPhysicalCorner(player.getPositionVector()); - DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to " + entrancePhysicalNWCorner); - } - } - - if (DungeonRooms.textToDisplay == null && motdToggled) { - DungeonRooms.logger.info("DungeonRooms: Updating MOTD on screen"); - if (oddRun || !guiToggled) { //load MOTD on odd runs - if (DungeonRooms.motd != null) { - if (!DungeonRooms.motd.isEmpty()) { - DungeonRooms.textToDisplay = DungeonRooms.motd; - } - } - } - if (DungeonRooms.textToDisplay == null && guiToggled) { //if MOTD is empty or not odd run load default text - DungeonRooms.textToDisplay = new ArrayList<>(Arrays.asList( - "Dungeon Rooms: " + EnumChatFormatting.GREEN + "Press the hotkey \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[1].getKeyCode()) +"\" to configure", - EnumChatFormatting.GREEN + " waypoint settings. Alternatively, press \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[0].getKeyCode()) + "\" while in a room", - EnumChatFormatting.GREEN + "to view images of secret locations for that room.", - "(You can change the keybinds in Minecraft controls menu)" - )); - } - oddRun = !oddRun; - } - - tickAmount = 0; - } - } - - @SubscribeEvent - public void onWorldUnload(WorldEvent.Unload event) { - Utils.inCatacombs = false; - tickAmount = 0; - gameStage = 0; - - map = null; - entranceMapCorners = null; - entrancePhysicalNWCorner = null; - RoomDetection.entranceMapNullCount = 0; - - bloodTime = Long.MAX_VALUE; - - if (RoomDetection.stage2Executor != null) RoomDetection.stage2Executor.shutdown(); - - Waypoints.allSecretsMap.clear(); - - RoomDetection.resetCurrentRoom(); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/RoomDetection.java b/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/RoomDetection.java deleted file mode 100644 index 20ddb82..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/RoomDetection.java +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.dungeons.catacombs; - -import com.google.gson.JsonObject; -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.utils.MapUtils; -import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils; -import io.github.quantizr.dungeonrooms.utils.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.util.*; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import java.awt.*; -import java.util.*; -import java.util.List; -import java.util.concurrent.*; - -import static io.github.quantizr.dungeonrooms.dungeons.catacombs.DungeonManager.*; - -public class RoomDetection { - Minecraft mc = Minecraft.getMinecraft(); - static int stage2Ticks = 0; - - static ExecutorService stage2Executor; - - public static List currentMapSegments; - public static List currentPhysicalSegments; - - public static String roomSize = "undefined"; - public static String roomColor = "undefined"; - public static String roomCategory = "undefined"; - public static String roomName = "undefined"; - public static String roomDirection = "undefined"; - public static Point roomCorner; - - - public static HashSet currentScannedBlocks = new HashSet<>(); - public static HashMap blocksToCheck = new HashMap<>(); - public static int totalBlocksAvailableToCheck = 0; - public static List blocksUsed = new ArrayList<>(); - static Future>> futureUpdatePossibleRooms; - public static HashMap> possibleRooms; - - static long incompleteScan = 0; - static long redoScan = 0; - - static int entranceMapNullCount = 0; - - - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; - EntityPlayerSP player = mc.thePlayer; - - if (!Utils.inCatacombs) return; - - //From this point forward, everything assumes that Utils.inCatacombs == true - if (gameStage == 2) { //Room clearing phase - stage2Ticks++; - if (stage2Ticks == 10) { - stage2Ticks = 0; - //start ExecutorService with one thread - if (stage2Executor == null || stage2Executor.isTerminated()) { - stage2Executor = Executors.newSingleThreadExecutor(); - DungeonRooms.logger.debug("DungeonRooms: New Single Thread Executor Started"); - } - //set entranceMapCorners - if (entranceMapCorners == null) { - map = MapUtils.updatedMap(); - entranceMapCorners = MapUtils.entranceMapCorners(map); - DungeonRooms.logger.info("DungeonRooms: Getting entrance map corners from hotbar map..."); - } else if (entranceMapCorners[0] == null || entranceMapCorners[1] == null) { //prevent crashes if hotbar map bugged - DungeonRooms.logger.warn("DungeonRooms: Entrance room not found, hotbar map possibly bugged"); - entranceMapNullCount++; - entranceMapCorners = null; //retry getting corners again next loop - if (entranceMapNullCount == 8) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: Error with hotbar map, perhaps your texture pack is interfering with room detection?")); - DungeonRooms.textToDisplay = new ArrayList<>(Collections.singletonList( - "Dungeon Rooms: " + EnumChatFormatting.RED + "Hotbar map may be bugged" - )); - //gameStage = 4; - //DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); - } - } else if (entrancePhysicalNWCorner == null) { - DungeonRooms.logger.warn("DungeonRooms: Entrance Room coordinates not found"); - //for when people dc and reconnect, or if initial check doesn't work - Point playerMarkerPos = MapUtils.playerMarkerPos(); - if (playerMarkerPos != null) { - Point closestNWMapCorner = MapUtils.getClosestNWMapCorner(playerMarkerPos, entranceMapCorners[0], entranceMapCorners[1]); - if (MapUtils.getMapColor(playerMarkerPos, map).equals("green") && MapUtils.getMapColor(closestNWMapCorner, map).equals("green")) { - if (!player.getPositionVector().equals(new Vec3(0.0D, 0.0D, 0.0D))) { - entrancePhysicalNWCorner = MapUtils.getClosestNWPhysicalCorner(player.getPositionVector()); - DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to " + entrancePhysicalNWCorner); - } - } else { - DungeonRooms.textToDisplay = new ArrayList<>(Arrays.asList( - "Dungeon Rooms: " + EnumChatFormatting.RED + "Entrance Room coordinates not found", - EnumChatFormatting.RED + "Please go back into the middle of the Green Entrance Room." - )); - } - } - } else { - Point currentPhysicalCorner = MapUtils.getClosestNWPhysicalCorner(player.getPositionVector()); - if (currentPhysicalSegments != null && !currentPhysicalSegments.contains(currentPhysicalCorner)) { - //checks if current location is within the bounds of the last detected room - resetCurrentRoom(); //only instance of resetting room other than leaving Dungeon - } else if (incompleteScan != 0 && System.currentTimeMillis() > incompleteScan) { - incompleteScan = 0; - DungeonRooms.logger.info("DungeonRooms: Rescanning room..."); - raytraceBlocks(); - } else if (redoScan != 0 && System.currentTimeMillis() > redoScan) { - redoScan = 0; - DungeonRooms.logger.info("DungeonRooms: Clearing data and rescanning room..."); - possibleRooms = null; - raytraceBlocks(); - } - - if (currentPhysicalSegments == null || currentMapSegments == null || roomSize.equals("undefined") || roomColor.equals("undefined")) { - updateCurrentRoom(); - if (roomColor.equals("undefined")) { - DungeonRooms.textToDisplay = new ArrayList<>(Collections.singletonList("Dungeon Rooms: " - + EnumChatFormatting.RED + "Waiting for hotbar map to update...")); - } else { - switch (roomColor) { - case "brown": - case "purple": - case "orange": - raytraceBlocks(); - break; - case "yellow": - roomName = "Miniboss Room"; - newRoom(); - break; - case "green": - roomName = "Entrance Room"; - newRoom(); - break; - case "pink": - roomName = "Fairy Room"; - newRoom(); - break; - case "red": - roomName = "Blood Room"; - newRoom(); - break; - default: - roomName = "undefined"; - break; - } - } - } - } - } - - //these run every tick while in room clearing phase - - if (futureUpdatePossibleRooms != null && futureUpdatePossibleRooms.isDone()) { - try { - possibleRooms = futureUpdatePossibleRooms.get(); - futureUpdatePossibleRooms = null; - - TreeSet possibleRoomsSet = new TreeSet<>(); - - String tempDirection = "undefined"; - - for (Map.Entry> entry : possibleRooms.entrySet()) { - List possibleRoomList = entry.getValue(); - if (!possibleRoomList.isEmpty()) tempDirection = entry.getKey(); //get direction to be used if room identified - possibleRoomsSet.addAll(possibleRoomList); - } - - - if (possibleRoomsSet.size() == 0) { //no match - DungeonRooms.textToDisplay = new ArrayList<>(Arrays.asList( - "Dungeon Rooms: " + EnumChatFormatting.RED + "No Matching Rooms Detected", - EnumChatFormatting.RED + "This mod might not have data for this room.", - EnumChatFormatting.WHITE + "Retrying every 5 seconds..." - )); - redoScan = System.currentTimeMillis() + 5000; - - } else if (possibleRoomsSet.size() == 1) { //room found - roomName = possibleRoomsSet.first(); - roomDirection = tempDirection; - roomCorner = MapUtils.getPhysicalCornerPos(roomDirection, currentPhysicalSegments); - DungeonRooms.logger.info("DungeonRooms: 576 raytrace vectors sent, returning " - + currentScannedBlocks.size() + " unique line-of-sight blocks, filtered down to " - + totalBlocksAvailableToCheck + " blocks, out of which " + blocksUsed.size() - + " blocks were used to uniquely identify " + roomName + "."); - newRoom(); - - } else { //too many matches - DungeonRooms.textToDisplay = new ArrayList<>(Arrays.asList( - "Dungeon Rooms: " + EnumChatFormatting.RED + "Unable to Determine Room Name", - EnumChatFormatting.RED + "Not enough valid blocks were scanned, look at a more open area.", - EnumChatFormatting.WHITE + "Retrying every second..." - )); - - DungeonRooms.logger.debug("DungeonRooms: Possible rooms list = " + new ArrayList<>(possibleRoomsSet)); - incompleteScan = System.currentTimeMillis() + 1000; - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - } - } - } - - - void updateCurrentRoom() { - EntityPlayerSP player = mc.thePlayer; - map = MapUtils.updatedMap(); - if (map == null) return; - Point currentPhysicalCorner = MapUtils.getClosestNWPhysicalCorner(player.getPositionVector()); - Point currentMapCorner = MapUtils.physicalToMapCorner(currentPhysicalCorner, entrancePhysicalNWCorner, entranceMapCorners[0], entranceMapCorners[1]); - roomColor = MapUtils.getMapColor(currentMapCorner, map); - if (roomColor.equals("undefined")) return; - currentMapSegments = MapUtils.neighboringSegments(currentMapCorner, map, entranceMapCorners[0], entranceMapCorners[1], new ArrayList<>()); - currentPhysicalSegments = new ArrayList<>(); - for (Point mapCorner : currentMapSegments) { - currentPhysicalSegments.add(MapUtils.mapToPhysicalCorner(mapCorner, entrancePhysicalNWCorner, entranceMapCorners[0], entranceMapCorners[1])); - } - roomSize = MapUtils.roomSize(currentMapSegments); - roomCategory = MapUtils.roomCategory(roomSize, roomColor); - } - - public static void resetCurrentRoom() { - DungeonRooms.textToDisplay = null; - Waypoints.allFound = false; - - currentPhysicalSegments = null; - currentMapSegments = null; - - roomSize = "undefined"; - roomColor = "undefined"; - roomCategory = "undefined"; - roomName = "undefined"; - roomDirection = "undefined"; - roomCorner = null; - - currentScannedBlocks = new HashSet<>(); - blocksToCheck = new HashMap<>(); - totalBlocksAvailableToCheck = 0; - blocksUsed = new ArrayList<>(); - futureUpdatePossibleRooms = null; - possibleRooms = null; - - incompleteScan = 0; - redoScan = 0; - - Waypoints.secretNum = 0; - } - - public static void newRoom() { - if (!roomName.equals("undefined") && !roomCategory.equals("undefined")) { - //update Waypoints info - if (DungeonRooms.roomsJson.get(roomName) != null) { - Waypoints.secretNum = DungeonRooms.roomsJson.get(roomName).getAsJsonObject().get("secrets").getAsInt(); - Waypoints.allSecretsMap.putIfAbsent(roomName, new ArrayList<>(Collections.nCopies(Waypoints.secretNum, true))); - } else { - Waypoints.secretNum = 0; - Waypoints.allSecretsMap.putIfAbsent(roomName, new ArrayList<>(Collections.nCopies(0, true))); - } - Waypoints.secretsList = Waypoints.allSecretsMap.get(roomName); - - //update GUI text - if (guiToggled) { - List lineList = new ArrayList<>(); - String line = "Dungeon Rooms: You are in " + EnumChatFormatting.GREEN + roomCategory - + EnumChatFormatting.WHITE + " - " + EnumChatFormatting.GREEN + roomName; - - if (DungeonRooms.roomsJson.get(roomName) != null) { - JsonObject roomJson = DungeonRooms.roomsJson.get(roomName).getAsJsonObject(); - if (roomJson.get("fairysoul").getAsBoolean()) { - line = line + EnumChatFormatting.WHITE + " - " + EnumChatFormatting.LIGHT_PURPLE + "Fairy Soul"; - } - lineList.add(line); - - if (Waypoints.enabled && roomJson.get("secrets").getAsInt() != 0 && DungeonRooms.waypointsJson.get(roomName) == null) { - lineList.add(EnumChatFormatting.RED + "No waypoints available"); - lineList.add(EnumChatFormatting.RED + "Press \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[0].getKeyCode()) +"\" to view images"); - } - } - DungeonRooms.textToDisplay = lineList; - } - } - } - - - void raytraceBlocks() { - DungeonRooms.logger.debug("DungeonRooms: Raytracing visible blocks"); - long timeStart = System.currentTimeMillis(); - - EntityPlayerSP player = mc.thePlayer; - - List vecList = RoomDetectionUtils.vectorsToRaytrace(24); //actually creates 24^2 = 576 raytrace vectors - - Vec3 eyes = new Vec3(player.posX, player.posY + (double)player.getEyeHeight(), player.posZ); - - for (Vec3 vec : vecList) { - //The super fancy Minecraft built in raytracing function so that the mod only scan line of sight blocks! - //This is the ONLY place where this mod accesses blocks in the physical map, and they are all within FOV - MovingObjectPosition raytraceResult = player.getEntityWorld().rayTraceBlocks(eyes, vec, false,false, true); - - if (raytraceResult != null && raytraceResult.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { - //the following is filtering out blocks which we don't want for detection, note that these blocks are also line of sight - BlockPos raytracedBlockPos = raytraceResult.getBlockPos(); - if (currentScannedBlocks.contains(raytracedBlockPos)) continue; - currentScannedBlocks.add(raytracedBlockPos); - - if (!currentPhysicalSegments.contains(MapUtils.getClosestNWPhysicalCorner(raytracedBlockPos))) { - continue; //scanned block is outside of current room - } - - if (RoomDetectionUtils.blockPartOfDoorway(raytracedBlockPos)) { - continue; //scanned block may be part of a corridor - } - - IBlockState hitBlock = mc.theWorld.getBlockState(raytracedBlockPos); - int identifier = Block.getIdFromBlock(hitBlock.getBlock()) * 100 + hitBlock.getBlock().damageDropped(hitBlock); - - if (RoomDetectionUtils.whitelistedBlocks.contains(identifier)) { - blocksToCheck.put(raytracedBlockPos, identifier); //will be checked and filtered in getPossibleRooms() - } - } - } - DungeonRooms.logger.debug("DungeonRooms: Finished raytracing, amount of blocks to check = " + blocksToCheck.size()); - long timeFinish = System.currentTimeMillis(); - DungeonRooms.logger.debug("DungeonRooms: Time to raytrace and filter (in ms): " + (timeFinish - timeStart)); - - if (futureUpdatePossibleRooms == null && stage2Executor != null && !stage2Executor.isTerminated()) { //start processing in new thread to avoid lag in case of complex scan - DungeonRooms.logger.debug("DungeonRooms: Initializing Room Comparison Executor"); - futureUpdatePossibleRooms = getPossibleRooms(); - } - } - - Future>> getPossibleRooms() { - return stage2Executor.submit(() -> { - long timeStart = System.currentTimeMillis(); - //load up hashmap - HashMap> updatedPossibleRooms; - List possibleDirections; - if (possibleRooms == null) { - DungeonRooms.logger.debug("DungeonRooms: No previous possible rooms list, creating new list..."); - //no previous scans have been done, entering all possible rooms and directions - possibleDirections = MapUtils.possibleDirections(roomSize, currentMapSegments); - updatedPossibleRooms = new HashMap<>(); - for (String direction : possibleDirections) { - updatedPossibleRooms.put(direction, new ArrayList<>(DungeonRooms.ROOM_DATA.get(roomCategory).keySet())); - } - } else { - //load info from previous scan - DungeonRooms.logger.debug("DungeonRooms: Loading possible rooms from previous room scan..."); - updatedPossibleRooms = possibleRooms; - possibleDirections = new ArrayList<>(possibleRooms.keySet()); - } - - //create HashMap of the points of the corners because they will be repeatedly used for each block - HashMap directionCorners = new HashMap<>(); - for (String direction : possibleDirections) { - directionCorners.put(direction, MapUtils.getPhysicalCornerPos(direction, currentPhysicalSegments)); - } - - DungeonRooms.logger.debug("DungeonRooms: directionCorners " + directionCorners.entrySet()); - - List blocksChecked = new ArrayList<>(); - int doubleCheckedBlocks = 0; - - for (Map.Entry entry : blocksToCheck.entrySet()) { - BlockPos blockPos = entry.getKey(); - DungeonRooms.logger.debug("DungeonRooms: BlockPos being checked " + blockPos); - int combinedMatchingRooms = 0; - - for (String direction : possibleDirections) { - //get specific id for the block to compare with ".skeleton" file room data - BlockPos relative = MapUtils.actualToRelative(blockPos, direction, directionCorners.get(direction)); - long idToCheck = Utils.shortToLong((short) relative.getX(), (short) relative.getY(), - (short) relative.getZ(), entry.getValue().shortValue()); - - List matchingRooms = new ArrayList<>(); - //compare with each saved ".skeleton" room - for (String roomName : updatedPossibleRooms.get(direction)) { - int index = Arrays.binarySearch(DungeonRooms.ROOM_DATA.get(roomCategory).get(roomName), idToCheck); - if (index > -1) { - matchingRooms.add(roomName); - } - } - - //replace updatedPossibleRooms.get(direction) with the updated matchingRooms list - combinedMatchingRooms += matchingRooms.size(); - updatedPossibleRooms.put(direction, matchingRooms); - - DungeonRooms.logger.debug("DungeonRooms: direction checked = " + direction + ", longID = " + idToCheck + ", relative = " + relative); - DungeonRooms.logger.debug("DungeonRooms: updatedPossibleRooms size = " + updatedPossibleRooms.get(direction).size() + " for direction " + direction); - } - blocksChecked.add(blockPos); - - if (combinedMatchingRooms == 0) { - DungeonRooms.logger.warn("DungeonRooms: No rooms match the input blocks after checking " + blocksChecked.size() + " blocks, returning"); - break; - } - if (combinedMatchingRooms == 1) { - //scan 10 more blocks after 1 room remaining to double check - if (doubleCheckedBlocks >= 10) { - DungeonRooms.logger.debug("DungeonRooms: One room matches after checking " + blocksChecked.size() + " blocks"); - break; - } - doubleCheckedBlocks++; - } - - DungeonRooms.logger.debug("DungeonRooms: " + combinedMatchingRooms + " possible rooms after checking " + blocksChecked.size() + " blocks"); - - } - - if (blocksChecked.size() == blocksToCheck.size()) { //only print for this condition bc other conditions break to here - DungeonRooms.logger.warn("DungeonRooms: Multiple rooms match after checking all " + blocksChecked.size() + " blocks"); - } - - blocksUsed.addAll(blocksChecked); - - //add blocksToCheck size to totalBlocksAvailableToCheck and clear blocksToCheck - totalBlocksAvailableToCheck += blocksToCheck.size(); - blocksToCheck = new HashMap<>(); - - long timeFinish = System.currentTimeMillis(); - DungeonRooms.logger.debug("DungeonRooms: Time to check blocks using thread (in ms): " + (timeFinish - timeStart)); - - return updatedPossibleRooms; - }); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/Waypoints.java b/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/Waypoints.java deleted file mode 100644 index 63f7053..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/dungeons/catacombs/Waypoints.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.dungeons.catacombs; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.events.PacketEvent; -import io.github.quantizr.dungeonrooms.utils.MapUtils; -import io.github.quantizr.dungeonrooms.utils.Utils; -import io.github.quantizr.dungeonrooms.utils.WaypointUtils; -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.network.play.server.S0DPacketCollectItem; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; -import net.minecraft.util.StringUtils; -import net.minecraftforge.client.event.ClientChatReceivedEvent; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent; - -import java.awt.*; -import java.util.*; -import java.util.List; - -public class Waypoints { - public static boolean enabled = true; - - public static boolean showEntrance = true; - public static boolean showSuperboom = true; - public static boolean showSecrets = true; - public static boolean showFairySouls = true; - public static boolean showStonk = true; - public static boolean sneakToDisable = true; - - public static boolean disableWhenAllFound = true; - public static boolean allFound = false; - - public static boolean showWaypointText = true; - public static boolean showBoundingBox = true; - public static boolean showBeacon = true; - - public static boolean practiceModeOn = false; - - public static int secretNum = 0; - public static int completedSecrets = 0; - - public static Map> allSecretsMap = new HashMap<>(); - public static List secretsList = new ArrayList<>(Arrays.asList(new Boolean[10])); - - static long lastSneakTime = 0; - - Frustum frustum = new Frustum(); - - @SubscribeEvent - public void onWorldRender(RenderWorldLastEvent event) { - if (!enabled) return; - if (practiceModeOn && !DungeonRooms.keyBindings[2].isKeyDown()) return; - String roomName = RoomDetection.roomName; - if (roomName.equals("undefined") || DungeonRooms.roomsJson.get(roomName) == null || secretsList == null) return; - if (DungeonRooms.waypointsJson.get(roomName) != null) { - JsonArray secretsArray = DungeonRooms.waypointsJson.get(roomName).getAsJsonArray(); - int arraySize = secretsArray.size(); - for(int i = 0; i < arraySize; i++) { - JsonObject secretsObject = secretsArray.get(i).getAsJsonObject(); - - boolean display = true; - for(int j = 1; j <= secretNum; j++) { - if (!secretsList.get(j-1)) { - if (secretsObject.get("secretName").getAsString().substring(0,2).replaceAll("[\\D]", "").equals(String.valueOf(j))) { - display = false; - break; - } - } - } - if (!display) continue; - - if (disableWhenAllFound && allFound && !secretsObject.get("category").getAsString().equals("fairysoul")) continue; - - BlockPos relative = new BlockPos(secretsObject.get("x").getAsInt(), secretsObject.get("y").getAsInt(), secretsObject.get("z").getAsInt()); - BlockPos pos = MapUtils.relativeToActual(relative, RoomDetection.roomDirection, RoomDetection.roomCorner); - Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); - frustum.setPosition(viewer.posX, viewer.posY, viewer.posZ); - if (!frustum.isBoxInFrustum(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, 255, pos.getZ() + 1)){ - continue; - } - - - Color color; - switch (secretsObject.get("category").getAsString()) { - case "entrance": - if (!showEntrance) continue; - color = new Color(0, 255, 0); - break; - case "superboom": - if (!showSuperboom) continue; - color = new Color(255, 0, 0); - break; - case "chest": - if (!showSecrets) continue; - color = new Color(2, 213, 250); - break; - case "item": - if (!showSecrets) continue; - color = new Color(2, 64, 250); - break; - case "bat": - if (!showSecrets) continue; - color = new Color(142, 66, 0); - break; - case "wither": - if (!showSecrets) continue; - color = new Color(30, 30, 30); - break; - case "lever": - if (!showSecrets) continue; - color = new Color(250, 217, 2); - break; - case "fairysoul": - if (!showFairySouls) continue; - color = new Color(255, 85, 255); - break; - case "stonk": - if (!showStonk) continue; - color = new Color(146, 52, 235); - break; - default: - color = new Color(190, 255, 252); - } - - double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks; - double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks; - double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks; - - double x = pos.getX() - viewerX; - double y = pos.getY() - viewerY; - double z = pos.getZ() - viewerZ; - double distSq = x*x + y*y + z*z; - - GlStateManager.disableDepth(); - GlStateManager.disableCull(); - if (showBoundingBox && frustum.isBoxInFrustum(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - WaypointUtils.drawFilledBoundingBox(new AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1), color, 0.4f); - } - GlStateManager.disableTexture2D(); - if (showBeacon && distSq > 5*5) WaypointUtils.renderBeaconBeam(x, y + 1, z, color.getRGB(), 0.25f, event.partialTicks); - if (showWaypointText) WaypointUtils.renderWaypointText(secretsObject.get("secretName").getAsString(), pos.up(2), event.partialTicks); - GlStateManager.disableLighting(); - GlStateManager.enableTexture2D(); - GlStateManager.enableDepth(); - GlStateManager.enableCull(); - } - } - } - - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onChat(ClientChatReceivedEvent event) { - if (!Utils.inCatacombs || !enabled) return; - // Action Bar - if (event.type == 2) { - String[] actionBarSections = event.message.getUnformattedText().split(" {3,}"); - - for (String section : actionBarSections) { - if (section.contains("Secrets") && section.contains("/")) { - String cleanedSection = StringUtils.stripControlCodes(section); - String[] splitSecrets = cleanedSection.split("/"); - - completedSecrets = Integer.parseInt(splitSecrets[0].replaceAll("[^0-9]", "")); - int totalSecrets = Integer.parseInt(splitSecrets[1].replaceAll("[^0-9]", "")); - - allFound = (totalSecrets == secretNum && completedSecrets == secretNum); - break; - } - } - } - } - - @SubscribeEvent - public void onInteract(PlayerInteractEvent event) { - if (!Utils.inCatacombs || !enabled) return; - if (disableWhenAllFound && allFound) return; - - if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { - Block block = event.world.getBlockState(event.pos).getBlock(); - if (block != Blocks.chest && block != Blocks.skull) return; - String roomName = RoomDetection.roomName; - if (roomName.equals("undefined") || DungeonRooms.roomsJson.get(roomName) == null || secretsList == null) return; - if (DungeonRooms.waypointsJson.get(roomName) != null) { - JsonArray secretsArray = DungeonRooms.waypointsJson.get(roomName).getAsJsonArray(); - int arraySize = secretsArray.size(); - for(int i = 0; i < arraySize; i++) { - JsonObject secretsObject = secretsArray.get(i).getAsJsonObject(); - if (secretsObject.get("category").getAsString().equals("chest") || secretsObject.get("category").getAsString().equals("wither")) { - BlockPos relative = new BlockPos(secretsObject.get("x").getAsInt(), secretsObject.get("y").getAsInt(), secretsObject.get("z").getAsInt()); - BlockPos pos = MapUtils.relativeToActual(relative, RoomDetection.roomDirection, RoomDetection.roomCorner); - - if (pos.equals(event.pos)) { - for(int j = 1; j <= secretNum; j++) { - if (secretsObject.get("secretName").getAsString().substring(0,2).replaceAll("[\\D]", "").equals(String.valueOf(j))) { - Waypoints.secretsList.set(j-1, false); - Waypoints.allSecretsMap.replace(roomName, Waypoints.secretsList); - DungeonRooms.logger.info("DungeonRooms: Detected " + secretsObject.get("category").getAsString() + " click, turning off waypoint for secret #" + j); - break; - } - } - } - } - } - } - } - } - - @SubscribeEvent - public void onReceivePacket(PacketEvent.ReceiveEvent event) { - if (!Utils.inCatacombs || !enabled) return; - if (disableWhenAllFound && allFound) return; - Minecraft mc = Minecraft.getMinecraft(); - - if (event.packet instanceof S0DPacketCollectItem) { - S0DPacketCollectItem packet = (S0DPacketCollectItem) event.packet; - Entity entity = mc.theWorld.getEntityByID(packet.getCollectedItemEntityID()); - if (entity instanceof EntityItem) { - EntityItem item = (EntityItem) entity; - entity = mc.theWorld.getEntityByID(packet.getEntityID()); - if (entity == null) return; - String name = item.getEntityItem().getDisplayName(); - if (name.contains("Decoy") || name.contains("Defuse Kit") || name.contains("Dungeon Chest Key") || - name.contains("Healing VIII") || name.contains("Inflatable Jerry") || name.contains("Spirit Leap") || - name.contains("Training Weights") || name.contains("Trap") || name.contains("Treasure Talisman")) { - if (!entity.getCommandSenderEntity().getName().equals(mc.thePlayer.getName())) { - //Do nothing if someone else picks up the item in order to follow Hypixel rules - return; - } - String roomName = RoomDetection.roomName; - if (roomName.equals("undefined") || DungeonRooms.roomsJson.get(roomName) == null || secretsList == null) return; - if (DungeonRooms.waypointsJson.get(roomName) != null) { - JsonArray secretsArray = DungeonRooms.waypointsJson.get(roomName).getAsJsonArray(); - int arraySize = secretsArray.size(); - for(int i = 0; i < arraySize; i++) { - JsonObject secretsObject = secretsArray.get(i).getAsJsonObject(); - if (secretsObject.get("category").getAsString().equals("item") || secretsObject.get("category").getAsString().equals("bat")) { - BlockPos relative = new BlockPos(secretsObject.get("x").getAsInt(), secretsObject.get("y").getAsInt(), secretsObject.get("z").getAsInt()); - BlockPos pos = MapUtils.relativeToActual(relative, RoomDetection.roomDirection, RoomDetection.roomCorner); - - if (entity.getDistanceSq(pos) <= 36D) { - for(int j = 1; j <= secretNum; j++) { - if (secretsObject.get("secretName").getAsString().substring(0,2).replaceAll("[\\D]", "").equals(String.valueOf(j))) { - if (!Waypoints.secretsList.get(j-1)) continue; - Waypoints.secretsList.set(j-1, false); - Waypoints.allSecretsMap.replace(roomName, Waypoints.secretsList); - DungeonRooms.logger.info("DungeonRooms: " + entity.getCommandSenderEntity().getName() + " picked up " + StringUtils.stripControlCodes(name) + " from a " + secretsObject.get("category").getAsString() + " secret, turning off waypoint for secret #" + j); - return; - } - } - } - } - } - } - } - } - } - } - - - //Disable waypoint within 4 blocks away on sneak - @SubscribeEvent - public void onKey(InputEvent.KeyInputEvent event) { - if (!Utils.inCatacombs || !enabled || !sneakToDisable) return; - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - if (FMLClientHandler.instance().getClient().gameSettings.keyBindSneak.isPressed()) { - if (System.currentTimeMillis() - lastSneakTime < 500) { //check for two taps in under half a second - String roomName = RoomDetection.roomName; - if (roomName.equals("undefined") || DungeonRooms.roomsJson.get(roomName) == null || secretsList == null) return; - if (DungeonRooms.waypointsJson.get(roomName) != null) { - JsonArray secretsArray = DungeonRooms.waypointsJson.get(roomName).getAsJsonArray(); - int arraySize = secretsArray.size(); - for(int i = 0; i < arraySize; i++) { - JsonObject secretsObject = secretsArray.get(i).getAsJsonObject(); - if (secretsObject.get("category").getAsString().equals("chest") || secretsObject.get("category").getAsString().equals("wither") - || secretsObject.get("category").getAsString().equals("item") || secretsObject.get("category").getAsString().equals("bat")) { - BlockPos relative = new BlockPos(secretsObject.get("x").getAsInt(), secretsObject.get("y").getAsInt(), secretsObject.get("z").getAsInt()); - BlockPos pos = MapUtils.relativeToActual(relative, RoomDetection.roomDirection, RoomDetection.roomCorner); - - if (player.getDistanceSq(pos) <= 16D) { - for(int j = 1; j <= secretNum; j++) { - if (secretsObject.get("secretName").getAsString().substring(0,2).replaceAll("[\\D]", "").equals(String.valueOf(j))) { - if (!Waypoints.secretsList.get(j-1)) continue; - Waypoints.secretsList.set(j-1, false); - Waypoints.allSecretsMap.replace(roomName, Waypoints.secretsList); - DungeonRooms.logger.info("DungeonRooms: Player sneaked near " + secretsObject.get("category").getAsString() + " secret, turning off waypoint for secret #" + j); - return; - } - } - } - } - } - } - } - lastSneakTime = System.currentTimeMillis(); - } - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/gui/LinkGUI.java b/src/main/java/io/github/quantizr/dungeonrooms/gui/LinkGUI.java deleted file mode 100644 index 5477752..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/gui/LinkGUI.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.gui; - -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.RoomDetection; -import io.github.quantizr.dungeonrooms.handlers.OpenLink; -import io.github.quantizr.dungeonrooms.handlers.TextRenderer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.event.ClickEvent; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; - - -public class LinkGUI extends GuiScreen { - - private GuiButton discordClient; - private GuiButton discordBrowser; - private GuiButton SBPSecrets; - private GuiButton close; - - @Override - public boolean doesGuiPauseGame() { - return false; - } - - @Override - public void initGui() { - super.initGui(); - - ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); - int height = sr.getScaledHeight(); - int width = sr.getScaledWidth(); - - discordClient = new GuiButton(0, width / 2 - 185, height / 6 + 96, 120, 20, "DSG Discord Client"); - discordBrowser = new GuiButton(1, width / 2 - 60, height / 6 + 96, 120, 20, "DSG Discord Browser"); - SBPSecrets = new GuiButton(2, width / 2 + 65, height / 6 + 96, 120, 20, "SBP Secrets Mod"); - close = new GuiButton(3, width / 2 - 60, height / 6 + 136, 120, 20, "Close"); - - this.buttonList.add(discordClient); - this.buttonList.add(discordBrowser); - this.buttonList.add(SBPSecrets); - this.buttonList.add(close); - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - Minecraft mc = Minecraft.getMinecraft(); - - String displayText; - if (RoomDetection.roomName.equals("undefined")) { - displayText = "Where would you like to view secrets for: " + EnumChatFormatting.RED + "undefined"; - } else { - displayText = "Where would you like to view secrets for: " + EnumChatFormatting.GREEN + RoomDetection.roomName; - } - int displayWidth = mc.fontRendererObj.getStringWidth(displayText); - TextRenderer.drawText(mc, displayText, width / 2 - displayWidth / 2, height / 6 + 56, 1D, false); - - String noteText = EnumChatFormatting.GRAY + "If you wish to have the hotkey go directly to DSG or SBP instead of this GUI run " - + EnumChatFormatting.WHITE + "/room set "; - int noteWidth = mc.fontRendererObj.getStringWidth(noteText); - TextRenderer.drawText(mc, noteText, width / 2 - noteWidth / 2, (int) (height*0.9), 1D, false); - - super.drawScreen(mouseX, mouseY, partialTicks); - } - - @Override - public void actionPerformed(GuiButton button) { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (button == discordClient) { - OpenLink.openDiscord("client"); - player.closeScreen(); - } else if (button == discordBrowser) { - OpenLink.openDiscord("browser"); - player.closeScreen(); - } else if (button == SBPSecrets) { - if (DungeonRooms.usingSBPSecrets) { - OpenLink.openSBPSecrets(); - } else { - String sbpURL = "https://discord.gg/2UjaFqfPwJ"; - ChatComponentText sbp = new ChatComponentText(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.UNDERLINE + sbpURL); - sbp.setChatStyle(sbp.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, sbpURL))); - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: You need theSkyblock Personalized (SBP) Mod for this feature, get it from ").appendSibling(sbp)); - } - player.closeScreen(); - } else if (button == close) { - player.closeScreen(); - } - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.java b/src/main/java/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.java deleted file mode 100644 index fb7343d..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.gui; - -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.RoomDetection; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.Waypoints; -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler; -import io.github.quantizr.dungeonrooms.handlers.TextRenderer; -import io.github.quantizr.dungeonrooms.utils.Utils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class WaypointsGUI extends GuiScreen { - - private GuiButton waypointsEnabled; - private GuiButton practiceModeEnabled; - private GuiButton showEntrance; - private GuiButton showSuperboom; - private GuiButton showSecrets; - private GuiButton showFairySouls; - private GuiButton showStonk; - private GuiButton disableWhenAllFound; - private GuiButton sneakToDisable; - private GuiButton close; - - public static List secretButtonList = new ArrayList<>(Arrays.asList(new GuiButton[10])); - - private static boolean waypointGuiOpened = false; - - @Override - public boolean doesGuiPauseGame() { - return false; - } - - @Override - public void initGui() { - super.initGui(); - waypointGuiOpened = true; - - ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft()); - int height = sr.getScaledHeight(); - int width = sr.getScaledWidth(); - - waypointsEnabled = new GuiButton(0, (width / 2 - 100) + 0, height / 6 - 5, 200, 20, waypointBtnText()); - practiceModeEnabled = new GuiButton(1, (width / 2 - 100) - 110, height / 6 + 25, 200, 20, "Practice Mode: " + getOnOff(Waypoints.practiceModeOn)); - showEntrance = new GuiButton(2, (width / 2 - 100) + 110, height / 6 + 25, 200, 20, "Show Entrance Waypoints: " + getOnOff(Waypoints.showEntrance)); - showSuperboom = new GuiButton(3, (width / 2 - 100) - 110, height / 6 + 55, 200, 20, "Show Superboom Waypoints: " + getOnOff(Waypoints.showSuperboom)); - showSecrets = new GuiButton(4, (width / 2 - 100) + 110, height / 6 + 55, 200, 20, "Show Secret Waypoints: " + getOnOff(Waypoints.showSecrets)); - showFairySouls = new GuiButton(5, (width / 2 - 100) - 110, height / 6 + 85, 200, 20, "Show Fairy Soul Waypoints: " + getOnOff(Waypoints.showFairySouls)); - showStonk = new GuiButton(6, (width / 2 - 100) + 110, height / 6 + 85, 200, 20, "Show Stonk Waypoints: " + getOnOff(Waypoints.showStonk)); - sneakToDisable = new GuiButton(7, (width / 2 - 100) - 110, height / 6 + 115, 200, 20, "Double-Tap Sneak to Hide Nearby: " + getOnOff(Waypoints.sneakToDisable)); - disableWhenAllFound = new GuiButton(8, (width / 2 - 100) + 110, height / 6 + 115, 200, 20, "Disable when all secrets found: " + getOnOff(Waypoints.disableWhenAllFound)); - close = new GuiButton(9, width / 2 - 100, (height / 6) * 5, 200, 20, "Close"); - - this.buttonList.add(waypointsEnabled); - this.buttonList.add(practiceModeEnabled); - this.buttonList.add(showEntrance); - this.buttonList.add(showSuperboom); - this.buttonList.add(showSecrets); - this.buttonList.add(showFairySouls); - this.buttonList.add(showStonk); - this.buttonList.add(sneakToDisable); - this.buttonList.add(disableWhenAllFound); - this.buttonList.add(close); - - if (Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - if (Waypoints.secretNum <= 5) { - for (int i = 1; i <= Waypoints.secretNum; i++) { - int adjustPos = (-40 * (Waypoints.secretNum)) - 70 + (80 * i); - secretButtonList.set(i - 1, new GuiButton(10 + i, (width / 2) + adjustPos, height / 6 + 170, 60, 20, i + ": " + getOnOff(Waypoints.secretsList.get(i - 1)))); - this.buttonList.add(secretButtonList.get(i - 1)); - } - } else { - for (int i = 1; i <= (int) Math.ceil((double) Waypoints.secretNum / 2); i++) { - int adjustPos = (-40 * ((int) Math.ceil((double) Waypoints.secretNum / 2))) - 70 + (80 * i); - secretButtonList.set(i - 1, new GuiButton(10 + i, (width / 2) + adjustPos, height / 6 + 170, 60, 20, i + ": " + getOnOff(Waypoints.secretsList.get(i - 1)))); - this.buttonList.add(secretButtonList.get(i - 1)); - } - for (int i = (int) Math.ceil((double) Waypoints.secretNum / 2) + 1; i <= Waypoints.secretNum; i++) { - int adjustPos = (-40 * (Waypoints.secretNum - (int) Math.ceil((double) Waypoints.secretNum / 2))) - 70 + (80 * (i-(int) Math.ceil((double) Waypoints.secretNum / 2))); - secretButtonList.set(i - 1, new GuiButton(10 + i, (width / 2) + adjustPos, height / 6 + 200, 60, 20, i + ": " + getOnOff(Waypoints.secretsList.get(i - 1)))); - this.buttonList.add(secretButtonList.get(i - 1)); - } - } - } - } - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - Minecraft mc = Minecraft.getMinecraft(); - - String text1 = "§lDungeon Room Waypoints:"; - int text1Width = mc.fontRendererObj.getStringWidth(text1); - TextRenderer.drawText(mc, text1, width / 2 - text1Width / 2, height / 6 - 25, 1D, false); - - String text2 = "(Use at your own risk)"; - int text2Width = mc.fontRendererObj.getStringWidth(text2); - TextRenderer.drawText(mc, EnumChatFormatting.GRAY + text2, width / 2 - text2Width / 2, height / 6 - 15, 1D, false); - - String text3 = "Toggle Room Specific Waypoints:"; - int text3Width = mc.fontRendererObj.getStringWidth(text3); - TextRenderer.drawText(mc, text3, width / 2 - text3Width / 2, height / 6 + 140, 1D, false); - - String text4 = "(You can also press the # key matching the secret instead)"; - int text4Width = mc.fontRendererObj.getStringWidth(text4); - TextRenderer.drawText(mc, EnumChatFormatting.GRAY + text4, width / 2 - text4Width / 2, height / 6 + 150, 1D, false); - - - if (!Utils.inCatacombs) { - String errorText = "Not in dungeons"; - int errorTextWidth = mc.fontRendererObj.getStringWidth(errorText); - TextRenderer.drawText(mc, EnumChatFormatting.RED + errorText, width / 2 - errorTextWidth / 2, height / 6 + 170, 1D, false); - } else if (Waypoints.secretNum == 0) { - String errorText = "No secrets in this room"; - int errorTextWidth = mc.fontRendererObj.getStringWidth(errorText); - TextRenderer.drawText(mc, EnumChatFormatting.RED + errorText, width / 2 - errorTextWidth / 2, height / 6 + 170, 1D, false); - } - - super.drawScreen(mouseX, mouseY, partialTicks); - } - - @Override - public void actionPerformed(GuiButton button) { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (button == waypointsEnabled) { - Waypoints.enabled = !Waypoints.enabled; - ConfigHandler.writeBooleanConfig("toggles", "waypointsToggled", Waypoints.enabled); - waypointsEnabled.displayString = waypointBtnText(); - if (Waypoints.enabled) { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Waypoints will now automatically show up when you enter a new dungeon room.")); - } - } else if (button == practiceModeEnabled) { - Waypoints.practiceModeOn = !Waypoints.practiceModeOn; - ConfigHandler.writeBooleanConfig("waypoint", "practiceModeOn", Waypoints.practiceModeOn); - practiceModeEnabled.displayString = "Practice Mode: " + getOnOff(Waypoints.practiceModeOn); - if (Waypoints.practiceModeOn) { - player.addChatMessage(new ChatComponentText("§eDungeon Rooms: Practice Mode has been enabled.\n" - + "§e Waypoints will ONLY show up while you are pressing \"" + GameSettings.getKeyDisplayString(DungeonRooms.keyBindings[2].getKeyCode()) + "\".\n" - + "§r (Hotkey is configurable in Minecraft Controls menu)" - )); - } - } else if (button == showEntrance) { - Waypoints.showEntrance = !Waypoints.showEntrance; - ConfigHandler.writeBooleanConfig("waypoint", "showEntrance", Waypoints.showEntrance); - showEntrance.displayString = "Show Entrance Waypoints: " + getOnOff(Waypoints.showEntrance); - } else if (button == showSuperboom) { - Waypoints.showSuperboom = !Waypoints.showSuperboom; - ConfigHandler.writeBooleanConfig("waypoint", "showSuperboom", Waypoints.showSuperboom); - showSuperboom.displayString = "Show Superboom Waypoints: " + getOnOff(Waypoints.showSuperboom); - } else if (button == showSecrets) { - Waypoints.showSecrets = !Waypoints.showSecrets; - ConfigHandler.writeBooleanConfig("waypoint", "showSecrets", Waypoints.showSecrets); - showSecrets.displayString = "Show Secret Waypoints: " + getOnOff(Waypoints.showSecrets); - } else if (button == showFairySouls) { - Waypoints.showFairySouls = !Waypoints.showFairySouls; - ConfigHandler.writeBooleanConfig("waypoint", "showFairySouls", Waypoints.showFairySouls); - showFairySouls.displayString = "Show Fairy Soul Waypoints: " + getOnOff(Waypoints.showFairySouls); - } else if (button == showStonk) { - Waypoints.showStonk = !Waypoints.showStonk; - ConfigHandler.writeBooleanConfig("waypoint", "showStonk", Waypoints.showStonk); - showStonk.displayString = "Show Stonk Waypoints: " + getOnOff(Waypoints.showStonk); - } else if (button == sneakToDisable) { - Waypoints.sneakToDisable = !Waypoints.sneakToDisable; - ConfigHandler.writeBooleanConfig("waypoint", "sneakToDisable", Waypoints.sneakToDisable); - sneakToDisable.displayString = "Double-Tap Sneak to Hide Nearby: " + getOnOff(Waypoints.sneakToDisable); - } else if (button == disableWhenAllFound) { - Waypoints.disableWhenAllFound = !Waypoints.disableWhenAllFound; - ConfigHandler.writeBooleanConfig("waypoint", "disableWhenAllFound", Waypoints.disableWhenAllFound); - disableWhenAllFound.displayString = "Disable when all secrets found: " + getOnOff(Waypoints.disableWhenAllFound); - } - else if (button == close) { - player.closeScreen(); - } - - if (Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - for (int i = 1; i <= Waypoints.secretNum; i++) { - if (button == secretButtonList.get(i-1)) { - Waypoints.secretsList.set(i-1, !Waypoints.secretsList.get(i-1)); - if (!RoomDetection.roomName.equals("undefined")) { - Waypoints.allSecretsMap.replace(RoomDetection.roomName, Waypoints.secretsList); - } - secretButtonList.get(i-1).displayString = i + ": " + getOnOff(Waypoints.secretsList.get(i - 1)); - break; - } - } - } - } - } - - @Override - public void onGuiClosed() { - waypointGuiOpened = false; - } - - @Override - protected void keyTyped(char c, int keyCode) throws IOException - { - super.keyTyped(c, keyCode); - - if (waypointGuiOpened && Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - for (int i = 1; i <= Waypoints.secretNum; i++) { - if (keyCode-1 == i) { - Waypoints.secretsList.set(i - 1, !Waypoints.secretsList.get(i - 1)); - if (!RoomDetection.roomName.equals("undefined")) { - Waypoints.allSecretsMap.replace(RoomDetection.roomName, Waypoints.secretsList); - } - secretButtonList.get(i - 1).displayString = i + ": " + getOnOff(Waypoints.secretsList.get(i - 1)); - break; - } - } - } - } - } - - private static String waypointBtnText() { - if (Waypoints.enabled){ - return EnumChatFormatting.GREEN + "§lWaypoints Enabled"; - } else { - return EnumChatFormatting.RED + "§lWaypoints Disabled"; - } - } - - private static String getOnOff(boolean bool) { - if (bool){ - return EnumChatFormatting.GREEN + "On"; - } else { - return EnumChatFormatting.RED + "Off"; - } - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.java b/src/main/java/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.java deleted file mode 100644 index ceb7c4e..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.handlers; - -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.DungeonManager; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.Waypoints; -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.Configuration; - -import java.io.File; - -public class ConfigHandler { - public static Configuration config; - private final static String file = "config/DungeonRooms.cfg"; - - public static void init() { - config = new Configuration(new File(file)); - try { - config.load(); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static int getInt(String category, String key) { - config = new Configuration(new File(file)); - try { - config.load(); - if (config.getCategory(category).containsKey(key)) { - return config.get(category, key, 0).getInt(); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - return 0; - } - - public static double getDouble(String category, String key) { - config = new Configuration(new File(file)); - try { - config.load(); - if (config.getCategory(category).containsKey(key)) { - return config.get(category, key, 0D).getDouble(); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - return 0D; - } - - public static String getString(String category, String key) { - config = new Configuration(new File(file)); - try { - config.load(); - if (config.getCategory(category).containsKey(key)) { - return config.get(category, key, "").getString(); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - return ""; - } - - public static boolean getBoolean(String category, String key) { - config = new Configuration(new File(file)); - try { - config.load(); - if (config.getCategory(category).containsKey(key)) { - return config.get(category, key, false).getBoolean(); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - return true; - } - - public static void writeIntConfig(String category, String key, int value) { - config = new Configuration(new File(file)); - try { - config.load(); - int set = config.get(category, key, value).getInt(); - config.getCategory(category).get(key).set(value); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static void writeDoubleConfig(String category, String key, double value) { - config = new Configuration(new File(file)); - try { - config.load(); - double set = config.get(category, key, value).getDouble(); - config.getCategory(category).get(key).set(value); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static void writeStringConfig(String category, String key, String value) { - config = new Configuration(new File(file)); - try { - config.load(); - String set = config.get(category, key, value).getString(); - config.getCategory(category).get(key).set(value); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static void writeBooleanConfig(String category, String key, boolean value) { - config = new Configuration(new File(file)); - try { - config.load(); - boolean set = config.get(category, key, value).getBoolean(); - config.getCategory(category).get(key).set(value); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static boolean hasKey(String category, String key) { - config = new Configuration(new File(file)); - try { - config.load(); - if (!config.hasCategory(category)) return false; - return config.getCategory(category).containsKey(key); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - return false; - } - - public static void deleteCategory(String category) { - config = new Configuration(new File(file)); - try { - config.load(); - if (config.hasCategory(category)) { - config.removeCategory(new ConfigCategory(category)); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - config.save(); - } - } - - public static void reloadConfig() { - if (!hasKey("toggles", "guiToggled")) writeBooleanConfig("toggles", "guiToggled", true); - if (!hasKey("toggles", "motdToggled")) writeBooleanConfig("toggles", "motdToggled", true); - if (!hasKey("toggles", "waypointsToggled")) writeBooleanConfig("toggles", "waypointsToggled", true); - - if (!hasKey("waypoint", "showEntrance")) writeBooleanConfig("waypoint", "showEntrance", true); - if (!hasKey("waypoint", "showSuperboom")) writeBooleanConfig("waypoint", "showSuperboom", true); - if (!hasKey("waypoint", "showSecrets")) writeBooleanConfig("waypoint", "showSecrets", true); - if (!hasKey("waypoint", "showFairySouls")) writeBooleanConfig("waypoint", "showFairySouls", true); - if (!hasKey("waypoint", "showStonk")) writeBooleanConfig("waypoint", "showStonk", true); - if (!hasKey("waypoint", "sneakToDisable")) writeBooleanConfig("waypoint", "sneakToDisable", true); - if (!hasKey("waypoint", "disableWhenAllFound")) writeBooleanConfig("waypoint", "disableWhenAllFound", true); - - if (!hasKey("waypoint", "showWaypointText")) writeBooleanConfig("waypoint", "showWaypointText", true); - if (!hasKey("waypoint", "showBoundingBox")) writeBooleanConfig("waypoint", "showBoundingBox", true); - if (!hasKey("waypoint", "showBeacon")) writeBooleanConfig("waypoint", "showBeacon", true); - - if (!hasKey("waypoint", "practiceModeOn")) writeBooleanConfig("waypoint", "practiceModeOn", false); - - if (!hasKey("gui", "scaleX")) writeIntConfig("gui", "scaleX", 50); - if (!hasKey("gui", "scaleY")) writeIntConfig("gui", "scaleY", 5); - if (!hasKey("gui", "hotkeyOpen")) writeStringConfig("gui", "hotkeyOpen", "gui"); - - //run special messages on first login - if (!hasKey("drm", "version")) { - writeStringConfig("drm", "version", DungeonRooms.VERSION); - DungeonRooms.firstLogin = true; - //writeBooleanConfig("toggles", "waypointsToggled", false); - } else if (!getString("drm", "version").equals(DungeonRooms.VERSION)) { - writeStringConfig("drm", "version", DungeonRooms.VERSION); - /* //uncomment if major update in future requires firstLogin prompt to be displayed again - DungeonRooms.firstLogin = true; - writeBooleanConfig("toggles", "waypointsToggled", false); - */ - } - - //AutoRoom.chatToggled = getBoolean("toggles", "chatToggled"); - DungeonManager.guiToggled = getBoolean("toggles", "guiToggled"); - DungeonManager.motdToggled = getBoolean("toggles", "motdToggled"); - //AutoRoom.coordToggled = getBoolean("toggles", "coordToggled"); - Waypoints.enabled = getBoolean("toggles", "waypointsToggled"); - - Waypoints.showEntrance = getBoolean("waypoint", "showEntrance"); - Waypoints.showSuperboom = getBoolean("waypoint", "showSuperboom"); - Waypoints.showSecrets = getBoolean("waypoint", "showSecrets"); - Waypoints.showFairySouls = getBoolean("waypoint", "showFairySouls"); - Waypoints.showStonk = getBoolean("waypoint", "showStonk"); - Waypoints.sneakToDisable = getBoolean("waypoint", "sneakToDisable"); - Waypoints.disableWhenAllFound = getBoolean("waypoint", "disableWhenAllFound"); - - Waypoints.showWaypointText = getBoolean("waypoint", "showWaypointText"); - Waypoints.showBoundingBox = getBoolean("waypoint", "showBoundingBox"); - Waypoints.showBeacon = getBoolean("waypoint", "showBeacon"); - - Waypoints.practiceModeOn = getBoolean("waypoint", "practiceModeOn"); - - DungeonRooms.textLocX = getInt("gui", "scaleX"); - DungeonRooms.textLocY = getInt("gui", "scaleY"); - DungeonRooms.imageHotkeyOpen = getString("gui", "hotkeyOpen"); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/handlers/OpenLink.java b/src/main/java/io/github/quantizr/dungeonrooms/handlers/OpenLink.java deleted file mode 100644 index d14a8e8..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/handlers/OpenLink.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.handlers; - -import com.google.gson.JsonObject; -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.dungeons.catacombs.RoomDetection; -import io.github.quantizr.dungeonrooms.gui.LinkGUI; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.event.ClickEvent; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.client.ClientCommandHandler; -import net.minecraftforge.fml.client.FMLClientHandler; - -import java.awt.*; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -public class OpenLink { - - public static void checkForLink(String type){ - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayerSP player = mc.thePlayer; - - if (RoomDetection.roomName.equals("undefined") || DungeonRooms.roomsJson.get(RoomDetection.roomName) == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: You do not appear to be in a detected Dungeon room right now.")); - return; - } - - JsonObject roomJson = DungeonRooms.roomsJson.get(RoomDetection.roomName).getAsJsonObject(); - if (roomJson.get("dsg").getAsString().equals("null") && roomJson.get("sbp") == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: There are no channels/images for this room.")); - return; - } - - switch (type) { - case "gui": - mc.addScheduledTask(() -> mc.displayGuiScreen(new LinkGUI())); - break; - case "dsg": - OpenLink.openDiscord("client"); - break; - case "sbp": - if (DungeonRooms.usingSBPSecrets) { - OpenLink.openSBPSecrets(); - } else { - String sbpURL = "https://discord.gg/2UjaFqfPwJ"; - ChatComponentText sbp = new ChatComponentText(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.UNDERLINE + sbpURL); - sbp.setChatStyle(sbp.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, sbpURL))); - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: You need the SkyblockPersonalized (SBP) Mod for this feature, get it from ").appendSibling(sbp)); - } - break; - } - - } - - public static void openDiscord(String type) { - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayerSP player = mc.thePlayer; - - if (RoomDetection.roomName.equals("undefined") || DungeonRooms.roomsJson.get(RoomDetection.roomName) == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: You do not appear to be in a detected Dungeon room right now.")); - return; - } - - JsonObject roomJson = DungeonRooms.roomsJson.get(RoomDetection.roomName).getAsJsonObject(); - if (roomJson.get("dsg").getAsString().equals("null")) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: There is no DSG channel for this room.")); - return; - } - try { - if (type.equals("client")){ - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Opening DSG Discord in Client...")); - Desktop.getDesktop().browse(new URI("discord://" + roomJson.get("dsg").getAsString())); - } else { - player.addChatMessage(new ChatComponentText("Dungeon Rooms: Opening DSG Discord in Browser...")); - Desktop.getDesktop().browse(new URI("https://discord.com" + roomJson.get("dsg").getAsString())); - } - } catch (IOException | URISyntaxException e) { - e.printStackTrace(); - } - } - - public static void openSBPSecrets() { - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayerSP player = mc.thePlayer; - - if (RoomDetection.roomName.equals("undefined") || DungeonRooms.roomsJson.get(RoomDetection.roomName) == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: You do not appear to be in a detected Dungeon room right now.")); - return; - } - - JsonObject roomJson = DungeonRooms.roomsJson.get(RoomDetection.roomName).getAsJsonObject(); - if (roomJson.get("sbp") == null) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED - + "Dungeon Rooms: There are no SBP images for this room.")); - return; - } - String name = roomJson.get("sbp").getAsString(); - - String category = roomJson.get("category").getAsString(); - switch (category) { - case "Puzzle": - case "Trap": - category = "puzzles"; - break; - case "L-shape": - category = "L"; - break; - } - ClientCommandHandler.instance.executeCommand(FMLClientHandler.instance().getClientPlayerEntity(), "/secretoverride " + category + " " + name); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/handlers/PacketHandler.java b/src/main/java/io/github/quantizr/dungeonrooms/handlers/PacketHandler.java deleted file mode 100644 index d91df16..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/handlers/PacketHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.handlers; - -import io.github.quantizr.dungeonrooms.events.PacketEvent; -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelPromise; -import net.minecraft.network.Packet; -import net.minecraftforge.common.MinecraftForge; - -public class PacketHandler extends ChannelDuplexHandler { - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - if (msg instanceof Packet) MinecraftForge.EVENT_BUS.post(new PacketEvent.ReceiveEvent((Packet) msg)); - super.channelRead(ctx, msg); - } - - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof Packet) MinecraftForge.EVENT_BUS.post(new PacketEvent.SendEvent((Packet) msg)); - super.write(ctx, msg, promise); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.java b/src/main/java/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.java deleted file mode 100644 index 9d5764c..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.handlers; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.scoreboard.Score; -import net.minecraft.scoreboard.ScoreObjective; -import net.minecraft.scoreboard.ScorePlayerTeam; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.util.StringUtils; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -public class ScoreboardHandler { - public static String cleanSB(String scoreboard) { - char[] nvString = StringUtils.stripControlCodes(scoreboard).toCharArray(); - StringBuilder cleaned = new StringBuilder(); - - for (char c : nvString) { - if ((int) c > 20 && (int) c < 127) { - cleaned.append(c); - } - } - - return cleaned.toString(); - } - - public static List getSidebarLines() { - List lines = new ArrayList<>(); - if (Minecraft.getMinecraft().theWorld == null) return lines; - Scoreboard scoreboard = Minecraft.getMinecraft().theWorld.getScoreboard(); - if (scoreboard == null) return lines; - - ScoreObjective objective = scoreboard.getObjectiveInDisplaySlot(1); - if (objective == null) return lines; - - Collection scores = scoreboard.getSortedScores(objective); - List list = scores.stream() - .filter(input -> input != null && input.getPlayerName() != null && !input.getPlayerName() - .startsWith("#")) - .collect(Collectors.toList()); - - if (list.size() > 15) { - scores = Lists.newArrayList(Iterables.skip(list, scores.size() - 15)); - } else { - scores = list; - } - - for (Score score : scores) { - ScorePlayerTeam team = scoreboard.getPlayersTeam(score.getPlayerName()); - lines.add(ScorePlayerTeam.formatPlayerName(team, score.getPlayerName())); - } - - return lines; - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/handlers/TextRenderer.java b/src/main/java/io/github/quantizr/dungeonrooms/handlers/TextRenderer.java deleted file mode 100644 index 93d8b5f..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/handlers/TextRenderer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.handlers; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.StringUtils; - -public class TextRenderer extends Gui { - public static void drawText(Minecraft mc, String text, int x, int y, double scale, boolean outline) { - GlStateManager.pushMatrix(); - GlStateManager.scale(scale, scale, scale); - y -= mc.fontRendererObj.FONT_HEIGHT; - for (String line : text.split("\n")) { - y += mc.fontRendererObj.FONT_HEIGHT * scale; - if (outline) { - String noColourLine = StringUtils.stripControlCodes(line); - mc.fontRendererObj.drawString(noColourLine, (int) Math.round(x / scale) - 1, (int) Math.round(y / scale), 0x000000, false); - mc.fontRendererObj.drawString(noColourLine, (int) Math.round(x / scale) + 1, (int) Math.round(y / scale), 0x000000, false); - mc.fontRendererObj.drawString(noColourLine, (int) Math.round(x / scale), (int) Math.round(y / scale) - 1, 0x000000, false); - mc.fontRendererObj.drawString(noColourLine, (int) Math.round(x / scale), (int) Math.round(y / scale) + 1, 0x000000, false); - mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, false); - } else { - mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, true); - } - } - GlStateManager.popMatrix(); - GlStateManager.color(1, 1, 1, 1); - } -} - diff --git a/src/main/java/io/github/quantizr/dungeonrooms/utils/MapUtils.java b/src/main/java/io/github/quantizr/dungeonrooms/utils/MapUtils.java deleted file mode 100644 index 2855b08..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/utils/MapUtils.java +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.utils; - -import net.minecraft.block.material.MapColor; -import net.minecraft.client.Minecraft; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; -import net.minecraft.util.Vec4b; -import net.minecraft.world.storage.MapData; - -import java.awt.*; -import java.util.*; -import java.util.List; - -public class MapUtils { - - /** - * Checks whether the Skyblock Dungeon Map is in the player's hotbar - * @return whether the map exists - */ - public static boolean mapExists() { - Minecraft mc = Minecraft.getMinecraft(); - ItemStack mapSlot = mc.thePlayer.inventory.getStackInSlot(8); //check last slot where map should be - if (mapSlot == null || mapSlot.getItem() != Items.filled_map || !mapSlot.hasDisplayName()) return false; //make sure it is a map, not SB Menu or Spirit Bow, etc - return mapSlot.getDisplayName().contains("Magical Map"); - } - - /** - * Reads the hotbar map and converts it into a 2D Integer array of RGB colors which can be used by the rest of the - * code - * - * @return null if map not found, otherwise 128x128 Array of the RGB Integer colors of each point on the map - */ - public static Integer[][] updatedMap() { - if (!mapExists()) return null; //make sure map exists - Minecraft mc = Minecraft.getMinecraft(); - ItemStack mapSlot = mc.thePlayer.inventory.getStackInSlot(8); //get map ItemStack - MapData mapData = Items.filled_map.getMapData(mapSlot, mc.theWorld); - if(mapData == null) return null; - Integer[][] map = new Integer[128][128]; - - //for loop code modified from net.minecraft.client.gui.MapItemRenderer.updateMapTexture() - for (int i = 0; i < 16384; ++i) { - int x = i % 128; //get x coordinate of pixel being read - int y = i / 128; //get y coordinate of pixel being read - int j = mapData.colors[i] & 255; - int rgba; - if (j / 4 == 0) { - rgba = (i + i / 128 & 1) * 8 + 16 << 24; - } else { - rgba = MapColor.mapColorArray[j / 4].getMapColor(j & 3); - } - map[x][y] = rgba & 0x00FFFFFF; //get rgb value from rgba - } - - return map; - } - - - /** - * This function finds the coordinates of the NW and NE corners of the entrance room on the hotbar map. This is - * later used to determine the size of the room grid on the hotbar map. Different floors have slightly different - * pixel widths of the rooms, so it is important for the mod to be able to identify the location and size of various - * portions of the room grid. Since all rooms within a floor are the same size on the hotbar map and since the - * entrance room is always there on the hotbar map, we get two corners from the entrance room to determine the - * scaling of the map as soon as the player enters. - * - * This function works by iterating through the map and looking for a green entrance room pixel. Once it finds one - * and determines that the map pixel above is a blank spot, it checks for map pixels on the left and right side. - * - * @return `entranceMapCorners[0]` is the coordinate of the left NW corner and `entranceMapCorners[1]` is the - * coordinate of the right NE corner - */ - public static Point[] entranceMapCorners(Integer[][] map) { - if (map == null) return null; - Point[] corners = new Point[2]; - - for (int x = 0; x < 128; x++) { - for (int y = 0; y < 128; y++) { - if (map[x][y] != null && map[x][y] == 31744 && map[x][y-1] != null && map[x][y-1] == 0) { //check for Green entrance room pixels and make sure row above is blank - if (map[x - 1][y] != null && map[x - 1][y] == 0) { - corners[0] = new Point(x, y); //Left corner - } else if (map[x + 1][y] != null && map[x + 1][y] == 0) { - corners[1] = new Point(x, y); //Right Corner - } - } - } - if (corners[0] != null && corners[1] != null) break; - } - return corners; - } - - /** - * @return the coordinate of the NW hotbar map corner closest to the coordinate provided - */ - public static Point getClosestNWMapCorner(Point mapPos, Point leftCorner, Point rightCorner) { - int roomWidthAndGap = rightCorner.x - leftCorner.x + 1 + 4; //+1 to count left corner block, +4 to account for gap between rooms - Point origin = new Point(leftCorner.x % roomWidthAndGap, leftCorner.y % roomWidthAndGap); - - mapPos.x = mapPos.x + 2; //shift by 2 so room borders are evenly split - mapPos.y = mapPos.y + 2; - - int x = mapPos.x - (mapPos.x % roomWidthAndGap) + origin.x; //round down to room size grid - int y = mapPos.y - (mapPos.y % roomWidthAndGap) + origin.y; - - if (x > mapPos.x) x -= roomWidthAndGap; //make sure coordinates are being rounded down (in case origin value being too large) - if (y > mapPos.y) y -= roomWidthAndGap; - - return new Point(x, y); - } - - /** - * Skyblock Dungeon maps are aligned to a 32x32 block wide grid, allowing for math only calculation of corners - * @return the coordinate of the NW physical map corner closest to the coordinate provided - */ - public static Point getClosestNWPhysicalCorner (Vec3 vectorPos) { - Vec3 shiftedPos = vectorPos.addVector(0.5, 0, 0.5); //shift by 0.5 so room borders are evenly split - shiftedPos = shiftedPos.addVector(8, 0, 8); //because Hypixel randomly shifted rooms in Skyblock 0.12.3 - int x = (int) (shiftedPos.xCoord - Math.floorMod((int) shiftedPos.xCoord, 32)); //room length 31, +1 to account for gap between rooms - int z = (int) (shiftedPos.zCoord - Math.floorMod((int) shiftedPos.zCoord, 32)); - - return new Point(x - 8 , z - 8); //-8 for same reason as above - } - - public static Point getClosestNWPhysicalCorner (BlockPos blockPos) { - return getClosestNWPhysicalCorner(new Vec3(blockPos.getX(), blockPos.getY(), blockPos.getZ())); - } - - /** - * @return the hotbar map coordinate corresponding to the physical map corner coordinate provided - */ - public static Point physicalToMapCorner(Point physicalClosestCorner, Point physicalLeftCorner, Point leftCorner, Point rightCorner) { - int roomWidthAndGap = rightCorner.x - leftCorner.x + 1 + 4; //+1 to count left corner block, +4 to account for gap between rooms - int xShift = (physicalClosestCorner.x - physicalLeftCorner.x) / 32; //how many 1x1 grids away the closest corner is from entrance - int yShift = (physicalClosestCorner.y - physicalLeftCorner.y) / 32; - - int x = leftCorner.x + (roomWidthAndGap * xShift); //translate grid distance to the map - int y = leftCorner.y + (roomWidthAndGap * yShift); - - //this function can return a value outside of 0-127 which are the bounds of the map - //must check bounds for any function using this - - return new Point(x, y); - } - - /** - * @return the physical map coordinate corresponding to the hotbar map corner coordinate provided - */ - public static Point mapToPhysicalCorner(Point mapCorner, Point physicalLeftCorner, Point leftCorner, Point rightCorner) { - int roomWidthAndGap = rightCorner.x - leftCorner.x + 1 + 4; //+1 to count left corner block, +4 to account for gap between rooms - int xShift = (mapCorner.x - leftCorner.x) / roomWidthAndGap; //how many 1x1 grids away the closest corner is from entrance - int yShift = (mapCorner.y - leftCorner.y) / roomWidthAndGap; - - int x = physicalLeftCorner.x + (32 * xShift); //translate grid distance to the physical - int y = physicalLeftCorner.y + (32 * yShift); - - return new Point(x, y); - } - - /** - * @return the color of the coordinate on the map as a String - */ - public static String getMapColor(Point point, Integer[][] map) { - int x = point.x; - int y = point.y; - - //physicalToMapCorner might be called when player is outside map zone e.g. boss room, returning a value outside - //of the map coordinates which would otherwise call getMapColor to crash - if (x < 0 || y < 0 || x > 127 || y > 127) { - return "undefined"; - } - - if (map != null) { - switch (map[x][y]) { - case 7488283: - return "brown"; - case 11685080: - return "purple"; - case 15066419: - return "yellow"; - case 31744: - return "green"; - case 15892389: - return "pink"; - case 14188339: - return "orange"; - case 16711680: - return "red"; - default: //includes default blank background color = 0 and any other possible map colors - return "undefined"; - } - } - return "undefined"; - } - - /** - * Checks a point on each side the room corner coordinate for either empty space or a connected segment, each new - * segment is recursively checked until all neighboring segments have been added to a list - * - * @return a List of the coordinates of all segments of the same room as the corner coordinate provided - */ - public static List neighboringSegments(Point originCorner, Integer[][] map, Point leftCorner, Point rightCorner, List list) { - if (!list.contains(originCorner)) { - list.add(originCorner); - } - if (!getMapColor(originCorner, map).equals("brown")) return list; //only continue if square is brown - - int roomWidth = rightCorner.x - leftCorner.x + 1; //+1 to count left corner block - - - List pointsToCheck = new ArrayList<>(); - pointsToCheck.add(new Point(originCorner.x, originCorner.y - 1)); //up - pointsToCheck.add(new Point(originCorner.x, originCorner.y + roomWidth)); //down - pointsToCheck.add(new Point(originCorner.x - 1, originCorner.y)); //left - pointsToCheck.add(new Point(originCorner.x + roomWidth, originCorner.y)); //right - - List pointsToTransform = new ArrayList<>(); //pointsToCheck +/- 4 to jump gap and calc correct closest NW corner - pointsToTransform.add(new Point(originCorner.x, originCorner.y - 1 - 4)); //up - pointsToTransform.add(new Point(originCorner.x, originCorner.y + roomWidth + 4)); //down - pointsToTransform.add(new Point(originCorner.x -1 - 4, originCorner.y)); //left - pointsToTransform.add(new Point(originCorner.x + roomWidth + 4, originCorner.y)); //right - - for (int i = 0; i < 4; i++) { - if (getMapColor(pointsToCheck.get(i), map).equals("brown")) { - Point newCorner = getClosestNWMapCorner(pointsToTransform.get(i), leftCorner, rightCorner); - - if (!list.contains(newCorner)) { - list.add(newCorner); - list = neighboringSegments(newCorner, map, leftCorner, rightCorner, list); //check for neighboring segments from the new point - } - } - } - - return list; - } - - /** - * @return the size of the room given a the location of each room segment - */ - public static String roomSize(List segments) { - //accepts either map segments or physical segments, does not matter - if (segments.size() == 1) return "1x1"; - if (segments.size() == 2) return "1x2"; - - HashSet x = new HashSet<>(); - HashSet y = new HashSet<>(); - for(Point segment:segments) { - x.add(segment.x); - y.add(segment.y); - } - if (segments.size() == 3) { - if (x.size() == 2 && y.size() == 2) return "L-shape"; - else return "1x3"; - } - if (segments.size() == 4) { - if (x.size() == 2 && y.size() == 2) return "2x2"; - else return "1x4"; - } - - return "undefined"; - } - - /** - * @return the category of the room given size and color - */ - public static String roomCategory(String roomSize, String roomColor) { - if (roomSize.equals("1x1")) { - switch (roomColor) { - case "brown": - return "1x1"; - case "purple": - return "Puzzle"; - case "orange": - return "Trap"; - case "green": - case "red": - case "pink": - case "yellow": - return "General"; - default: - return "undefined"; - } - } else { - return roomSize; - } - } - - /** - * @return the coordinate of the player marker on the map - */ - public static Point playerMarkerPos() { - if (!mapExists()) return null; //make sure map exists - Minecraft mc = Minecraft.getMinecraft(); - ItemStack mapSlot = mc.thePlayer.inventory.getStackInSlot(8); //get map ItemStack - MapData mapData = Items.filled_map.getMapData(mapSlot, mc.theWorld); - if(mapData == null) return null; - if (mapData.mapDecorations != null) { - for (Map.Entry entry : mapData.mapDecorations.entrySet()) { - if (entry.getValue().func_176110_a() == 1) { //player marker - int x = entry.getValue().func_176112_b() / 2 + 64; - int y = entry.getValue().func_176113_c() / 2 + 64; - return new Point(x, y); - } - } - } - return null; - } - - /** - * @return the location of the furthest corner in a direction given a list of segments - */ - public static Point getPhysicalCornerPos(String direction, List currentPhysicalSegments) { - //For L-shapes, this will return the fourth corner as if it were a 2x2 - TreeSet xSet = new TreeSet<>(); //TreeSet removes duplicates and sorts increasing - TreeSet ySet = new TreeSet<>(); - for(Point segment:currentPhysicalSegments) { - xSet.add(segment.x); - ySet.add(segment.y); - } - - switch (direction) { - case "NW": - return new Point(xSet.first(), ySet.first()); - case "NE": - return new Point(xSet.last() + 30, ySet.first()); - case "SE": - return new Point(xSet.last() + 30, ySet.last() + 30); - case "SW": - return new Point(xSet.first(), ySet.last() + 30); - } - return null; - } - - /** - * Rooms such as L-shape rooms only have one possible direction, so it is much faster to only have to compare one - * direction instead of rotating it 4 times. Similarly, rectangular shaped rooms have two possible directions, - * saving time instead of rotating it 4 times. Square shaped rooms must be checked in all four directions. - * - * @return the possible rotation directions which need to be checked - */ - public static List possibleDirections(String roomSize, List currentRoomSegments) { - //can take physical or hotbar segments - //eliminates two possibilities for rectangular rooms, three possibilities for L-shape - List directions = new ArrayList<>(); - if (roomSize.equals("1x1") || roomSize.equals("2x2")) { - directions.add("NW"); - directions.add("NE"); - directions.add("SE"); - directions.add("SW"); - } else { - TreeSet xSet = new TreeSet<>(); //TreeSet removes duplicates and sorts increasing - TreeSet ySet = new TreeSet<>(); - for(Point segment:currentRoomSegments) { - xSet.add(segment.x); - ySet.add(segment.y); - } - if (roomSize.equals("L-shape")) { - List x = new ArrayList<>(xSet); - List y = new ArrayList<>(ySet); - - if (!currentRoomSegments.contains(new Point(x.get(0), y.get(0)))) directions.add("SW"); - else if (!currentRoomSegments.contains(new Point(x.get(0), y.get(1)))) directions.add("SE"); - else if (!currentRoomSegments.contains(new Point(x.get(1), y.get(0)))) directions.add("NW"); - else if (!currentRoomSegments.contains(new Point(x.get(1), y.get(1)))) directions.add("NE"); - - } else if (roomSize.startsWith("1x")) { //not 1x1 bc else statement earlier - if (xSet.size() >= 2 && ySet.size() == 1) { - directions.add("NW"); - directions.add("SE"); - } else if (xSet.size() == 1 && ySet.size() >= 2) { - directions.add("NE"); - directions.add("SW"); - } - } - } - return directions; - } - - /** - * @return the actual coordinate of a block given the relative coordinate - */ - public static BlockPos actualToRelative(BlockPos actual, String cornerDirection, Point locationOfCorner) { - double x = 0; - double z = 0; - switch (cornerDirection) { - case "NW": - x = actual.getX() - locationOfCorner.getX(); - z = actual.getZ() - locationOfCorner.getY(); //.getY in a point is the MC Z coord - break; - case "NE": - x = actual.getZ() - locationOfCorner.getY(); - z = -(actual.getX() - locationOfCorner.getX()); - break; - case "SE": - x = -(actual.getX() - locationOfCorner.getX()); - z = -(actual.getZ() - locationOfCorner.getY()); - break; - case "SW": - x = -(actual.getZ() - locationOfCorner.getY()); - z = actual.getX() - locationOfCorner.getX(); - break; - } - return new BlockPos(x, actual.getY(), z); - } - - /** - * @return the relative coordinate of a block given the actual coordinate - */ - public static BlockPos relativeToActual(BlockPos relative, String cornerDirection, Point locationOfCorner) { - double x = 0; - double z = 0; - switch (cornerDirection) { - case "NW": - x = relative.getX() + locationOfCorner.getX(); - z = relative.getZ() + locationOfCorner.getY(); //.getY in a point is the MC Z coord - break; - case "NE": - x = -(relative.getZ() - locationOfCorner.getX()); - z = relative.getX() + locationOfCorner.getY(); - break; - case "SE": - x = -(relative.getX() - locationOfCorner.getX()); - z = -(relative.getZ() - locationOfCorner.getY()); - break; - case "SW": - x = relative.getZ() + locationOfCorner.getX(); - z = -(relative.getX() - locationOfCorner.getY()); - break; - } - return new BlockPos(x, relative.getY(), z); - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/utils/Utils.java b/src/main/java/io/github/quantizr/dungeonrooms/utils/Utils.java deleted file mode 100644 index 60aa1cd..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/utils/Utils.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.utils; - -import io.github.quantizr.dungeonrooms.DungeonRooms; -import io.github.quantizr.dungeonrooms.handlers.ScoreboardHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.scoreboard.ScoreObjective; -import net.minecraft.util.ChatComponentText; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.config.BaseConfiguration; -import org.apache.logging.log4j.core.config.LoggerConfig; - -import java.io.*; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; -import java.util.stream.Stream; -import java.util.zip.InflaterInputStream; - -public class Utils { - public static boolean inSkyblock = false; - public static boolean inCatacombs = false; - public static boolean dungeonOverride = false; - - /** - * Taken from Danker's Skyblock Mod under the GNU General Public License v3.0 - * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE - * @author bowser0000 - */ - public static void checkForSkyblock() { - if (dungeonOverride) { - inSkyblock = true; - return; - } - Minecraft mc = Minecraft.getMinecraft(); - if (mc != null && mc.theWorld != null && !mc.isSingleplayer()) { - ScoreObjective scoreboardObj = mc.theWorld.getScoreboard().getObjectiveInDisplaySlot(1); - if (scoreboardObj != null) { - String scObjName = ScoreboardHandler.cleanSB(scoreboardObj.getDisplayName()); - if (scObjName.contains("SKYBLOCK")) { - inSkyblock = true; - return; - } - } - } - inSkyblock = false; - } - - /** - * Taken from Danker's Skyblock Mod under the GNU General Public License v3.0 - * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE - * @author bowser0000 - */ - public static void checkForCatacombs() { - if (dungeonOverride) { - inCatacombs = true; - return; - } - if (inSkyblock) { - List scoreboard = ScoreboardHandler.getSidebarLines(); - for (String s : scoreboard) { - String sCleaned = ScoreboardHandler.cleanSB(s); - if (sCleaned.contains("The Catacombs")) { - inCatacombs = true; - return; - } - } - } - inCatacombs = false; - } - - - public static void checkForConflictingHotkeys() { - Minecraft mc = Minecraft.getMinecraft(); - for (KeyBinding drmKeybind : DungeonRooms.keyBindings) { - for (KeyBinding keybinding : mc.gameSettings.keyBindings) { - if (drmKeybind.getKeyCode() != 0 && drmKeybind != keybinding && drmKeybind.getKeyCode() == keybinding.getKeyCode()) { - mc.thePlayer.addChatMessage(new ChatComponentText("§d§l--- Dungeon Rooms Mod ---\n" - + " §r§cThe hotkey \"" + GameSettings.getKeyDisplayString(drmKeybind.getKeyCode()) - + "\", which is used to " + drmKeybind.getKeyDescription() + ", has a conflict with a " - + "keybinding from \"" + keybinding.getKeyCategory() + "\".\n §c§lPlease go into the " - + "Minecraft Controls menu and change one of the keybindings.\n" - + "§d§l------------------------" - )); - } - } - } - - } - - /** - * @return List of the paths to every .skeleton room data file - */ - public static List getAllPaths (String folderName) { - List paths = new ArrayList<>(); - try { - URI uri = DungeonRooms.class.getResource("/assets/dungeonrooms/" + folderName).toURI(); - Path Path; - FileSystem fileSystem = null; - if (uri.getScheme().equals("jar")) { - fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); - Path = fileSystem.getPath("/assets/dungeonrooms/" + folderName); - } else { - Path = Paths.get(uri); - } - Stream walk = Files.walk(Path, 3); - for (Iterator it = walk.iterator(); it.hasNext();) { - Path path = it.next(); - String name = path.getFileName().toString(); - if (name.endsWith(".skeleton")) paths.add(path); - } - if (fileSystem != null) fileSystem.close(); - } catch (URISyntaxException | IOException e) { - e.printStackTrace(); - } - return paths; - } - - /** - * Converts the .skeleton files into a readable format. - * @return room data as a hashmap - */ - public static HashMap pathsToRoomData (String parentFolder, List allPaths) { - HashMap allRoomData = new HashMap<>(); - try { - for (Path path : allPaths) { - if (!path.getParent().getFileName().toString().equals(parentFolder)) continue; - String name = path.getFileName().toString(); - InputStream input = DungeonRooms.class.getResourceAsStream(path.toString()); - ObjectInputStream data = new ObjectInputStream(new InflaterInputStream(input)); - long[] roomData = (long[]) data.readObject(); - allRoomData.put(name.substring(0, name.length() - 9), roomData); - DungeonRooms.logger.debug("DungeonRooms: Loaded " + name); - } - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - DungeonRooms.logger.info("DungeonRooms: Loaded " + allRoomData.size() + " " + parentFolder + " rooms"); - return allRoomData; - } - - /** - * Used to set the log level of just this mod - */ - public static void setLogLevel(Logger logger, Level level) { - final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); - BaseConfiguration config = (BaseConfiguration) ctx.getConfiguration(); - - LoggerConfig loggerConfig = config.getLoggerConfig(logger.getName()); - LoggerConfig specificConfig = loggerConfig; - - if (!loggerConfig.getName().equals(logger.getName())) { - specificConfig = new LoggerConfig(logger.getName(), level, true); - specificConfig.setParent(loggerConfig); - config.addLogger(logger.getName(), specificConfig); - } - specificConfig.setLevel(level); - ctx.updateLoggers(); - } - - /** - * Packs block info into a single 8 byte primitive long. Normally, first pair of bytes will be x coordinate, second - * pair will be y coordinate, third pair will be z coordinate, and last pair will be block id and metadata. - * @return primitive long containing block info - */ - public static long shortToLong(short a, short b, short c, short d) { - return ((long)((a << 16) | (b & 0xFFFF)) << 32) | (((c << 16) | (d & 0xFFFF)) & 0xFFFFFFFFL); - } - - /** - * @return Array of four shorts containing the values stored in the long - */ - public static short[] longToShort(long l) { - return new short[]{(short) (l >> 48), (short) (l >> 32), (short) (l >> 16), (short) (l)}; - } -} diff --git a/src/main/java/io/github/quantizr/dungeonrooms/utils/WaypointUtils.java b/src/main/java/io/github/quantizr/dungeonrooms/utils/WaypointUtils.java deleted file mode 100644 index e613c00..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/utils/WaypointUtils.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package io.github.quantizr.dungeonrooms.utils; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.Entity; -import net.minecraft.util.*; -import org.lwjgl.opengl.GL11; - -import java.awt.*; - -public class WaypointUtils { - private static final ResourceLocation beaconBeam = new ResourceLocation("textures/entity/beacon_beam.png"); - - /** - * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 - * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE - * @author Moulberry - */ - public static void renderBeaconBeam(double x, double y, double z, int rgb, float alphaMultiplier, float partialTicks) { - int height = 300; - int bottomOffset = 0; - int topOffset = bottomOffset + height; - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - - Minecraft.getMinecraft().getTextureManager().bindTexture(beaconBeam); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GlStateManager.disableLighting(); - GlStateManager.enableCull(); - GlStateManager.enableTexture2D(); - GlStateManager.tryBlendFuncSeparate(770, 1, 1, 0); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - - double time = Minecraft.getMinecraft().theWorld.getTotalWorldTime() + (double)partialTicks; - double d1 = MathHelper.func_181162_h(-time * 0.2D - (double)MathHelper.floor_double(-time * 0.1D)); - - float r = ((rgb >> 16) & 0xFF) / 255f; - float g = ((rgb >> 8) & 0xFF) / 255f; - float b = (rgb & 0xFF) / 255f; - double d2 = time * 0.025D * -1.5D; - double d4 = 0.5D + Math.cos(d2 + 2.356194490192345D) * 0.2D; - double d5 = 0.5D + Math.sin(d2 + 2.356194490192345D) * 0.2D; - double d6 = 0.5D + Math.cos(d2 + (Math.PI / 4D)) * 0.2D; - double d7 = 0.5D + Math.sin(d2 + (Math.PI / 4D)) * 0.2D; - double d8 = 0.5D + Math.cos(d2 + 3.9269908169872414D) * 0.2D; - double d9 = 0.5D + Math.sin(d2 + 3.9269908169872414D) * 0.2D; - double d10 = 0.5D + Math.cos(d2 + 5.497787143782138D) * 0.2D; - double d11 = 0.5D + Math.sin(d2 + 5.497787143782138D) * 0.2D; - double d14 = -1.0D + d1; - double d15 = (double)(height) * 2.5D + d14; - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); - worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(1.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(0.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(1.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(0.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(1.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(0.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(1.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(0.0D, d15).color(r, g, b, alphaMultiplier).endVertex(); - tessellator.draw(); - - GlStateManager.disableCull(); - double d12 = -1.0D + d1; - double d13 = height + d12; - - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.2D).tex(1.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.2D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.2D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.2D).tex(0.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.8D).tex(1.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.8D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.8D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.8D).tex(0.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.2D).tex(1.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.2D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.8D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.8D).tex(0.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.8D).tex(1.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.8D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.2D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.2D).tex(0.0D, d13).color(r, g, b, 0.25F*alphaMultiplier).endVertex(); - tessellator.draw(); - } - - /** - * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 - * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE - * @author Moulberry - */ - public static void drawFilledBoundingBox(AxisAlignedBB aabb, Color c, float alphaMultiplier) { - GlStateManager.enableBlend(); - GlStateManager.disableLighting(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.disableTexture2D(); - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - - GlStateManager.color(c.getRed()/255f, c.getGreen()/255f, c.getBlue()/255f, c.getAlpha()/255f*alphaMultiplier); - - //vertical - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); - tessellator.draw(); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); - tessellator.draw(); - - - GlStateManager.color(c.getRed()/255f*0.8f, c.getGreen()/255f*0.8f, c.getBlue()/255f*0.8f, c.getAlpha()/255f*alphaMultiplier); - - //x - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - tessellator.draw(); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); - tessellator.draw(); - - - GlStateManager.color(c.getRed()/255f*0.9f, c.getGreen()/255f*0.9f, c.getBlue()/255f*0.9f, c.getAlpha()/255f*alphaMultiplier); - //z - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - tessellator.draw(); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); - worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); - worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); - tessellator.draw(); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); - } - - /** - * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 - * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE - * @author Moulberry - */ - public static void renderWaypointText(String str, BlockPos loc, float partialTicks) { - GlStateManager.alphaFunc(516, 0.1F); - - GlStateManager.pushMatrix(); - - Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); - double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * partialTicks; - double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * partialTicks; - double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * partialTicks; - - double x = loc.getX() + 0.5 - viewerX; - double y = loc.getY() - viewerY - viewer.getEyeHeight(); - double z = loc.getZ() + 0.5 - viewerZ; - - double distSq = x*x + y*y + z*z; - double dist = Math.sqrt(distSq); - if(distSq > 144) { - x *= 12/dist; - y *= 12/dist; - z *= 12/dist; - } - GlStateManager.translate(x, y, z); - GlStateManager.translate(0, viewer.getEyeHeight(), 0); - - drawNametag(str); - - GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); - GlStateManager.translate(0, -0.25f, 0); - GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); - - drawNametag(EnumChatFormatting.YELLOW.toString()+Math.round(dist)+"m"); - - GlStateManager.popMatrix(); - - GlStateManager.disableLighting(); - } - - /** - * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 - * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE - * @author Moulberry - */ - public static void drawNametag(String str) { - FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; - float f = 1.6F; - float f1 = 0.016666668F * f; - GlStateManager.pushMatrix(); - GL11.glNormal3f(0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); - GlStateManager.scale(-f1, -f1, f1); - GlStateManager.disableLighting(); - GlStateManager.depthMask(false); - GlStateManager.disableDepth(); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - int i = 0; - - int j = fontrenderer.getStringWidth(str) / 2; - GlStateManager.disableTexture2D(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos(-j - 1, -1 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(-j - 1, 8 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(j + 1, 8 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(j + 1, -1 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - tessellator.draw(); - GlStateManager.enableTexture2D(); - fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, 553648127); - GlStateManager.depthMask(true); - - fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, -1); - - GlStateManager.enableDepth(); - GlStateManager.enableBlend(); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager.popMatrix(); - } - -} diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt new file mode 100644 index 0000000..4e0a6f3 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt @@ -0,0 +1,71 @@ +package io.github.quantizr.dungeonrooms + + +import net.minecraft.client.Minecraft +import net.minecraft.util.ChatComponentText +import net.minecraft.util.IChatComponent +import net.minecraftforge.client.event.ClientChatReceivedEvent +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent +import java.util.* +import java.util.concurrent.ConcurrentLinkedQueue + +/** + * Taken from dg-LTS under the GNU General Public License v3.0 + * https://github.com/dg-continuum/dg-LTS + * @author kingstefan26 + */ +class ChatTransmitter { + + @SubscribeEvent + fun onTick(clientTickEvent: ClientTickEvent) { + if (clientTickEvent.phase != TickEvent.Phase.START && Minecraft.getMinecraft().thePlayer == null) return + if (!receiveQueue.isEmpty()) { + val event = ClientChatReceivedEvent(1.toByte(), receiveQueue.poll()) + MinecraftForge.EVENT_BUS.post(event) + if (!event.isCanceled) { + Minecraft.getMinecraft().thePlayer.addChatMessage(event.message) + } + } + } + + companion object { + const val PREFIX = "DungeonRooms: " + var receiveQueue: Queue = ConcurrentLinkedQueue() + fun addToQueue(chat: String, noDupe: Boolean) { + addToQueue(ChatComponentText(chat.replace("@", "§")), noDupe) + } + + @JvmOverloads + fun addToQueue(chat: ChatComponentText, noDupe: Boolean = false) { + if (noDupe && receiveQueue.stream().anyMatch { it == chat }) return + receiveQueue.add(chat) + } + @JvmOverloads + fun addToQueue(chat: IChatComponent) { + receiveQueue.add(chat) + } + + @JvmStatic + fun addToQueue(s: String) { + addToQueue(s, false) + } + + @JvmStatic + fun addToQueueWPrefix(s: String) { + addToQueue(PREFIX + s, false) + } + + @JvmStatic + fun sendDebugChat(iChatComponent: IChatComponent) { + if (DungeonRooms.debug) addToQueue(iChatComponent as ChatComponentText) + } + + @JvmStatic + fun sendDebugChat(text: String?) { + sendDebugChat(ChatComponentText(text)) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt new file mode 100644 index 0000000..6068a1b --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -0,0 +1,288 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms + +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import io.github.quantizr.dungeonrooms.commands.RoomCommand +import io.github.quantizr.dungeonrooms.dungeons.DungeonManager +import io.github.quantizr.dungeonrooms.dungeons.RoomDetection +import io.github.quantizr.dungeonrooms.dungeons.Waypoints +import io.github.quantizr.dungeonrooms.gui.WaypointsGUI +import io.github.quantizr.dungeonrooms.handlers.ConfigHandler.reloadConfig +import io.github.quantizr.dungeonrooms.handlers.OpenLink.checkForLink +import io.github.quantizr.dungeonrooms.handlers.PacketHandler +import io.github.quantizr.dungeonrooms.handlers.TextRenderer.drawText +import io.github.quantizr.dungeonrooms.utils.Utils +import io.github.quantizr.dungeonrooms.utils.Utils.checkForCatacombs +import io.github.quantizr.dungeonrooms.utils.Utils.checkForSkyblock +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.settings.KeyBinding +import net.minecraft.event.ClickEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting +import net.minecraftforge.client.ClientCommandHandler +import net.minecraftforge.client.event.RenderGameOverlayEvent +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.fml.client.registry.ClientRegistry +import net.minecraftforge.fml.common.Loader +import net.minecraftforge.fml.common.Mod +import net.minecraftforge.fml.common.event.FMLInitializationEvent +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.InputEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent +import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger +import org.lwjgl.input.Keyboard +import java.io.BufferedReader +import java.io.IOException +import java.io.InputStream +import java.io.InputStreamReader +import java.net.URL +import java.nio.charset.StandardCharsets +import java.util.* +import java.util.function.Consumer + +@Mod(modid = DungeonRooms.MODID, version = DungeonRooms.VERSION) +class DungeonRooms { + var mc: Minecraft = Minecraft.getMinecraft() + + @Mod.EventHandler + fun preInit(event: FMLPreInitializationEvent) { + ClientCommandHandler.instance.registerCommand(RoomCommand()) + configDir = event.modConfigurationDirectory.toString() + + //initialize logger + logger = LogManager.getLogger(instance::class.java) +// Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) + } + + val roomDetection = RoomDetection() + val roomDataLoader = RoomDataLoader() + + @Mod.EventHandler + fun init(event: FMLInitializationEvent?) { + DRMConfig() + roomDataLoader.startAsyncLoad() + + //register classes + MinecraftForge.EVENT_BUS.register(this) + MinecraftForge.EVENT_BUS.register(ChatTransmitter()) + MinecraftForge.EVENT_BUS.register(DungeonManager()) + MinecraftForge.EVENT_BUS.register(roomDetection) + MinecraftForge.EVENT_BUS.register(Waypoints()) + + //reload config + reloadConfig() + + roomDataLoader.blockTillLoad() + + } + + @Mod.EventHandler + fun postInit(event: FMLPostInitializationEvent?) { + usingSBPSecrets = Loader.isModLoaded("sbp") + logger.info("DungeonRooms: SBP Dungeon Secrets detection: $usingSBPSecrets") + } + + fun forEverySecretInRoom(comsumer: Consumer>) { + val (secretsArray, roomName) = getSecretsArray() ?: return + + for (i in 0 until secretsArray.size()) { + val secret = secretsArray[i].asJsonObject + comsumer.accept(Pair(secret, roomName)) + } + + } + + fun getSecretsObject(): Pair? { + if(roomDetection.roomName == "undefined") return null + + val arr = roomDataLoader.waypointsJson[roomDetection.roomName] ?: return null + + return Pair(arr.asJsonObject, roomDetection.roomName) + } + + fun getSecretsArray(): Pair? { + if(roomDetection.roomName == "undefined") return null + + val arr = roomDataLoader.waypointsJson[roomDetection.roomName] ?: return null + + return Pair(arr.asJsonArray, roomDetection.roomName) + } + + /** + * Modified from Danker's Skyblock Mod under the GNU General Public License v3.0 + * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE + * @author bowser0000 + */ + @SubscribeEvent + fun onServerConnect(event: ClientConnectedToServerEvent) { + if (mc.currentServerData == null) return + if (mc.currentServerData.serverIP.lowercase().contains("hypixel.")) { + logger.info("DungeonRooms: Connecting to Hypixel...") + + //Packets are used in this mod solely to detect when the player picks up an item. No packets are modified or created. + event.manager.channel().pipeline().addBefore("packet_handler", "drm_packet_handler", PacketHandler()) + logger.info("DungeonRooms: Packet Handler added") + Thread { + try { + while (mc.thePlayer == null) { + //Yes, I'm too lazy to code something proper, so I'm busy-waiting, shut up. no :) -carmel + //It usually waits for less than half a second + Thread.sleep(100) + } + Thread.sleep(3000) + if (mc.currentServerData.serverIP.lowercase().contains("hypixel.")) { + logger.info("DungeonRooms: Checking for updates...") + var url = URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest") + val request = url.openConnection() + request.connect() + val json = JsonParser() + val latestRelease = json.parse(InputStreamReader(request.content as InputStream)).asJsonObject + val latestTag = latestRelease["tag_name"].asString + val currentVersion = DefaultArtifactVersion(VERSION) + val latestVersion = DefaultArtifactVersion(latestTag.substring(1)) + if (currentVersion < latestVersion) { + val releaseURL = "https://github.com/Quantizr/DungeonRoomsMod/releases/latest" + val update = + ChatComponentText("${EnumChatFormatting.GREEN}${EnumChatFormatting.BOLD} [UPDATE] ") + update.chatStyle = + update.chatStyle.setChatClickEvent(ClickEvent(ClickEvent.Action.OPEN_URL, releaseURL)) + mc.thePlayer.addChatMessage( + ChatComponentText( + """ + ${EnumChatFormatting.RED}Dungeon Rooms Mod is outdated. Please update to $latestTag. + """.trimIndent() + ).appendSibling(update) + ) + } else { + logger.info("DungeonRooms: No update found") + } + logger.info("DungeonRooms: Getting MOTD...") + url = URL("https://gist.githubusercontent.com/Quantizr/01aca53e61cef5dfd08989fec600b204/raw/") + val `in` = BufferedReader(InputStreamReader(url.openStream(), StandardCharsets.UTF_8)) + var line: String + motd = ArrayList() + while (`in`.readLine().also { line = it } != null) { + (motd as ArrayList).add(line) + } + `in`.close() + logger.info("DungeonRooms: MOTD has been checked") + } + } catch (e: IOException) { + mc.thePlayer.addChatMessage(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + e.printStackTrace() + } catch (e: InterruptedException) { + mc.thePlayer.addChatMessage(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + e.printStackTrace() + } + }.start() + } + } + + @SubscribeEvent + fun onTick(event: ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + val player = mc.thePlayer + tickAmount++ + if (tickAmount % 20 == 0) { + if (player != null) { + checkForSkyblock() + checkForCatacombs() + tickAmount = 0 + } + } + } + + @SubscribeEvent + fun onKey(event: InputEvent.KeyInputEvent?) { + if (DRMConfig.openSecretImages.isActive) { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Use this hotkey inside of a dungeon room") + return + } + when (DRMConfig.imageHotkeyOpen) { + 0 -> checkForLink("gui") + 1 -> checkForLink("dsg") + 2 -> checkForLink("sbp") + else -> ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: hotkeyOpen config value improperly set, do \"/room set \" to change the value") + } + } + if (DRMConfig.waypointGuiKey.isActive) { + mc.addScheduledTask { mc.displayGuiScreen(WaypointsGUI()) } + } + if (DRMConfig.practiceModeKeyBind.isActive) { + if (DRMConfig.waypointsEnabled && !DRMConfig.practiceModeOn) { + ChatTransmitter.addToQueue("""${EnumChatFormatting.RED}Dungeon Rooms: Run "/room toggle practice" to enable Practice Mode.""") + + } else if (!DRMConfig.waypointsEnabled && DRMConfig.practiceModeOn) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Waypoints must be enabled for Practice Mode to work.") + + } + } + } + + @SubscribeEvent + fun renderPlayerInfo(event: RenderGameOverlayEvent.Post) { + if (event.type != RenderGameOverlayEvent.ElementType.ALL) return + if (!Utils.inSkyblock) return + if (textToDisplay != null) { + if (textToDisplay!!.isNotEmpty()) { + val scaledResolution = ScaledResolution(mc) + var y = 0 + for (line in textToDisplay!!) { + val roomStringWidth = mc.fontRendererObj.getStringWidth(line) + drawText( + mc, line, scaledResolution.scaledWidth * DRMConfig.textLocX / 100 - roomStringWidth / 2, + scaledResolution.scaledHeight * DRMConfig.textLocY / 100 + y, 1.0, true + ) + y += mc.fontRendererObj.FONT_HEIGHT + } + } + } + } + + companion object { + const val debug: Boolean = false + + @Mod.Instance + @JvmStatic + lateinit var instance: DungeonRooms + private set + + const val MODID = "dungeonrooms" + const val VERSION = "3.3.2" + lateinit var logger: Logger + + + var usingSBPSecrets = false + var tickAmount = 1 + var textToDisplay: List? = null + var motd: MutableList? = null + var configDir: String? = null + var firstLogin = false + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt new file mode 100644 index 0000000..dcba1cd --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt @@ -0,0 +1,113 @@ +package io.github.quantizr.dungeonrooms + +import com.google.gson.Gson +import com.google.gson.JsonObject +import io.github.quantizr.dungeonrooms.utils.Utils +import java.io.InputStreamReader +import java.util.HashMap +import java.util.concurrent.ExecutionException +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.Future + +class RoomDataLoader { + + companion object { + const val roomDataPath = "/assets/dungeonrooms/dungeonrooms.json" + const val secretLocPath = "/assets/dungeonrooms/secretlocations.json" + } + + private var blockedTime: Long = 0 + private var blockedTimeFor1x1: Long = 0 + private var asyncLoadTime: Long = 0 + + + lateinit var roomsJson: JsonObject + lateinit var waypointsJson: JsonObject + var ROOM_DATA = HashMap>() + + private lateinit var executor: ExecutorService + + private lateinit var future1x1: Future> + private lateinit var future1x2: Future> + private lateinit var future1x3: Future> + private lateinit var future1x4: Future> + private lateinit var future2x2: Future> + private lateinit var futureLShape: Future> + private lateinit var futurePuzzle: Future> + private lateinit var futureTrap: Future> + + private var asyncLoadStart: Long = 0 + + fun startAsyncLoad(){ + executor = Executors.newFixedThreadPool(4) // don't need 8 threads because it's just 1x1 that takes longest + asyncLoadStart = System.currentTimeMillis() + + // load the room skeletons + val paths = Utils.getAllPaths("catacombs") + future1x1 = executor.submit> { Utils.pathsToRoomData("1x1", paths) } + future1x2 = executor.submit> { Utils.pathsToRoomData("1x2", paths) } + future1x3 = executor.submit> { Utils.pathsToRoomData("1x3", paths) } + future1x4 = executor.submit> { Utils.pathsToRoomData("1x4", paths) } + future2x2 = executor.submit> { Utils.pathsToRoomData("2x2", paths) } + futureLShape = executor.submit> { Utils.pathsToRoomData("L-shape", paths) } + futurePuzzle = executor.submit> { Utils.pathsToRoomData("Puzzle", paths) } + futureTrap = executor.submit> { Utils.pathsToRoomData("Trap", paths) } + + // get room and waypoint info + executor.submit { + val gson = Gson() + this::class.java.getResourceAsStream(roomDataPath) + .use { fis -> + fis?.let { + InputStreamReader(fis).use { yas -> + roomsJson = gson.fromJson(yas, JsonObject::class.java) + DungeonRooms.logger.info("DungeonRooms: Loaded dungeonrooms.json") + } + } + } + this::class.java.getResourceAsStream(secretLocPath) + .use { fis -> + fis?.let { + InputStreamReader(fis).use { yas -> + waypointsJson = gson.fromJson(yas, JsonObject::class.java) + DungeonRooms.logger.info("DungeonRooms: Loaded secretlocations.json") + } + } + } + } + } + + fun blockTillLoad() { + // set RoomData to futures - this will block if the rest of init was fast + try { + val oneByOneStart = System.currentTimeMillis() + ROOM_DATA["1x1"] = future1x1.get() + + val restOfRoomsStart = System.currentTimeMillis() + ROOM_DATA["1x2"] = future1x2.get() + ROOM_DATA["1x3"] = future1x3.get() + ROOM_DATA["1x4"] = future1x4.get() + ROOM_DATA["2x2"] = future2x2.get() + ROOM_DATA["L-shape"] = futureLShape.get() + ROOM_DATA["Puzzle"] = futurePuzzle.get() + ROOM_DATA["Trap"] = futureTrap.get() + + this.asyncLoadTime = oneByOneStart - asyncLoadStart + this.blockedTimeFor1x1 = restOfRoomsStart - oneByOneStart + this.blockedTime = System.currentTimeMillis() - restOfRoomsStart + + } catch (e: ExecutionException) { + e.printStackTrace() + } catch (e: InterruptedException) { + e.printStackTrace() + } + + DungeonRooms.logger.debug("DungeonRooms: Time(ms) for init before get futures: $asyncLoadTime") + DungeonRooms.logger.debug("DungeonRooms: Blocked Time(ms) for 1x1: $blockedTimeFor1x1") + DungeonRooms.logger.debug("DungeonRooms: Blocked Time(ms) remaining for other rooms: $blockedTime") + + executor.shutdown() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt new file mode 100644 index 0000000..d6f609b --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt @@ -0,0 +1,595 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.commands + +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.dungeons.DungeonManager +import io.github.quantizr.dungeonrooms.gui.WaypointsGUI +import io.github.quantizr.dungeonrooms.handlers.ConfigHandler +import io.github.quantizr.dungeonrooms.handlers.OpenLink +import io.github.quantizr.dungeonrooms.utils.MapUtils +import io.github.quantizr.dungeonrooms.utils.Utils +import net.minecraft.client.Minecraft +import net.minecraft.client.settings.GameSettings +import net.minecraft.command.CommandBase +import net.minecraft.command.ICommandSender +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.init.Blocks +import net.minecraft.util.BlockPos +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting +import net.minecraft.util.MovingObjectPosition +import net.minecraft.world.World +import java.awt.Desktop +import java.awt.Toolkit +import java.awt.datatransfer.StringSelection +import java.io.IOException +import java.net.URI +import java.net.URISyntaxException + +class RoomCommand : CommandBase() { + override fun getCommandName(): String { + return "room" + } + + override fun getCommandUsage(arg0: ICommandSender): String { + return "/$commandName" + } + + override fun getCommandAliases(): List { + return listOf("drm") + } + + override fun getRequiredPermissionLevel(): Int { + return 0 + } + + override fun addTabCompletionOptions(sender: ICommandSender, args: Array, pos: BlockPos): List? { + if (args.size == 1) { + return getListOfStringsMatchingLastWord(args, "help", "waypoints", "move", "toggle", "set", "discord") + } + if (args.size > 1) { + if (args[0].equals("toggle", ignoreCase = true)) { + return getListOfStringsMatchingLastWord( + args, + "help", + "gui", + "waypointtext", + "waypointboundingbox", + "waypointbeacon" + ) + } else if (args[0].equals("set", ignoreCase = true)) { + return getListOfStringsMatchingLastWord(args, "gui", "dsg", "sbp") + } + } + return null + } + + override fun processCommand(arg0: ICommandSender, arg1: Array) { + val mc = Minecraft.getMinecraft() + val player = arg0 as EntityPlayer + if (arg1.isEmpty()) { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons or run \"/room help\" for additional options" + ) + + } else { + if (DungeonManager.gameStage == 2) { + for (line in DungeonRooms.textToDisplay!!) { + player.addChatMessage(ChatComponentText(line)) + } + ChatTransmitter.addToQueue( + "${EnumChatFormatting.GREEN}Dungeon Rooms: You can also run \"/room help\" for additional options" + ) + + } else { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command while clearing rooms or run \"/room help\" for additional options" + ) + + } + } + } else { + when (arg1[0].lowercase()) { + "help" -> ChatTransmitter.addToQueue( + """ + ${EnumChatFormatting.GOLD}Dungeon Rooms Mod Version ${DungeonRooms.VERSION} + ${EnumChatFormatting.DARK_PURPLE}Hotkeys: (Configurable in Controls Menu) + ${EnumChatFormatting.AQUA} ${DRMConfig.waypointGuiKey.display}${EnumChatFormatting.WHITE} - Opens Secret Waypoints configuration GUI + ${EnumChatFormatting.AQUA} ${DRMConfig.openSecretImages.display}${EnumChatFormatting.WHITE} - (old) Opens images of secret locations + ${EnumChatFormatting.AQUA} ${DRMConfig.practiceModeKeyBind.display}${EnumChatFormatting.WHITE} - View waypoints in Practice Mode ("/room toggle practice") + ${EnumChatFormatting.DARK_PURPLE}Commands: + ${EnumChatFormatting.AQUA} /room${EnumChatFormatting.WHITE} - Tells you in chat what room you are standing in. + ${EnumChatFormatting.AQUA} /room help${EnumChatFormatting.WHITE} - Displays this message. + ${EnumChatFormatting.AQUA} /room waypoints${EnumChatFormatting.WHITE} - Opens Secret Waypoints config GUI, alternatively can be opened with hotkey + ${EnumChatFormatting.AQUA} /room move ${EnumChatFormatting.WHITE} - Moves the GUI room name text to a coordinate. and are numbers between 0 and 100. Default is 50 for and 5 for . + ${EnumChatFormatting.AQUA} /room toggle [argument]${EnumChatFormatting.WHITE} - Run "/room toggle help" for full list of toggles. + ${EnumChatFormatting.AQUA} /room set ${EnumChatFormatting.WHITE} - Configure whether the hotkey opens the selector GUI or directly goes to DSG/SBP. + ${EnumChatFormatting.AQUA} /room discord${EnumChatFormatting.WHITE} - Opens the Discord invite for this mod in your browser. + """.trimIndent() + ) + + "gui", "open" -> { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" + ) + return + } + OpenLink.checkForLink("gui") + } + + "dsg" -> { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" + ) + return + } + OpenLink.checkForLink("dsg") + } + + "sbp" -> { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" + ) + return + } + OpenLink.checkForLink("sbp") + } + + "set" -> when (arg1[1].lowercase()) { + "gui" -> { + DRMConfig.imageHotkeyOpen = 0 + ChatTransmitter.addToQueue("Dungeon Rooms: Hotkey has been set to open: GUI") + } + + "dsg" -> { + DRMConfig.imageHotkeyOpen = 1 + ChatTransmitter.addToQueue("Dungeon Rooms: Hotkey has been set to open: DSG") + } + + "sbp" -> { + DRMConfig.imageHotkeyOpen = 2 + ChatTransmitter.addToQueue("Dungeon Rooms: Hotkey has been set to open: SBP") + } + + else -> ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}Dungeon Rooms: Valid options are " + ) + + } + + "wp", "waypoint", "waypoints" -> Thread { mc.addScheduledTask { mc.displayGuiScreen(WaypointsGUI()) } }.start() + "move" -> { + DRMConfig.textLocX = arg1[1].toInt() + DRMConfig.textLocY = arg1[2].toInt() + ChatTransmitter.addToQueue("Dungeon Rooms: Room GUI has been moved to ${arg1[1]}, ${arg1[2]}") + } + + "toggle" -> { + val toggleHelp = """ + ${EnumChatFormatting.GOLD} Dungeon Rooms Mod Toggle Commands: + ${EnumChatFormatting.AQUA} /room toggle gui${EnumChatFormatting.WHITE} - Toggles displaying current room in gui. + ${EnumChatFormatting.AQUA} /room toggle motd${EnumChatFormatting.WHITE} - Toggles displaying the Welcome/MOTD message at the start of a dungeon run. + ${EnumChatFormatting.AQUA} /room toggle practice${EnumChatFormatting.WHITE} - Toggles Practice Mode, where waypoints are only displayed when holding down ${ + DRMConfig.practiceModeKeyBind.display + }".${EnumChatFormatting.AQUA} /room toggle waypoints${EnumChatFormatting.WHITE} - Toggles Waypoints, does the same thing as pressing "${ + DRMConfig.waypointGuiKey.display + }" then clicking "Waypoints". + ${EnumChatFormatting.AQUA} /room toggle waypointtext${EnumChatFormatting.WHITE} - Toggles displaying waypoint names above waypoints. + ${EnumChatFormatting.AQUA} /room toggle waypointboundingbox${EnumChatFormatting.WHITE} - Toggles displaying the bounding box on waypoints. + ${EnumChatFormatting.AQUA} /room toggle waypointbeacon${EnumChatFormatting.WHITE} - Toggles displaying the beacon above waypoints. + """.trimIndent() + if (arg1.size == 1) { + ChatTransmitter.addToQueue(toggleHelp) + } else { + when (arg1[1].lowercase()) { + "gui" -> { + DRMConfig.guiToggled = !DRMConfig.guiToggled + ChatTransmitter.addToQueue("Dungeon Rooms: Display room names in GUI has been set to: " + DRMConfig.guiToggled) + } + + "welcome", "motd" -> { + DRMConfig.motdToggled = !DRMConfig.motdToggled + ChatTransmitter.addToQueue("Dungeon Rooms: Display Welcome/MOTD has been set to: " + DRMConfig.motdToggled) + } + + "practice", "practicemode" -> { + DRMConfig.practiceModeOn = !DRMConfig.practiceModeOn + if (DRMConfig.practiceModeOn) { + ChatTransmitter.addToQueue( + """ + §eDungeon Rooms: Practice Mode has been enabled. + §e Waypoints will only show up while you are pressing "${ + DRMConfig.practiceModeKeyBind.display + }". + §r (Hotkey is configurable in Minecraft Controls menu) + """.trimIndent() + ) + + } else { + ChatTransmitter.addToQueue("§eDungeon Rooms: Practice Mode has been disabled.") + } + } + + "waypoint", "waypoints" -> { + DRMConfig.waypointsEnabled = !DRMConfig.waypointsEnabled + if (DRMConfig.waypointsEnabled) { + ChatTransmitter.addToQueue("§eDungeon Rooms: Waypoints will now automatically show up when you enter a new dungeon room.") + } else { + ChatTransmitter.addToQueue("§eDungeon Rooms: Waypoints have been disabled.") + } + } + + "text", "waypointtext" -> { + DRMConfig.showWaypointText = !DRMConfig.showWaypointText + ChatTransmitter.addToQueue("Dungeon Rooms: Show Waypoint Text has been set to: " + DRMConfig.showWaypointText) + } + + "boundingbox", "waypointboundingbox" -> { + DRMConfig.showBoundingBox = !DRMConfig.showBoundingBox + ChatTransmitter.addToQueue("Dungeon Rooms: Show Waypoint Bounding Box has been set to: " + DRMConfig.showBoundingBox) + } + + "beacon", "waypointbeacon" -> { + DRMConfig.showBeacon = !DRMConfig.showBeacon + ChatTransmitter.addToQueue("Dungeon Rooms: Show Waypoint Beacon has been set to: " + DRMConfig.showBeacon) + } + + "override" -> { + Utils.dungeonOverride = !Utils.dungeonOverride + ChatTransmitter.addToQueue("Dungeon Rooms: Force inCatacombs has been set to: " + Utils.dungeonOverride) + } + + "help" -> ChatTransmitter.addToQueue(toggleHelp) + else -> ChatTransmitter.addToQueue(toggleHelp) + } + } + } + + "reload" -> { + ConfigHandler.reloadConfig() + ChatTransmitter.addToQueue("Dungeon Rooms: Reloaded config file") + } + + "discord" -> try { + ChatTransmitter.addToQueue("Dungeon Rooms: Opening Dungeon Rooms Discord invite in browser...") + Desktop.getDesktop().browse(URI("https://discord.gg/7B5RbsArYK")) + } catch (e: IOException) { + e.printStackTrace() + } catch (e: URISyntaxException) { + e.printStackTrace() + } + + "relative" -> if (DungeonRooms.instance.roomDetection.roomDirection != "undefined" && DungeonRooms.instance.roomDetection.roomCorner != null) { + if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val relativePos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + ChatTransmitter.addToQueue("Dungeon Rooms: You are looking at relative blockPos: $relativePos") + } + } else { + ChatTransmitter.addToQueue("Dungeon Rooms: Unable to get relative blockPos at this time.") + } + + "json" -> { + if (!Utils.inCatacombs && DungeonManager.gameStage != 2 && DungeonManager.gameStage != 3) { + player.addChatMessage( + ChatComponentText( + "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" + ) + ) + return + } + if (DungeonRooms.instance.roomDataLoader.roomsJson[DungeonRooms.instance.roomDetection.roomName] != null) { + val json = DungeonRooms.instance.roomDataLoader.roomsJson[DungeonRooms.instance.roomDetection.roomName].asJsonObject + json.addProperty("name", DungeonRooms.instance.roomDetection.roomName) //add room name property + ChatTransmitter.addToQueue(json.toString()) + } + } + + "roominfo" -> { + if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { + player.addChatMessage( + ChatComponentText( + "${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons" + ) + ) + } + if (DungeonManager.entranceMapCorners != null) { + player.addChatMessage( + ChatComponentText( + "dev: entranceMapCorners = " + ArrayList( + listOf( + DungeonManager.entranceMapCorners + ) + ) + ) + ) + } else { + ChatTransmitter.addToQueue("dev: entranceMapCorners = null") + } + if (DungeonManager.entrancePhysicalNWCorner != null) { + ChatTransmitter.addToQueue("dev: entrancePhysicalNWCorner = ${DungeonManager.entrancePhysicalNWCorner}") + } else { + ChatTransmitter.addToQueue("dev: entrancePhysicalNWCorner = null") + } + ChatTransmitter.addToQueue("dev: currentMapSegments = ${DungeonRooms.instance.roomDetection.currentMapSegments}") + ChatTransmitter.addToQueue("dev: currentPhysicalSegments = ${DungeonRooms.instance.roomDetection.currentPhysicalSegments}") + ChatTransmitter.addToQueue("dev: roomName = ${DungeonRooms.instance.roomDetection.roomName}") + ChatTransmitter.addToQueue("dev: roomSize = ${DungeonRooms.instance.roomDetection.roomSize}") + ChatTransmitter.addToQueue("dev: roomColor = ${DungeonRooms.instance.roomDetection.roomColor}") + ChatTransmitter.addToQueue("dev: roomCategory = ${DungeonRooms.instance.roomDetection.roomCategory}") + ChatTransmitter.addToQueue("dev: roomDirection = ${DungeonRooms.instance.roomDetection.roomDirection}") + if (DungeonRooms.instance.roomDetection.roomCorner != null) { + ChatTransmitter.addToQueue("dev: roomCorner = " + DungeonRooms.instance.roomDetection.roomCorner) + } else { + ChatTransmitter.addToQueue("dev: roomCorner = null") + } + } + + "blocksused" -> { + if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { + player.addChatMessage( + ChatComponentText("${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons") + ) + } + ChatTransmitter.addToQueue(DungeonRooms.instance.roomDetection.blocksUsed.toString()) + } + + "add" -> { + val world: World = mc.theWorld + if (!Utils.inCatacombs || DungeonManager.gameStage != 2 || DungeonRooms.instance.roomDetection.roomDirection == "undefined" || DungeonRooms.instance.roomDetection.roomCorner == null) { + player.addChatMessage( + ChatComponentText( + "${EnumChatFormatting.RED}Dungeon Rooms: Current dungeon room is undefined" + ) + ) + return + } + when (arg1[1].lowercase()) { + "chest" -> if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val viewingPos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (world.getBlockState(mc.objectMouseOver.blockPos).block === Blocks.chest) { + player.addChatMessage( + ChatComponentText( + """{ + "secretName":"# - Chest", + "category":"chest", + "x":${viewingPos.x}, + "y":${viewingPos.y}, + "z":${viewingPos.z} + }""" + ) + ) + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ + "secretName":"# - Chest", + "category":"chest", + "x":${viewingPos.x}, + "y":${viewingPos.y}, + "z":${viewingPos.z} + }""".trimIndent() + ), + null + ) + } else { + ChatTransmitter.addToQueue("You are not looking at a Chest Secret") + } + } else { + ChatTransmitter.addToQueue("You are not looking at anything") + } + + "wither" -> if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val viewingPos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (world.getBlockState(mc.objectMouseOver.blockPos).block === Blocks.skull) { + player.addChatMessage( + ChatComponentText( + """{ "secretName":"# - Wither Essence", "category":"wither", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ) + ) + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Wither Essence", "category":"wither", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ), + null + ) + } else { + ChatTransmitter.addToQueue("You are not looking at a Wither Essence Secret") + } + } else { + ChatTransmitter.addToQueue("You are not looking at anything") + } + + "superboom" -> if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val viewingPos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (world.getBlockState(mc.objectMouseOver.blockPos).block === Blocks.stonebrick) { + player.addChatMessage( + ChatComponentText( + """{ "secretName":"# - Superboom", "category":"superboom", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ) + ) + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Superboom", "category":"superboom", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ), + null + ) + } else { + ChatTransmitter.addToQueue("You are not looking at a Superboom entrance") + } + } else { + ChatTransmitter.addToQueue("You are not looking at anything") + } + + "lever" -> if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val viewingPos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (world.getBlockState(mc.objectMouseOver.blockPos).block === Blocks.lever) { + player.addChatMessage( + ChatComponentText( + """{ "secretName":"# - Lever", "category":"lever", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ) + ) + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Lever", "category":"lever", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ), + null + ) + } else { + ChatTransmitter.addToQueue("You are not looking at a Lever") + } + } else { + ChatTransmitter.addToQueue("You are not looking at anything") + } + + "fairysoul" -> if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && mc.objectMouseOver.blockPos != null) { + val viewingPos = MapUtils.actualToRelative( + mc.objectMouseOver.blockPos.up(1), + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (world.getBlockState(mc.objectMouseOver.blockPos.up(1)).block === Blocks.air) { + ChatTransmitter.addToQueue( + """{ "secretName":"Fairy Soul", "category":"fairysoul", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ) + + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"Fairy Soul", "category":"fairysoul", "x":${viewingPos.x}, "y":${viewingPos.y}, "z":${viewingPos.z}}""" + ), + null + ) + } else { + ChatTransmitter.addToQueue("You are not looking at the block below a Fairy Soul") + } + } else { + ChatTransmitter.addToQueue("You are not looking at anything") + } + + "item" -> { + val playerPos = MapUtils.actualToRelative( + BlockPos(player.posX, player.posY, player.posZ), + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + ChatTransmitter.addToQueue( + """{ "secretName":"# - Item", "category":"item", "x":${playerPos.x}, "y":${playerPos.y}, "z":${playerPos.z}}""" + ) + + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Item", "category":"item", "x":${playerPos.x}, "y":${playerPos.y}, "z":${playerPos.z}}""" + ), + null + ) + } + + "entrance" -> { + val entrancePos = MapUtils.actualToRelative( + BlockPos(player.posX, player.posY + 1, player.posZ), + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + ChatTransmitter.addToQueue( + """{ "secretName":"# - Entrance", "category":"entrance", "x":${entrancePos.x}, "y":${entrancePos.y}, "z":${entrancePos.z}}""" + ) + + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Entrance", "category":"entrance", "x":${entrancePos.x}, "y":${entrancePos.y}, "z":${entrancePos.z}}""" + ), + null + ) + } + + "bat" -> { + val batPos = MapUtils.actualToRelative( + BlockPos(player.posX, player.posY + 1, player.posZ), + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + ChatTransmitter.addToQueue( + """{ "secretName":"# - Bat", "category":"bat", "x":${batPos.x}, "y":${batPos.y}, "z":${batPos.z}}""" + ) + + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents( + StringSelection( + """{ "secretName":"# - Bat", "category":"bat", "x":${batPos.x}, "y":${batPos.y}, "z":${batPos.z}}""" + ), + null + ) + } + + else -> ChatTransmitter.addToQueue( + EnumChatFormatting.RED + .toString() + "Dungeon Rooms: Valid options are " + ) + + } + } + + else -> ChatTransmitter.addToQueue( + EnumChatFormatting.RED + .toString() + "Dungeon Rooms: Run \"/room\" by itself to see the room name or run \"/room help\" for additional options" + ) + + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt new file mode 100644 index 0000000..3764658 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt @@ -0,0 +1,172 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.dungeons + +import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.DungeonRooms.Companion.instance +import io.github.quantizr.dungeonrooms.utils.MapUtils +import io.github.quantizr.dungeonrooms.utils.Utils +import net.minecraft.client.Minecraft +import net.minecraft.client.settings.GameSettings +import net.minecraft.util.EnumChatFormatting +import net.minecraft.util.Vec3 +import net.minecraftforge.client.event.ClientChatReceivedEvent +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent +import java.awt.Point +import java.util.* + +class DungeonManager { + val mc: Minecraft = Minecraft.getMinecraft() + private var bloodTime = Long.MAX_VALUE + private var oddRun = true //if current run number is even or odd + @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true) + fun onChat(event: ClientChatReceivedEvent) { + if (!Utils.inCatacombs) return + val message = event.message.formattedText + + //gameStage set from 0 to 1 in the onTick function later + if (message.startsWith("§e[NPC] §bMort§f: §rHere, I found this map when I first entered the dungeon.§r")) { + gameStage = 2 + DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") + } else if (message.startsWith("§r§c[BOSS] The Watcher§r§f: You have proven yourself. You may pass.§r")) { + bloodTime = System.currentTimeMillis() + 5000 //5 seconds because additional messages might come through + DungeonRooms.logger.info("DungeonRooms: bloodDone has been set to True") + } else if (System.currentTimeMillis() > bloodTime && (message.startsWith("§r§c[BOSS] ") && !message.contains(" The Watcher§r§f:") || message.startsWith( + "§r§4[BOSS] " + )) + ) { + if (gameStage != 3) { + gameStage = 3 + DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") + + //this part mostly so /room json doesn't error out + instance.roomDetection.resetCurrentRoom() + instance.roomDetection.roomName = "Boss Room" + instance.roomDetection.roomCategory = "General" + //RoomDetection.newRoom() //uncomment to display Boss Room in gui + } + } else if (message.contains("§r§c☠ §r§eDefeated §r")) { + gameStage = 4 + DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") + instance.roomDetection.resetCurrentRoom() + } + } + + @SubscribeEvent + fun onTick(event: ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + val player = mc.thePlayer + if (!Utils.inCatacombs) return //From this point forward, everything assumes that Utils.inCatacombs == true + tickAmount++ + if ((gameStage == 0 || gameStage == 1) && tickAmount % 20 == 0) { + if (DungeonRooms.firstLogin) { + DungeonRooms.firstLogin = false + ChatTransmitter.addToQueue( + """ + §d§l--- Dungeon Rooms Mod --- + §e This appears to be your first time using DRM v${DungeonRooms.VERSION}. + §e Press "${DRMConfig.waypointGuiKey.display}" to configure Secret Waypoint settings, If you do not wish to use Waypoints, you can instead press "${DRMConfig.openSecretImages.display}" while inside a dungeon room to view images of the secrets for that room. + §r (If you need help, join the Discord! Run "/room discord" to open the Discord invite.) + §d§l------------------------ + """.trimIndent() + ) + + } + if (gameStage == 0) { + gameStage = 1 + DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") + } + val map = MapUtils.updatedMap() + if (map != null) { + DungeonRooms.logger.warn("DungeonRooms: Run started but gameStage is not on 2") + gameStage = 2 + DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") + return + } + if (gameStage == 1 && entrancePhysicalNWCorner == null) { + if (player.positionVector != Vec3(0.0, 0.0, 0.0)) { + //this point is calculated using math, not scanning, which may cause issues when reconnecting to a run + entrancePhysicalNWCorner = MapUtils.getClosestNWPhysicalCorner(player.positionVector) + DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to $entrancePhysicalNWCorner") + } + } + if (DungeonRooms.textToDisplay == null && DRMConfig.motdToggled) { + DungeonRooms.logger.info("DungeonRooms: Updating MOTD on screen") + if (oddRun || !DRMConfig.guiToggled) { //load MOTD on odd runs + if (DungeonRooms.motd != null) { + if (DungeonRooms.motd!!.isNotEmpty()) { + DungeonRooms.textToDisplay = DungeonRooms.motd + } + } + } + if (DungeonRooms.textToDisplay == null && DRMConfig.guiToggled) { //if MOTD is empty or not odd run load default text + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.GREEN}Press the hotkey \"${ + DRMConfig.waypointGuiKey.display + }\" to configure", + "${EnumChatFormatting.GREEN}waypoint settings. Alternatively, press \"${ + DRMConfig.openSecretImages.display + }\" while in a room", + "${EnumChatFormatting.GREEN}to view images of secret locations for that room.", + "(You can change the keybinds in Minecraft controls menu)" + ) + ) + } + oddRun = !oddRun + } + tickAmount = 0 + } + } + + @SubscribeEvent + fun onWorldUnload(event: WorldEvent.Unload?) { + Utils.inCatacombs = false + tickAmount = 0 + gameStage = 0 + map = null + entranceMapCorners = null + entrancePhysicalNWCorner = null + instance.roomDetection.entranceMapNullCount = 0 + bloodTime = Long.MAX_VALUE + instance.roomDetection.stage2Executor.shutdown() + Waypoints.allSecretsMap.clear() + instance.roomDetection.resetCurrentRoom() + } + + companion object { + @JvmField + var gameStage = 0 //0: Not in Dungeon, 1: Entrance/Not Started, 2: Room Clear, 3: Boss, 4: Done + + @JvmField + var map: Array>? = null + + @JvmField + var entranceMapCorners: Array? = null + + @JvmField + var entrancePhysicalNWCorner: Point? = null + var tickAmount = 0 + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt new file mode 100644 index 0000000..1f51961 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -0,0 +1,608 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.dungeons + +import cc.polyfrost.oneconfig.config.annotations.Switch +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.roomdata.RoomColor +import io.github.quantizr.dungeonrooms.utils.MapUtils +import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils +import io.github.quantizr.dungeonrooms.utils.Utils +import net.minecraft.block.Block +import net.minecraft.client.Minecraft +import net.minecraft.client.settings.GameSettings +import net.minecraft.util.* +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent +import java.awt.Point +import java.util.* +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.Future + +class RoomDetection { + val mc: Minecraft = Minecraft.getMinecraft() + + @SubscribeEvent + fun onTick(event: ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + if (!Utils.inCatacombs) return + + // From this point forward, everything assumes that Utils.inCatacombs == true + if (DungeonManager.gameStage != 2) return + + // Room clearing phase + stage2Ticks++ + if (stage2Ticks == 10) { + stage2Ticks = 0 + //start ExecutorService with one thread + if (stage2Executor.isTerminated) { + DungeonRooms.logger.info("DungeonRooms: New Single Thread Executor Started") + stage2Executor = Executors.newSingleThreadExecutor() + } + //set entranceMapCorners + if (DungeonManager.entranceMapCorners == null) { + DungeonManager.map = MapUtils.updatedMap() + DungeonManager.entranceMapCorners = MapUtils.entranceMapCorners(DungeonManager.map) + DungeonRooms.logger.info("DungeonRooms: Getting entrance map corners from hotbar map...") + } else if (DungeonManager.entranceMapCorners!![0] == null || DungeonManager.entranceMapCorners!![1] == null) { //prevent crashes if hotbar map bugged + DungeonRooms.logger.warn("DungeonRooms: Entrance room not found, hotbar map possibly bugged") + entranceMapNullCount++ + DungeonManager.entranceMapCorners = null // retry getting corners again next loop + if (entranceMapNullCount == 8) { + ChatTransmitter.addToQueue( + "${EnumChatFormatting.RED}DungeonRooms: Error with hotbar map, perhaps your texture pack is interfering with room detection?" + ) + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}Hotbar map may be bugged" + ) + ) + //gameStage = 4; + //DungeonRooms.logger.info("DungeonRooms: gameStage set to " + gameStage); + } + } else if (DungeonManager.entrancePhysicalNWCorner == null) { + DungeonRooms.logger.warn("DungeonRooms: Entrance Room coordinates not found") + // for when people dc and reconnect, or if initial check doesn't work + val playerMarkerPos = MapUtils.playerMarkerPos() + if (playerMarkerPos != null) { + val closestNWMapCorner = MapUtils.getClosestNWMapCorner( + playerMarkerPos, + DungeonManager.entranceMapCorners!![0]!!, + DungeonManager.entranceMapCorners!![1]!! + ) + if (MapUtils.getMapColor(playerMarkerPos, DungeonManager.map) == RoomColor.GREEN + && MapUtils.getMapColor(closestNWMapCorner, DungeonManager.map) == RoomColor.GREEN + ) { + if (mc.thePlayer.positionVector != Vec3(0.0, 0.0, 0.0)) { + DungeonManager.entrancePhysicalNWCorner = + MapUtils.getClosestNWPhysicalCorner(mc.thePlayer.positionVector) + DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to ${DungeonManager.entrancePhysicalNWCorner}") + } + } else { + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}Entrance Room coordinates not found", + "${EnumChatFormatting.RED}Please go back into the middle of the Green Entrance Room." + ) + ) + } + } + } else { + val currentPhysicalCorner = MapUtils.getClosestNWPhysicalCorner(mc.thePlayer.positionVector) + if (!currentPhysicalSegments.contains(currentPhysicalCorner)) { + // checks if current location is within the bounds of the last detected room + resetCurrentRoom() // only instance of resetting room other than leaving Dungeon + } else if (incompleteScan != 0L && System.currentTimeMillis() > incompleteScan) { + incompleteScan = 0 + DungeonRooms.logger.info("DungeonRooms: Rescanning room...") + raytraceBlocks() + } else if (redoScan != 0L && System.currentTimeMillis() > redoScan) { + redoScan = 0 + DungeonRooms.logger.info("DungeonRooms: Clearing data and rescanning room...") + thaPossibleRooms = null + raytraceBlocks() + } + if (roomSize == "undefined" || roomColor == RoomColor.UNDEFINED) { + updateCurrentRoom() + if (roomColor == RoomColor.UNDEFINED) { + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}Waiting for hotbar map to update..." + ) + ) + } else { + when (roomColor) { + RoomColor.BROWN, RoomColor.PURPLE, RoomColor.ORANGE -> raytraceBlocks() + RoomColor.YELLOW -> { + roomName = "Miniboss Room" + newRoom() + } + + RoomColor.GREEN -> { + roomName = "Entrance Room" + newRoom() + } + + RoomColor.PINK -> { + roomName = "Fairy Room" + newRoom() + } + + RoomColor.RED -> { + roomName = "Blood Room" + newRoom() + } + + else -> roomName = "undefined" + } + } + } + } + } + + // these run every tick while in room clearing phase + if (futureUpdatePossibleRooms != null && futureUpdatePossibleRooms!!.isDone) { + thaPossibleRooms = futureUpdatePossibleRooms!!.get() + futureUpdatePossibleRooms = null + val possibleRoomsSet = TreeSet() + var tempDirection = "undefined" + for ((key, possibleRoomList) in thaPossibleRooms!!) { + if (possibleRoomList.isNotEmpty()) { + tempDirection = + key // get direction to be used if room identified + possibleRoomsSet.addAll(possibleRoomList) + } + } + when (possibleRoomsSet.size) { + // no match + 0 -> { + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}No Matching Rooms Detected", + "${EnumChatFormatting.RED}This mod might not have data for this room.", + "${EnumChatFormatting.WHITE}Retrying every 5 seconds..." + ) + ) + redoScan = System.currentTimeMillis() + 5000 + } + //room found + 1 -> { + roomName = possibleRoomsSet.first() + roomDirection = tempDirection + roomCorner = MapUtils.getPhysicalCornerPos(roomDirection, currentPhysicalSegments) + DungeonRooms.logger.info( + "DungeonRooms: 576 raytrace vectors sent, returning ${currentScannedBlocks.size} unique line-of-sight blocks, filtered down to $totalBlocksAvailableToCheck blocks, out of which ${blocksUsed.size} blocks were used to uniquely identify $roomName." + ) + newRoom() + } + // too many matches + else -> { + DungeonRooms.textToDisplay = ArrayList( + listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}Unable to Determine Room Name", + "${EnumChatFormatting.RED}Not enough valid blocks were scanned, look at a more open area.", + "${EnumChatFormatting.WHITE}Retrying every second..." + ) + ) + DungeonRooms.logger.info("DungeonRooms: Possible rooms list = ${ArrayList(possibleRoomsSet)}") + incompleteScan = System.currentTimeMillis() + 1000 + } + } + } + } + + private fun updateCurrentRoom() { + DungeonManager.map = MapUtils.updatedMap() + if (DungeonManager.map == null) { + return + } + val currentPhysicalCorner = MapUtils.getClosestNWPhysicalCorner(mc.thePlayer.positionVector) + val currentMapCorner = MapUtils.physicalToMapCorner( + currentPhysicalCorner, + DungeonManager.entrancePhysicalNWCorner!!, + DungeonManager.entranceMapCorners!![0]!!, + DungeonManager.entranceMapCorners!![1]!! + ) + roomColor = MapUtils.getMapColor(currentMapCorner, DungeonManager.map) + if (roomColor == RoomColor.UNDEFINED) { + println("DungeonRooms: Room color is undefined") + return + } + currentMapSegments = MapUtils.neighboringSegments( + currentMapCorner, + DungeonManager.map, + DungeonManager.entranceMapCorners!![0]!!, + DungeonManager.entranceMapCorners!![1]!!, + ArrayList() + ) + currentPhysicalSegments = ArrayList() + for (mapCorner in currentMapSegments) { + currentPhysicalSegments.add( + MapUtils.mapToPhysicalCorner( + mapCorner, + DungeonManager.entrancePhysicalNWCorner!!, + DungeonManager.entranceMapCorners!![0]!!, + DungeonManager.entranceMapCorners!![1]!! + ) + ) + } + roomSize = MapUtils.roomSize(currentMapSegments) + roomCategory = MapUtils.roomCategory(roomSize, roomColor) + } + + private fun raytraceBlocks() { + DungeonRooms.logger.info("DungeonRooms: Raytracing visible blocks") + val timeStart = System.currentTimeMillis() + + val player = mc.thePlayer + val eyes = Vec3(player.posX, player.posY + player.getEyeHeight().toDouble(), player.posZ) + + val blocksToCheck = HashMap().also { blocksToCheck -> + // create a list of vectors to check + RoomDetectionUtils.vectorsToRaytrace(24) + // raytrace block + .map { player.entityWorld.rayTraceBlocks(eyes, it, false, false, true) } + + // filter out entities/nulls + .filter { Objects.nonNull(it) } + .filter { it.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK } + + // get block position + .map { it.blockPos } + .forEach { raytracedBlockPos -> + if (!currentScannedBlocks.contains(raytracedBlockPos)) { + currentScannedBlocks.add(raytracedBlockPos) + // scanned block is outside of current room + if (currentPhysicalSegments.contains(MapUtils.getClosestNWPhysicalCorner(raytracedBlockPos))) { + // scanned block may be part of a corridor + if (!RoomDetectionUtils.blockPartOfDoorway(raytracedBlockPos)) { + val hitBlock = mc.theWorld.getBlockState(raytracedBlockPos) + val identifier = + Block.getIdFromBlock(hitBlock.block) * 100 + hitBlock.block.damageDropped(hitBlock) + if (RoomDetectionUtils.whitelistedBlocks.contains(identifier)) { + blocksToCheck[raytracedBlockPos] = + identifier // will be checked and filtered in getPossibleRooms() + } + } + } + } + + } + } + +// val vecList = RoomDetectionUtils.vectorsToRaytrace(24) +// for (vec in vecList) { +// // The super fancy Minecraft built-in raytracing function so that the mod only scan line of sight blocks! +// // This is the ONLY place where this mod accesses blocks in the physical map, and they are all within FOV +// player.entityWorld.rayTraceBlocks( +// eyes, +// vec, +// false, +// false, +// true +// )?.let { raytraceResult -> +// if (raytraceResult.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { +// //the following is filtering out blocks which we don't want for detection, note that these blocks are also line of sight +// val raytracedBlockPos = raytraceResult.blockPos +// if (!currentScannedBlocks.contains(raytracedBlockPos)) { +// currentScannedBlocks.add(raytracedBlockPos) +// //scanned block is outside of current room +// if (currentPhysicalSegments.contains(MapUtils.getClosestNWPhysicalCorner(raytracedBlockPos))) { +// //scanned block may be part of a corridor +// if (!RoomDetectionUtils.blockPartOfDoorway(raytracedBlockPos)) { +// val hitBlock = mc.theWorld.getBlockState(raytracedBlockPos) +// val identifier = +// Block.getIdFromBlock(hitBlock.block) * 100 + hitBlock.block.damageDropped(hitBlock) +// if (RoomDetectionUtils.whitelistedBlocks.contains(identifier)) { +// blocksToCheck[raytracedBlockPos] = +// identifier //will be checked and filtered in getPossibleRooms() +// } +// } +// } +// } +// } +// } +// } + DungeonRooms.logger.info("DungeonRooms: Finished raytracing, amount of blocks to check: ${blocksToCheck.size}") + DungeonRooms.logger.info("DungeonRooms: Time to raytrace and filter (in ms): ${System.currentTimeMillis() - timeStart}") + + if (futureUpdatePossibleRooms == null && !stage2Executor.isTerminated) { + // start processing in new thread to avoid lag in case of complex scan + DungeonRooms.logger.info("DungeonRooms: Initializing Room Comparison Executor") + + val timeStart = System.currentTimeMillis() + // Load up hashmap + val updatedPossibleRooms: HashMap>? + val possibleDirections: List + if (thaPossibleRooms != null) { + // load info from previous scan + DungeonRooms.logger.info("DungeonRooms: Loading possible rooms from previous room scan...") + updatedPossibleRooms = thaPossibleRooms + possibleDirections = ArrayList(thaPossibleRooms!!.keys) + + } else { + DungeonRooms.logger.info("DungeonRooms: No previous possible rooms list, creating new list...") + // no previous scans have been done, entering all possible rooms and directions + possibleDirections = MapUtils.possibleDirections(roomSize, currentMapSegments) + updatedPossibleRooms = HashMap() + for (direction in possibleDirections) { + updatedPossibleRooms[direction] = + ArrayList(DungeonRooms.instance.roomDataLoader.ROOM_DATA[roomCategory]?.keys ?: emptyList()) + } + } + + //create HashMap of the points of the corners because they will be repeatedly used for each block + val directionCorners = HashMap() + for (direction in possibleDirections) { + val physicalCornerPos = MapUtils.getPhysicalCornerPos(direction, currentPhysicalSegments) + if (physicalCornerPos != null) { + directionCorners[direction] = physicalCornerPos + } + } + DungeonRooms.logger.info("DungeonRooms: directionCorners " + directionCorners.entries) + val blocksChecked: MutableList = ArrayList() + var doubleCheckedBlocks = 0 + for ((pos, blck) in blocksToCheck) { + DungeonRooms.logger.info("DungeonRooms: BlockPos being checked $pos") + var combinedMatchingRooms = 0 + for (direction in possibleDirections) { + //get specific id for the block to compare with ".skeleton" file room data + val relative = MapUtils.actualToRelative(pos, direction, directionCorners[direction]!!) + val idToCheck = Utils.shortToLong( + relative.x.toShort(), + relative.y.toShort(), + relative.z.toShort(), + blck.toShort() + ) + val matchingRooms: MutableList = ArrayList() + // compare with each saved ".skeleton" room + for (roomName in updatedPossibleRooms!![direction]!!) { + val index = DungeonRooms.instance.roomDataLoader.ROOM_DATA[roomCategory]!![roomName]?.let { + Arrays.binarySearch( + it, idToCheck + ) + } + if (index != null) { + if (index > -1) { + matchingRooms.add(roomName) + } + } + } + + //replace updatedPossibleRooms.get(direction) with the updated matchingRooms list + combinedMatchingRooms += matchingRooms.size + updatedPossibleRooms[direction] = matchingRooms + DungeonRooms.logger.info("DungeonRooms: direction checked = $direction, longID = $idToCheck, relative = $relative") + DungeonRooms.logger.info("DungeonRooms: updatedPossibleRooms size = ${updatedPossibleRooms[direction]!!.size} for direction $direction") + } + blocksChecked.add(pos) + + when (combinedMatchingRooms) { + 0 -> { + DungeonRooms.logger.warn("DungeonRooms: No rooms match the input blocks after checking ${blocksChecked.size} blocks, returning") + break + } + + 1 -> { + // scan 10 more blocks after 1 room remaining to double-check + if (doubleCheckedBlocks >= 10) { + DungeonRooms.logger.info("DungeonRooms: One room matches after checking " + blocksChecked.size + " blocks") + break + } + doubleCheckedBlocks++ + } + } + DungeonRooms.logger.info("DungeonRooms: $combinedMatchingRooms possible rooms after checking ${blocksChecked.size} blocks") + } + + // only print for this condition bc other conditions break to here + if (blocksChecked.size == blocksToCheck.size) { + DungeonRooms.logger.warn("DungeonRooms: Multiple rooms match after checking all ${blocksChecked.size} blocks") + } + blocksUsed.addAll(blocksChecked) + + // add blocksToCheck size to totalBlocksAvailableToCheck and clear blocksToCheck + totalBlocksAvailableToCheck += blocksToCheck.size + DungeonRooms.logger.info("DungeonRooms: Time to check blocks using thread (in ms): ${System.currentTimeMillis() - timeStart}") + + futureUpdatePossibleRooms = calculatePossibleRooms(blocksToCheck) + } + } + + private fun calculatePossibleRooms(thaBlocksToCheck: Map): Future>> { + return stage2Executor.submit>?> { + try { + val timeStart = System.currentTimeMillis() + // Load up hashmap + val updatedPossibleRooms: HashMap>? + val possibleDirections: List + if (thaPossibleRooms != null) { + // load info from previous scan + DungeonRooms.logger.info("DungeonRooms: Loading possible rooms from previous room scan...") + updatedPossibleRooms = thaPossibleRooms + possibleDirections = ArrayList(thaPossibleRooms!!.keys) + } else { + DungeonRooms.logger.info("DungeonRooms: No previous possible rooms list, creating new list...") + // no previous scans have been done, entering all possible rooms and directions + possibleDirections = MapUtils.possibleDirections(roomSize, currentMapSegments) + updatedPossibleRooms = HashMap() + for (direction in possibleDirections) { + updatedPossibleRooms[direction] = + ArrayList(DungeonRooms.instance.roomDataLoader.ROOM_DATA[roomCategory]?.keys ?: emptyList()) + } + } + + //create HashMap of the points of the corners because they will be repeatedly used for each block + val directionCorners = HashMap() + for (direction in possibleDirections) { + val physicalCornerPos = MapUtils.getPhysicalCornerPos(direction, currentPhysicalSegments) + if (physicalCornerPos != null) { + directionCorners[direction] = physicalCornerPos + } + } + DungeonRooms.logger.info("DungeonRooms: directionCorners ${directionCorners.entries}") + val blocksChecked: MutableList = ArrayList() + var doubleCheckedBlocks = 0 + for ((pos, blck) in thaBlocksToCheck) { + DungeonRooms.logger.info("DungeonRooms: BlockPos being checked $pos") + var combinedMatchingRooms = 0 + for (direction in possibleDirections) { + //get specific id for the block to compare with ".skeleton" file room data + val relative = MapUtils.actualToRelative(pos, direction, directionCorners[direction]!!) + val idToCheck = Utils.shortToLong( + relative.x.toShort(), + relative.y.toShort(), + relative.z.toShort(), + blck.toShort() + ) + val matchingRooms: MutableList = ArrayList() + // compare with each saved ".skeleton" room + for (roomName in updatedPossibleRooms!![direction]!!) { + val index = DungeonRooms.instance.roomDataLoader.ROOM_DATA[roomCategory]!![roomName]?.let { + Arrays.binarySearch( + it, idToCheck + ) + } + if (index != null) { + if (index > -1) { + matchingRooms.add(roomName) + } + } + } + + //replace updatedPossibleRooms.get(direction) with the updated matchingRooms list + combinedMatchingRooms += matchingRooms.size + updatedPossibleRooms[direction] = matchingRooms + DungeonRooms.logger.info("DungeonRooms: direction checked = $direction, longID = $idToCheck, relative = $relative") + DungeonRooms.logger.info("DungeonRooms: updatedPossibleRooms size = ${updatedPossibleRooms[direction]!!.size} for direction $direction") + } + blocksChecked.add(pos) + if (combinedMatchingRooms == 0) { + DungeonRooms.logger.warn("DungeonRooms: No rooms match the input blocks after checking ${blocksChecked.size} blocks, returning") + break + } + if (combinedMatchingRooms == 1) { + // scan 10 more blocks after 1 room remaining to double-check + if (doubleCheckedBlocks >= 10) { + DungeonRooms.logger.info("DungeonRooms: One room matches after checking ${blocksChecked.size} blocks") + break + } + doubleCheckedBlocks++ + } + DungeonRooms.logger.info("DungeonRooms: $combinedMatchingRooms possible rooms after checking ${blocksChecked.size} blocks") + } + + // only print for this condition bc other conditions break to here + if (blocksChecked.size == thaBlocksToCheck.size) { + DungeonRooms.logger.warn("DungeonRooms: Multiple rooms match after checking all ${blocksChecked.size} blocks") + } + blocksUsed.addAll(blocksChecked) + + // add blocksToCheck size to totalBlocksAvailableToCheck and clear blocksToCheck + totalBlocksAvailableToCheck += thaBlocksToCheck.size + val timeFinish = System.currentTimeMillis() + DungeonRooms.logger.info("DungeonRooms: Time to check blocks using thread (in ms): ${timeFinish - timeStart}") + return@submit updatedPossibleRooms + } catch (e: Exception) { + DungeonRooms.logger.error("DungeonRooms: Error in Room Comparison Executor", e) + e.printStackTrace() + return@submit HashMap>() + } + } + } + + var stage2Executor: ExecutorService = Executors.newSingleThreadExecutor() + + private var stage2Ticks = 0 + var currentMapSegments: List = ArrayList() + var currentPhysicalSegments: MutableList = ArrayList() + var roomSize = "undefined" + var roomColor = RoomColor.UNDEFINED + var roomCategory = "undefined" + var roomName = "undefined" + var roomDirection = "undefined" + var roomCorner: Point? = null + private var currentScannedBlocks = HashSet() + private var totalBlocksAvailableToCheck = 0 + var blocksUsed: MutableList = ArrayList() + private var futureUpdatePossibleRooms: Future>>? = null + private var thaPossibleRooms: HashMap>? = null + private var incompleteScan = 0L + private var redoScan = 0L + var entranceMapNullCount = 0 + fun resetCurrentRoom() { + DungeonRooms.textToDisplay = null + Waypoints.allFound = false + currentPhysicalSegments = emptyList().toMutableList() + currentMapSegments = emptyList() + roomSize = "undefined" + roomColor = RoomColor.UNDEFINED + roomCategory = "undefined" + roomName = "undefined" + roomDirection = "undefined" + roomCorner = null + currentScannedBlocks = HashSet() + totalBlocksAvailableToCheck = 0 + blocksUsed = ArrayList() + futureUpdatePossibleRooms = null + thaPossibleRooms = null + incompleteScan = 0 + redoScan = 0 + Waypoints.secretNum = 0 + } + + private fun newRoom() { + if (roomName == "undefined" || roomCategory == "undefined") return + // update Waypoints info + if (DungeonRooms.instance.roomDataLoader.roomsJson[roomName] != null) { + Waypoints.secretNum = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject["secrets"].asInt + Waypoints.allSecretsMap.putIfAbsent( + roomName, + ArrayList(Collections.nCopies(Waypoints.secretNum, true)) + ) + } else { + Waypoints.secretNum = 0 + Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(0, true))) + } + Waypoints.secretsList = Waypoints.allSecretsMap[roomName]?.toMutableList() + + //update GUI text + if (DRMConfig.guiToggled) { + val lineList: MutableList = ArrayList() + var line = + ("Dungeon Rooms: You are in ${EnumChatFormatting.GREEN}$roomCategory${EnumChatFormatting.WHITE} - ${EnumChatFormatting.GREEN}$roomName") + if (DungeonRooms.instance.roomDataLoader.roomsJson[roomName] != null) { + val roomJson = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject + if (roomJson["fairysoul"].asBoolean) { + line = "$line${EnumChatFormatting.WHITE} - ${EnumChatFormatting.LIGHT_PURPLE}Fairy Soul" + } + lineList.add(line) + if (DRMConfig.waypointsEnabled && roomJson["secrets"].asInt != 0 && DungeonRooms.instance.roomDataLoader.waypointsJson[roomName] == null) { + lineList.add("${EnumChatFormatting.RED}No waypoints available") + lineList.add("${EnumChatFormatting.RED}Press \"${DRMConfig.openSecretImages.display}\" to view images") + } + } + DungeonRooms.textToDisplay = lineList + } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt new file mode 100644 index 0000000..b5ff2f4 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -0,0 +1,346 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.dungeons + +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.events.PacketEvent.ReceiveEvent +import io.github.quantizr.dungeonrooms.utils.MapUtils +import io.github.quantizr.dungeonrooms.utils.Utils +import io.github.quantizr.dungeonrooms.utils.WaypointUtils +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.culling.Frustum +import net.minecraft.entity.item.EntityItem +import net.minecraft.init.Blocks +import net.minecraft.network.play.server.S0DPacketCollectItem +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.BlockPos +import net.minecraft.util.StringUtils +import net.minecraftforge.client.event.ClientChatReceivedEvent +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.event.entity.player.PlayerInteractEvent +import net.minecraftforge.fml.client.FMLClientHandler +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.InputEvent +import java.awt.Color + +class Waypoints { + private var frustum = Frustum() + + @SubscribeEvent + fun onWorldRender(event: RenderWorldLastEvent) { + if (!DRMConfig.waypointsEnabled) return + if (DRMConfig.practiceModeOn && !DRMConfig.practiceModeKeyBind.isActive) return + + DungeonRooms.instance.forEverySecretInRoom { (secretsObject, _) -> + var display = true + for (j in 1..secretNum) { + if (!secretsList!![j - 1]) { + if (secretsObject["secretName"].asString.substring(0, 2) + .replace("[\\D]".toRegex(), "") == j.toString() + ) { + display = false + break + } + } + } + if (!display) return@forEverySecretInRoom + if (DRMConfig.disableWhenAllFound && allFound && secretsObject["category"].asString != "fairysoul") return@forEverySecretInRoom + val relative = BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) + val pos = MapUtils.relativeToActual( + relative, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + val viewer = Minecraft.getMinecraft().renderViewEntity + frustum.setPosition(viewer.posX, viewer.posY, viewer.posZ) + if (!frustum.isBoxInFrustum( + pos.x.toDouble(), + pos.y.toDouble(), + pos.z.toDouble(), + (pos.x + 1).toDouble(), + 255.0, + (pos.z + 1).toDouble() + ) + ) { + return@forEverySecretInRoom + } + val color = when (secretsObject["category"].asString) { + "entrance" -> { + if (!DRMConfig.showEntrance) return@forEverySecretInRoom + Color(0, 255, 0) + } + + "superboom" -> { + if (!DRMConfig.showSuperboom) return@forEverySecretInRoom + Color(255, 0, 0) + } + + "chest" -> { + if (!DRMConfig.showSecrets) return@forEverySecretInRoom + Color(2, 213, 250) + } + + "item" -> { + if (!DRMConfig.showSecrets) return@forEverySecretInRoom + Color(2, 64, 250) + } + + "bat" -> { + if (!DRMConfig.showSecrets) return@forEverySecretInRoom + Color(142, 66, 0) + } + + "wither" -> { + if (!DRMConfig.showSecrets) return@forEverySecretInRoom + Color(30, 30, 30) + } + + "lever" -> { + if (!DRMConfig.showSecrets) return@forEverySecretInRoom + Color(250, 217, 2) + } + + "fairysoul" -> { + if (!DRMConfig.showFairySouls) return@forEverySecretInRoom + Color(255, 85, 255) + } + + "stonk" -> { + if (!DRMConfig.showStonk) return@forEverySecretInRoom + Color(146, 52, 235) + } + + else -> Color(190, 255, 252) + } + val viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks + val viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks + val viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks + val x = pos.x - viewerX + val y = pos.y - viewerY + val z = pos.z - viewerZ + val distSq = x * x + y * y + z * z + GlStateManager.disableDepth() + GlStateManager.disableCull() + if (DRMConfig.showBoundingBox && frustum.isBoxInFrustum( + pos.x.toDouble(), + pos.y.toDouble(), + pos.z.toDouble(), + (pos.x + 1).toDouble(), + (pos.y + 1).toDouble(), + (pos.z + 1).toDouble() + ) + ) { + WaypointUtils.drawFilledBoundingBox(AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1), color, 0.4f) + } + GlStateManager.disableTexture2D() + if (DRMConfig.showBeacon && distSq > 5 * 5) WaypointUtils.renderBeaconBeam( + x, + y + 1, + z, + color.rgb, + 0.25f, + event.partialTicks + ) + if (DRMConfig.showWaypointText) WaypointUtils.renderWaypointText( + secretsObject["secretName"].asString, + pos.up(2), + event.partialTicks + ) + GlStateManager.disableLighting() + GlStateManager.enableTexture2D() + GlStateManager.enableDepth() + GlStateManager.enableCull() + } + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + fun onChat(event: ClientChatReceivedEvent) { + if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled) return + // Action Bar + if (event.type.toInt() != 2) return + event.message.unformattedText.split(" {3,}".toRegex()).forEach { section -> + if (section.contains("Secrets") && section.contains("/")) { + val cleanedSection = StringUtils.stripControlCodes(section) + val splitSecrets = cleanedSection.split("/") + completedSecrets = splitSecrets[0].replace("[^0-9]".toRegex(), "").toInt() + val totalSecrets = splitSecrets[1].replace("[^0-9]".toRegex(), "").toInt() + allFound = totalSecrets == secretNum && completedSecrets == secretNum + return + } + } + } + + @SubscribeEvent + fun onInteract(event: PlayerInteractEvent) { + if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled) return + if (DRMConfig.disableWhenAllFound && allFound) return + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) return + val block = event.world.getBlockState(event.pos).block + if (block != Blocks.chest && block != Blocks.skull) return + + DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> + if (secretsObject["category"].asString == "chest" || secretsObject["category"].asString == "wither") { + val relative = + BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) + val pos = + MapUtils.relativeToActual( + relative, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (pos == event.pos) { + for (j in 1..secretNum) { + if (secretsObject["secretName"].asString.substring(0, 2) + .replace("[\\D]".toRegex(), "") == j.toString() + ) { + secretsList!![j - 1] = false + allSecretsMap.replace(roomName, secretsList) + DungeonRooms.logger.info("DungeonRooms: Detected " + secretsObject["category"].asString + " click, turning off waypoint for secret #" + j) + break + } + } + } + } + } + } + + @SubscribeEvent + fun onReceivePacket(event: ReceiveEvent) { + if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled) return + if (DRMConfig.disableWhenAllFound && allFound) return + val mc = Minecraft.getMinecraft() + if (event.packet is S0DPacketCollectItem) { + val packet = event.packet as S0DPacketCollectItem + var entity = mc.theWorld.getEntityByID(packet.collectedItemEntityID) + if (entity is EntityItem) { + val item = entity + entity = mc.theWorld.getEntityByID(packet.entityID) ?: return + val name = item.entityItem.displayName + if (!name.contains("Decoy") + && !name.contains("Defuse Kit") + && !name.contains("Dungeon Chest Key") + && !name.contains("Healing VIII") + && !name.contains("Inflatable Jerry") + && !name.contains("Spirit Leap") + && !name.contains("Training Weights") + && !name.contains("Trap") + && !name.contains("Treasure Talisman") + ) { + return + } + if (entity.commandSenderEntity.name != mc.thePlayer.name) { + // Do nothing if someone else picks up the item in order to follow Hypixel rules + return + } + + DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> + if (secretsObject["category"].asString == "item" || secretsObject["category"].asString == "bat") { + val relative = BlockPos( + secretsObject["x"].asInt, + secretsObject["y"].asInt, + secretsObject["z"].asInt + ) + val pos = MapUtils.relativeToActual( + relative, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (entity.getDistanceSq(pos) <= 36.0) { + for (j in 1..secretNum) { + if (secretsObject["secretName"].asString.substring(0, 2) + .replace("[\\D]".toRegex(), "") == j.toString() + ) { + if (!secretsList!![j - 1]) continue + secretsList!![j - 1] = false + allSecretsMap.replace(roomName, secretsList) + DungeonRooms.logger.info( + "DungeonRooms: ${entity.commandSenderEntity.name} picked up ${ + StringUtils.stripControlCodes( + name + ) + } from a ${secretsObject["category"].asString} secret, turning off waypoint for secret #$j" + ) + return@forEverySecretInRoom + } + } + } + } + + } + } + } + } + + // Disable waypoint within 4 blocks away on sneak + @SubscribeEvent + fun onKey(event: InputEvent.KeyInputEvent?) { + if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled || !DRMConfig.sneakToDisable) return + val player = Minecraft.getMinecraft().thePlayer + if (FMLClientHandler.instance().client.gameSettings.keyBindSneak.isPressed) { + val preupdate = lastSneakTime + lastSneakTime = System.currentTimeMillis() + if (System.currentTimeMillis() - preupdate < 500) { // check for two taps in under half a second + + DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> + if (secretsObject["category"].asString == "chest" || secretsObject["category"].asString == "wither" || secretsObject["category"].asString == "item" || secretsObject["category"].asString == "bat") { + val relative = + BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) + val pos = MapUtils.relativeToActual( + relative, + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + if (player.getDistanceSq(pos) <= 16.0) { + for (j in 1..secretNum) { + if (secretsObject["secretName"].asString.substring(0, 2) + .replace("[\\D]".toRegex(), "") == j.toString() + ) { + if (!secretsList!![j - 1]) continue + secretsList!![j - 1] = false + allSecretsMap.replace(roomName, secretsList) + DungeonRooms.logger.info("DungeonRooms: Player sneaked near " + secretsObject["category"].asString + " secret, turning off waypoint for secret #" + j) + return@forEverySecretInRoom + } + } + } + } + } + } + } + } + + private var lastSneakTime: Long = 0 + companion object { + + var allFound = false + + @JvmField + var secretNum: Int = 0 + var completedSecrets = 0 + + @JvmField + var allSecretsMap: MutableMap?> = HashMap() + + @JvmField + var secretsList: MutableList? = ArrayList(BooleanArray(10).toMutableList()) + + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/LinkGUI.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/LinkGUI.kt new file mode 100644 index 0000000..4922fe4 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/LinkGUI.kt @@ -0,0 +1,101 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.gui + +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.handlers.OpenLink +import io.github.quantizr.dungeonrooms.handlers.TextRenderer +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiButton +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.event.ClickEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting + +class LinkGUI : GuiScreen() { + private var discordClient: GuiButton? = null + private var discordBrowser: GuiButton? = null + private var SBPSecrets: GuiButton? = null + private var close: GuiButton? = null + override fun doesGuiPauseGame(): Boolean { + return false + } + + override fun initGui() { + super.initGui() + val sr = ScaledResolution(Minecraft.getMinecraft()) + val height = sr.scaledHeight + val width = sr.scaledWidth + discordClient = GuiButton(0, width / 2 - 185, height / 6 + 96, 120, 20, "DSG Discord Client") + discordBrowser = GuiButton(1, width / 2 - 60, height / 6 + 96, 120, 20, "DSG Discord Browser") + SBPSecrets = GuiButton(2, width / 2 + 65, height / 6 + 96, 120, 20, "SBP Secrets Mod") + close = GuiButton(3, width / 2 - 60, height / 6 + 136, 120, 20, "Close") + buttonList.add(discordClient) + buttonList.add(discordBrowser) + buttonList.add(SBPSecrets) + buttonList.add(close) + } + + override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) { + drawDefaultBackground() + val mc = Minecraft.getMinecraft() + val displayText: String + displayText = if (DungeonRooms.instance.roomDetection.roomName == "undefined") { + "Where would you like to view secrets for: ${EnumChatFormatting.RED}undefined" + } else { + "Where would you like to view secrets for: ${EnumChatFormatting.GREEN}${DungeonRooms.instance.roomDetection.roomName}" + } + val displayWidth = mc.fontRendererObj.getStringWidth(displayText) + TextRenderer.drawText(mc, displayText, width / 2 - displayWidth / 2, height / 6 + 56, 1.0, false) + val noteText = + ("${EnumChatFormatting.GRAY}If you wish to have the hotkey go directly to DSG or SBP instead of this GUI run ${EnumChatFormatting.WHITE}/room set ") + val noteWidth = mc.fontRendererObj.getStringWidth(noteText) + TextRenderer.drawText(mc, noteText, width / 2 - noteWidth / 2, (height * 0.9).toInt(), 1.0, false) + super.drawScreen(mouseX, mouseY, partialTicks) + } + + public override fun actionPerformed(button: GuiButton) { + val player: EntityPlayer = Minecraft.getMinecraft().thePlayer + if (button === discordClient) { + OpenLink.openDiscord("client") + player.closeScreen() + } else if (button === discordBrowser) { + OpenLink.openDiscord("browser") + player.closeScreen() + } else if (button === SBPSecrets) { + if (DungeonRooms.usingSBPSecrets) { + OpenLink.openSBPSecrets() + } else { + val sbpURL = "https://discord.gg/2UjaFqfPwJ" + val sbp = + ChatComponentText(EnumChatFormatting.YELLOW.toString() + "" + EnumChatFormatting.UNDERLINE + sbpURL) + sbp.chatStyle = sbp.chatStyle.setChatClickEvent(ClickEvent(ClickEvent.Action.OPEN_URL, sbpURL)) + player.addChatMessage( + ChatComponentText( + "${EnumChatFormatting.RED}Dungeon Rooms: You need theSkyblock Personalized (SBP) Mod for this feature, get it from " + ).appendSibling(sbp) + ) + } + player.closeScreen() + } else if (button === close) { + player.closeScreen() + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt new file mode 100644 index 0000000..d5c9144 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt @@ -0,0 +1,338 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.gui + +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.dungeons.Waypoints +import io.github.quantizr.dungeonrooms.handlers.ConfigHandler +import io.github.quantizr.dungeonrooms.handlers.TextRenderer +import io.github.quantizr.dungeonrooms.utils.Utils +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiButton +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.gui.ScaledResolution +import net.minecraft.client.settings.GameSettings +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting +import java.io.IOException +import java.util.* +import kotlin.math.ceil + +class WaypointsGUI : GuiScreen() { + private var waypointsEnabled: GuiButton? = null + private var practiceModeEnabled: GuiButton? = null + private var showEntrance: GuiButton? = null + private var showSuperboom: GuiButton? = null + private var showSecrets: GuiButton? = null + private var showFairySouls: GuiButton? = null + private var showStonk: GuiButton? = null + private var disableWhenAllFound: GuiButton? = null + private var sneakToDisable: GuiButton? = null + private var close: GuiButton? = null + override fun doesGuiPauseGame(): Boolean { + return false + } + + override fun initGui() { + super.initGui() + waypointGuiOpened = true + val sr = ScaledResolution(Minecraft.getMinecraft()) + val height = sr.scaledHeight + val width = sr.scaledWidth + waypointsEnabled = GuiButton(0, width / 2 - 100 + 0, height / 6 - 5, 200, 20, waypointBtnText()) + practiceModeEnabled = GuiButton( + 1, + width / 2 - 100 - 110, + height / 6 + 25, + 200, + 20, + "Practice Mode: " + getOnOff(DRMConfig.practiceModeOn) + ) + showEntrance = GuiButton( + 2, + width / 2 - 100 + 110, + height / 6 + 25, + 200, + 20, + "Show Entrance Waypoints: " + getOnOff(DRMConfig.showEntrance) + ) + showSuperboom = GuiButton( + 3, + width / 2 - 100 - 110, + height / 6 + 55, + 200, + 20, + "Show Superboom Waypoints: " + getOnOff(DRMConfig.showSuperboom) + ) + showSecrets = GuiButton( + 4, + width / 2 - 100 + 110, + height / 6 + 55, + 200, + 20, + "Show Secret Waypoints: " + getOnOff(DRMConfig.showSecrets) + ) + showFairySouls = GuiButton( + 5, + width / 2 - 100 - 110, + height / 6 + 85, + 200, + 20, + "Show Fairy Soul Waypoints: " + getOnOff(DRMConfig.showFairySouls) + ) + showStonk = GuiButton( + 6, + width / 2 - 100 + 110, + height / 6 + 85, + 200, + 20, + "Show Stonk Waypoints: " + getOnOff(DRMConfig.showStonk) + ) + sneakToDisable = GuiButton( + 7, + width / 2 - 100 - 110, + height / 6 + 115, + 200, + 20, + "Double-Tap Sneak to Hide Nearby: " + getOnOff(DRMConfig.sneakToDisable) + ) + disableWhenAllFound = GuiButton( + 8, + width / 2 - 100 + 110, + height / 6 + 115, + 200, + 20, + "Disable when all secrets found: " + getOnOff(DRMConfig.disableWhenAllFound) + ) + close = GuiButton(9, width / 2 - 100, height / 6 * 5, 200, 20, "Close") + buttonList.add(waypointsEnabled) + buttonList.add(practiceModeEnabled) + buttonList.add(showEntrance) + buttonList.add(showSuperboom) + buttonList.add(showSecrets) + buttonList.add(showFairySouls) + buttonList.add(showStonk) + buttonList.add(sneakToDisable) + buttonList.add(disableWhenAllFound) + buttonList.add(close) + if (Utils.inCatacombs) { + if (Waypoints.secretNum > 0) { + if (Waypoints.secretNum <= 5) { + for (i in 1..Waypoints.secretNum) { + val adjustPos = -40 * Waypoints.secretNum - 70 + 80 * i + secretButtonList[i - 1] = GuiButton( + 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( + Waypoints.secretsList!![i - 1] + ) + ) + buttonList.add(secretButtonList[i - 1]) + } + } else { + for (i in 1..ceil(Waypoints.secretNum.toDouble() / 2).toInt()) { + val adjustPos = -40 * ceil(Waypoints.secretNum.toDouble() / 2).toInt() - 70 + 80 * i + secretButtonList[i - 1] = GuiButton( + 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( + Waypoints.secretsList!![i - 1] + ) + ) + buttonList.add(secretButtonList[i - 1]) + } + for (i in (ceil((Waypoints.secretNum / 2).toDouble()) + 1).toInt() .. Waypoints.secretNum) { + val adjustPos = -40 * (Waypoints.secretNum - ceil(Waypoints.secretNum.toDouble() / 2) + .toInt()) - 70 + 80 * (i - ceil(Waypoints.secretNum.toDouble() / 2).toInt()) + secretButtonList[i - 1] = GuiButton( + 10 + i, width / 2 + adjustPos, height / 6 + 200, 60, 20, "$i: " + getOnOff( + Waypoints.secretsList!![i - 1] + ) + ) + buttonList.add(secretButtonList[i - 1]) + } + } + } + } + } + + override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) { + drawDefaultBackground() + val mc = Minecraft.getMinecraft() + val text1 = "§lDungeon Room Waypoints:" + val text1Width = mc.fontRendererObj.getStringWidth(text1) + TextRenderer.drawText(mc, text1, width / 2 - text1Width / 2, height / 6 - 25, 1.0, false) + val text2 = "(Use at your own risk)" + val text2Width = mc.fontRendererObj.getStringWidth(text2) + TextRenderer.drawText( + mc, + EnumChatFormatting.GRAY.toString() + text2, + width / 2 - text2Width / 2, + height / 6 - 15, + 1.0, + false + ) + val text3 = "Toggle Room Specific Waypoints:" + val text3Width = mc.fontRendererObj.getStringWidth(text3) + TextRenderer.drawText(mc, text3, width / 2 - text3Width / 2, height / 6 + 140, 1.0, false) + val text4 = "(You can also press the # key matching the secret instead)" + val text4Width = mc.fontRendererObj.getStringWidth(text4) + TextRenderer.drawText( + mc, + EnumChatFormatting.GRAY.toString() + text4, + width / 2 - text4Width / 2, + height / 6 + 150, + 1.0, + false + ) + if (!Utils.inCatacombs) { + val errorText = "Not in dungeons" + val errorTextWidth = mc.fontRendererObj.getStringWidth(errorText) + TextRenderer.drawText( + mc, + EnumChatFormatting.RED.toString() + errorText, + width / 2 - errorTextWidth / 2, + height / 6 + 170, + 1.0, + false + ) + } else if (Waypoints.secretNum == 0) { + val errorText = "No secrets in this room" + val errorTextWidth = mc.fontRendererObj.getStringWidth(errorText) + TextRenderer.drawText( + mc, + EnumChatFormatting.RED.toString() + errorText, + width / 2 - errorTextWidth / 2, + height / 6 + 170, + 1.0, + false + ) + } + super.drawScreen(mouseX, mouseY, partialTicks) + } + + public override fun actionPerformed(button: GuiButton) { + val player: EntityPlayer = Minecraft.getMinecraft().thePlayer + if (button === waypointsEnabled) { + DRMConfig.waypointsEnabled = !DRMConfig.waypointsEnabled + waypointsEnabled!!.displayString = waypointBtnText() + if (DRMConfig.waypointsEnabled) { + player.addChatMessage(ChatComponentText("§eDungeon Rooms: Waypoints will now automatically show up when you enter a new dungeon room.")) + } + } else if (button === practiceModeEnabled) { + DRMConfig.practiceModeOn = !DRMConfig.practiceModeOn + practiceModeEnabled!!.displayString = "Practice Mode: " + getOnOff(DRMConfig.practiceModeOn) + if (DRMConfig.practiceModeOn) { + player.addChatMessage( + ChatComponentText( + """ + §eDungeon Rooms: Practice Mode has been enabled. + §e Waypoints will ONLY show up while you are pressing "${ + DRMConfig.practiceModeKeyBind.display + }". + §r (Hotkey is configurable in Minecraft Controls menu) + """.trimIndent() + ) + ) + } + } else if (button === showEntrance) { + DRMConfig.showEntrance = !DRMConfig.showEntrance + showEntrance!!.displayString = "Show Entrance Waypoints: " + getOnOff(DRMConfig.showEntrance) + } else if (button === showSuperboom) { + DRMConfig.showSuperboom = !DRMConfig.showSuperboom + showSuperboom!!.displayString = "Show Superboom Waypoints: " + getOnOff(DRMConfig.showSuperboom) + } else if (button === showSecrets) { + DRMConfig.showSecrets = !DRMConfig.showSecrets + showSecrets!!.displayString = "Show Secret Waypoints: " + getOnOff(DRMConfig.showSecrets) + } else if (button === showFairySouls) { + DRMConfig.showFairySouls = !DRMConfig.showFairySouls + showFairySouls!!.displayString = "Show Fairy Soul Waypoints: " + getOnOff(DRMConfig.showFairySouls) + } else if (button === showStonk) { + DRMConfig.showStonk = !DRMConfig.showStonk + showStonk!!.displayString = "Show Stonk Waypoints: " + getOnOff(DRMConfig.showStonk) + } else if (button === sneakToDisable) { + DRMConfig.sneakToDisable = !DRMConfig.sneakToDisable + sneakToDisable!!.displayString = "Double-Tap Sneak to Hide Nearby: " + getOnOff(DRMConfig.sneakToDisable) + } else if (button === disableWhenAllFound) { + DRMConfig.disableWhenAllFound = !DRMConfig.disableWhenAllFound + disableWhenAllFound!!.displayString = + "Disable when all secrets found: " + getOnOff(DRMConfig.disableWhenAllFound) + } else if (button === close) { + player.closeScreen() + } + if (Utils.inCatacombs) { + if (Waypoints.secretNum > 0) { + for (i in 1..Waypoints.secretNum) { + if (button === secretButtonList[i - 1]) { + Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] + if (DungeonRooms.instance.roomDetection.roomName != "undefined") { + Waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, Waypoints.secretsList) + } + secretButtonList[i - 1].displayString = "$i: " + getOnOff( + Waypoints.secretsList!![i - 1] + ) + break + } + } + } + } + } + + override fun onGuiClosed() { + waypointGuiOpened = false + } + + @Throws(IOException::class) + override fun keyTyped(c: Char, keyCode: Int) { + super.keyTyped(c, keyCode) + if (waypointGuiOpened && Utils.inCatacombs) { + if (Waypoints.secretNum > 0) { + for (i in 1..Waypoints.secretNum) { + if (keyCode - 1 == i) { + Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] + if (DungeonRooms.instance.roomDetection.roomName != "undefined") { + Waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, Waypoints.secretsList) + } + secretButtonList[i - 1].displayString = "$i: " + getOnOff( + Waypoints.secretsList!![i - 1] + ) + break + } + } + } + } + } + + companion object { + var secretButtonList: MutableList = ArrayList(listOf(*arrayOfNulls(10))) + private var waypointGuiOpened = false + private fun waypointBtnText(): String { + return if (DRMConfig.waypointsEnabled) { + EnumChatFormatting.GREEN.toString() + "§lWaypoints Enabled" + } else { + EnumChatFormatting.RED.toString() + "§lWaypoints Disabled" + } + } + + private fun getOnOff(bool: Boolean): String { + return if (bool) { + EnumChatFormatting.GREEN.toString() + "On" + } else { + EnumChatFormatting.RED.toString() + "Off" + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt new file mode 100644 index 0000000..dcaba7d --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt @@ -0,0 +1,82 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.handlers + +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.dungeons.DungeonManager +import io.github.quantizr.dungeonrooms.dungeons.Waypoints +import net.minecraftforge.common.config.ConfigCategory +import net.minecraftforge.common.config.Configuration +import java.io.File + +object ConfigHandler { + private var config: Configuration? = null + private const val file = "config/DungeonRooms.cfg" + + private fun getString(category: String?, key: String?): String { + config = Configuration(File(file)) + try { + config!!.load() + if (config!!.getCategory(category).containsKey(key)) { + return config!![category, key, ""].string + } + } catch (ex: Exception) { + ex.printStackTrace() + } finally { + config!!.save() + } + return "" + } + + private fun writeStringConfig(category: String?, key: String?, value: String?) { + config = Configuration(File(file)) + try { + config!!.load() + val set = config!![category, key, value].string + config!!.getCategory(category)[key].set(value) + } catch (ex: Exception) { + ex.printStackTrace() + } finally { + config!!.save() + } + } + private fun hasKey(category: String?, key: String?): Boolean { + config = Configuration(File(file)) + try { + config!!.load() + return if (!config!!.hasCategory(category)) false else config!!.getCategory(category).containsKey(key) + } catch (ex: Exception) { + ex.printStackTrace() + } finally { + config!!.save() + } + return false + } + + + @JvmStatic + fun reloadConfig() { + if (!hasKey("drm", "version")) { + writeStringConfig("drm", "version", DungeonRooms.VERSION) + DungeonRooms.firstLogin = true + } else if (getString("drm", "version") != DungeonRooms.VERSION) { + writeStringConfig("drm", "version", DungeonRooms.VERSION) + } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt new file mode 100644 index 0000000..52c1915 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt @@ -0,0 +1,105 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.handlers + +import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.gui.LinkGUI +import net.minecraft.client.Minecraft +import net.minecraft.event.ClickEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.EnumChatFormatting +import net.minecraftforge.client.ClientCommandHandler +import net.minecraftforge.fml.client.FMLClientHandler +import java.awt.Desktop +import java.io.IOException +import java.net.URI +import java.net.URISyntaxException + +object OpenLink { + @JvmStatic + fun checkForLink(type: String?) { + val mc = Minecraft.getMinecraft() + + (DungeonRooms.instance.getSecretsObject() ?: return).let { (obj, _) -> + if (obj["dsg"].asString == "null" && obj["sbp"] == null) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There are no channels/images for this room.") + return + } + } + + when (type) { + "gui" -> mc.addScheduledTask { mc.displayGuiScreen(LinkGUI()) } + "dsg" -> openDiscord("client") + "sbp" -> if (DungeonRooms.usingSBPSecrets) { + openSBPSecrets() + } else { + val sbpURL = "https://discord.gg/2UjaFqfPwJ" + val sbp = ChatComponentText("${EnumChatFormatting.YELLOW}${EnumChatFormatting.UNDERLINE}$sbpURL") + sbp.chatStyle = sbp.chatStyle.setChatClickEvent(ClickEvent(ClickEvent.Action.OPEN_URL, sbpURL)) + val thacomponent = ChatComponentText( + "${EnumChatFormatting.RED}Dungeon Rooms: You need the SkyblockPersonalized (SBP) Mod for this feature, get it from " + ).appendSibling(sbp) + ChatTransmitter.addToQueue(thacomponent) + } + } + } + + fun openDiscord(type: String) { + val mc = Minecraft.getMinecraft() + val player = mc.thePlayer + + val (roomJson, _) = DungeonRooms.instance.getSecretsObject() ?: return + + if (roomJson["dsg"].asString == "null") { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There is no DSG channel for this room.") + return + } + try { + if (type == "client") { + player.addChatMessage(ChatComponentText("Dungeon Rooms: Opening DSG Discord in Client...")) + Desktop.getDesktop().browse(URI("discord://" + roomJson["dsg"].asString)) + } else { + player.addChatMessage(ChatComponentText("Dungeon Rooms: Opening DSG Discord in Browser...")) + Desktop.getDesktop().browse(URI("https://discord.com" + roomJson["dsg"].asString)) + } + } catch (e: IOException) { + e.printStackTrace() + } catch (e: URISyntaxException) { + e.printStackTrace() + } + } + + fun openSBPSecrets() { + val (roomJson, _) = DungeonRooms.instance.getSecretsObject() ?: return + if (roomJson["sbp"] == null) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There are no SBP images for this room.") + return + } + val name = roomJson["sbp"].asString + var category = roomJson["category"].asString + when (category) { + "Puzzle", "Trap" -> category = "puzzles" + "L-shape" -> category = "L" + } + ClientCommandHandler.instance.executeCommand( + FMLClientHandler.instance().clientPlayerEntity, + "/secretoverride $category $name" + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/PacketHandler.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/PacketHandler.kt new file mode 100644 index 0000000..10677ba --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/PacketHandler.kt @@ -0,0 +1,40 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.handlers + +import io.github.quantizr.dungeonrooms.events.PacketEvent.ReceiveEvent +import io.github.quantizr.dungeonrooms.events.PacketEvent.SendEvent +import io.netty.channel.ChannelDuplexHandler +import io.netty.channel.ChannelHandlerContext +import io.netty.channel.ChannelPromise +import net.minecraft.network.Packet +import net.minecraftforge.common.MinecraftForge + +class PacketHandler : ChannelDuplexHandler() { + @Throws(Exception::class) + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + if (msg is Packet<*>) MinecraftForge.EVENT_BUS.post(ReceiveEvent(msg)) + super.channelRead(ctx, msg) + } + + @Throws(Exception::class) + override fun write(ctx: ChannelHandlerContext, msg: Any, promise: ChannelPromise) { + if (msg is Packet<*>) MinecraftForge.EVENT_BUS.post(SendEvent(msg)) + super.write(ctx, msg, promise) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt new file mode 100644 index 0000000..4893e3f --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt @@ -0,0 +1,66 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.handlers + +import com.google.common.collect.Iterables +import com.google.common.collect.Lists +import net.minecraft.client.Minecraft +import net.minecraft.scoreboard.Score +import net.minecraft.scoreboard.ScorePlayerTeam +import net.minecraft.util.StringUtils +import java.util.stream.Collectors + +object ScoreboardHandler { + @JvmStatic + fun cleanSB(scoreboard: String?): String { + val nvString = StringUtils.stripControlCodes(scoreboard).toCharArray() + val cleaned = StringBuilder() + for (c in nvString) { + if (c.code > 20 && c.code < 127) { + cleaned.append(c) + } + } + return cleaned.toString() + } + + @JvmStatic + val sidebarLines: List + get() { + val lines: MutableList = ArrayList() + if (Minecraft.getMinecraft().theWorld == null) return lines + val scoreboard = Minecraft.getMinecraft().theWorld.scoreboard ?: return lines + val objective = scoreboard.getObjectiveInDisplaySlot(1) ?: return lines + var scores = scoreboard.getSortedScores(objective) + val list = scores.stream() + .filter { input: Score? -> + input != null && input.playerName != null && !input.playerName + .startsWith("#") + } + .collect(Collectors.toList()) + scores = if (list.size > 15) { + Lists.newArrayList(Iterables.skip(list, scores.size - 15)) + } else { + list + } + for (score in scores) { + val team = scoreboard.getPlayersTeam(score.playerName) + lines.add(ScorePlayerTeam.formatPlayerName(team, score.playerName)) + } + return lines + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/TextRenderer.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/TextRenderer.kt new file mode 100644 index 0000000..f45335d --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/TextRenderer.kt @@ -0,0 +1,73 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.handlers + +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.Gui +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.util.StringUtils +import kotlin.math.roundToInt + +object TextRenderer : Gui() { + @JvmStatic + fun drawText(mc: Minecraft, text: String, x: Int, yy: Int, scale: Double, outline: Boolean) { + var y = yy + GlStateManager.pushMatrix() + GlStateManager.scale(scale, scale, scale) + y -= mc.fontRendererObj.FONT_HEIGHT + for (line in text.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) { + y += (mc.fontRendererObj.FONT_HEIGHT * scale).toInt() + if (outline) { + val noColourLine = StringUtils.stripControlCodes(line) + mc.fontRendererObj.drawString( + noColourLine, ((x / scale).roundToInt() - 1).toFloat(), (y / scale).roundToInt() + .toFloat(), 0x000000, false + ) + mc.fontRendererObj.drawString( + noColourLine, ((x / scale).roundToInt() + 1).toFloat(), (y / scale).roundToInt() + .toFloat(), 0x000000, false + ) + mc.fontRendererObj.drawString( + noColourLine, + (x / scale).roundToInt().toFloat(), + ((y / scale).roundToInt() - 1).toFloat(), + 0x000000, + false + ) + mc.fontRendererObj.drawString( + noColourLine, + (x / scale).roundToInt().toFloat(), + ((y / scale).roundToInt() + 1).toFloat(), + 0x000000, + false + ) + mc.fontRendererObj.drawString( + line, (x / scale).roundToInt().toFloat(), (y / scale).roundToInt() + .toFloat(), 0xFFFFFF, false + ) + } else { + mc.fontRendererObj.drawString( + line, (x / scale).roundToInt().toFloat(), (y / scale).roundToInt() + .toFloat(), 0xFFFFFF, true + ) + } + } + GlStateManager.popMatrix() + GlStateManager.color(1f, 1f, 1f, 1f) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt new file mode 100644 index 0000000..a5937b6 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt @@ -0,0 +1,5 @@ +package io.github.quantizr.dungeonrooms.roomdata + +enum class RoomColor { + BROWN, PURPLE, ORANGE, YELLOW, GREEN, PINK, RED, UNDEFINED +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt new file mode 100644 index 0000000..560dd90 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt @@ -0,0 +1,447 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.utils + +import io.github.quantizr.dungeonrooms.roomdata.RoomColor +import net.minecraft.block.material.MapColor +import net.minecraft.client.Minecraft +import net.minecraft.init.Items +import net.minecraft.util.BlockPos +import net.minecraft.util.Vec3 +import java.awt.Point +import java.util.* + +object MapUtils { + /** + * Checks whether the Skyblock Dungeon Map is in the player's hotbar + * @return whether the map exists + */ + fun mapExists(): Boolean { + val mc = Minecraft.getMinecraft() + val mapSlot = mc.thePlayer.inventory.getStackInSlot(8) //check last slot where map should be + return if (mapSlot == null || mapSlot.item !== Items.filled_map || !mapSlot.hasDisplayName()) false else mapSlot.displayName.contains( + "Magical Map" + ) //make sure it is a map, not SB Menu or Spirit Bow, etc + } + + /** + * Reads the hotbar map and converts it into a 2D Integer array of RGB colors which can be used by the rest of the + * code + * + * @return null if map not found, otherwise 128x128 Array of the RGB Integer colors of each point on the map + */ + fun updatedMap(): Array>? { + if (!mapExists()) return null //make sure map exists + val mc = Minecraft.getMinecraft() + val mapSlot = mc.thePlayer.inventory.getStackInSlot(8) //get map ItemStack + val mapData = Items.filled_map.getMapData(mapSlot, mc.theWorld) ?: return null + val map = Array(128) { arrayOfNulls(128) } + + //for loop code modified from net.minecraft.client.gui.MapItemRenderer.updateMapTexture() + for (i in 0..16383) { + val x = i % 128 //get x coordinate of pixel being read + val y = i / 128 //get y coordinate of pixel being read + val j = mapData.colors[i].toInt() and 255 + var rgba: Int + rgba = if (j / 4 == 0) { + (i + i / 128 and 1) * 8 + 16 shl 24 + } else { + MapColor.mapColorArray[j / 4].getMapColor(j and 3) + } + map[x][y] = rgba and 0x00FFFFFF //get rgb value from rgba + } + return map + } + + /** + * This function finds the coordinates of the NW and NE corners of the entrance room on the hotbar map. This is + * later used to determine the size of the room grid on the hotbar map. Different floors have slightly different + * pixel widths of the rooms, so it is important for the mod to be able to identify the location and size of various + * portions of the room grid. Since all rooms within a floor are the same size on the hotbar map and since the + * entrance room is always there on the hotbar map, we get two corners from the entrance room to determine the + * scaling of the map as soon as the player enters. + * + * This function works by iterating through the map and looking for a green entrance room pixel. Once it finds one + * and determines that the map pixel above is a blank spot, it checks for map pixels on the left and right side. + * + * @return `entranceMapCorners[0]` is the coordinate of the left NW corner and `entranceMapCorners[1]` is the + * coordinate of the right NE corner + */ + fun entranceMapCorners(map: Array>?): Array? { + if (map == null) return null + val corners = arrayOfNulls(2) + for (x in 0..127) { + for (y in 0..127) { + if (map[x][y] != null && map[x][y] == 31744 && map[x][y - 1] != null && map[x][y - 1] == 0) { //check for Green entrance room pixels and make sure row above is blank + if (map[x - 1][y] != null && map[x - 1][y] == 0) { + corners[0] = Point(x, y) //Left corner + } else if (map[x + 1][y] != null && map[x + 1][y] == 0) { + corners[1] = Point(x, y) //Right Corner + } + } + } + if (corners[0] != null && corners[1] != null) break + } + return corners + } + + /** + * @return the coordinate of the NW hotbar map corner closest to the coordinate provided + */ + fun getClosestNWMapCorner(mapPos: Point, leftCorner: Point, rightCorner: Point): Point { + val roomWidthAndGap = + rightCorner.x - leftCorner.x + 1 + 4 //+1 to count left corner block, +4 to account for gap between rooms + val origin = Point(leftCorner.x % roomWidthAndGap, leftCorner.y % roomWidthAndGap) + mapPos.x = mapPos.x + 2 //shift by 2 so room borders are evenly split + mapPos.y = mapPos.y + 2 + var x = mapPos.x - mapPos.x % roomWidthAndGap + origin.x //round down to room size grid + var y = mapPos.y - mapPos.y % roomWidthAndGap + origin.y + if (x > mapPos.x) x -= roomWidthAndGap //make sure coordinates are being rounded down (in case origin value being too large) + if (y > mapPos.y) y -= roomWidthAndGap + return Point(x, y) + } + + /** + * Skyblock Dungeon maps are aligned to a 32x32 block wide grid, allowing for math only calculation of corners + * @return the coordinate of the NW physical map corner closest to the coordinate provided + */ + fun getClosestNWPhysicalCorner(vectorPos: Vec3): Point { + var shiftedPos = vectorPos.addVector(0.5, 0.0, 0.5) //shift by 0.5 so room borders are evenly split + shiftedPos = shiftedPos.addVector(8.0, 0.0, 8.0) //because Hypixel randomly shifted rooms in Skyblock 0.12.3 + val x = (shiftedPos.xCoord - Math.floorMod( + shiftedPos.xCoord.toInt(), + 32 + )).toInt() //room length 31, +1 to account for gap between rooms + val z = (shiftedPos.zCoord - Math.floorMod(shiftedPos.zCoord.toInt(), 32)).toInt() + return Point(x - 8, z - 8) //-8 for same reason as above + } + + fun getClosestNWPhysicalCorner(blockPos: BlockPos): Point { + return getClosestNWPhysicalCorner(Vec3(blockPos.x.toDouble(), blockPos.y.toDouble(), blockPos.z.toDouble())) + } + + /** + * @return the hotbar map coordinate corresponding to the physical map corner coordinate provided + */ + fun physicalToMapCorner( + physicalClosestCorner: Point, + physicalLeftCorner: Point, + leftCorner: Point, + rightCorner: Point + ): Point { + val roomWidthAndGap = + rightCorner.x - leftCorner.x + 1 + 4 //+1 to count left corner block, +4 to account for gap between rooms + val xShift = + (physicalClosestCorner.x - physicalLeftCorner.x) / 32 //how many 1x1 grids away the closest corner is from entrance + val yShift = (physicalClosestCorner.y - physicalLeftCorner.y) / 32 + val x = leftCorner.x + roomWidthAndGap * xShift //translate grid distance to the map + val y = leftCorner.y + roomWidthAndGap * yShift + + //this function can return a value outside of 0-127 which are the bounds of the map + //must check bounds for any function using this + return Point(x, y) + } + + /** + * @return the physical map coordinate corresponding to the hotbar map corner coordinate provided + */ + fun mapToPhysicalCorner(mapCorner: Point, physicalLeftCorner: Point, leftCorner: Point, rightCorner: Point): Point { + val roomWidthAndGap = + rightCorner.x - leftCorner.x + 1 + 4 //+1 to count left corner block, +4 to account for gap between rooms + val xShift = + (mapCorner.x - leftCorner.x) / roomWidthAndGap //how many 1x1 grids away the closest corner is from entrance + val yShift = (mapCorner.y - leftCorner.y) / roomWidthAndGap + val x = physicalLeftCorner.x + 32 * xShift //translate grid distance to the physical + val y = physicalLeftCorner.y + 32 * yShift + return Point(x, y) + } + + /** + * @return the color of the coordinate on the map as a String + */ + fun getMapColor(point: Point, map: Array>?): RoomColor { + val x = point.x + val y = point.y + + //physicalToMapCorner might be called when player is outside map zone e.g. boss room, returning a value outside + // the map coordinates which would otherwise call getMapColor to crash + if (x < 0 || y < 0 || x > 127 || y > 127) { + return RoomColor.UNDEFINED + } + return if (map != null) { + when (map[x][y]) { + 7488283 -> RoomColor.BROWN + 11685080 -> RoomColor.PURPLE + 15066419 -> RoomColor.YELLOW + 31744 -> RoomColor.GREEN + 15892389 -> RoomColor.PINK + 14188339 -> RoomColor.ORANGE + 16711680 -> RoomColor.RED + else -> RoomColor.UNDEFINED + } + } else RoomColor.UNDEFINED + } + + /** + * Checks a point on each side the room corner coordinate for either empty space or a connected segment, each new + * segment is recursively checked until all neighboring segments have been added to a list + * + * @return a List of the coordinates of all segments of the same room as the corner coordinate provided + */ + fun neighboringSegments( + originCorner: Point, + map: Array>?, + leftCorner: Point, + rightCorner: Point, + list: MutableList + ): MutableList { + var list = list + if (!list.contains(originCorner)) { + list.add(originCorner) + } + if (getMapColor(originCorner, map) != RoomColor.BROWN) return list //only continue if square is brown + val roomWidth = rightCorner.x - leftCorner.x + 1 //+1 to count left corner block + val pointsToCheck: MutableList = ArrayList() + pointsToCheck.add(Point(originCorner.x, originCorner.y - 1)) //up + pointsToCheck.add(Point(originCorner.x, originCorner.y + roomWidth)) //down + pointsToCheck.add(Point(originCorner.x - 1, originCorner.y)) //left + pointsToCheck.add(Point(originCorner.x + roomWidth, originCorner.y)) //right + val pointsToTransform: MutableList = + ArrayList() //pointsToCheck +/- 4 to jump gap and calc correct closest NW corner + pointsToTransform.add(Point(originCorner.x, originCorner.y - 1 - 4)) //up + pointsToTransform.add(Point(originCorner.x, originCorner.y + roomWidth + 4)) //down + pointsToTransform.add(Point(originCorner.x - 1 - 4, originCorner.y)) //left + pointsToTransform.add(Point(originCorner.x + roomWidth + 4, originCorner.y)) //right + for (i in 0..3) { + if (getMapColor(pointsToCheck[i], map) == RoomColor.BROWN) { + val newCorner = getClosestNWMapCorner(pointsToTransform[i], leftCorner, rightCorner) + if (!list.contains(newCorner)) { + list.add(newCorner) + list = neighboringSegments( + newCorner, + map, + leftCorner, + rightCorner, + list + ) //check for neighboring segments from the new point + } + } + } + return list + } + + /** + * @return the size of the room given a location of each room segment + */ + fun roomSize(segments: List): String { + //accepts either map segments or physical segments, does not matter + if (segments.size == 1) return "1x1" + if (segments.size == 2) return "1x2" + val x = HashSet() + val y = HashSet() + for (segment in segments) { + x.add(segment.x) + y.add(segment.y) + } + if (segments.size == 3) { + return if (x.size == 2 && y.size == 2) "L-shape" else "1x3" + } + return if (segments.size == 4) { + if (x.size == 2 && y.size == 2) "2x2" else "1x4" + } else "undefined" + } + + /** + * @return the category of the room given size and color + */ + fun roomCategory(roomSize: String, roomColor: RoomColor): String { + return if (roomSize == "1x1") { + when (roomColor) { + RoomColor.BROWN -> "1x1" + RoomColor.PURPLE -> "Puzzle" + RoomColor.ORANGE -> "Trap" + RoomColor.GREEN, RoomColor.RED, RoomColor.PINK, RoomColor.YELLOW -> "General" + else -> "undefined" + } + } else { + roomSize + } + } + + /** + * @return the coordinate of the player marker on the map + */ + fun playerMarkerPos(): Point? { + if (!mapExists()) return null // make sure map exists + val mc = Minecraft.getMinecraft() + val mapSlot = mc.thePlayer.inventory.getStackInSlot(8) // get map ItemStack + val mapData = Items.filled_map.getMapData(mapSlot, mc.theWorld) ?: return null + if (mapData.mapDecorations != null) { + for ((_, value) in mapData.mapDecorations) { + if (value.func_176110_a().toInt() == 1) { // player marker + val x = value.func_176112_b() / 2 + 64 + val y = value.func_176113_c() / 2 + 64 + return Point(x, y) + } + } + } + return null + } + + /** + * @return the location of the furthest corner in a direction given a list of segments + */ + fun getPhysicalCornerPos(direction: String?, currentPhysicalSegments: List): Point? { + // For L-shapes, this will return the fourth corner as if it were a 2x2 + val xSet = TreeSet() // TreeSet removes duplicates and sorts increasing + val ySet = TreeSet() + for (segment in currentPhysicalSegments) { + xSet.add(segment.x) + ySet.add(segment.y) + } + when (direction) { + "NW" -> return Point(xSet.first(), ySet.first()) + "NE" -> return Point(xSet.last() + 30, ySet.first()) + "SE" -> return Point(xSet.last() + 30, ySet.last() + 30) + "SW" -> return Point(xSet.first(), ySet.last() + 30) + } + return null + } + + /** + * Rooms such as L-shape rooms only have one possible direction, so it is much faster to only have to compare one + * direction instead of rotating it 4 times. Similarly, rectangular shaped rooms have two possible directions, + * saving time instead of rotating it 4 times. Square shaped rooms must be checked in all four directions. + * + * @return the possible rotation directions which need to be checked + */ + fun possibleDirections(roomSize: String, currentRoomSegments: List): List { + //can take physical or hotbar segments + //eliminates two possibilities for rectangular rooms, three possibilities for L-shape + val directions: MutableList = ArrayList() + if (roomSize == "1x1" || roomSize == "2x2") { + directions.add("NW") + directions.add("NE") + directions.add("SE") + directions.add("SW") + } else { + val xSet = TreeSet() //TreeSet removes duplicates and sorts increasing + val ySet = TreeSet() + for (segment in currentRoomSegments) { + xSet.add(segment.x) + ySet.add(segment.y) + } + if (roomSize == "L-shape") { + val x: List = ArrayList(xSet) + val y: List = ArrayList(ySet) + if (!currentRoomSegments.contains( + Point( + x[0], + y[0] + ) + ) + ) directions.add("SW") else if (!currentRoomSegments.contains( + Point( + x[0], y[1] + ) + ) + ) directions.add("SE") else if (!currentRoomSegments.contains( + Point( + x[1], + y[0] + ) + ) + ) directions.add("NW") else if (!currentRoomSegments.contains( + Point( + x[1], y[1] + ) + ) + ) directions.add("NE") + } else if (roomSize.startsWith("1x")) { //not 1x1 bc else statement earlier + if (xSet.size >= 2 && ySet.size == 1) { + directions.add("NW") + directions.add("SE") + } else if (xSet.size == 1 && ySet.size >= 2) { + directions.add("NE") + directions.add("SW") + } + } + } + return directions + } + + /** + * @return the actual coordinate of a block given the relative coordinate + */ + fun actualToRelative(actual: BlockPos, cornerDirection: String?, locationOfCorner: Point): BlockPos { + var x = 0.0 + var z = 0.0 + when (cornerDirection) { + "NW" -> { + x = actual.x - locationOfCorner.getX() + z = actual.z - locationOfCorner.getY() //.getY in a point is the MC Z coord + } + + "NE" -> { + x = actual.z - locationOfCorner.getY() + z = -(actual.x - locationOfCorner.getX()) + } + + "SE" -> { + x = -(actual.x - locationOfCorner.getX()) + z = -(actual.z - locationOfCorner.getY()) + } + + "SW" -> { + x = -(actual.z - locationOfCorner.getY()) + z = actual.x - locationOfCorner.getX() + } + } + return BlockPos(x, actual.y.toDouble(), z) + } + + /** + * @return the relative coordinate of a block given the actual coordinate + */ + fun relativeToActual(relative: BlockPos, cornerDirection: String?, locationOfCorner: Point): BlockPos { + var x = 0.0 + var z = 0.0 + when (cornerDirection) { + "NW" -> { + x = relative.x + locationOfCorner.getX() + z = relative.z + locationOfCorner.getY() //.getY in a point is the MC Z coord + } + + "NE" -> { + x = -(relative.z - locationOfCorner.getX()) + z = relative.x + locationOfCorner.getY() + } + + "SE" -> { + x = -(relative.x - locationOfCorner.getX()) + z = -(relative.z - locationOfCorner.getY()) + } + + "SW" -> { + x = relative.z + locationOfCorner.getX() + z = -(relative.x - locationOfCorner.getY()) + } + } + return BlockPos(x, relative.y.toDouble(), z) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt new file mode 100644 index 0000000..03885cd --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt @@ -0,0 +1,164 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.utils + +import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.handlers.ScoreboardHandler.cleanSB +import io.github.quantizr.dungeonrooms.handlers.ScoreboardHandler.sidebarLines +import net.minecraft.client.Minecraft +import net.minecraft.client.settings.GameSettings +import net.minecraft.util.ChatComponentText +import org.apache.logging.log4j.Level +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger +import org.apache.logging.log4j.core.LoggerContext +import org.apache.logging.log4j.core.config.BaseConfiguration +import org.apache.logging.log4j.core.config.LoggerConfig +import java.io.File +import java.io.InputStream +import java.io.ObjectInputStream +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.util.zip.InflaterInputStream + +object Utils { + @JvmField + var inSkyblock = false + + @JvmField + var inCatacombs = false + var dungeonOverride = false + + /** + * Taken from Danker's Skyblock Mod under the GNU General Public License v3.0 + * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE + * @author bowser0000 + */ + @JvmStatic + fun checkForSkyblock() { + if (dungeonOverride) { + inSkyblock = true + return + } + val mc = Minecraft.getMinecraft() + if (mc?.theWorld != null && !mc.isSingleplayer) { + val scoreboardObj = mc.theWorld.scoreboard.getObjectiveInDisplaySlot(1) + if (scoreboardObj != null) { + val scObjName = cleanSB(scoreboardObj.displayName) + if (scObjName.contains("SKYBLOCK")) { + inSkyblock = true + return + } + } + } + inSkyblock = false + } + + /** + * Taken from Danker's Skyblock Mod under the GNU General Public License v3.0 + * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE + * @author bowser0000 + */ + @JvmStatic + fun checkForCatacombs() { + if (dungeonOverride) { + inCatacombs = true + return + } + if (inSkyblock) { + val scoreboard = sidebarLines + for (s in scoreboard) { + val sCleaned = cleanSB(s) + if (sCleaned.contains("The Catacombs")) { + inCatacombs = true + return + } + } + } + inCatacombs = false + } + + /** + * @return List of the paths to every .skeleton room data file + */ + @JvmStatic + fun getAllPaths(folderName: String): List { + return ArrayList().also { paths -> + Files.walk(Paths.get(DungeonRooms::class.java.getResource("/assets/dungeonrooms/$folderName")!!.path), 3) + .filter { p: Path -> p.toString().endsWith(".skeleton") } + .forEach { p: Path -> paths.add(p) } + } + } + + /** + * Converts the .skeleton files into a readable format. + * @return room data as a hashmap + */ + fun pathsToRoomData(parentFolder: String, allPaths: List): HashMap { + val allRoomData = HashMap() + + for (path in allPaths) { + if (path.parent.fileName.toString() == parentFolder) { + val name = path.fileName.toString() + val file = "/assets" + path.toString().split("assets")[1] + val input = DungeonRooms::instance::class.java.getResourceAsStream(file) + val data = ObjectInputStream(InflaterInputStream(input)) + val roomData = data.readObject() as LongArray + allRoomData[name.replace(".skeleton", "")] = roomData + DungeonRooms.logger.debug("DungeonRooms: Loaded $name") + } + } + DungeonRooms.logger.info("DungeonRooms: Loaded ${allRoomData.size} $parentFolder rooms") + return allRoomData + } + + /** + * Used to set the log level of just this mod + */ + fun setLogLevel(logger: Logger, level: Level?) { + val ctx = LogManager.getContext(false) as LoggerContext + val config = ctx.configuration as BaseConfiguration + val loggerConfig = config.getLoggerConfig(logger.name) + var specificConfig = loggerConfig + if (loggerConfig.name != logger.name) { + specificConfig = LoggerConfig(logger.name, level, true) + specificConfig.parent = loggerConfig + config.addLogger(logger.name, specificConfig) + } + specificConfig.level = level + ctx.updateLoggers() + } + + /** + * Packs block info into a single 8 byte primitive long. Normally, first a pair of bytes will be x coordinate, second + * pair will be y coordinate, third pair will be z coordinate, and last pair will be block id and metadata. + * @return primitive long containing block info + */ + fun shortToLong(a: Short, b: Short, c: Short, d: Short): Long { + return (a.toInt() shl 16 or (b.toInt() and 0xFFFF)).toLong() shl 32 or ((c.toInt() shl 16 or (d.toInt() and 0xFFFF)).toLong() and 0xFFFFFFFFL) + } + + /** + * @return Array of four shorts containing the values stored in the long + */ + fun longToShort(l: Long): ShortArray { + return shortArrayOf((l shr 48).toShort(), (l shr 32).toShort(), (l shr 16).toShort(), l.toShort()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt new file mode 100644 index 0000000..3c498bc --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt @@ -0,0 +1,264 @@ +/* + * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons + * Copyright 2021 Quantizr(_risk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package io.github.quantizr.dungeonrooms.utils + +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.Tessellator +import net.minecraft.client.renderer.vertex.DefaultVertexFormats +import net.minecraft.util.* +import org.lwjgl.opengl.GL11 +import java.awt.Color +import kotlin.math.cos +import kotlin.math.roundToInt +import kotlin.math.sin +import kotlin.math.sqrt + +object WaypointUtils { + private val beaconBeam = ResourceLocation("textures/entity/beacon_beam.png") + + /** + * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 + * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE + * @author Moulberry + */ + fun renderBeaconBeam(x: Double, y: Double, z: Double, rgb: Int, alphaMultiplier: Float, partialTicks: Float) { + val height = 300 + val bottomOffset = 0 + val topOffset = bottomOffset + height + val tessellator = Tessellator.getInstance() + val worldrenderer = tessellator.worldRenderer + Minecraft.getMinecraft().textureManager.bindTexture(beaconBeam) + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0f) + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0f) + GlStateManager.disableLighting() + GlStateManager.enableCull() + GlStateManager.enableTexture2D() + GlStateManager.tryBlendFuncSeparate(770, 1, 1, 0) + GlStateManager.enableBlend() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + val time = Minecraft.getMinecraft().theWorld.totalWorldTime + partialTicks.toDouble() + val d1 = MathHelper.func_181162_h(-time * 0.2 - MathHelper.floor_double(-time * 0.1).toDouble()) + val r = (rgb shr 16 and 0xFF) / 255f + val g = (rgb shr 8 and 0xFF) / 255f + val b = (rgb and 0xFF) / 255f + val d2 = time * 0.025 * -1.5 + val d4 = 0.5 + cos(d2 + 2.356194490192345) * 0.2 + val d5 = 0.5 + sin(d2 + 2.356194490192345) * 0.2 + val d6 = 0.5 + cos(d2 + Math.PI / 4.0) * 0.2 + val d7 = 0.5 + sin(d2 + Math.PI / 4.0) * 0.2 + val d8 = 0.5 + cos(d2 + 3.9269908169872414) * 0.2 + val d9 = 0.5 + sin(d2 + 3.9269908169872414) * 0.2 + val d10 = 0.5 + cos(d2 + 5.497787143782138) * 0.2 + val d11 = 0.5 + sin(d2 + 5.497787143782138) * 0.2 + val d14 = -1.0 + d1 + val d15 = height.toDouble() * 2.5 + d14 + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR) + worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(1.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(1.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(0.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(0.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(1.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(1.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(0.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(0.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(1.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(1.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(0.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(0.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(1.0, d15).color(r, g, b, alphaMultiplier).endVertex() + worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(1.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(0.0, d14).color(r, g, b, 1.0f).endVertex() + worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(0.0, d15).color(r, g, b, alphaMultiplier).endVertex() + tessellator.draw() + GlStateManager.disableCull() + val d12 = -1.0 + d1 + val d13 = height + d12 + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR) + worldrenderer.pos(x + 0.2, y + topOffset, z + 0.2).tex(1.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.2, y + bottomOffset, z + 0.2).tex(1.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.8, y + bottomOffset, z + 0.2).tex(0.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.8, y + topOffset, z + 0.2).tex(0.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.8, y + topOffset, z + 0.8).tex(1.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.8, y + bottomOffset, z + 0.8).tex(1.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.2, y + bottomOffset, z + 0.8).tex(0.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.2, y + topOffset, z + 0.8).tex(0.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.8, y + topOffset, z + 0.2).tex(1.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.8, y + bottomOffset, z + 0.2).tex(1.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.8, y + bottomOffset, z + 0.8).tex(0.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.8, y + topOffset, z + 0.8).tex(0.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.2, y + topOffset, z + 0.8).tex(1.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + worldrenderer.pos(x + 0.2, y + bottomOffset, z + 0.8).tex(1.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.2, y + bottomOffset, z + 0.2).tex(0.0, d12).color(r, g, b, 0.25f).endVertex() + worldrenderer.pos(x + 0.2, y + topOffset, z + 0.2).tex(0.0, d13).color(r, g, b, 0.25f * alphaMultiplier) + .endVertex() + tessellator.draw() + } + + /** + * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 + * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE + * @author Moulberry + */ + fun drawFilledBoundingBox(aabb: AxisAlignedBB, c: Color, alphaMultiplier: Float) { + GlStateManager.enableBlend() + GlStateManager.disableLighting() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + GlStateManager.disableTexture2D() + val tessellator = Tessellator.getInstance() + val worldrenderer = tessellator.worldRenderer + GlStateManager.color(c.red / 255f, c.green / 255f, c.blue / 255f, c.alpha / 255f * alphaMultiplier) + + //vertical + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + tessellator.draw() + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + tessellator.draw() + GlStateManager.color( + c.red / 255f * 0.8f, + c.green / 255f * 0.8f, + c.blue / 255f * 0.8f, + c.alpha / 255f * alphaMultiplier + ) + + //x + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + tessellator.draw() + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + tessellator.draw() + GlStateManager.color( + c.red / 255f * 0.9f, + c.green / 255f * 0.9f, + c.blue / 255f * 0.9f, + c.alpha / 255f * alphaMultiplier + ) + //z + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex() + tessellator.draw() + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) + worldrenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex() + worldrenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex() + tessellator.draw() + GlStateManager.enableTexture2D() + GlStateManager.disableBlend() + } + + /** + * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 + * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE + * @author Moulberry + */ + fun renderWaypointText(str: String?, loc: BlockPos, partialTicks: Float) { + GlStateManager.alphaFunc(516, 0.1f) + GlStateManager.pushMatrix() + val viewer = Minecraft.getMinecraft().renderViewEntity + val viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * partialTicks + val viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * partialTicks + val viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * partialTicks + var x = loc.x + 0.5 - viewerX + var y = loc.y - viewerY - viewer.eyeHeight + var z = loc.z + 0.5 - viewerZ + val distSq = x * x + y * y + z * z + val dist = sqrt(distSq) + if (distSq > 144) { + x *= 12 / dist + y *= 12 / dist + z *= 12 / dist + } + GlStateManager.translate(x, y, z) + GlStateManager.translate(0f, viewer.eyeHeight, 0f) + drawNametag(str) + GlStateManager.rotate(-Minecraft.getMinecraft().renderManager.playerViewY, 0.0f, 1.0f, 0.0f) + GlStateManager.rotate(Minecraft.getMinecraft().renderManager.playerViewX, 1.0f, 0.0f, 0.0f) + GlStateManager.translate(0f, -0.25f, 0f) + GlStateManager.rotate(-Minecraft.getMinecraft().renderManager.playerViewX, 1.0f, 0.0f, 0.0f) + GlStateManager.rotate(Minecraft.getMinecraft().renderManager.playerViewY, 0.0f, 1.0f, 0.0f) + drawNametag(EnumChatFormatting.YELLOW.toString() + dist.roundToInt() + "m") + GlStateManager.popMatrix() + GlStateManager.disableLighting() + } + + /** + * Taken from NotEnoughUpdates under Creative Commons Attribution-NonCommercial 3.0 + * https://github.com/Moulberry/NotEnoughUpdates/blob/master/LICENSE + * @author Moulberry + */ + fun drawNametag(str: String?) { + val fontrenderer = Minecraft.getMinecraft().fontRendererObj + val f = 1.6f + val f1 = 0.016666668f * f + GlStateManager.pushMatrix() + GL11.glNormal3f(0.0f, 1.0f, 0.0f) + GlStateManager.rotate(-Minecraft.getMinecraft().renderManager.playerViewY, 0.0f, 1.0f, 0.0f) + GlStateManager.rotate(Minecraft.getMinecraft().renderManager.playerViewX, 1.0f, 0.0f, 0.0f) + GlStateManager.scale(-f1, -f1, f1) + GlStateManager.disableLighting() + GlStateManager.depthMask(false) + GlStateManager.disableDepth() + GlStateManager.enableBlend() + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + val tessellator = Tessellator.getInstance() + val worldrenderer = tessellator.worldRenderer + val i = 0 + val j = fontrenderer.getStringWidth(str) / 2 + GlStateManager.disableTexture2D() + worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR) + worldrenderer.pos((-j - 1).toDouble(), (-1 + i).toDouble(), 0.0).color(0.0f, 0.0f, 0.0f, 0.25f).endVertex() + worldrenderer.pos((-j - 1).toDouble(), (8 + i).toDouble(), 0.0).color(0.0f, 0.0f, 0.0f, 0.25f).endVertex() + worldrenderer.pos((j + 1).toDouble(), (8 + i).toDouble(), 0.0).color(0.0f, 0.0f, 0.0f, 0.25f).endVertex() + worldrenderer.pos((j + 1).toDouble(), (-1 + i).toDouble(), 0.0).color(0.0f, 0.0f, 0.0f, 0.25f).endVertex() + tessellator.draw() + GlStateManager.enableTexture2D() + fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, 553648127) + GlStateManager.depthMask(true) + fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, -1) + GlStateManager.enableDepth() + GlStateManager.enableBlend() + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f) + GlStateManager.popMatrix() + } +} \ No newline at end of file diff --git a/src/main/resources/drm_logo_x128.png b/src/main/resources/drm_logo_x128.png new file mode 100644 index 0000000000000000000000000000000000000000..63a9fc46f981098a99ce7bf5bb1747c35fbef2a6 GIT binary patch literal 24661 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 KxXB`yi=wLh?h>n^W`&;EuMhpRVzB0+F_p( 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 322f01d..e3227db 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -4,7 +4,7 @@ "name": "Dungeon Rooms Mod", "description": "Adds Secret Waypoints and tells you the name of your current room in Skyblock Dungeons.", "version": "${version}", - "mcversion": "${mcversion}", + "mcversion": "1.8.9", "url": "https://discord.gg/7B5RbsArYK", "updateUrl": "", "authorList": ["_risk (aka Quantizr)"], From af151c781ea491b8c48e5f760497e34c1477055a Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 01:49:28 +0100 Subject: [PATCH 02/22] remove unnecessary stuff from build.gradle, gradle now sets the version in code --- build.gradle | 21 +-- .../quantizr/dungeonrooms/DungeonRooms.kt | 4 +- .../dungeonrooms/events/PacketEvent.kt} | 39 ++--- .../dungeonrooms/utils/RoomDetectionUtils.kt} | 164 +++++++++--------- 4 files changed, 96 insertions(+), 132 deletions(-) rename src/main/{java/io/github/quantizr/dungeonrooms/events/PacketEvent.java => kotlin/io/github/quantizr/dungeonrooms/events/PacketEvent.kt} (55%) rename src/main/{java/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.java => kotlin/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.kt} (50%) diff --git a/build.gradle b/build.gradle index f59cc7e..358dac0 100644 --- a/build.gradle +++ b/build.gradle @@ -75,16 +75,8 @@ dependencies { mappings('de.oceanlabs.mcp:mcp_stable:22-1.8.9') forge('net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9') - implementation 'org.jetbrains:annotations-java5:23.0.0' - compileOnly 'org.projectlombok:lombok:1.18.24' - annotationProcessor 'org.projectlombok:lombok:1.18.24' - - - - testCompileOnly 'org.projectlombok:lombok:1.18.24' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' modRuntimeOnly('me.djtheredstoner:DevAuth-forge-legacy:1.1.0') compileOnly 'cc.polyfrost:oneconfig-1.8.9-forge:0.1.0-alpha+' // Should not be included in jar @@ -97,7 +89,7 @@ tasks.withType(JavaCompile) { tasks.withType(Jar) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE - archivesBaseName = 'dungeonsguide-lts' + archivesBaseName = 'drm' manifest { attributes['ModSide'] = 'CLIENT' attributes['TweakOrder'] = '0' @@ -114,19 +106,8 @@ tasks.shadowJar { archiveFileName = jar.archiveFileName - relocate 'org.java_websocket', 'kr.syeyoung.org.java_websocket' - - relocate 'org.joml', 'kr.syeyoung.org.joml' - - relocate 'com.github.benmanes.caffeine', 'kr.syeyoung.com.github.benmanes.caffeine' dependencies { - include(dependency('org.joml:joml:..*')) - include(dependency('com.github.ben-manes.caffeine:caffeine:..*')) - include(dependency('org.java-websocket:Java-WebSocket:1.5.3')) - include(dependency('org.slf4j:slf4j-api:1.7.25')) - include(dependency('org.json:json:20220924')) - include(dependency('com.twelvemonkeys..*:.*')) include(dependency('cc.polyfrost:oneconfig-wrapper-launchwrapper:..*')) } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 6068a1b..26e4199 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -273,8 +273,8 @@ class DungeonRooms { lateinit var instance: DungeonRooms private set - const val MODID = "dungeonrooms" - const val VERSION = "3.3.2" + const val MODID = "@ID@" + const val VERSION = "@VER@" lateinit var logger: Logger diff --git a/src/main/java/io/github/quantizr/dungeonrooms/events/PacketEvent.java b/src/main/kotlin/io/github/quantizr/dungeonrooms/events/PacketEvent.kt similarity index 55% rename from src/main/java/io/github/quantizr/dungeonrooms/events/PacketEvent.java rename to src/main/kotlin/io/github/quantizr/dungeonrooms/events/PacketEvent.kt index 19d4d22..42c7bce 100644 --- a/src/main/java/io/github/quantizr/dungeonrooms/events/PacketEvent.java +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/events/PacketEvent.kt @@ -15,12 +15,11 @@ * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ +package io.github.quantizr.dungeonrooms.events -package io.github.quantizr.dungeonrooms.events; - -import net.minecraft.network.Packet; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraft.network.Packet +import net.minecraftforge.fml.common.eventhandler.Cancelable +import net.minecraftforge.fml.common.eventhandler.Event /** * Taken from Skytils under the GNU Affero General Public License v3.0 @@ -28,32 +27,22 @@ * @author My-Name-Is-Jeff (lily) */ @Cancelable -public class PacketEvent extends Event { - - public Direction direction; - public Packet packet; +open class PacketEvent(@JvmField var packet: Packet<*>) : Event() { + var direction: Direction? = null - public PacketEvent(Packet packet) { - this.packet = packet; - } - - public static class ReceiveEvent extends PacketEvent { - public ReceiveEvent(Packet packet) { - super(packet); - this.direction = Direction.INBOUND; + class ReceiveEvent(packet: Packet<*>) : PacketEvent(packet) { + init { + direction = Direction.INBOUND } } - public static class SendEvent extends PacketEvent { - public SendEvent(Packet packet) { - super(packet); - this.direction = Direction.OUTBOUND; + class SendEvent(packet: Packet<*>) : PacketEvent(packet) { + init { + direction = Direction.OUTBOUND } } - enum Direction { - INBOUND, - OUTBOUND + enum class Direction { + INBOUND, OUTBOUND } - } \ No newline at end of file diff --git a/src/main/java/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.java b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.kt similarity index 50% rename from src/main/java/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.java rename to src/main/kotlin/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.kt index 881719e..12c1ffc 100644 --- a/src/main/java/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.java +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/RoomDetectionUtils.kt @@ -15,21 +15,19 @@ * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ +package io.github.quantizr.dungeonrooms.utils -package io.github.quantizr.dungeonrooms.utils; +import net.minecraft.client.Minecraft +import net.minecraft.util.BlockPos +import net.minecraft.util.MathHelper +import net.minecraft.util.Vec3 +import kotlin.math.abs +import kotlin.math.atan +import kotlin.math.tan -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; -import net.minecraft.util.Vec3; - -import java.util.*; -import java.util.List; - -public class RoomDetectionUtils { - public static final double DEG_TO_RAD = Math.PI / 180.0; - public static final double RAD_TO_DEG = 180.0 / Math.PI; +object RoomDetectionUtils { + private const val DEG_TO_RAD = Math.PI / 180.0 + private const val RAD_TO_DEG = 180.0 / Math.PI /** * This is a variation of Minecraft's Entity.getVectorForRotation but Minecraft and I seem to interpret yaw and @@ -37,12 +35,12 @@ public class RoomDetectionUtils { * * @return vector corresponding to a rotation */ - public static Vec3 getVectorFromRotation(float yaw, float pitch) { - float f = MathHelper.cos(-yaw * (float) DEG_TO_RAD - (float) Math.PI); - float f1 = MathHelper.sin(-yaw * (float) DEG_TO_RAD - (float) Math.PI); - float f2 = -MathHelper.cos(-pitch * (float) DEG_TO_RAD); - float f3 = MathHelper.sin(-pitch * (float) DEG_TO_RAD); - return new Vec3( f1 * f2, f3, f * f2); + private fun getVectorFromRotation(yaw: Float, pitch: Float): Vec3 { + val f = MathHelper.cos(-yaw * DEG_TO_RAD.toFloat() - Math.PI.toFloat()) + val f1 = MathHelper.sin(-yaw * DEG_TO_RAD.toFloat() - Math.PI.toFloat()) + val f2 = -MathHelper.cos(-pitch * DEG_TO_RAD.toFloat()) + val f3 = MathHelper.sin(-pitch * DEG_TO_RAD.toFloat()) + return Vec3((f1 * f2).toDouble(), f3.toDouble(), (f * f2).toDouble()) } /** @@ -54,37 +52,35 @@ public static Vec3 getVectorFromRotation(float yaw, float pitch) { * * @return a List of vectors which are within the player's FOV */ - public static List vectorsToRaytrace (int vectorQuantity) { + fun vectorsToRaytrace(vectorQuantity: Int): List { //real # of vectors is vectorQuantity^2 - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayerSP player = mc.thePlayer; - List vectorList = new ArrayList<>(); + val mc = Minecraft.getMinecraft() + val player = mc.thePlayer + val vectorList: MutableList = ArrayList() //get vector location of player's eyes - Vec3 eyes = new Vec3(player.posX, player.posY + (double)player.getEyeHeight(), player.posZ); - float aspectRatio = (float) mc.displayWidth / (float) mc.displayHeight; + val eyes = Vec3(player.posX, player.posY + player.getEyeHeight().toDouble(), player.posZ) + val aspectRatio = mc.displayWidth.toFloat() / mc.displayHeight.toFloat() //Vertical FOV: Minecraft FOV setting multiplied by FOV modifier (sprinting, speed effect, etc) - double fovV = mc.gameSettings.fovSetting * mc.thePlayer.getFovModifier(); + val fovV = (mc.gameSettings.fovSetting * mc.thePlayer.fovModifier).toDouble() //Horizontal FOV: Thanks Minecraft for being weird and making it this complicated to calculate - double fovH = Math.atan(aspectRatio * Math.tan(fovV * DEG_TO_RAD / 2)) * 2 * RAD_TO_DEG; - - float verticalSpacing = (float) (fovV * 0.8 / vectorQuantity); // * 0.8 to leave some boundary space - float horizontalSpacing = (float) (fovH * 0.9 / vectorQuantity); // * 0.9 to leave some boundary space - - float playerYaw = player.rotationYaw; - float playerPitch = player.rotationPitch; - + val fovH = atan(aspectRatio * tan(fovV * DEG_TO_RAD / 2)) * 2 * RAD_TO_DEG + val verticalSpacing = (fovV * 0.8 / vectorQuantity).toFloat() // * 0.8 to leave some boundary space + val horizontalSpacing = (fovH * 0.9 / vectorQuantity).toFloat() // * 0.9 to leave some boundary space + var playerYaw = player.rotationYaw + var playerPitch = player.rotationPitch if (mc.gameSettings.thirdPersonView == 2) { //dumb but easy method of modifying vector direction if player is in reverse 3rd person //does not account for the increased 3rd person FOV, but all vectors are within player view so who cares - playerYaw = playerYaw + 180.0F; - playerPitch = -playerPitch; + playerYaw += 180.0f + playerPitch = -playerPitch } - - for (float h = (float) -(vectorQuantity - 1) / 2; h <= (float) (vectorQuantity - 1) / 2; h++) { - for (float v = (float) -(vectorQuantity - 1) / 2; v <= (float) (vectorQuantity - 1) / 2; v++) { - float yaw = h * horizontalSpacing; - float pitch = v * verticalSpacing; + var h = -(vectorQuantity - 1).toFloat() / 2 + while (h <= (vectorQuantity - 1).toFloat() / 2) { + var v = -(vectorQuantity - 1).toFloat() / 2 + while (v <= (vectorQuantity - 1).toFloat() / 2) { + val yaw = h * horizontalSpacing + val pitch = v * verticalSpacing /* yaw and pitch are evenly spread out, but yaw needs to be scaled because MC FOV stretching weird. @@ -92,47 +88,49 @@ public static List vectorsToRaytrace (int vectorQuantity) { "/ (Math.abs(v/(vectorQuantity))+1)" because Higher FOVs do not stretch out the corners of the screen as much as the rest of the screen, which would otherwise cause corner vectors to be outside FOV */ - float yawScaled = yaw * ((playerPitch*playerPitch/8100)+1) / (Math.abs(v/(vectorQuantity))+1); + val yawScaled = yaw * (playerPitch * playerPitch / 8100 + 1) / (abs(v / vectorQuantity) + 1) //turn rotation into vector - Vec3 direction = getVectorFromRotation(yawScaled + playerYaw, pitch + playerPitch); + val direction = getVectorFromRotation(yawScaled + playerYaw, pitch + playerPitch) //add the new direction vector * 64 (meaning when the vector is raytraced, it will return the first // block up to 64 blocks away) to the eyes vector to create the vector which will be raytraced - vectorList.add(eyes.addVector(direction.xCoord * 64, direction.yCoord * 64, direction.zCoord * 64)); + vectorList.add(eyes.addVector(direction.xCoord * 64, direction.yCoord * 64, direction.zCoord * 64)) + v++ } + h++ } - return vectorList; + return vectorList } /** * list of whitelisted blocks which the raytraced blocks will be filtered with */ - public static HashSet whitelistedBlocks = new HashSet<>(Arrays.asList( - //These are the blocks which are stored in the ".skeleton" files - 100, //Stone - 103, //Diorite - 104, //Polished Diorite - 105, //Andesite - 106, //Polished Andesite - 200, //Grass - 300, //Dirt - 301, //Coarse Dirt - 400, //Cobblestone - 700, //Bedrock - 1800, //Oak Leaves - 3507, //Gray Wool - 4300, //Double Stone Slab - 4800, //Mossy Cobblestone - 8200, //Clay - 9800, //Stone Bricks - 9801, //Mossy Stone Bricks - 9803, //Chiseled Stone Bricks - 15907, //Gray Stained Clay - 15909, //Cyan Stained Clay + var whitelistedBlocks = HashSet( + mutableListOf( //These are the blocks which are stored in the ".skeleton" files + 100, //Stone + 103, //Diorite + 104, //Polished Diorite + 105, //Andesite + 106, //Polished Andesite + 200, //Grass + 300, //Dirt + 301, //Coarse Dirt + 400, //Cobblestone + 700, //Bedrock + 1800, //Oak Leaves + 3507, //Gray Wool + 4300, //Double Stone Slab + 4800, //Mossy Cobblestone + 8200, //Clay + 9800, //Stone Bricks + 9801, //Mossy Stone Bricks + 9803, //Chiseled Stone Bricks + 15907, //Gray Stained Clay + 15909, //Cyan Stained Clay 15915 //Black Stained Clay - )); - + ) + ) /** * Checks if a block is part of a doorway (assuming the room is a 1x1), meaning that for larger rooms such as 2x2s, @@ -141,23 +139,19 @@ public static List vectorsToRaytrace (int vectorQuantity) { * * @return whether a block would be part of a doorway. */ - public static boolean blockPartOfDoorway(BlockPos blockToCheck) { + fun blockPartOfDoorway(blockToCheck: BlockPos): Boolean { //will also return true for blocks in the middle of rooms where there would be a doorway if it were a 1x1 - if (blockToCheck.getY() < 66 || blockToCheck.getY() > 73) return false; - - int relX = Math.floorMod((blockToCheck.getX() - 8), 32); - int relZ = Math.floorMod((blockToCheck.getZ() - 8), 32); - - if (relX >= 13 && relX <= 17) { - if (relZ <= 2) return true; - if (relZ >= 28) return true; + if (blockToCheck.y < 66 || blockToCheck.y > 73) return false + val relX = Math.floorMod(blockToCheck.x - 8, 32) + val relZ = Math.floorMod(blockToCheck.z - 8, 32) + if (relX in 13..17) { + if (relZ <= 2) return true + if (relZ >= 28) return true } - - if (relZ >= 13 && relZ <= 17) { - if (relX <= 2) return true; - if (relX >= 28) return true; + if (relZ in 13..17) { + if (relX <= 2) return true + if (relX >= 28) return true } - - return false; + return false } -} +} \ No newline at end of file From f6329b55d67c317b9be2a30c3caa05600bd7bf1e Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 02:27:01 +0100 Subject: [PATCH 03/22] use filesystem workaround to list files inside a jar, fixes not launching while running from a compiled jar --- .../quantizr/dungeonrooms/utils/Utils.kt | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt index 03885cd..adb7e57 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/Utils.kt @@ -17,13 +17,10 @@ */ package io.github.quantizr.dungeonrooms.utils -import io.github.quantizr.dungeonrooms.ChatTransmitter import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.handlers.ScoreboardHandler.cleanSB import io.github.quantizr.dungeonrooms.handlers.ScoreboardHandler.sidebarLines import net.minecraft.client.Minecraft -import net.minecraft.client.settings.GameSettings -import net.minecraft.util.ChatComponentText import org.apache.logging.log4j.Level import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger @@ -31,12 +28,14 @@ import org.apache.logging.log4j.core.LoggerContext import org.apache.logging.log4j.core.config.BaseConfiguration import org.apache.logging.log4j.core.config.LoggerConfig import java.io.File -import java.io.InputStream import java.io.ObjectInputStream -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.Paths +import java.net.URI +import java.nio.file.* +import java.util.* +import java.util.stream.Stream import java.util.zip.InflaterInputStream +import kotlin.collections.ArrayList +import kotlin.collections.HashMap object Utils { @JvmField @@ -95,13 +94,27 @@ object Utils { inCatacombs = false } + + fun yas(){ + + } + /** * @return List of the paths to every .skeleton room data file */ @JvmStatic fun getAllPaths(folderName: String): List { return ArrayList().also { paths -> - Files.walk(Paths.get(DungeonRooms::class.java.getResource("/assets/dungeonrooms/$folderName")!!.path), 3) + val uri: URI = this::class.java.getResource("/assets/dungeonrooms/$folderName").toURI() + val myPath: Path = if (uri.scheme.equals("jar")) { + val fileSystem: FileSystem = + FileSystems.newFileSystem(uri, emptyMap()) + fileSystem.getPath("/assets/dungeonrooms/$folderName") + } else { + Paths.get(uri) + } + + Files.walk(myPath, 3) .filter { p: Path -> p.toString().endsWith(".skeleton") } .forEach { p: Path -> paths.add(p) } } From 5639555ff4c08fcf850508066ab5ec3da7b5b26e Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 02:46:16 +0100 Subject: [PATCH 04/22] move oneconfig config class to kotlin --- .../quantizr/dungeonrooms/DRMConfig.java | 157 ------------------ .../github/quantizr/dungeonrooms/DRMConfig.kt | 98 +++++++++++ .../quantizr/dungeonrooms/DungeonRooms.kt | 5 +- 3 files changed, 99 insertions(+), 161 deletions(-) delete mode 100644 src/main/java/io/github/quantizr/dungeonrooms/DRMConfig.java create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt diff --git a/src/main/java/io/github/quantizr/dungeonrooms/DRMConfig.java b/src/main/java/io/github/quantizr/dungeonrooms/DRMConfig.java deleted file mode 100644 index f0c3fc5..0000000 --- a/src/main/java/io/github/quantizr/dungeonrooms/DRMConfig.java +++ /dev/null @@ -1,157 +0,0 @@ -package io.github.quantizr.dungeonrooms; - -import cc.polyfrost.oneconfig.config.Config; -import cc.polyfrost.oneconfig.config.annotations.*; -import cc.polyfrost.oneconfig.config.core.OneKeyBind; -import cc.polyfrost.oneconfig.config.data.InfoType; -import cc.polyfrost.oneconfig.config.data.Mod; -import cc.polyfrost.oneconfig.config.data.ModType; -import cc.polyfrost.oneconfig.libs.universal.UKeyboard; - -public class DRMConfig extends Config { - public DRMConfig() { - super(new Mod("DungeonsRoomsMod", ModType.SKYBLOCK, "/drm_logo_x128.png"), DungeonRooms.MODID + ".json"); - initialize(); - this.addListener("practiceModeOn", () -> { - String text = "§eDungeon Rooms: Practice Mode has been enabled.\n§e Waypoints will ONLY show up while you are pressing " + practiceModeKeyBind.getDisplay() + "\n§r (Hotkey is configurable in Minecraft Controls menu)"; - ChatTransmitter.addToQueue(text); - }); - } - @Switch(name = "Display Room Names In Gui", subcategory = "General") - public static boolean guiToggled = true; - - - @Switch(name = "Display Welcome/MOTD", subcategory = "General") - public static boolean motdToggled = true; - @KeyBind( - name = "Quick Access Gui Key", - subcategory = "General" - ) - public static OneKeyBind waypointGuiKey = new OneKeyBind(UKeyboard.KEY_P); - - - @Dropdown( - name = "Secret Image Provider", - options = {"gui", "dsg", "sbp"}, - subcategory = "Secret Images" - ) - public static int imageHotkeyOpen = 0; - @KeyBind( - name = "Keybinding For Opening Room Images from DSG/SBP", - size = 2, - subcategory = "Secret Images" - ) - public static OneKeyBind openSecretImages = new OneKeyBind(UKeyboard.KEY_O); - - @Switch( - name = "Waypoints Enabled", - category = "Waypoints", - subcategory = "Preferences", - size = 2 - ) - public static boolean waypointsEnabled = true; - @Switch( - name = "Double-Tap Sneak to Hide Nearby", - category = "Waypoints", - subcategory = "Preferences" - ) - public static boolean sneakToDisable = true; - - @Switch( - name = "Disable when all secrets found", - category = "Waypoints", - subcategory = "Preferences" - ) - public static boolean disableWhenAllFound = true; - - @Info( - text = "See Waypoints when key is pressed, useful for practice", - category = "Waypoints", - subcategory = "Practice Mode", - size = 2, - type = InfoType.INFO - ) - boolean dummy = false; - - @KeyBind( - name = "Keybinding For Practice Mode", - category = "Waypoints", - subcategory = "Practice Mode" - ) - public static OneKeyBind practiceModeKeyBind = new OneKeyBind(UKeyboard.KEY_I); - - @Switch( - name = "Practice Mode", - category = "Waypoints", - subcategory = "Practice Mode" - ) - public static boolean practiceModeOn = false; - - - @Checkbox( - name = "Show Entrance Waypoints", - category = "Waypoints", - subcategory = "Visibility" - ) - public static boolean showEntrance = true; - - @Checkbox( - name = "Show Superboom Waypoints", - category = "Waypoints", - subcategory = "Visibility" - ) - public static boolean showSuperboom = true; - - @Checkbox( - name = "Show Secret Waypoints", - category = "Waypoints", - subcategory = "Visibility" - ) - public static boolean showSecrets = true; - - - @Checkbox( - name = "Show Fairy Soul Waypoints", - category = "Waypoints", - subcategory = "Visibility" - ) - public static boolean showFairySouls = true; - - @Checkbox( - name = "Show Stonk Waypoints", - category = "Waypoints", - subcategory = "Visibility" - ) - public static boolean showStonk = true; - - - @Switch( - name = "Show Waypoint Text", - category = "Waypoints", - subcategory = "Appearance" - ) - public static boolean showWaypointText = true; - - @Switch( - name = "Show Bounding Box", - category = "Waypoints", - subcategory = "Appearance" - ) - public static boolean showBoundingBox = true; - - @Switch( - name = "Show Beacon", - category = "Waypoints", - subcategory = "Appearance" - ) - public static boolean showBeacon = true; - - - @Slider(name = "Offset x", min = 0, max = 100, subcategory = "Hud") - public static int textLocX = 50; - - @Slider(name = "Offset y", min = 0, max = 100, subcategory = "Hud") - public static int textLocY = 5; - - -} diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt new file mode 100644 index 0000000..1ee1ecf --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -0,0 +1,98 @@ +package io.github.quantizr.dungeonrooms + +import cc.polyfrost.oneconfig.config.Config +import cc.polyfrost.oneconfig.config.annotations.* +import cc.polyfrost.oneconfig.config.core.OneKeyBind +import cc.polyfrost.oneconfig.config.data.InfoType +import cc.polyfrost.oneconfig.config.data.Mod +import cc.polyfrost.oneconfig.config.data.ModType +import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_I +import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_O +import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_P +import io.github.quantizr.dungeonrooms.ChatTransmitter.Companion.addToQueue + +object DRMConfig : + Config(Mod("DungeonsRoomsMod", ModType.SKYBLOCK, "/drm_logo_x128.png"), DungeonRooms.MODID + ".json") { + + fun init(){ + initialize() + addListener("practiceModeOn") { + val text = """ + §eDungeon Rooms: Practice Mode has been enabled. + §e Waypoints will ONLY show up while you are pressing ${practiceModeKeyBind.display} + §r (Hotkey is configurable in Minecraft Controls menu) + """.trimIndent() + addToQueue(text) + } + } + + @Switch(name = "Display Room Names In Gui", subcategory = "General") + var guiToggled = true + + @Switch(name = "Display Welcome/MOTD", subcategory = "General") + var motdToggled = true + + @KeyBind(name = "Quick Access Gui Key", subcategory = "General") + var waypointGuiKey = OneKeyBind(KEY_P) + + @Dropdown(name = "Secret Image Provider", options = ["gui", "dsg", "sbp"], subcategory = "Secret Images") + var imageHotkeyOpen = 0 + + @KeyBind(name = "Keybinding For Opening Room Images From DSG/SBP", size = 2, subcategory = "Secret Images") + var openSecretImages = OneKeyBind(KEY_O) + + @Switch(name = "Waypoints Enabled", category = "Waypoints", subcategory = "Preferences", size = 2) + var waypointsEnabled = true + + @Switch(name = "Double-Tap Sneak To Hide Nearby", category = "Waypoints", subcategory = "Preferences") + var sneakToDisable = true + + @Switch(name = "Disable When All Secrets Found", category = "Waypoints", subcategory = "Preferences") + var disableWhenAllFound = true + + @Info( + text = "See waypoints when the key is pressed, useful for practice.", + category = "Waypoints", + subcategory = "Practice Mode", + size = 2, + type = InfoType.INFO + ) + var dummy = false + + @KeyBind(name = "Keybinding For Practice Mode", category = "Waypoints", subcategory = "Practice Mode") + var practiceModeKeyBind = OneKeyBind(KEY_I) + + @Switch(name = "Practice Mode", category = "Waypoints", subcategory = "Practice Mode") + var practiceModeOn = false + + @Checkbox(name = "Show Entrance Waypoints", category = "Waypoints", subcategory = "Visibility") + var showEntrance = true + + @Checkbox(name = "Show Superboom Waypoints", category = "Waypoints", subcategory = "Visibility") + var showSuperboom = true + + @Checkbox(name = "Show Secret Waypoints", category = "Waypoints", subcategory = "Visibility") + var showSecrets = true + + @Checkbox(name = "Show Fairy Soul Waypoints", category = "Waypoints", subcategory = "Visibility") + var showFairySouls = true + + @Checkbox(name = "Show Stonk Waypoints", category = "Waypoints", subcategory = "Visibility") + var showStonk = true + + @Switch(name = "Show Waypoint Text", category = "Waypoints", subcategory = "Appearance") + var showWaypointText = true + + @Switch(name = "Show Bounding Box", category = "Waypoints", subcategory = "Appearance") + var showBoundingBox = true + + @Switch(name = "Show Beacon", category = "Waypoints", subcategory = "Appearance") + var showBeacon = true + + @Slider(name = "Offset x", min = 0F, max = 100F, subcategory = "Hud") + var textLocX = 50 + + @Slider(name = "Offset y", min = 0F, max = 100F, subcategory = "Hud") + var textLocY = 5 + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 26e4199..6b3fe84 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -34,14 +34,12 @@ import io.github.quantizr.dungeonrooms.utils.Utils.checkForCatacombs import io.github.quantizr.dungeonrooms.utils.Utils.checkForSkyblock import net.minecraft.client.Minecraft import net.minecraft.client.gui.ScaledResolution -import net.minecraft.client.settings.KeyBinding import net.minecraft.event.ClickEvent import net.minecraft.util.ChatComponentText import net.minecraft.util.EnumChatFormatting import net.minecraftforge.client.ClientCommandHandler import net.minecraftforge.client.event.RenderGameOverlayEvent import net.minecraftforge.common.MinecraftForge -import net.minecraftforge.fml.client.registry.ClientRegistry import net.minecraftforge.fml.common.Loader import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.event.FMLInitializationEvent @@ -55,7 +53,6 @@ import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToSe import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger -import org.lwjgl.input.Keyboard import java.io.BufferedReader import java.io.IOException import java.io.InputStream @@ -84,7 +81,7 @@ class DungeonRooms { @Mod.EventHandler fun init(event: FMLInitializationEvent?) { - DRMConfig() + DRMConfig.init() roomDataLoader.startAsyncLoad() //register classes From 958b400f7e6c9d1651879eebf1acaf70a9469a84 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 02:54:36 +0100 Subject: [PATCH 05/22] move room size in RoomDetection to a enum --- .../dungeonrooms/dungeons/RoomDetection.kt | 7 ++--- .../dungeonrooms/roomdata/RoomSize.kt | 5 ++++ .../quantizr/dungeonrooms/utils/MapUtils.kt | 27 ++++++++++--------- 3 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 1f51961..9542c6b 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -22,6 +22,7 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.ChatTransmitter import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.roomdata.RoomColor +import io.github.quantizr.dungeonrooms.roomdata.RoomSize import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils import io.github.quantizr.dungeonrooms.utils.Utils @@ -121,7 +122,7 @@ class RoomDetection { thaPossibleRooms = null raytraceBlocks() } - if (roomSize == "undefined" || roomColor == RoomColor.UNDEFINED) { + if (roomSize == RoomSize.undefined || roomColor == RoomColor.UNDEFINED) { updateCurrentRoom() if (roomColor == RoomColor.UNDEFINED) { DungeonRooms.textToDisplay = ArrayList( @@ -535,7 +536,7 @@ class RoomDetection { private var stage2Ticks = 0 var currentMapSegments: List = ArrayList() var currentPhysicalSegments: MutableList = ArrayList() - var roomSize = "undefined" + var roomSize = RoomSize.undefined var roomColor = RoomColor.UNDEFINED var roomCategory = "undefined" var roomName = "undefined" @@ -554,7 +555,7 @@ class RoomDetection { Waypoints.allFound = false currentPhysicalSegments = emptyList().toMutableList() currentMapSegments = emptyList() - roomSize = "undefined" + roomSize = RoomSize.undefined roomColor = RoomColor.UNDEFINED roomCategory = "undefined" roomName = "undefined" diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt new file mode 100644 index 0000000..4406b9e --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt @@ -0,0 +1,5 @@ +package io.github.quantizr.dungeonrooms.roomdata + +enum class RoomSize { + `1x1`, `1x2`, `1x3`, `1x4`, `2x2`, `L-shape`, undefined +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt index 560dd90..149eb57 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt @@ -18,6 +18,7 @@ package io.github.quantizr.dungeonrooms.utils import io.github.quantizr.dungeonrooms.roomdata.RoomColor +import io.github.quantizr.dungeonrooms.roomdata.RoomSize import net.minecraft.block.material.MapColor import net.minecraft.client.Minecraft import net.minecraft.init.Items @@ -248,10 +249,10 @@ object MapUtils { /** * @return the size of the room given a location of each room segment */ - fun roomSize(segments: List): String { + fun roomSize(segments: List): RoomSize { //accepts either map segments or physical segments, does not matter - if (segments.size == 1) return "1x1" - if (segments.size == 2) return "1x2" + if (segments.size == 1) return RoomSize.`1x1` + if (segments.size == 2) return RoomSize.`1x2` val x = HashSet() val y = HashSet() for (segment in segments) { @@ -259,18 +260,18 @@ object MapUtils { y.add(segment.y) } if (segments.size == 3) { - return if (x.size == 2 && y.size == 2) "L-shape" else "1x3" + return if (x.size == 2 && y.size == 2) RoomSize.`L-shape` else RoomSize.`1x3` } return if (segments.size == 4) { - if (x.size == 2 && y.size == 2) "2x2" else "1x4" - } else "undefined" + if (x.size == 2 && y.size == 2) RoomSize.`2x2` else RoomSize.`1x4` + } else RoomSize.undefined } /** * @return the category of the room given size and color */ - fun roomCategory(roomSize: String, roomColor: RoomColor): String { - return if (roomSize == "1x1") { + fun roomCategory(roomSize: RoomSize, roomColor: RoomColor): String { + return if (roomSize == RoomSize.`1x1`) { when (roomColor) { RoomColor.BROWN -> "1x1" RoomColor.PURPLE -> "Puzzle" @@ -279,7 +280,7 @@ object MapUtils { else -> "undefined" } } else { - roomSize + roomSize.toString() } } @@ -330,11 +331,11 @@ object MapUtils { * * @return the possible rotation directions which need to be checked */ - fun possibleDirections(roomSize: String, currentRoomSegments: List): List { + fun possibleDirections(roomSize: RoomSize, currentRoomSegments: List): List { //can take physical or hotbar segments //eliminates two possibilities for rectangular rooms, three possibilities for L-shape val directions: MutableList = ArrayList() - if (roomSize == "1x1" || roomSize == "2x2") { + if (roomSize == RoomSize.`1x1` || roomSize == RoomSize.`2x2`) { directions.add("NW") directions.add("NE") directions.add("SE") @@ -346,7 +347,7 @@ object MapUtils { xSet.add(segment.x) ySet.add(segment.y) } - if (roomSize == "L-shape") { + if (roomSize == RoomSize.`L-shape`) { val x: List = ArrayList(xSet) val y: List = ArrayList(ySet) if (!currentRoomSegments.contains( @@ -372,7 +373,7 @@ object MapUtils { ) ) ) directions.add("NE") - } else if (roomSize.startsWith("1x")) { //not 1x1 bc else statement earlier + } else if (roomSize.toString().startsWith("1x")) { //not 1x1 bc else statement earlier if (xSet.size >= 2 && ySet.size == 1) { directions.add("NW") directions.add("SE") From 7d24745a8bc50696d24e4e61975f5979404e1a05 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 03:07:02 +0100 Subject: [PATCH 06/22] implement an enum reflecting the run stage --- .../quantizr/dungeonrooms/DungeonRooms.kt | 4 ++- .../dungeonrooms/commands/RoomCommand.kt | 12 +++---- .../dungeonrooms/dungeons/DungeonManager.kt | 32 +++++++++---------- .../dungeonrooms/dungeons/DungeonRunStage.kt | 5 +++ .../dungeonrooms/dungeons/RoomDetection.kt | 2 +- 5 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonRunStage.kt diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 6b3fe84..b214ad5 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -78,16 +78,18 @@ class DungeonRooms { val roomDetection = RoomDetection() val roomDataLoader = RoomDataLoader() + val dungeonManager = DungeonManager() @Mod.EventHandler fun init(event: FMLInitializationEvent?) { + DRMConfig.init() roomDataLoader.startAsyncLoad() //register classes MinecraftForge.EVENT_BUS.register(this) MinecraftForge.EVENT_BUS.register(ChatTransmitter()) - MinecraftForge.EVENT_BUS.register(DungeonManager()) + MinecraftForge.EVENT_BUS.register(dungeonManager) MinecraftForge.EVENT_BUS.register(roomDetection) MinecraftForge.EVENT_BUS.register(Waypoints()) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt index d6f609b..f0314f4 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt @@ -21,13 +21,13 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.ChatTransmitter import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.dungeons.DungeonManager +import io.github.quantizr.dungeonrooms.dungeons.DungeonRunStage import io.github.quantizr.dungeonrooms.gui.WaypointsGUI import io.github.quantizr.dungeonrooms.handlers.ConfigHandler import io.github.quantizr.dungeonrooms.handlers.OpenLink import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.client.Minecraft -import net.minecraft.client.settings.GameSettings import net.minecraft.command.CommandBase import net.minecraft.command.ICommandSender import net.minecraft.entity.player.EntityPlayer @@ -92,7 +92,7 @@ class RoomCommand : CommandBase() { ) } else { - if (DungeonManager.gameStage == 2) { + if (DungeonRooms.instance.dungeonManager.gameStage == DungeonRunStage.RoomClear) { for (line in DungeonRooms.textToDisplay!!) { player.addChatMessage(ChatComponentText(line)) } @@ -295,7 +295,7 @@ class RoomCommand : CommandBase() { } "json" -> { - if (!Utils.inCatacombs && DungeonManager.gameStage != 2 && DungeonManager.gameStage != 3) { + if (!Utils.inCatacombs && DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear && DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.Boss) { player.addChatMessage( ChatComponentText( "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" @@ -311,7 +311,7 @@ class RoomCommand : CommandBase() { } "roominfo" -> { - if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { + if (!Utils.inCatacombs || DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear) { player.addChatMessage( ChatComponentText( "${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons" @@ -351,7 +351,7 @@ class RoomCommand : CommandBase() { } "blocksused" -> { - if (!Utils.inCatacombs || DungeonManager.gameStage != 2) { + if (!Utils.inCatacombs || DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear) { player.addChatMessage( ChatComponentText("${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons") ) @@ -361,7 +361,7 @@ class RoomCommand : CommandBase() { "add" -> { val world: World = mc.theWorld - if (!Utils.inCatacombs || DungeonManager.gameStage != 2 || DungeonRooms.instance.roomDetection.roomDirection == "undefined" || DungeonRooms.instance.roomDetection.roomCorner == null) { + if (!Utils.inCatacombs || DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear || DungeonRooms.instance.roomDetection.roomDirection == "undefined" || DungeonRooms.instance.roomDetection.roomCorner == null) { player.addChatMessage( ChatComponentText( "${EnumChatFormatting.RED}Dungeon Rooms: Current dungeon room is undefined" diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt index 3764658..3ce0802 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt @@ -24,7 +24,6 @@ import io.github.quantizr.dungeonrooms.DungeonRooms.Companion.instance import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.client.Minecraft -import net.minecraft.client.settings.GameSettings import net.minecraft.util.EnumChatFormatting import net.minecraft.util.Vec3 import net.minecraftforge.client.event.ClientChatReceivedEvent @@ -47,7 +46,7 @@ class DungeonManager { //gameStage set from 0 to 1 in the onTick function later if (message.startsWith("§e[NPC] §bMort§f: §rHere, I found this map when I first entered the dungeon.§r")) { - gameStage = 2 + gameStage = DungeonRunStage.RoomClear DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") } else if (message.startsWith("§r§c[BOSS] The Watcher§r§f: You have proven yourself. You may pass.§r")) { bloodTime = System.currentTimeMillis() + 5000 //5 seconds because additional messages might come through @@ -56,8 +55,8 @@ class DungeonManager { "§r§4[BOSS] " )) ) { - if (gameStage != 3) { - gameStage = 3 + if (gameStage != DungeonRunStage.RoomClear) { + gameStage = DungeonRunStage.RoomClear DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") //this part mostly so /room json doesn't error out @@ -67,7 +66,7 @@ class DungeonManager { //RoomDetection.newRoom() //uncomment to display Boss Room in gui } } else if (message.contains("§r§c☠ §r§eDefeated §r")) { - gameStage = 4 + gameStage = DungeonRunStage.Boss DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") instance.roomDetection.resetCurrentRoom() } @@ -79,7 +78,7 @@ class DungeonManager { val player = mc.thePlayer if (!Utils.inCatacombs) return //From this point forward, everything assumes that Utils.inCatacombs == true tickAmount++ - if ((gameStage == 0 || gameStage == 1) && tickAmount % 20 == 0) { + if ((gameStage == DungeonRunStage.NotInDungeon || gameStage == DungeonRunStage.NotStarted) && tickAmount % 20 == 0) { if (DungeonRooms.firstLogin) { DungeonRooms.firstLogin = false ChatTransmitter.addToQueue( @@ -93,18 +92,17 @@ class DungeonManager { ) } - if (gameStage == 0) { - gameStage = 1 + if (gameStage == DungeonRunStage.NotInDungeon) { + gameStage = DungeonRunStage.NotStarted DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") } - val map = MapUtils.updatedMap() - if (map != null) { + if (MapUtils.updatedMap() != null) { DungeonRooms.logger.warn("DungeonRooms: Run started but gameStage is not on 2") - gameStage = 2 + gameStage = DungeonRunStage.RoomClear DungeonRooms.logger.info("DungeonRooms: gameStage set to $gameStage") return } - if (gameStage == 1 && entrancePhysicalNWCorner == null) { + if (gameStage == DungeonRunStage.NotStarted && entrancePhysicalNWCorner == null) { if (player.positionVector != Vec3(0.0, 0.0, 0.0)) { //this point is calculated using math, not scanning, which may cause issues when reconnecting to a run entrancePhysicalNWCorner = MapUtils.getClosestNWPhysicalCorner(player.positionVector) @@ -113,7 +111,7 @@ class DungeonManager { } if (DungeonRooms.textToDisplay == null && DRMConfig.motdToggled) { DungeonRooms.logger.info("DungeonRooms: Updating MOTD on screen") - if (oddRun || !DRMConfig.guiToggled) { //load MOTD on odd runs + if (oddRun || !DRMConfig.guiToggled) { // load MOTD on odd runs if (DungeonRooms.motd != null) { if (DungeonRooms.motd!!.isNotEmpty()) { DungeonRooms.textToDisplay = DungeonRooms.motd @@ -144,7 +142,7 @@ class DungeonManager { fun onWorldUnload(event: WorldEvent.Unload?) { Utils.inCatacombs = false tickAmount = 0 - gameStage = 0 + gameStage = DungeonRunStage.NotInDungeon map = null entranceMapCorners = null entrancePhysicalNWCorner = null @@ -155,9 +153,11 @@ class DungeonManager { instance.roomDetection.resetCurrentRoom() } + var gameStage = DungeonRunStage.NotInDungeon + companion object { - @JvmField - var gameStage = 0 //0: Not in Dungeon, 1: Entrance/Not Started, 2: Room Clear, 3: Boss, 4: Done +// @JvmField +// var gameStage = 0 //0: Not in Dungeon, 1: Entrance/Not Started, 2: Room Clear, 3: Boss, 4: Done @JvmField var map: Array>? = null diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonRunStage.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonRunStage.kt new file mode 100644 index 0000000..2fe21b8 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonRunStage.kt @@ -0,0 +1,5 @@ +package io.github.quantizr.dungeonrooms.dungeons + +enum class DungeonRunStage { + NotInDungeon, NotStarted, RoomClear, Boss, Done +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 9542c6b..aee626f 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -48,7 +48,7 @@ class RoomDetection { if (!Utils.inCatacombs) return // From this point forward, everything assumes that Utils.inCatacombs == true - if (DungeonManager.gameStage != 2) return + if (DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear) return // Room clearing phase stage2Ticks++ From 2d3eeeaae8c53a3896ed0bca21e63a6aa9cfa4b5 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 03:15:15 +0100 Subject: [PATCH 07/22] rename secretNum to secretCount --- .../dungeonrooms/dungeons/RoomDetection.kt | 10 +++---- .../dungeonrooms/dungeons/Waypoints.kt | 12 ++++---- .../quantizr/dungeonrooms/gui/WaypointsGUI.kt | 30 +++++++++---------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index aee626f..4ff0941 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -17,7 +17,6 @@ */ package io.github.quantizr.dungeonrooms.dungeons -import cc.polyfrost.oneconfig.config.annotations.Switch import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.ChatTransmitter import io.github.quantizr.dungeonrooms.DungeonRooms @@ -28,7 +27,6 @@ import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.block.Block import net.minecraft.client.Minecraft -import net.minecraft.client.settings.GameSettings import net.minecraft.util.* import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent @@ -568,20 +566,20 @@ class RoomDetection { thaPossibleRooms = null incompleteScan = 0 redoScan = 0 - Waypoints.secretNum = 0 + Waypoints.secretCount = 0 } private fun newRoom() { if (roomName == "undefined" || roomCategory == "undefined") return // update Waypoints info if (DungeonRooms.instance.roomDataLoader.roomsJson[roomName] != null) { - Waypoints.secretNum = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject["secrets"].asInt + Waypoints.secretCount = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject["secrets"].asInt Waypoints.allSecretsMap.putIfAbsent( roomName, - ArrayList(Collections.nCopies(Waypoints.secretNum, true)) + ArrayList(Collections.nCopies(Waypoints.secretCount, true)) ) } else { - Waypoints.secretNum = 0 + Waypoints.secretCount = 0 Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(0, true))) } Waypoints.secretsList = Waypoints.allSecretsMap[roomName]?.toMutableList() diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index b5ff2f4..22794e3 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -51,7 +51,7 @@ class Waypoints { DungeonRooms.instance.forEverySecretInRoom { (secretsObject, _) -> var display = true - for (j in 1..secretNum) { + for (j in 1..secretCount) { if (!secretsList!![j - 1]) { if (secretsObject["secretName"].asString.substring(0, 2) .replace("[\\D]".toRegex(), "") == j.toString() @@ -182,7 +182,7 @@ class Waypoints { val splitSecrets = cleanedSection.split("/") completedSecrets = splitSecrets[0].replace("[^0-9]".toRegex(), "").toInt() val totalSecrets = splitSecrets[1].replace("[^0-9]".toRegex(), "").toInt() - allFound = totalSecrets == secretNum && completedSecrets == secretNum + allFound = totalSecrets == secretCount && completedSecrets == secretCount return } } @@ -207,7 +207,7 @@ class Waypoints { DungeonRooms.instance.roomDetection.roomCorner!! ) if (pos == event.pos) { - for (j in 1..secretNum) { + for (j in 1..secretCount) { if (secretsObject["secretName"].asString.substring(0, 2) .replace("[\\D]".toRegex(), "") == j.toString() ) { @@ -264,7 +264,7 @@ class Waypoints { DungeonRooms.instance.roomDetection.roomCorner!! ) if (entity.getDistanceSq(pos) <= 36.0) { - for (j in 1..secretNum) { + for (j in 1..secretCount) { if (secretsObject["secretName"].asString.substring(0, 2) .replace("[\\D]".toRegex(), "") == j.toString() ) { @@ -309,7 +309,7 @@ class Waypoints { DungeonRooms.instance.roomDetection.roomCorner!! ) if (player.getDistanceSq(pos) <= 16.0) { - for (j in 1..secretNum) { + for (j in 1..secretCount) { if (secretsObject["secretName"].asString.substring(0, 2) .replace("[\\D]".toRegex(), "") == j.toString() ) { @@ -333,7 +333,7 @@ class Waypoints { var allFound = false @JvmField - var secretNum: Int = 0 + var secretCount: Int = 0 var completedSecrets = 0 @JvmField diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt index d5c9144..8e281f8 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt @@ -20,14 +20,12 @@ package io.github.quantizr.dungeonrooms.gui import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.dungeons.Waypoints -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler import io.github.quantizr.dungeonrooms.handlers.TextRenderer import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiButton import net.minecraft.client.gui.GuiScreen import net.minecraft.client.gui.ScaledResolution -import net.minecraft.client.settings.GameSettings import net.minecraft.entity.player.EntityPlayer import net.minecraft.util.ChatComponentText import net.minecraft.util.EnumChatFormatting @@ -133,10 +131,10 @@ class WaypointsGUI : GuiScreen() { buttonList.add(disableWhenAllFound) buttonList.add(close) if (Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - if (Waypoints.secretNum <= 5) { - for (i in 1..Waypoints.secretNum) { - val adjustPos = -40 * Waypoints.secretNum - 70 + 80 * i + if (Waypoints.secretCount > 0) { + if (Waypoints.secretCount <= 5) { + for (i in 1..Waypoints.secretCount) { + val adjustPos = -40 * Waypoints.secretCount - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( Waypoints.secretsList!![i - 1] @@ -145,8 +143,8 @@ class WaypointsGUI : GuiScreen() { buttonList.add(secretButtonList[i - 1]) } } else { - for (i in 1..ceil(Waypoints.secretNum.toDouble() / 2).toInt()) { - val adjustPos = -40 * ceil(Waypoints.secretNum.toDouble() / 2).toInt() - 70 + 80 * i + for (i in 1..ceil(Waypoints.secretCount.toDouble() / 2).toInt()) { + val adjustPos = -40 * ceil(Waypoints.secretCount.toDouble() / 2).toInt() - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( Waypoints.secretsList!![i - 1] @@ -154,9 +152,9 @@ class WaypointsGUI : GuiScreen() { ) buttonList.add(secretButtonList[i - 1]) } - for (i in (ceil((Waypoints.secretNum / 2).toDouble()) + 1).toInt() .. Waypoints.secretNum) { - val adjustPos = -40 * (Waypoints.secretNum - ceil(Waypoints.secretNum.toDouble() / 2) - .toInt()) - 70 + 80 * (i - ceil(Waypoints.secretNum.toDouble() / 2).toInt()) + for (i in (ceil((Waypoints.secretCount / 2).toDouble()) + 1).toInt() .. Waypoints.secretCount) { + val adjustPos = -40 * (Waypoints.secretCount - ceil(Waypoints.secretCount.toDouble() / 2) + .toInt()) - 70 + 80 * (i - ceil(Waypoints.secretCount.toDouble() / 2).toInt()) secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 200, 60, 20, "$i: " + getOnOff( Waypoints.secretsList!![i - 1] @@ -209,7 +207,7 @@ class WaypointsGUI : GuiScreen() { 1.0, false ) - } else if (Waypoints.secretNum == 0) { + } else if (Waypoints.secretCount == 0) { val errorText = "No secrets in this room" val errorTextWidth = mc.fontRendererObj.getStringWidth(errorText) TextRenderer.drawText( @@ -274,8 +272,8 @@ class WaypointsGUI : GuiScreen() { player.closeScreen() } if (Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - for (i in 1..Waypoints.secretNum) { + if (Waypoints.secretCount > 0) { + for (i in 1..Waypoints.secretCount) { if (button === secretButtonList[i - 1]) { Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { @@ -299,8 +297,8 @@ class WaypointsGUI : GuiScreen() { override fun keyTyped(c: Char, keyCode: Int) { super.keyTyped(c, keyCode) if (waypointGuiOpened && Utils.inCatacombs) { - if (Waypoints.secretNum > 0) { - for (i in 1..Waypoints.secretNum) { + if (Waypoints.secretCount > 0) { + for (i in 1..Waypoints.secretCount) { if (keyCode - 1 == i) { Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { From c6d43497166606d3a104b436d8315a355636eea3 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 18:56:36 +0100 Subject: [PATCH 08/22] implement proper deserialization of room data, rewrite most of Waypoints.java to be more functional --- .../quantizr/dungeonrooms/DungeonRooms.kt | 25 +- .../quantizr/dungeonrooms/RoomDataLoader.kt | 60 ++- .../dungeonrooms/commands/RoomCommand.kt | 31 +- .../dungeonrooms/dungeons/RoomDetection.kt | 66 ++- .../dungeonrooms/dungeons/Waypoints.kt | 429 +++++++++--------- .../dungeons/data/meta/DungeonRoom.kt | 3 + .../dungeons/data/meta/RoomMetaData.kt | 3 + .../dungeons/data/meta/SecretMetaData.kt | 3 + .../data/room}/RoomColor.kt | 2 +- .../data/room}/RoomSize.kt | 2 +- .../dungeonrooms/handlers/OpenLink.kt | 22 +- .../quantizr/dungeonrooms/utils/MapUtils.kt | 4 +- 12 files changed, 344 insertions(+), 306 deletions(-) create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/DungeonRoom.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/RoomMetaData.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/SecretMetaData.kt rename src/main/kotlin/io/github/quantizr/dungeonrooms/{roomdata => dungeons/data/room}/RoomColor.kt (59%) rename src/main/kotlin/io/github/quantizr/dungeonrooms/{roomdata => dungeons/data/room}/RoomSize.kt (58%) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index b214ad5..37e27a6 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -24,6 +24,7 @@ import io.github.quantizr.dungeonrooms.commands.RoomCommand import io.github.quantizr.dungeonrooms.dungeons.DungeonManager import io.github.quantizr.dungeonrooms.dungeons.RoomDetection import io.github.quantizr.dungeonrooms.dungeons.Waypoints +import io.github.quantizr.dungeonrooms.dungeons.data.meta.SecretMetaData import io.github.quantizr.dungeonrooms.gui.WaypointsGUI import io.github.quantizr.dungeonrooms.handlers.ConfigHandler.reloadConfig import io.github.quantizr.dungeonrooms.handlers.OpenLink.checkForLink @@ -106,30 +107,12 @@ class DungeonRooms { logger.info("DungeonRooms: SBP Dungeon Secrets detection: $usingSBPSecrets") } - fun forEverySecretInRoom(comsumer: Consumer>) { - val (secretsArray, roomName) = getSecretsArray() ?: return - - for (i in 0 until secretsArray.size()) { - val secret = secretsArray[i].asJsonObject - comsumer.accept(Pair(secret, roomName)) - } - - } - - fun getSecretsObject(): Pair? { - if(roomDetection.roomName == "undefined") return null - - val arr = roomDataLoader.waypointsJson[roomDetection.roomName] ?: return null - - return Pair(arr.asJsonObject, roomDetection.roomName) - } - - fun getSecretsArray(): Pair? { + fun getJsonSecretList(): Pair>? { if(roomDetection.roomName == "undefined") return null - val arr = roomDataLoader.waypointsJson[roomDetection.roomName] ?: return null + val room = roomDataLoader.roomData[roomDetection.roomName] ?: return null - return Pair(arr.asJsonArray, roomDetection.roomName) + return Pair(room.id, room.secrets.toList()) } /** diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt index dcba1cd..11b9eeb 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt @@ -1,7 +1,11 @@ package io.github.quantizr.dungeonrooms import com.google.gson.Gson +import com.google.gson.JsonArray import com.google.gson.JsonObject +import io.github.quantizr.dungeonrooms.dungeons.data.meta.DungeonRoom +import io.github.quantizr.dungeonrooms.dungeons.data.meta.RoomMetaData +import io.github.quantizr.dungeonrooms.dungeons.data.meta.SecretMetaData import io.github.quantizr.dungeonrooms.utils.Utils import java.io.InputStreamReader import java.util.HashMap @@ -22,8 +26,10 @@ class RoomDataLoader { private var asyncLoadTime: Long = 0 - lateinit var roomsJson: JsonObject - lateinit var waypointsJson: JsonObject + lateinit var roomData: Map + + private lateinit var roomsJson: JsonObject + private lateinit var waypointsJson: JsonObject var ROOM_DATA = HashMap>() private lateinit var executor: ExecutorService @@ -108,6 +114,56 @@ class RoomDataLoader { DungeonRooms.logger.debug("DungeonRooms: Blocked Time(ms) remaining for other rooms: $blockedTime") executor.shutdown() + constructRooms() + } + + + private fun deconstructRoomData(): Map { + + val tmpMap = HashMap() + + roomsJson.entrySet().forEach {(name, element) -> + if(element is JsonObject && element.has("category")) { + val roomData = RoomMetaData(element.get("category").asString, element.get("secrets").asInt, element.get("fairysoul").asBoolean, element.get("dsg").asString, if(element.has("sbp")) element.get("sbp").asString else "null") + tmpMap[name] = roomData + } + } + + return tmpMap + } + + private fun deconstructSecretLocationMetadata(): Map> { + + val tmp = HashMap>() + + waypointsJson.entrySet().forEach { (name, element) -> + if(element is JsonArray) { + + val secrets = element.map { it.asJsonObject }.map{ SecretMetaData(it.get("secretName").asString, it.get("category").asString, it.get("x").asInt, it.get("y").asInt, it.get("z").asInt) }.toTypedArray() + + tmp[name] = secrets + } + } + + return tmp + } + + + private fun constructRooms(){ + val roomMetaData = deconstructRoomData() + val secretMetaData = deconstructSecretLocationMetadata() + + val tmp = HashMap() + + secretMetaData.forEach { (secretName, secrets) -> + roomMetaData.forEach { (metaName, meta) -> + if(secretName == metaName) { + tmp[secretName] = DungeonRoom(secretName, meta, secrets) + } + } + } + println("Example room data: ${tmp["Perch-2"]}") + roomData = tmp } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt index f0314f4..8f181e9 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt @@ -296,38 +296,23 @@ class RoomCommand : CommandBase() { "json" -> { if (!Utils.inCatacombs && DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear && DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.Boss) { - player.addChatMessage( - ChatComponentText( - "${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons" - ) - ) + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Use this command in dungeons") return } - if (DungeonRooms.instance.roomDataLoader.roomsJson[DungeonRooms.instance.roomDetection.roomName] != null) { - val json = DungeonRooms.instance.roomDataLoader.roomsJson[DungeonRooms.instance.roomDetection.roomName].asJsonObject - json.addProperty("name", DungeonRooms.instance.roomDetection.roomName) //add room name property - ChatTransmitter.addToQueue(json.toString()) + val room = DungeonRooms.instance.roomDataLoader.roomData[DungeonRooms.instance.roomDetection.roomName] + + if(room != null){ + ChatTransmitter.addToQueue(room.toString()) } } "roominfo" -> { if (!Utils.inCatacombs || DungeonRooms.instance.dungeonManager.gameStage != DungeonRunStage.RoomClear) { - player.addChatMessage( - ChatComponentText( - "${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons" - ) - ) + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Not in room clearing phase of dungeons") } if (DungeonManager.entranceMapCorners != null) { - player.addChatMessage( - ChatComponentText( - "dev: entranceMapCorners = " + ArrayList( - listOf( - DungeonManager.entranceMapCorners - ) - ) - ) - ) + ChatTransmitter.addToQueue("dev: entranceMapCorners = ${listOf(DungeonManager.entranceMapCorners)}") + } else { ChatTransmitter.addToQueue("dev: entranceMapCorners = null") } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 4ff0941..8ff74d7 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -17,17 +17,20 @@ */ package io.github.quantizr.dungeonrooms.dungeons -import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.ChatTransmitter +import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms -import io.github.quantizr.dungeonrooms.roomdata.RoomColor -import io.github.quantizr.dungeonrooms.roomdata.RoomSize +import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomColor +import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomSize import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.block.Block import net.minecraft.client.Minecraft -import net.minecraft.util.* +import net.minecraft.util.BlockPos +import net.minecraft.util.EnumChatFormatting +import net.minecraft.util.MovingObjectPosition +import net.minecraft.util.Vec3 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent @@ -68,8 +71,8 @@ class RoomDetection { DungeonManager.entranceMapCorners = null // retry getting corners again next loop if (entranceMapNullCount == 8) { ChatTransmitter.addToQueue( - "${EnumChatFormatting.RED}DungeonRooms: Error with hotbar map, perhaps your texture pack is interfering with room detection?" - ) + "${EnumChatFormatting.RED}DungeonRooms: Error with hotbar map, perhaps your texture pack is interfering with room detection?" + ) DungeonRooms.textToDisplay = ArrayList( listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}Hotbar map may be bugged" @@ -174,13 +177,12 @@ class RoomDetection { when (possibleRoomsSet.size) { // no match 0 -> { - DungeonRooms.textToDisplay = ArrayList( - listOf( - "Dungeon Rooms: ${EnumChatFormatting.RED}No Matching Rooms Detected", - "${EnumChatFormatting.RED}This mod might not have data for this room.", - "${EnumChatFormatting.WHITE}Retrying every 5 seconds..." - ) + DungeonRooms.textToDisplay = listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}No Matching Rooms Detected", + "${EnumChatFormatting.RED}This mod might not have data for this room.", + "${EnumChatFormatting.WHITE}Retrying every 5 seconds..." ) + redoScan = System.currentTimeMillis() + 5000 } //room found @@ -195,13 +197,12 @@ class RoomDetection { } // too many matches else -> { - DungeonRooms.textToDisplay = ArrayList( - listOf( - "Dungeon Rooms: ${EnumChatFormatting.RED}Unable to Determine Room Name", - "${EnumChatFormatting.RED}Not enough valid blocks were scanned, look at a more open area.", - "${EnumChatFormatting.WHITE}Retrying every second..." - ) + DungeonRooms.textToDisplay = listOf( + "Dungeon Rooms: ${EnumChatFormatting.RED}Unable to Determine Room Name", + "${EnumChatFormatting.RED}Not enough valid blocks were scanned, look at a more open area.", + "${EnumChatFormatting.WHITE}Retrying every second..." ) + DungeonRooms.logger.info("DungeonRooms: Possible rooms list = ${ArrayList(possibleRoomsSet)}") incompleteScan = System.currentTimeMillis() + 1000 } @@ -572,33 +573,30 @@ class RoomDetection { private fun newRoom() { if (roomName == "undefined" || roomCategory == "undefined") return // update Waypoints info - if (DungeonRooms.instance.roomDataLoader.roomsJson[roomName] != null) { - Waypoints.secretCount = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject["secrets"].asInt - Waypoints.allSecretsMap.putIfAbsent( - roomName, - ArrayList(Collections.nCopies(Waypoints.secretCount, true)) - ) + val roomJson = DungeonRooms.instance.roomDataLoader.roomData[roomName] + if (roomJson != null) { + Waypoints.secretCount = roomJson.data.secrets + Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(Waypoints.secretCount, true))) } else { Waypoints.secretCount = 0 Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(0, true))) } + Waypoints.secretsList = Waypoints.allSecretsMap[roomName]?.toMutableList() //update GUI text if (DRMConfig.guiToggled) { val lineList: MutableList = ArrayList() - var line = - ("Dungeon Rooms: You are in ${EnumChatFormatting.GREEN}$roomCategory${EnumChatFormatting.WHITE} - ${EnumChatFormatting.GREEN}$roomName") - if (DungeonRooms.instance.roomDataLoader.roomsJson[roomName] != null) { - val roomJson = DungeonRooms.instance.roomDataLoader.roomsJson[roomName].asJsonObject - if (roomJson["fairysoul"].asBoolean) { - line = "$line${EnumChatFormatting.WHITE} - ${EnumChatFormatting.LIGHT_PURPLE}Fairy Soul" + val roomJson = DungeonRooms.instance.roomDataLoader.roomData[roomName] + if (roomJson != null) { + var line = "Dungeon Rooms: You are in ${EnumChatFormatting.GREEN}$roomCategory${EnumChatFormatting.WHITE} - ${EnumChatFormatting.GREEN}$roomName" + if (roomJson.data.fairysoul) { + line += "${EnumChatFormatting.WHITE} - ${EnumChatFormatting.LIGHT_PURPLE}Fairy Soul" } lineList.add(line) - if (DRMConfig.waypointsEnabled && roomJson["secrets"].asInt != 0 && DungeonRooms.instance.roomDataLoader.waypointsJson[roomName] == null) { - lineList.add("${EnumChatFormatting.RED}No waypoints available") - lineList.add("${EnumChatFormatting.RED}Press \"${DRMConfig.openSecretImages.display}\" to view images") - } + } else if (DRMConfig.waypointsEnabled){ + lineList.add("${EnumChatFormatting.RED}No waypoints available") + lineList.add("${EnumChatFormatting.RED}Press \"${DRMConfig.openSecretImages.display}\" to view images") } DungeonRooms.textToDisplay = lineList } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index 22794e3..cb3a61c 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -48,30 +48,26 @@ class Waypoints { fun onWorldRender(event: RenderWorldLastEvent) { if (!DRMConfig.waypointsEnabled) return if (DRMConfig.practiceModeOn && !DRMConfig.practiceModeKeyBind.isActive) return + if (DRMConfig.disableWhenAllFound && allFound) return - DungeonRooms.instance.forEverySecretInRoom { (secretsObject, _) -> - var display = true - for (j in 1..secretCount) { - if (!secretsList!![j - 1]) { - if (secretsObject["secretName"].asString.substring(0, 2) - .replace("[\\D]".toRegex(), "") == j.toString() - ) { - display = false - break - } - } + val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return + val viewer = Minecraft.getMinecraft().renderViewEntity + frustum.setPosition(viewer.posX, viewer.posY, viewer.posZ) + + secretList.stream() + // don't render fairy souls + .filter { it.category != "fairysoul" } + + // make sure the secret is not done + .filter { secret -> + val nmbr = getSecretNumber(secret.secretName) + nmbr in (1..secretCount) && secretsList!![nmbr - 1] } - if (!display) return@forEverySecretInRoom - if (DRMConfig.disableWhenAllFound && allFound && secretsObject["category"].asString != "fairysoul") return@forEverySecretInRoom - val relative = BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) - val pos = MapUtils.relativeToActual( - relative, - DungeonRooms.instance.roomDetection.roomDirection, - DungeonRooms.instance.roomDetection.roomCorner!! - ) - val viewer = Minecraft.getMinecraft().renderViewEntity - frustum.setPosition(viewer.posX, viewer.posY, viewer.posZ) - if (!frustum.isBoxInFrustum( + + // make sure we are looking at it + .filter { + val pos = getSecretPos(it.x, it.y, it.z) + frustum.isBoxInFrustum( pos.x.toDouble(), pos.y.toDouble(), pos.z.toDouble(), @@ -79,96 +75,102 @@ class Waypoints { 255.0, (pos.z + 1).toDouble() ) - ) { - return@forEverySecretInRoom } - val color = when (secretsObject["category"].asString) { - "entrance" -> { - if (!DRMConfig.showEntrance) return@forEverySecretInRoom - Color(0, 255, 0) - } - "superboom" -> { - if (!DRMConfig.showSuperboom) return@forEverySecretInRoom - Color(255, 0, 0) - } + // render the beacon-text + .forEach { + val pos = getSecretPos(it.x, it.y, it.z) + val color = when (it.category) { + "entrance" -> { + if (!DRMConfig.showEntrance) return@forEach + Color(0, 255, 0) + } - "chest" -> { - if (!DRMConfig.showSecrets) return@forEverySecretInRoom - Color(2, 213, 250) - } + "superboom" -> { + if (!DRMConfig.showSuperboom) return@forEach + Color(255, 0, 0) + } - "item" -> { - if (!DRMConfig.showSecrets) return@forEverySecretInRoom - Color(2, 64, 250) - } + "chest" -> { + if (!DRMConfig.showSecrets) return@forEach + Color(2, 213, 250) + } - "bat" -> { - if (!DRMConfig.showSecrets) return@forEverySecretInRoom - Color(142, 66, 0) - } + "item" -> { + if (!DRMConfig.showSecrets) return@forEach + Color(2, 64, 250) + } - "wither" -> { - if (!DRMConfig.showSecrets) return@forEverySecretInRoom - Color(30, 30, 30) - } + "bat" -> { + if (!DRMConfig.showSecrets) return@forEach + Color(142, 66, 0) + } - "lever" -> { - if (!DRMConfig.showSecrets) return@forEverySecretInRoom - Color(250, 217, 2) - } + "wither" -> { + if (!DRMConfig.showSecrets) return@forEach + Color(30, 30, 30) + } - "fairysoul" -> { - if (!DRMConfig.showFairySouls) return@forEverySecretInRoom - Color(255, 85, 255) - } + "lever" -> { + if (!DRMConfig.showSecrets) return@forEach + Color(250, 217, 2) + } - "stonk" -> { - if (!DRMConfig.showStonk) return@forEverySecretInRoom - Color(146, 52, 235) - } + "fairysoul" -> { + if (!DRMConfig.showFairySouls) return@forEach + Color(255, 85, 255) + } - else -> Color(190, 255, 252) - } - val viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks - val viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks - val viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks - val x = pos.x - viewerX - val y = pos.y - viewerY - val z = pos.z - viewerZ - val distSq = x * x + y * y + z * z - GlStateManager.disableDepth() - GlStateManager.disableCull() - if (DRMConfig.showBoundingBox && frustum.isBoxInFrustum( - pos.x.toDouble(), - pos.y.toDouble(), - pos.z.toDouble(), - (pos.x + 1).toDouble(), - (pos.y + 1).toDouble(), - (pos.z + 1).toDouble() - ) - ) { - WaypointUtils.drawFilledBoundingBox(AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1), color, 0.4f) + "stonk" -> { + if (!DRMConfig.showStonk) return@forEach + Color(146, 52, 235) + } + + else -> Color(190, 255, 252) + } + val viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks + val viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks + val viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks + val x = pos.x - viewerX + val y = pos.y - viewerY + val z = pos.z - viewerZ + val distSq = x * x + y * y + z * z + GlStateManager.disableDepth() + GlStateManager.disableCull() + if (DRMConfig.showBoundingBox && frustum.isBoxInFrustum( + pos.x.toDouble(), + pos.y.toDouble(), + pos.z.toDouble(), + (pos.x + 1).toDouble(), + (pos.y + 1).toDouble(), + (pos.z + 1).toDouble() + ) + ) { + WaypointUtils.drawFilledBoundingBox(AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1), color, 0.4f) + } + GlStateManager.disableTexture2D() + if (DRMConfig.showBeacon && distSq > 5 * 5) { + WaypointUtils.renderBeaconBeam( + x, + y + 1, + z, + color.rgb, + 0.25f, + event.partialTicks + ) + } + if (DRMConfig.showWaypointText) { + WaypointUtils.renderWaypointText( + it.secretName, + pos.up(2), + event.partialTicks + ) + } + GlStateManager.disableLighting() + GlStateManager.enableTexture2D() + GlStateManager.enableDepth() + GlStateManager.enableCull() } - GlStateManager.disableTexture2D() - if (DRMConfig.showBeacon && distSq > 5 * 5) WaypointUtils.renderBeaconBeam( - x, - y + 1, - z, - color.rgb, - 0.25f, - event.partialTicks - ) - if (DRMConfig.showWaypointText) WaypointUtils.renderWaypointText( - secretsObject["secretName"].asString, - pos.up(2), - event.partialTicks - ) - GlStateManager.disableLighting() - GlStateManager.enableTexture2D() - GlStateManager.enableDepth() - GlStateManager.enableCull() - } } @SubscribeEvent(priority = EventPriority.HIGHEST) @@ -196,138 +198,141 @@ class Waypoints { val block = event.world.getBlockState(event.pos).block if (block != Blocks.chest && block != Blocks.skull) return - DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> - if (secretsObject["category"].asString == "chest" || secretsObject["category"].asString == "wither") { - val relative = - BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) - val pos = - MapUtils.relativeToActual( - relative, - DungeonRooms.instance.roomDetection.roomDirection, - DungeonRooms.instance.roomDetection.roomCorner!! - ) - if (pos == event.pos) { - for (j in 1..secretCount) { - if (secretsObject["secretName"].asString.substring(0, 2) - .replace("[\\D]".toRegex(), "") == j.toString() - ) { - secretsList!![j - 1] = false - allSecretsMap.replace(roomName, secretsList) - DungeonRooms.logger.info("DungeonRooms: Detected " + secretsObject["category"].asString + " click, turning off waypoint for secret #" + j) - break - } - } - } + + val (roomId, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return + + secretList.stream() + .filter { it.category == "chest" || it.category == "wither" } + .filter { getSecretPos(it.x, it.y, it.z) == event.pos } + .filter { getSecretNumber(it.secretName) in (1..secretCount) } + .forEach { + val nmbr = getSecretNumber(it.secretName) + secretsList!![nmbr - 1] = false + allSecretsMap.replace(roomId, secretsList) + DungeonRooms.logger.info("DungeonRooms: Detected ${it.category} click, turning off waypoint for secret #$nmbr") } - } } @SubscribeEvent fun onReceivePacket(event: ReceiveEvent) { if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled) return if (DRMConfig.disableWhenAllFound && allFound) return + + if (event.packet !is S0DPacketCollectItem) return + val packet = event.packet as S0DPacketCollectItem + val mc = Minecraft.getMinecraft() - if (event.packet is S0DPacketCollectItem) { - val packet = event.packet as S0DPacketCollectItem - var entity = mc.theWorld.getEntityByID(packet.collectedItemEntityID) - if (entity is EntityItem) { - val item = entity - entity = mc.theWorld.getEntityByID(packet.entityID) ?: return - val name = item.entityItem.displayName - if (!name.contains("Decoy") - && !name.contains("Defuse Kit") - && !name.contains("Dungeon Chest Key") - && !name.contains("Healing VIII") - && !name.contains("Inflatable Jerry") - && !name.contains("Spirit Leap") - && !name.contains("Training Weights") - && !name.contains("Trap") - && !name.contains("Treasure Talisman") - ) { - return - } - if (entity.commandSenderEntity.name != mc.thePlayer.name) { - // Do nothing if someone else picks up the item in order to follow Hypixel rules - return - } + var entity = mc.theWorld.getEntityByID(packet.collectedItemEntityID) ?: return + if (entity !is EntityItem) return + val item = entity // smart casting shat itself and I have to use this + entity = mc.theWorld.getEntityByID(packet.entityID) ?: return + val name = item.entityItem.displayName + if (!name.contains("Decoy") && + !name.contains("Defuse Kit") && + !name.contains("Dungeon Chest Key") && + !name.contains("Healing VIII") && + !name.contains("Inflatable Jerry") && + !name.contains("Spirit Leap") && + !name.contains("Training Weights") && + !name.contains("Trap") && + !name.contains("Treasure Talisman") + ) { + return + } + if (entity.commandSenderEntity.name != mc.thePlayer.name) { + // Do nothing if someone else picks up the item in order to follow Hypixel rules (laugh haha lol) + return + } - DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> - if (secretsObject["category"].asString == "item" || secretsObject["category"].asString == "bat") { - val relative = BlockPos( - secretsObject["x"].asInt, - secretsObject["y"].asInt, - secretsObject["z"].asInt - ) - val pos = MapUtils.relativeToActual( - relative, - DungeonRooms.instance.roomDetection.roomDirection, - DungeonRooms.instance.roomDetection.roomCorner!! - ) - if (entity.getDistanceSq(pos) <= 36.0) { - for (j in 1..secretCount) { - if (secretsObject["secretName"].asString.substring(0, 2) - .replace("[\\D]".toRegex(), "") == j.toString() - ) { - if (!secretsList!![j - 1]) continue - secretsList!![j - 1] = false - allSecretsMap.replace(roomName, secretsList) - DungeonRooms.logger.info( - "DungeonRooms: ${entity.commandSenderEntity.name} picked up ${ - StringUtils.stripControlCodes( - name - ) - } from a ${secretsObject["category"].asString} secret, turning off waypoint for secret #$j" - ) - return@forEverySecretInRoom - } - } - } - } + val (roomId, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return - } + secretList.stream() + .filter { it.category == "item" || it.category == "bat" } // only bats and items + .filter { entity.getDistanceSq(getSecretPos(it.x, it.y, it.z)) <= 36 } // within 6 blocks + + // map the secret name to the secret number, so we don't recalc it every time + .map { secret -> + Pair(secret, getSecretNumber(secret.secretName)) } - } + + // get current secret + .filter { (_, nmbr) -> + nmbr in (1..secretCount) + } + + // check if secret is already found + .filter { (_, nmbr) -> + secretsList!![nmbr - 1] + } + + // finish the secret + .forEach {(secret, nmbr) -> + secretsList!![nmbr - 1] = false + allSecretsMap.replace(roomId, secretsList) + DungeonRooms.logger.info("DungeonRooms: ${entity.commandSenderEntity.name} picked up ${StringUtils.stripControlCodes(name)} from a ${secret.category} secret, turning off waypoint for secret #$nmbr") + return@forEach + } + + } + + private fun getSecretPos(x: Int, y: Int, z: Int): BlockPos { + return MapUtils.relativeToActual( + BlockPos(x, y, z), + DungeonRooms.instance.roomDetection.roomDirection, + DungeonRooms.instance.roomDetection.roomCorner!! + ) + } + + + private fun getSecretNumber(secretName: String): Int { + return secretName.substring(0, 2).replace("\\D".toRegex(), "").toInt() } + private var lastSneakTime: Long = 0 + // Disable waypoint within 4 blocks away on sneak @SubscribeEvent fun onKey(event: InputEvent.KeyInputEvent?) { if (!Utils.inCatacombs || !DRMConfig.waypointsEnabled || !DRMConfig.sneakToDisable) return + if (!FMLClientHandler.instance().client.gameSettings.keyBindSneak.isPressed) return + + val tmp = lastSneakTime // use temp value cuz we want to update the time at the start and not the end + lastSneakTime = System.currentTimeMillis() + + // check for two taps in under half a second + if ((System.currentTimeMillis() - tmp) >= 500) return + val player = Minecraft.getMinecraft().thePlayer - if (FMLClientHandler.instance().client.gameSettings.keyBindSneak.isPressed) { - val preupdate = lastSneakTime - lastSneakTime = System.currentTimeMillis() - if (System.currentTimeMillis() - preupdate < 500) { // check for two taps in under half a second - - DungeonRooms.instance.forEverySecretInRoom { (secretsObject, roomName) -> - if (secretsObject["category"].asString == "chest" || secretsObject["category"].asString == "wither" || secretsObject["category"].asString == "item" || secretsObject["category"].asString == "bat") { - val relative = - BlockPos(secretsObject["x"].asInt, secretsObject["y"].asInt, secretsObject["z"].asInt) - val pos = MapUtils.relativeToActual( - relative, - DungeonRooms.instance.roomDetection.roomDirection, - DungeonRooms.instance.roomDetection.roomCorner!! - ) - if (player.getDistanceSq(pos) <= 16.0) { - for (j in 1..secretCount) { - if (secretsObject["secretName"].asString.substring(0, 2) - .replace("[\\D]".toRegex(), "") == j.toString() - ) { - if (!secretsList!![j - 1]) continue - secretsList!![j - 1] = false - allSecretsMap.replace(roomName, secretsList) - DungeonRooms.logger.info("DungeonRooms: Player sneaked near " + secretsObject["category"].asString + " secret, turning off waypoint for secret #" + j) - return@forEverySecretInRoom - } - } - } - } - } + + + val (roomId, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return + + secretList.stream() + .filter { it.category == "chest" || it.category == "wither" || it.category == "item" || it.category == "bat" } + .filter { player.getDistanceSq(getSecretPos(it.x, it.y, it.z)) <= 16 } // within 4 blocks + + // map the secret name to the secret number, so we don't recalc it every time + .map { secret -> Pair(secret, getSecretNumber(secret.secretName)) } + + // get current secret + .filter { (_, nmbr) -> + nmbr in (1..secretCount) + } + + // check if secret is already found + .filter { (_, nmbr) -> + secretsList!![nmbr - 1] + } + + // finish the secret + .forEach {(secret, nmbr) -> + secretsList!![nmbr - 1] = false + allSecretsMap.replace(roomId, secretsList) + DungeonRooms.logger.info("DungeonRooms: Player sneaked near ${secret.category} secret, turning off waypoint for secret #$nmbr") + return@forEach } - } } - private var lastSneakTime: Long = 0 companion object { var allFound = false diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/DungeonRoom.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/DungeonRoom.kt new file mode 100644 index 0000000..c47b911 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/DungeonRoom.kt @@ -0,0 +1,3 @@ +package io.github.quantizr.dungeonrooms.dungeons.data.meta + +data class DungeonRoom(val id: String, val data: RoomMetaData, val secrets: Array) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/RoomMetaData.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/RoomMetaData.kt new file mode 100644 index 0000000..578898f --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/RoomMetaData.kt @@ -0,0 +1,3 @@ +package io.github.quantizr.dungeonrooms.dungeons.data.meta + +data class RoomMetaData(val category: String, val secrets: Int, val fairysoul: Boolean, val dgs: String, val sbp: String) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/SecretMetaData.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/SecretMetaData.kt new file mode 100644 index 0000000..07dbef4 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/meta/SecretMetaData.kt @@ -0,0 +1,3 @@ +package io.github.quantizr.dungeonrooms.dungeons.data.meta + +data class SecretMetaData(val secretName: String, val category: String, val x: Int, val y: Int, val z: Int) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomColor.kt similarity index 59% rename from src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt rename to src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomColor.kt index a5937b6..557ef5a 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomColor.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomColor.kt @@ -1,4 +1,4 @@ -package io.github.quantizr.dungeonrooms.roomdata +package io.github.quantizr.dungeonrooms.dungeons.data.room enum class RoomColor { BROWN, PURPLE, ORANGE, YELLOW, GREEN, PINK, RED, UNDEFINED diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomSize.kt similarity index 58% rename from src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt rename to src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomSize.kt index 4406b9e..c58e1d3 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/roomdata/RoomSize.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/data/room/RoomSize.kt @@ -1,4 +1,4 @@ -package io.github.quantizr.dungeonrooms.roomdata +package io.github.quantizr.dungeonrooms.dungeons.data.room enum class RoomSize { `1x1`, `1x2`, `1x3`, `1x4`, `2x2`, `L-shape`, undefined diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt index 52c1915..437af38 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/OpenLink.kt @@ -36,8 +36,8 @@ object OpenLink { fun checkForLink(type: String?) { val mc = Minecraft.getMinecraft() - (DungeonRooms.instance.getSecretsObject() ?: return).let { (obj, _) -> - if (obj["dsg"].asString == "null" && obj["sbp"] == null) { + DungeonRooms.instance.roomDataLoader.roomData[DungeonRooms.instance.roomDetection.roomName]?.let { + if (it.data.dgs == "null" && it.data.sbp == "null") { ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There are no channels/images for this room.") return } @@ -64,19 +64,19 @@ object OpenLink { val mc = Minecraft.getMinecraft() val player = mc.thePlayer - val (roomJson, _) = DungeonRooms.instance.getSecretsObject() ?: return + val room = DungeonRooms.instance.roomDataLoader.roomData[DungeonRooms.instance.roomDetection.roomName] ?: return - if (roomJson["dsg"].asString == "null") { + if (room.data.dgs == "null") { ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There is no DSG channel for this room.") return } try { if (type == "client") { player.addChatMessage(ChatComponentText("Dungeon Rooms: Opening DSG Discord in Client...")) - Desktop.getDesktop().browse(URI("discord://" + roomJson["dsg"].asString)) + Desktop.getDesktop().browse(URI("discord://" + room.data.dgs)) } else { player.addChatMessage(ChatComponentText("Dungeon Rooms: Opening DSG Discord in Browser...")) - Desktop.getDesktop().browse(URI("https://discord.com" + roomJson["dsg"].asString)) + Desktop.getDesktop().browse(URI("https://discord.com" + room.data.dgs)) } } catch (e: IOException) { e.printStackTrace() @@ -86,13 +86,15 @@ object OpenLink { } fun openSBPSecrets() { - val (roomJson, _) = DungeonRooms.instance.getSecretsObject() ?: return - if (roomJson["sbp"] == null) { + + val room = DungeonRooms.instance.roomDataLoader.roomData[DungeonRooms.instance.roomDetection.roomName] ?: return + + if (room.data.sbp == "null") { ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: There are no SBP images for this room.") return } - val name = roomJson["sbp"].asString - var category = roomJson["category"].asString + val name = room.data.sbp + var category = room.data.category when (category) { "Puzzle", "Trap" -> category = "puzzles" "L-shape" -> category = "L" diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt index 149eb57..1590725 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/MapUtils.kt @@ -17,8 +17,8 @@ */ package io.github.quantizr.dungeonrooms.utils -import io.github.quantizr.dungeonrooms.roomdata.RoomColor -import io.github.quantizr.dungeonrooms.roomdata.RoomSize +import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomColor +import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomSize import net.minecraft.block.material.MapColor import net.minecraft.client.Minecraft import net.minecraft.init.Items From a19f139feeb212f68e0c2be89a33e6aa4c0c55f5 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 19:06:05 +0100 Subject: [PATCH 09/22] make the properties in Waypoints.kt make sense --- .../quantizr/dungeonrooms/DungeonRooms.kt | 3 +- .../dungeonrooms/dungeons/DungeonManager.kt | 2 +- .../dungeonrooms/dungeons/RoomDetection.kt | 17 ++++--- .../dungeonrooms/dungeons/Waypoints.kt | 45 +++++++++--------- .../quantizr/dungeonrooms/gui/WaypointsGUI.kt | 46 +++++++++---------- 5 files changed, 57 insertions(+), 56 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 37e27a6..a8c2a2f 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -80,6 +80,7 @@ class DungeonRooms { val roomDetection = RoomDetection() val roomDataLoader = RoomDataLoader() val dungeonManager = DungeonManager() + val waypoints = Waypoints() @Mod.EventHandler fun init(event: FMLInitializationEvent?) { @@ -92,7 +93,7 @@ class DungeonRooms { MinecraftForge.EVENT_BUS.register(ChatTransmitter()) MinecraftForge.EVENT_BUS.register(dungeonManager) MinecraftForge.EVENT_BUS.register(roomDetection) - MinecraftForge.EVENT_BUS.register(Waypoints()) + MinecraftForge.EVENT_BUS.register(waypoints) //reload config reloadConfig() diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt index 3ce0802..a69a3a7 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt @@ -149,7 +149,7 @@ class DungeonManager { instance.roomDetection.entranceMapNullCount = 0 bloodTime = Long.MAX_VALUE instance.roomDetection.stage2Executor.shutdown() - Waypoints.allSecretsMap.clear() + instance.waypoints.allSecretsMap.clear() instance.roomDetection.resetCurrentRoom() } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 8ff74d7..5387704 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -551,7 +551,7 @@ class RoomDetection { var entranceMapNullCount = 0 fun resetCurrentRoom() { DungeonRooms.textToDisplay = null - Waypoints.allFound = false + DungeonRooms.instance.waypoints.allFound = false currentPhysicalSegments = emptyList().toMutableList() currentMapSegments = emptyList() roomSize = RoomSize.undefined @@ -567,7 +567,7 @@ class RoomDetection { thaPossibleRooms = null incompleteScan = 0 redoScan = 0 - Waypoints.secretCount = 0 + DungeonRooms.instance.waypoints.secretCount = 0 } private fun newRoom() { @@ -575,14 +575,17 @@ class RoomDetection { // update Waypoints info val roomJson = DungeonRooms.instance.roomDataLoader.roomData[roomName] if (roomJson != null) { - Waypoints.secretCount = roomJson.data.secrets - Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(Waypoints.secretCount, true))) + DungeonRooms.instance.waypoints.secretCount = roomJson.data.secrets + DungeonRooms.instance.waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(DungeonRooms.instance.waypoints.secretCount, true))) } else { - Waypoints.secretCount = 0 - Waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(0, true))) + DungeonRooms.instance.waypoints.secretCount = 0 + DungeonRooms.instance.waypoints.allSecretsMap.putIfAbsent(roomName, ArrayList(Collections.nCopies(0, true))) + } + + DungeonRooms.instance.waypoints.allSecretsMap[roomName]?.let { + DungeonRooms.instance.waypoints.secretsList = it.toMutableList() } - Waypoints.secretsList = Waypoints.allSecretsMap[roomName]?.toMutableList() //update GUI text if (DRMConfig.guiToggled) { diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index cb3a61c..bca7bfd 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -43,6 +43,12 @@ import java.awt.Color class Waypoints { private var frustum = Frustum() + private var completedSecrets = 0 + + var allFound = false + var secretCount = 0 + var allSecretsMap: MutableMap?> = HashMap() + var secretsList: MutableList = ArrayList(BooleanArray(10).toList()) @SubscribeEvent fun onWorldRender(event: RenderWorldLastEvent) { @@ -61,7 +67,7 @@ class Waypoints { // make sure the secret is not done .filter { secret -> val nmbr = getSecretNumber(secret.secretName) - nmbr in (1..secretCount) && secretsList!![nmbr - 1] + nmbr in (1..secretCount) && secretsList[nmbr - 1] } // make sure we are looking at it @@ -207,7 +213,7 @@ class Waypoints { .filter { getSecretNumber(it.secretName) in (1..secretCount) } .forEach { val nmbr = getSecretNumber(it.secretName) - secretsList!![nmbr - 1] = false + secretsList[nmbr - 1] = false allSecretsMap.replace(roomId, secretsList) DungeonRooms.logger.info("DungeonRooms: Detected ${it.category} click, turning off waypoint for secret #$nmbr") } @@ -262,14 +268,20 @@ class Waypoints { // check if secret is already found .filter { (_, nmbr) -> - secretsList!![nmbr - 1] + secretsList[nmbr - 1] } // finish the secret - .forEach {(secret, nmbr) -> - secretsList!![nmbr - 1] = false + .forEach { (secret, nmbr) -> + secretsList[nmbr - 1] = false allSecretsMap.replace(roomId, secretsList) - DungeonRooms.logger.info("DungeonRooms: ${entity.commandSenderEntity.name} picked up ${StringUtils.stripControlCodes(name)} from a ${secret.category} secret, turning off waypoint for secret #$nmbr") + DungeonRooms.logger.info( + "DungeonRooms: ${entity.commandSenderEntity.name} picked up ${ + StringUtils.stripControlCodes( + name + ) + } from a ${secret.category} secret, turning off waypoint for secret #$nmbr" + ) return@forEach } @@ -321,31 +333,16 @@ class Waypoints { // check if secret is already found .filter { (_, nmbr) -> - secretsList!![nmbr - 1] + secretsList[nmbr - 1] } // finish the secret - .forEach {(secret, nmbr) -> - secretsList!![nmbr - 1] = false + .forEach { (secret, nmbr) -> + secretsList[nmbr - 1] = false allSecretsMap.replace(roomId, secretsList) DungeonRooms.logger.info("DungeonRooms: Player sneaked near ${secret.category} secret, turning off waypoint for secret #$nmbr") return@forEach } } - companion object { - - var allFound = false - - @JvmField - var secretCount: Int = 0 - var completedSecrets = 0 - - @JvmField - var allSecretsMap: MutableMap?> = HashMap() - - @JvmField - var secretsList: MutableList? = ArrayList(BooleanArray(10).toMutableList()) - - } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt index 8e281f8..8a1a0dc 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt @@ -131,33 +131,33 @@ class WaypointsGUI : GuiScreen() { buttonList.add(disableWhenAllFound) buttonList.add(close) if (Utils.inCatacombs) { - if (Waypoints.secretCount > 0) { - if (Waypoints.secretCount <= 5) { - for (i in 1..Waypoints.secretCount) { - val adjustPos = -40 * Waypoints.secretCount - 70 + 80 * i + if (DungeonRooms.instance.waypoints.secretCount > 0) { + if (DungeonRooms.instance.waypoints.secretCount <= 5) { + for (i in 1..DungeonRooms.instance.waypoints.secretCount) { + val adjustPos = -40 * DungeonRooms.instance.waypoints.secretCount - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( - Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) } } else { - for (i in 1..ceil(Waypoints.secretCount.toDouble() / 2).toInt()) { - val adjustPos = -40 * ceil(Waypoints.secretCount.toDouble() / 2).toInt() - 70 + 80 * i + for (i in 1..ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2).toInt()) { + val adjustPos = -40 * ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2).toInt() - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( - Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) } - for (i in (ceil((Waypoints.secretCount / 2).toDouble()) + 1).toInt() .. Waypoints.secretCount) { - val adjustPos = -40 * (Waypoints.secretCount - ceil(Waypoints.secretCount.toDouble() / 2) - .toInt()) - 70 + 80 * (i - ceil(Waypoints.secretCount.toDouble() / 2).toInt()) + for (i in (ceil((DungeonRooms.instance.waypoints.secretCount / 2).toDouble()) + 1).toInt() .. DungeonRooms.instance.waypoints.secretCount) { + val adjustPos = -40 * (DungeonRooms.instance.waypoints.secretCount - ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2) + .toInt()) - 70 + 80 * (i - ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2).toInt()) secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 200, 60, 20, "$i: " + getOnOff( - Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) @@ -207,7 +207,7 @@ class WaypointsGUI : GuiScreen() { 1.0, false ) - } else if (Waypoints.secretCount == 0) { + } else if (DungeonRooms.instance.waypoints.secretCount == 0) { val errorText = "No secrets in this room" val errorTextWidth = mc.fontRendererObj.getStringWidth(errorText) TextRenderer.drawText( @@ -272,15 +272,15 @@ class WaypointsGUI : GuiScreen() { player.closeScreen() } if (Utils.inCatacombs) { - if (Waypoints.secretCount > 0) { - for (i in 1..Waypoints.secretCount) { + if (DungeonRooms.instance.waypoints.secretCount > 0) { + for (i in 1..DungeonRooms.instance.waypoints.secretCount) { if (button === secretButtonList[i - 1]) { - Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] = !DungeonRooms.instance.waypoints.secretsList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { - Waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, Waypoints.secretsList) + DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretsList) } secretButtonList[i - 1].displayString = "$i: " + getOnOff( - Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] ) break } @@ -297,15 +297,15 @@ class WaypointsGUI : GuiScreen() { override fun keyTyped(c: Char, keyCode: Int) { super.keyTyped(c, keyCode) if (waypointGuiOpened && Utils.inCatacombs) { - if (Waypoints.secretCount > 0) { - for (i in 1..Waypoints.secretCount) { + if (DungeonRooms.instance.waypoints.secretCount > 0) { + for (i in 1..DungeonRooms.instance.waypoints.secretCount) { if (keyCode - 1 == i) { - Waypoints.secretsList!![i - 1] = !Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] = !DungeonRooms.instance.waypoints.secretsList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { - Waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, Waypoints.secretsList) + DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretsList) } secretButtonList[i - 1].displayString = "$i: " + getOnOff( - Waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretsList!![i - 1] ) break } From 4c87a9e4c31fc5a33fc751199442d71a817fcac3 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 19:15:41 +0100 Subject: [PATCH 10/22] add comments in RoomDataLoader --- .../quantizr/dungeonrooms/RoomDataLoader.kt | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt index 11b9eeb..307b293 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/RoomDataLoader.kt @@ -21,19 +21,19 @@ class RoomDataLoader { const val secretLocPath = "/assets/dungeonrooms/secretlocations.json" } + private var executor: ExecutorService = Executors.newFixedThreadPool(4) + + // debug info private var blockedTime: Long = 0 private var blockedTimeFor1x1: Long = 0 + private var asyncLoadStart: Long = 0 private var asyncLoadTime: Long = 0 - - lateinit var roomData: Map - - private lateinit var roomsJson: JsonObject - private lateinit var waypointsJson: JsonObject + // the actual data exposed to the world var ROOM_DATA = HashMap>() + lateinit var roomData: Map - private lateinit var executor: ExecutorService - + // temporary vars used while loading the data private lateinit var future1x1: Future> private lateinit var future1x2: Future> private lateinit var future1x3: Future> @@ -43,10 +43,10 @@ class RoomDataLoader { private lateinit var futurePuzzle: Future> private lateinit var futureTrap: Future> - private var asyncLoadStart: Long = 0 + private lateinit var roomsJson: JsonObject + private lateinit var waypointsJson: JsonObject fun startAsyncLoad(){ - executor = Executors.newFixedThreadPool(4) // don't need 8 threads because it's just 1x1 that takes longest asyncLoadStart = System.currentTimeMillis() // load the room skeletons @@ -81,6 +81,8 @@ class RoomDataLoader { } } } + + constructRooms() } } @@ -114,7 +116,6 @@ class RoomDataLoader { DungeonRooms.logger.debug("DungeonRooms: Blocked Time(ms) remaining for other rooms: $blockedTime") executor.shutdown() - constructRooms() } From 6beebf789a45e2b575536266f32a0b68dffeb764 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Mon, 26 Dec 2022 23:31:37 +0100 Subject: [PATCH 11/22] refactor DungeonRooms.kt --- .../quantizr/dungeonrooms/DungeonRooms.kt | 212 ++++++++---------- .../dungeonrooms/commands/RoomCommand.kt | 11 +- .../dungeonrooms/dungeons/DungeonManager.kt | 12 +- .../dungeonrooms/dungeons/RoomDetection.kt | 14 +- .../dungeonrooms/handlers/ConfigHandler.kt | 82 ------- .../handlers/ScoreboardHandler.kt | 2 +- 6 files changed, 112 insertions(+), 221 deletions(-) delete mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index a8c2a2f..4eae58d 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -17,16 +17,14 @@ */ package io.github.quantizr.dungeonrooms -import com.google.gson.JsonArray +import com.google.gson.Gson import com.google.gson.JsonObject -import com.google.gson.JsonParser import io.github.quantizr.dungeonrooms.commands.RoomCommand import io.github.quantizr.dungeonrooms.dungeons.DungeonManager import io.github.quantizr.dungeonrooms.dungeons.RoomDetection import io.github.quantizr.dungeonrooms.dungeons.Waypoints import io.github.quantizr.dungeonrooms.dungeons.data.meta.SecretMetaData import io.github.quantizr.dungeonrooms.gui.WaypointsGUI -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler.reloadConfig import io.github.quantizr.dungeonrooms.handlers.OpenLink.checkForLink import io.github.quantizr.dungeonrooms.handlers.PacketHandler import io.github.quantizr.dungeonrooms.handlers.TextRenderer.drawText @@ -52,29 +50,29 @@ import net.minecraftforge.fml.common.gameevent.TickEvent import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion +import org.apache.commons.io.IOUtils +import org.apache.logging.log4j.Level import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger -import java.io.BufferedReader +import java.io.File import java.io.IOException -import java.io.InputStream -import java.io.InputStreamReader import java.net.URL -import java.nio.charset.StandardCharsets -import java.util.* -import java.util.function.Consumer @Mod(modid = DungeonRooms.MODID, version = DungeonRooms.VERSION) class DungeonRooms { - var mc: Minecraft = Minecraft.getMinecraft() + val mc: Minecraft = Minecraft.getMinecraft() + val motd: MutableList = ArrayList() + var textToDisplay: List = emptyList() + + private var tickAmount = 1 @Mod.EventHandler fun preInit(event: FMLPreInitializationEvent) { ClientCommandHandler.instance.registerCommand(RoomCommand()) - configDir = event.modConfigurationDirectory.toString() //initialize logger logger = LogManager.getLogger(instance::class.java) -// Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) + if(debug) Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) } val roomDetection = RoomDetection() @@ -82,11 +80,23 @@ class DungeonRooms { val dungeonManager = DungeonManager() val waypoints = Waypoints() + + private fun isFirstLaunch(): Boolean{ + val controlfile = File(System.getProperty("user.dir") + File.separator + "drmFirstLaunchControlFile") + + if(!controlfile.exists()){ + controlfile.createNewFile() + return true + } + return false + } + @Mod.EventHandler fun init(event: FMLInitializationEvent?) { DRMConfig.init() roomDataLoader.startAsyncLoad() + firstLogin = isFirstLaunch() //register classes MinecraftForge.EVENT_BUS.register(this) @@ -95,11 +105,41 @@ class DungeonRooms { MinecraftForge.EVENT_BUS.register(roomDetection) MinecraftForge.EVENT_BUS.register(waypoints) - //reload config - reloadConfig() - roomDataLoader.blockTillLoad() + Thread { + try { + logger.info("DungeonRooms: Checking for updates...") + val gson = Gson() + val thaobject = gson.fromJson(IOUtils.toString(URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest")), JsonObject::class.java) + val latestTag = thaobject.get("tag_name").asString + val currentVersion = DefaultArtifactVersion(VERSION) + val latestVersion = DefaultArtifactVersion(latestTag.substring(1)) + if (currentVersion < latestVersion) { + val releaseURL = "https://github.com/Quantizr/DungeonRoomsMod/releases/latest" + val update = ChatComponentText("${EnumChatFormatting.GREEN}${EnumChatFormatting.BOLD} [UPDATE] ") + update.chatStyle.chatClickEvent = ClickEvent(ClickEvent.Action.OPEN_URL, releaseURL) + ChatTransmitter.addToQueue( + ChatComponentText("${EnumChatFormatting.RED}Dungeon Rooms Mod is outdated. Please update to $latestTag.").appendSibling(update) + ) + } else { + logger.info("DungeonRooms: No update found") + } + + logger.info("DungeonRooms: Getting MOTD...") + val motdText = + IOUtils.toString(URL("https://gist.githubusercontent.com/Quantizr/01aca53e61cef5dfd08989fec600b204/raw/")) + motd.addAll(motdText.split(System.lineSeparator())) + logger.info("DungeonRooms: MOTD has been checked") + + } catch (e: IOException) { + ChatTransmitter.addToQueue(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + e.printStackTrace() + } catch (e: InterruptedException) { + ChatTransmitter.addToQueue(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + e.printStackTrace() + } + }.start() } @Mod.EventHandler @@ -109,7 +149,7 @@ class DungeonRooms { } fun getJsonSecretList(): Pair>? { - if(roomDetection.roomName == "undefined") return null + if (roomDetection.roomName == "undefined") return null val room = roomDataLoader.roomData[roomDetection.roomName] ?: return null @@ -120,79 +160,25 @@ class DungeonRooms { * Modified from Danker's Skyblock Mod under the GNU General Public License v3.0 * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE * @author bowser0000 + * modified by kingstefan26 */ @SubscribeEvent fun onServerConnect(event: ClientConnectedToServerEvent) { if (mc.currentServerData == null) return - if (mc.currentServerData.serverIP.lowercase().contains("hypixel.")) { - logger.info("DungeonRooms: Connecting to Hypixel...") + if (!mc.currentServerData.serverIP.lowercase().contains("hypixel.")) return - //Packets are used in this mod solely to detect when the player picks up an item. No packets are modified or created. - event.manager.channel().pipeline().addBefore("packet_handler", "drm_packet_handler", PacketHandler()) - logger.info("DungeonRooms: Packet Handler added") - Thread { - try { - while (mc.thePlayer == null) { - //Yes, I'm too lazy to code something proper, so I'm busy-waiting, shut up. no :) -carmel - //It usually waits for less than half a second - Thread.sleep(100) - } - Thread.sleep(3000) - if (mc.currentServerData.serverIP.lowercase().contains("hypixel.")) { - logger.info("DungeonRooms: Checking for updates...") - var url = URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest") - val request = url.openConnection() - request.connect() - val json = JsonParser() - val latestRelease = json.parse(InputStreamReader(request.content as InputStream)).asJsonObject - val latestTag = latestRelease["tag_name"].asString - val currentVersion = DefaultArtifactVersion(VERSION) - val latestVersion = DefaultArtifactVersion(latestTag.substring(1)) - if (currentVersion < latestVersion) { - val releaseURL = "https://github.com/Quantizr/DungeonRoomsMod/releases/latest" - val update = - ChatComponentText("${EnumChatFormatting.GREEN}${EnumChatFormatting.BOLD} [UPDATE] ") - update.chatStyle = - update.chatStyle.setChatClickEvent(ClickEvent(ClickEvent.Action.OPEN_URL, releaseURL)) - mc.thePlayer.addChatMessage( - ChatComponentText( - """ - ${EnumChatFormatting.RED}Dungeon Rooms Mod is outdated. Please update to $latestTag. - """.trimIndent() - ).appendSibling(update) - ) - } else { - logger.info("DungeonRooms: No update found") - } - logger.info("DungeonRooms: Getting MOTD...") - url = URL("https://gist.githubusercontent.com/Quantizr/01aca53e61cef5dfd08989fec600b204/raw/") - val `in` = BufferedReader(InputStreamReader(url.openStream(), StandardCharsets.UTF_8)) - var line: String - motd = ArrayList() - while (`in`.readLine().also { line = it } != null) { - (motd as ArrayList).add(line) - } - `in`.close() - logger.info("DungeonRooms: MOTD has been checked") - } - } catch (e: IOException) { - mc.thePlayer.addChatMessage(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) - e.printStackTrace() - } catch (e: InterruptedException) { - mc.thePlayer.addChatMessage(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) - e.printStackTrace() - } - }.start() - } + logger.info("DungeonRooms: Connecting to Hypixel...") + // Packets are used in this mod solely to detect when the player picks up an item. No packets are modified or created. + event.manager.channel().pipeline().addBefore("packet_handler", "drm_packet_handler", PacketHandler()) + logger.info("DungeonRooms: Packet Handler added") } @SubscribeEvent fun onTick(event: ClientTickEvent) { if (event.phase != TickEvent.Phase.START) return - val player = mc.thePlayer tickAmount++ if (tickAmount % 20 == 0) { - if (player != null) { + if (mc.thePlayer != null) { checkForSkyblock() checkForCatacombs() tickAmount = 0 @@ -202,28 +188,30 @@ class DungeonRooms { @SubscribeEvent fun onKey(event: InputEvent.KeyInputEvent?) { - if (DRMConfig.openSecretImages.isActive) { - if (!Utils.inCatacombs) { - ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Use this hotkey inside of a dungeon room") - return + when { + DRMConfig.openSecretImages.isActive -> { + if (!Utils.inCatacombs) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Use this hotkey inside of a dungeon room") + return + } + when (DRMConfig.imageHotkeyOpen) { + 0 -> checkForLink("gui") + 1 -> checkForLink("dsg") + 2 -> checkForLink("sbp") + else -> ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: hotkeyOpen config value improperly set, do \"/room set \" to change the value") + } } - when (DRMConfig.imageHotkeyOpen) { - 0 -> checkForLink("gui") - 1 -> checkForLink("dsg") - 2 -> checkForLink("sbp") - else -> ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: hotkeyOpen config value improperly set, do \"/room set \" to change the value") + DRMConfig.waypointGuiKey.isActive -> { + mc.addScheduledTask { mc.displayGuiScreen(WaypointsGUI()) } } - } - if (DRMConfig.waypointGuiKey.isActive) { - mc.addScheduledTask { mc.displayGuiScreen(WaypointsGUI()) } - } - if (DRMConfig.practiceModeKeyBind.isActive) { - if (DRMConfig.waypointsEnabled && !DRMConfig.practiceModeOn) { - ChatTransmitter.addToQueue("""${EnumChatFormatting.RED}Dungeon Rooms: Run "/room toggle practice" to enable Practice Mode.""") + DRMConfig.practiceModeKeyBind.isActive -> { + if (DRMConfig.waypointsEnabled && !DRMConfig.practiceModeOn) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Run \"/room toggle practice\" to enable Practice Mode.") - } else if (!DRMConfig.waypointsEnabled && DRMConfig.practiceModeOn) { - ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Waypoints must be enabled for Practice Mode to work.") + } else if (!DRMConfig.waypointsEnabled && DRMConfig.practiceModeOn) { + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: Waypoints must be enabled for Practice Mode to work.") + } } } } @@ -232,40 +220,34 @@ class DungeonRooms { fun renderPlayerInfo(event: RenderGameOverlayEvent.Post) { if (event.type != RenderGameOverlayEvent.ElementType.ALL) return if (!Utils.inSkyblock) return - if (textToDisplay != null) { - if (textToDisplay!!.isNotEmpty()) { - val scaledResolution = ScaledResolution(mc) - var y = 0 - for (line in textToDisplay!!) { - val roomStringWidth = mc.fontRendererObj.getStringWidth(line) - drawText( - mc, line, scaledResolution.scaledWidth * DRMConfig.textLocX / 100 - roomStringWidth / 2, - scaledResolution.scaledHeight * DRMConfig.textLocY / 100 + y, 1.0, true - ) - y += mc.fontRendererObj.FONT_HEIGHT - } + if (textToDisplay.isNotEmpty()) { + val scaledResolution = ScaledResolution(mc) + var y = 0 + for (line in textToDisplay) { + val roomStringWidth = mc.fontRendererObj.getStringWidth(line) + drawText( + mc, line, scaledResolution.scaledWidth * DRMConfig.textLocX / 100 - roomStringWidth / 2, + scaledResolution.scaledHeight * DRMConfig.textLocY / 100 + y, 1.0, true + ) + y += mc.fontRendererObj.FONT_HEIGHT } } } - companion object { - const val debug: Boolean = false + companion object { @Mod.Instance @JvmStatic lateinit var instance: DungeonRooms private set + const val debug = false const val MODID = "@ID@" const val VERSION = "@VER@" lateinit var logger: Logger - - var usingSBPSecrets = false - var tickAmount = 1 - var textToDisplay: List? = null - var motd: MutableList? = null - var configDir: String? = null + private set + var firstLogin = false } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt index 8f181e9..4079a65 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/commands/RoomCommand.kt @@ -23,7 +23,6 @@ import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.dungeons.DungeonManager import io.github.quantizr.dungeonrooms.dungeons.DungeonRunStage import io.github.quantizr.dungeonrooms.gui.WaypointsGUI -import io.github.quantizr.dungeonrooms.handlers.ConfigHandler import io.github.quantizr.dungeonrooms.handlers.OpenLink import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils @@ -93,9 +92,8 @@ class RoomCommand : CommandBase() { } else { if (DungeonRooms.instance.dungeonManager.gameStage == DungeonRunStage.RoomClear) { - for (line in DungeonRooms.textToDisplay!!) { - player.addChatMessage(ChatComponentText(line)) - } + DungeonRooms.instance.textToDisplay.forEach { ChatTransmitter.addToQueue(it) } + ChatTransmitter.addToQueue( "${EnumChatFormatting.GREEN}Dungeon Rooms: You can also run \"/room help\" for additional options" ) @@ -267,11 +265,6 @@ class RoomCommand : CommandBase() { } } - "reload" -> { - ConfigHandler.reloadConfig() - ChatTransmitter.addToQueue("Dungeon Rooms: Reloaded config file") - } - "discord" -> try { ChatTransmitter.addToQueue("Dungeon Rooms: Opening Dungeon Rooms Discord invite in browser...") Desktop.getDesktop().browse(URI("https://discord.gg/7B5RbsArYK")) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt index a69a3a7..c0c5562 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt @@ -109,17 +109,15 @@ class DungeonManager { DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to $entrancePhysicalNWCorner") } } - if (DungeonRooms.textToDisplay == null && DRMConfig.motdToggled) { + if (DRMConfig.motdToggled) { DungeonRooms.logger.info("DungeonRooms: Updating MOTD on screen") if (oddRun || !DRMConfig.guiToggled) { // load MOTD on odd runs - if (DungeonRooms.motd != null) { - if (DungeonRooms.motd!!.isNotEmpty()) { - DungeonRooms.textToDisplay = DungeonRooms.motd - } + if (instance.motd.isNotEmpty()) { + instance.textToDisplay = instance.motd } } - if (DungeonRooms.textToDisplay == null && DRMConfig.guiToggled) { //if MOTD is empty or not odd run load default text - DungeonRooms.textToDisplay = ArrayList( + if (DRMConfig.guiToggled) { //if MOTD is empty or not odd run load default text + instance.textToDisplay = ArrayList( listOf( "Dungeon Rooms: ${EnumChatFormatting.GREEN}Press the hotkey \"${ DRMConfig.waypointGuiKey.display diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 5387704..035277a 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -73,7 +73,7 @@ class RoomDetection { ChatTransmitter.addToQueue( "${EnumChatFormatting.RED}DungeonRooms: Error with hotbar map, perhaps your texture pack is interfering with room detection?" ) - DungeonRooms.textToDisplay = ArrayList( + DungeonRooms.instance.textToDisplay = ArrayList( listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}Hotbar map may be bugged" ) @@ -100,7 +100,7 @@ class RoomDetection { DungeonRooms.logger.info("DungeonRooms: entrancePhysicalNWCorner has been set to ${DungeonManager.entrancePhysicalNWCorner}") } } else { - DungeonRooms.textToDisplay = ArrayList( + DungeonRooms.instance.textToDisplay = ArrayList( listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}Entrance Room coordinates not found", "${EnumChatFormatting.RED}Please go back into the middle of the Green Entrance Room." @@ -126,7 +126,7 @@ class RoomDetection { if (roomSize == RoomSize.undefined || roomColor == RoomColor.UNDEFINED) { updateCurrentRoom() if (roomColor == RoomColor.UNDEFINED) { - DungeonRooms.textToDisplay = ArrayList( + DungeonRooms.instance.textToDisplay = ArrayList( listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}Waiting for hotbar map to update..." ) @@ -177,7 +177,7 @@ class RoomDetection { when (possibleRoomsSet.size) { // no match 0 -> { - DungeonRooms.textToDisplay = listOf( + DungeonRooms.instance.textToDisplay = listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}No Matching Rooms Detected", "${EnumChatFormatting.RED}This mod might not have data for this room.", "${EnumChatFormatting.WHITE}Retrying every 5 seconds..." @@ -197,7 +197,7 @@ class RoomDetection { } // too many matches else -> { - DungeonRooms.textToDisplay = listOf( + DungeonRooms.instance.textToDisplay = listOf( "Dungeon Rooms: ${EnumChatFormatting.RED}Unable to Determine Room Name", "${EnumChatFormatting.RED}Not enough valid blocks were scanned, look at a more open area.", "${EnumChatFormatting.WHITE}Retrying every second..." @@ -550,7 +550,7 @@ class RoomDetection { private var redoScan = 0L var entranceMapNullCount = 0 fun resetCurrentRoom() { - DungeonRooms.textToDisplay = null + DungeonRooms.instance.textToDisplay = emptyList() DungeonRooms.instance.waypoints.allFound = false currentPhysicalSegments = emptyList().toMutableList() currentMapSegments = emptyList() @@ -601,7 +601,7 @@ class RoomDetection { lineList.add("${EnumChatFormatting.RED}No waypoints available") lineList.add("${EnumChatFormatting.RED}Press \"${DRMConfig.openSecretImages.display}\" to view images") } - DungeonRooms.textToDisplay = lineList + DungeonRooms.instance.textToDisplay = lineList } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt deleted file mode 100644 index dcaba7d..0000000 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ConfigHandler.kt +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Dungeon Rooms Mod - Secret Waypoints for Hypixel Skyblock Dungeons - * Copyright 2021 Quantizr(_risk) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -package io.github.quantizr.dungeonrooms.handlers - -import io.github.quantizr.dungeonrooms.DungeonRooms -import io.github.quantizr.dungeonrooms.dungeons.DungeonManager -import io.github.quantizr.dungeonrooms.dungeons.Waypoints -import net.minecraftforge.common.config.ConfigCategory -import net.minecraftforge.common.config.Configuration -import java.io.File - -object ConfigHandler { - private var config: Configuration? = null - private const val file = "config/DungeonRooms.cfg" - - private fun getString(category: String?, key: String?): String { - config = Configuration(File(file)) - try { - config!!.load() - if (config!!.getCategory(category).containsKey(key)) { - return config!![category, key, ""].string - } - } catch (ex: Exception) { - ex.printStackTrace() - } finally { - config!!.save() - } - return "" - } - - private fun writeStringConfig(category: String?, key: String?, value: String?) { - config = Configuration(File(file)) - try { - config!!.load() - val set = config!![category, key, value].string - config!!.getCategory(category)[key].set(value) - } catch (ex: Exception) { - ex.printStackTrace() - } finally { - config!!.save() - } - } - private fun hasKey(category: String?, key: String?): Boolean { - config = Configuration(File(file)) - try { - config!!.load() - return if (!config!!.hasCategory(category)) false else config!!.getCategory(category).containsKey(key) - } catch (ex: Exception) { - ex.printStackTrace() - } finally { - config!!.save() - } - return false - } - - - @JvmStatic - fun reloadConfig() { - if (!hasKey("drm", "version")) { - writeStringConfig("drm", "version", DungeonRooms.VERSION) - DungeonRooms.firstLogin = true - } else if (getString("drm", "version") != DungeonRooms.VERSION) { - writeStringConfig("drm", "version", DungeonRooms.VERSION) - } - - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt index 4893e3f..7344494 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/handlers/ScoreboardHandler.kt @@ -31,7 +31,7 @@ object ScoreboardHandler { val nvString = StringUtils.stripControlCodes(scoreboard).toCharArray() val cleaned = StringBuilder() for (c in nvString) { - if (c.code > 20 && c.code < 127) { + if (c.code in 21..126) { cleaned.append(c) } } From 0888f4b4a4c3814bac308d8663c8b94fb5464d45 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Tue, 27 Dec 2022 05:41:24 +0100 Subject: [PATCH 12/22] port basic pathfinding from dg --- build.gradle | 7 +- .../github/quantizr/dungeonrooms/DRMConfig.kt | 15 + .../quantizr/dungeonrooms/DungeonRooms.kt | 17 +- .../dungeonrooms/dungeons/Waypoints.kt | 72 ++- .../pathfinding/BlockedChecker.kt | 5 + .../pathfinding/CachedPathFinder.kt | 122 +++++ .../dungeonrooms/pathfinding/PfJob.kt | 6 + .../dungeonrooms/pathfinding/PfPath.kt | 6 + .../pathfinding/algorithms/AStarUtil.kt | 13 + .../pathfinding/algorithms/AlgBuilder.kt | 24 + .../algorithms/IPathfinderAlgorithm.kt | 17 + .../algorithms/impl/AStarCornerCut.kt | 185 ++++++++ .../algorithms/impl/AStarFineGrid.kt | 178 ++++++++ .../algorithms/impl/JPSPathfinder.kt | 417 ++++++++++++++++++ .../pathfinding/algorithms/impl/ThetaStar.kt | 229 ++++++++++ .../dungeonrooms/test/PathfindTest.kt | 84 ++++ .../quantizr/dungeonrooms/utils/BlockCache.kt | 47 ++ .../dungeonrooms/utils/WaypointUtils.kt | 48 ++ 18 files changed, 1487 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/BlockedChecker.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt diff --git a/build.gradle b/build.gradle index 358dac0..3ecd372 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,8 @@ dependencies { forge('net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9') implementation 'org.jetbrains:annotations-java5:23.0.0' + implementation 'org.joml:joml:1.10.5' + implementation 'com.github.ben-manes.caffeine:caffeine:2.9.3' modRuntimeOnly('me.djtheredstoner:DevAuth-forge-legacy:1.1.0') @@ -105,10 +107,13 @@ tasks.withType(Jar) { tasks.shadowJar { archiveFileName = jar.archiveFileName - + relocate 'org.joml', 'io.github.quantizr.org.joml' + relocate 'com.github.benmanes.caffeine', 'io.github.quantizr.com.github.benmanes.caffeine' dependencies { + include(dependency('org.joml:joml:..*')) include(dependency('cc.polyfrost:oneconfig-wrapper-launchwrapper:..*')) + include(dependency('com.github.ben-manes.caffeine:caffeine:..*')) } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt index 1ee1ecf..333b519 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -50,6 +50,21 @@ object DRMConfig : @Switch(name = "Disable When All Secrets Found", category = "Waypoints", subcategory = "Preferences") var disableWhenAllFound = true + @Switch(name = "Enable Pathfinding To Waypoints", subcategory = "Pathfinding", category = "Waypoints") + var pathfindingEnabled = true + + @Slider(name = "Pathfinding Refresh Rate (In Ticks)", min = 1f, max = 40f, category = "Waypoints", subcategory = "Pathfinding") + var pathfindingRefreshRate: Int = 20 + + @Dropdown( + description = "Select pathfinding algorithm", + name = "Pathfinding Algorithm", + options = ["THETA* (recommended)", "A* Diagonal", "A* Fine-Grid", "Jump Point Search"], + subcategory = "Pathfinding", + category = "Waypoints" + ) + var secretPathfindStrategy = 0 + @Info( text = "See waypoints when the key is pressed, useful for practice.", category = "Waypoints", diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 4eae58d..3585544 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -17,6 +17,7 @@ */ package io.github.quantizr.dungeonrooms +import com.google.common.util.concurrent.ThreadFactoryBuilder import com.google.gson.Gson import com.google.gson.JsonObject import io.github.quantizr.dungeonrooms.commands.RoomCommand @@ -28,6 +29,8 @@ import io.github.quantizr.dungeonrooms.gui.WaypointsGUI import io.github.quantizr.dungeonrooms.handlers.OpenLink.checkForLink import io.github.quantizr.dungeonrooms.handlers.PacketHandler import io.github.quantizr.dungeonrooms.handlers.TextRenderer.drawText +import io.github.quantizr.dungeonrooms.test.PathfindTest +import io.github.quantizr.dungeonrooms.utils.BlockCache import io.github.quantizr.dungeonrooms.utils.Utils import io.github.quantizr.dungeonrooms.utils.Utils.checkForCatacombs import io.github.quantizr.dungeonrooms.utils.Utils.checkForSkyblock @@ -51,28 +54,33 @@ import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion import org.apache.commons.io.IOUtils -import org.apache.logging.log4j.Level import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger import java.io.File import java.io.IOException import java.net.URL +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors @Mod(modid = DungeonRooms.MODID, version = DungeonRooms.VERSION) class DungeonRooms { val mc: Minecraft = Minecraft.getMinecraft() val motd: MutableList = ArrayList() var textToDisplay: List = emptyList() - + lateinit var ex: ExecutorService private var tickAmount = 1 @Mod.EventHandler fun preInit(event: FMLPreInitializationEvent) { ClientCommandHandler.instance.registerCommand(RoomCommand()) + ex = Executors.newCachedThreadPool( + ThreadFactoryBuilder().setNameFormat("Dg-AsyncPathFinder-%d").build() + ) + //initialize logger logger = LogManager.getLogger(instance::class.java) - if(debug) Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) +// if(debug) Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) } val roomDetection = RoomDetection() @@ -100,10 +108,13 @@ class DungeonRooms { //register classes MinecraftForge.EVENT_BUS.register(this) + MinecraftForge.EVENT_BUS.register(BlockCache) + MinecraftForge.EVENT_BUS.register(ChatTransmitter()) MinecraftForge.EVENT_BUS.register(dungeonManager) MinecraftForge.EVENT_BUS.register(roomDetection) MinecraftForge.EVENT_BUS.register(waypoints) + if(debug) MinecraftForge.EVENT_BUS.register(PathfindTest()) roomDataLoader.blockTillLoad() diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index bca7bfd..a156584 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -20,6 +20,7 @@ package io.github.quantizr.dungeonrooms.dungeons import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.events.PacketEvent.ReceiveEvent +import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import io.github.quantizr.dungeonrooms.utils.WaypointUtils @@ -39,7 +40,11 @@ import net.minecraftforge.fml.client.FMLClientHandler import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.InputEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import org.joml.Vector3d +import org.joml.Vector3i import java.awt.Color +import java.util.concurrent.Future class Waypoints { private var frustum = Frustum() @@ -50,12 +55,72 @@ class Waypoints { var allSecretsMap: MutableMap?> = HashMap() var secretsList: MutableList = ArrayList(BooleanArray(10).toList()) + private var tickCounter = 0 + private val pathfindFutures: MutableMap>> = HashMap() + private val donePathfindFutures: MutableMap> = HashMap() + + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + if (!DRMConfig.waypointsEnabled) return + if (!DRMConfig.pathfindingEnabled) return + if (DRMConfig.practiceModeOn && !DRMConfig.practiceModeKeyBind.isActive) return + if (DRMConfig.disableWhenAllFound && allFound) return + + + + updateFinishedFutures() + tickCounter++ + if (tickCounter % DRMConfig.pathfindingRefreshRate != 0) return + tickCounter = 0 + + val player = Minecraft.getMinecraft().thePlayer + + val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return + + secretList.stream() + // make sure the secret is not done / and only target the first secret in the chain + .filter { secret -> + val nmbr = getSecretNumber(secret.secretName) + nmbr in (1..secretCount) && secretsList[nmbr - 1] + } + .forEach { + val pos = getSecretPos(it.x, it.y, it.z) + val scrtLoc = Vector3i(pos.x, pos.y, pos.z) + val oldFuture = pathfindFutures[scrtLoc] + if(oldFuture == null || oldFuture.isDone) { + pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath(player, scrtLoc) + } + } + + + } + + + private fun updateFinishedFutures(){ + with(pathfindFutures.iterator()) { + forEach {(loc, ftr) -> + if(ftr.isDone){ + donePathfindFutures[loc] = ftr.get() + remove() + } + } + } + } + + @SubscribeEvent fun onWorldRender(event: RenderWorldLastEvent) { if (!DRMConfig.waypointsEnabled) return if (DRMConfig.practiceModeOn && !DRMConfig.practiceModeKeyBind.isActive) return if (DRMConfig.disableWhenAllFound && allFound) return + if(DRMConfig.pathfindingEnabled){ + donePathfindFutures.forEach { (_, points) -> + WaypointUtils.drawLinesVec3(points, Color(255, 0, 0, 255), 2.0f, event.partialTicks, true) + } + } + val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return val viewer = Minecraft.getMinecraft().renderViewEntity frustum.setPosition(viewer.posX, viewer.posY, viewer.posZ) @@ -297,7 +362,12 @@ class Waypoints { private fun getSecretNumber(secretName: String): Int { - return secretName.substring(0, 2).replace("\\D".toRegex(), "").toInt() + val substring = secretName.substring(0, 2).replace("\\D".toRegex(), "") + return try { + substring.toInt() + } catch (e: NumberFormatException) { + 0 + } } private var lastSneakTime: Long = 0 diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/BlockedChecker.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/BlockedChecker.kt new file mode 100644 index 0000000..252bab4 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/BlockedChecker.kt @@ -0,0 +1,5 @@ +package io.github.quantizr.dungeonrooms.pathfinding + +interface BlockedChecker { + fun isBlocked(x: Int, y: Int, z: Int): Boolean +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt new file mode 100644 index 0000000..73f3f69 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt @@ -0,0 +1,122 @@ +package io.github.quantizr.dungeonrooms.pathfinding + +import com.github.benmanes.caffeine.cache.Caffeine +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AlgBuilder +import io.github.quantizr.dungeonrooms.test.PathfindTest +import io.github.quantizr.dungeonrooms.utils.BlockCache +import net.minecraft.client.Minecraft +import net.minecraft.entity.Entity +import net.minecraft.init.Blocks +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.BlockPos +import org.joml.Vector3d +import org.joml.Vector3i +import java.time.Duration +import java.util.* +import java.util.concurrent.Future +import kotlin.math.floor + + +object CachedPathFinder { + + @Suppress("UnstableApiUsage") + private val cache = Caffeine.newBuilder() + .maximumSize(500) + .build { job: PfJob -> + val stat = AlgBuilder.buildPfStrategy(job.room) + val now = System.nanoTime() + stat.pathfind(job) + if (DungeonRooms.debug) { + PathfindTest.textToDisplay = listOf("Pathfinding took: ${(System.nanoTime() - now) / 1000000}ms") + } + return@build PfPath(stat.route) + } + + private val defaultAccessor: BlockedChecker = object : BlockedChecker { + val playerWidth = 0.3f + val preBuilt = Blocks.stone.getStateFromMeta(2) + + private val cache = Caffeine.newBuilder() + .maximumSize(500_000) + .expireAfterWrite(Duration.ofSeconds(6)) + .build { key: Vector3i -> + if(Minecraft.getMinecraft().theWorld == null) return@build null + val wX = key.x / 2.0f + val wY = key.y / 2.0f + val wZ = key.z / 2.0f + val bb = AxisAlignedBB.fromBounds( + (wX - playerWidth).toDouble(), + wY.toDouble(), + (wZ - playerWidth).toDouble(), + (wX + playerWidth).toDouble(), + (wY + 1.9f).toDouble(), + (wZ + playerWidth).toDouble() + ) + + val i = floor(bb.minX).toInt() + val j = floor(bb.maxX + 1.0).toInt() + val k = floor(bb.minY).toInt() + val l = floor(bb.maxY + 1.0).toInt() + val i1 = floor(bb.minZ).toInt() + val j1 = floor(bb.maxZ + 1.0).toInt() + val blockPos = BlockPos.MutableBlockPos() + val list = ArrayList() + for (k1 in i until j) { + for (l1 in i1 until j1) { + for (i2 in k - 1 until l) { + blockPos[k1, i2] = l1 + val blxState = BlockCache.getBlockState(blockPos)!! + if (blxState.block.material.blocksMovement()) { + if (!blxState.block.isFullCube || i2 != k - 1) { + if (blxState != preBuilt) { + if (blxState.block.isFullCube) { + return@build true + } + try { + blxState.block.addCollisionBoxesToList( + Minecraft.getMinecraft().theWorld, + blockPos, + blxState, + bb, + list, + null + ) + } catch (e: Exception) { + return@build true + } + if (list.isNotEmpty()) { + return@build true + } + } + } + } + } + } + } + return@build false + } + + override fun isBlocked(x: Int, y: Int, z: Int): Boolean { + return cache[Vector3i(x, y, z)]!! + } + + } + + + fun CreatePath( + entityIn: Entity, + targetPos: Vector3i, + room: BlockedChecker = defaultAccessor + ): Future> { + return DungeonRooms.instance.ex.submit> { + return@submit cache[PfJob( + Vector3i(entityIn.posX.toInt(), entityIn.posY.toInt(), entityIn.posZ.toInt()), + Vector3d(targetPos).add(.5, .5, .5), + room + )]!!.path + } + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt new file mode 100644 index 0000000..28b94c2 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt @@ -0,0 +1,6 @@ +package io.github.quantizr.dungeonrooms.pathfinding + +import org.joml.Vector3d +import org.joml.Vector3i + +data class PfJob(val from: Vector3i, val to: Vector3d, val room: BlockedChecker) \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt new file mode 100644 index 0000000..c44bfa1 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt @@ -0,0 +1,6 @@ +package io.github.quantizr.dungeonrooms.pathfinding + +import org.joml.Vector3d +import java.util.* + +data class PfPath(val path: LinkedList) \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt new file mode 100644 index 0000000..e10e6a6 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt @@ -0,0 +1,13 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms + +class AStarUtil { + class Node(val coordinate: Coordinate) { + var f = Float.MAX_VALUE + var g = Float.MAX_VALUE + var lastVisited = 0 + + var parent: Node? = null + } + + data class Coordinate(val x: Int = 0, val y: Int = 0, val z: Int = 0) +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt new file mode 100644 index 0000000..093d18d --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt @@ -0,0 +1,24 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms + +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarCornerCut +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarFineGrid +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.JPSPathfinder +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.ThetaStar + +object AlgBuilder { + fun buildPfStrategy(roomAcessor: BlockedChecker, mode: Int): IPathfinderAlgorithm { + return when (mode) { + 0 -> ThetaStar(roomAcessor) + 1 -> AStarCornerCut(roomAcessor) + 2 -> AStarFineGrid(roomAcessor) + 3 -> JPSPathfinder(roomAcessor) + else -> ThetaStar(roomAcessor) + } + } + + fun buildPfStrategy(roomAcessor: BlockedChecker): IPathfinderAlgorithm { + return buildPfStrategy(roomAcessor, DRMConfig.secretPathfindStrategy) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt new file mode 100644 index 0000000..ee15998 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt @@ -0,0 +1,17 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms + +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.PfJob +import org.joml.Vector3d +import org.joml.Vector3i +import java.util.* + + +abstract class IPathfinderAlgorithm(open val roomAccessor: BlockedChecker) { + var route = LinkedList() + + abstract fun pathfind(from: Vector3i, to:Vector3d, timeout: Float): Boolean + fun pathfind(job: PfJob): Boolean { + return pathfind(job.from, job.to, 2000f) + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt new file mode 100644 index 0000000..27ff3bb --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt @@ -0,0 +1,185 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl + +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Coordinate +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Node +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.MathHelper +import org.joml.Vector3d +import org.joml.Vector3i +import java.util.* + +class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(room) { + private var dx: Int = 0 + private var dy: Int = 0 + private var dz: Int = 0 + + + private lateinit var destinationBB: AxisAlignedBB + private val nodeMap: MutableMap = HashMap() + + + private val open = PriorityQueue( + Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.x ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.y ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.z ?: Int.MAX_VALUE } + ) + + + private var lastSx = 0 + private var lastSy = 0 + private var lastSz = 0 + + private var pfindIdx = 0 + + + private fun openNode(x: Int, y: Int, z: Int): Node { + val cord = Coordinate(x, y, z) + return nodeMap.getOrPut(cord) { + Node(cord) + } + } + + private fun distSq(x: Float, y: Float, z: Float): Float { + return MathHelper.sqrt_float(x * x + y * y + z * z) + } + + + override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { + dx = (to.x * 2).toInt() + dy = (to.y * 2).toInt() + dz = (to.z * 2).toInt() + destinationBB = AxisAlignedBB.fromBounds( + (dx - 2).toDouble(), + (dy - 2).toDouble(), + (dz - 2).toDouble(), + (dx + 2).toDouble(), + (dy + 2).toDouble(), + (dz + 2).toDouble() + ) + + pfindIdx++ + if (lastSx != (from.x * 2) + || lastSy != (from.y * 2) + || lastSz != (from.z * 2) + ) { + open.clear() + } + lastSx = (from.x * 2) + lastSy = (from.y * 2) + lastSz = (from.z * 2) + + val startNode = openNode(dx, dy, dz) + val goalNode = openNode(lastSx, lastSy, lastSz) + if (goalNode.parent != null) { + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast(Vector3d(curr.coordinate.x / 2.0, curr.coordinate.y / 2.0 + 0.1, curr.coordinate.z / 2.0)) + this.route = route + return true + } + startNode.g = 0f + startNode.f = 0f + goalNode.g = Int.MAX_VALUE.toFloat() + goalNode.f = Int.MAX_VALUE.toFloat() + open.add(startNode) + + val end = System.currentTimeMillis() + timeout + + while (!open.isEmpty()) { + if (System.currentTimeMillis() > end) { + return false + } + val n = open.poll() + if (n != null) { + if (n.lastVisited == pfindIdx) continue + n.lastVisited = pfindIdx + } + if (n === goalNode) { + // route = reconstructPath(startNode) + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + this.route = route + return true + } + for (z in -1..1) { + for (y in -1..1) { + for (x in -1..1) { + if (x == 0 && y == 0 && z == 0) continue + val neighbor = openNode( + n?.coordinate!!.x + x, n.coordinate.y + y, n.coordinate.z + z + ) + + // check blocked. + if (!(destinationBB.minX <= neighbor.coordinate.x && + neighbor.coordinate.x <= destinationBB.maxX && + destinationBB.minY <= neighbor.coordinate.y && + neighbor.coordinate.y <= destinationBB.maxY && + destinationBB.minZ <= neighbor.coordinate.z && + neighbor.coordinate.z <= destinationBB.maxZ // near destination + || !roomAccessor.isBlocked( + neighbor.coordinate.x, + neighbor.coordinate.y, + neighbor.coordinate.z + )) + ) { // not blocked + continue + } + if (neighbor.lastVisited == pfindIdx) continue + val gScore = + n.g.plus( + MathHelper.sqrt_float((x * x + y * y + z * z).toFloat()) + ) // altho it's sq, it should be fine + if (gScore < neighbor.g) { + neighbor.parent = n + neighbor.g = gScore + neighbor.f = gScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } else if (neighbor.lastVisited != pfindIdx) { + neighbor.f = gScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } + } + } + } + } + return true + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt new file mode 100644 index 0000000..1ec9b48 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt @@ -0,0 +1,178 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl + +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Node +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.EnumFacing +import net.minecraft.util.MathHelper +import org.joml.Vector3d +import org.joml.Vector3i +import java.util.* + +class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(room) { + var dx: Int = 0 + var dy: Int = 0 + var dz: Int = 0 + + + private lateinit var destinationBB: AxisAlignedBB + private val nodeMap: MutableMap = HashMap() + + private val open = PriorityQueue( + Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.x ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.y ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.z ?: Int.MAX_VALUE } + ) + + var lastSx = 0 + var lastSy = 0 + var lastSz = 0 + + + override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { + pfindIdx++ + + dx = (to.x * 2).toInt() + dy = (to.y * 2).toInt() + dz = (to.z * 2).toInt() + destinationBB = AxisAlignedBB.fromBounds( + (dx - 2).toDouble(), + (dy - 2).toDouble(), + (dz - 2).toDouble(), + (dx + 2).toDouble(), + (dy + 2).toDouble(), + (dz + 2).toDouble() + ) + + if (lastSx != from.x * 2 || lastSy != from.y * 2 + .toInt() || lastSz != from.z * 2 + ) open.clear() + lastSx = from.x * 2 + lastSy = from.y * 2 + lastSz = from.z * 2 + val startNode = openNode(dx, dy, dz) + val goalNode = openNode(lastSx, lastSy, lastSz) + startNode.g = 0f + startNode.f = 0f + goalNode.g = Int.MAX_VALUE.toFloat() + goalNode.f = Int.MAX_VALUE.toFloat() + if (goalNode.parent != null) { + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + this.route = route + return true + } + open.add(startNode) + val end = System.currentTimeMillis() + timeout + while (!open.isEmpty()) { + if (System.currentTimeMillis() > end) { + return false + } + val n = open.poll() + if (n != null) { + if (n.lastVisited == pfindIdx) continue + n.lastVisited = pfindIdx + if (n === goalNode) { + // route = reconstructPath(startNode) + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + this.route = route + return true + } + } + for (value in EnumFacing.VALUES) { + val neighbor = openNode( + n?.coordinate!!.x + value.frontOffsetX, + n.coordinate.y + value.frontOffsetY, + n.coordinate.z + value.frontOffsetZ + ) + + // check blocked. + if (!(destinationBB.minX <= neighbor.coordinate.x && neighbor.coordinate.x <= destinationBB.maxX && destinationBB.minY <= neighbor.coordinate.y && neighbor.coordinate.y <= destinationBB.maxY && destinationBB.minZ <= neighbor.coordinate.z && neighbor.coordinate.z <= destinationBB.maxZ // near destination + || !roomAccessor.isBlocked( + neighbor.coordinate.x, + neighbor.coordinate.y, + neighbor.coordinate.z + )) + ) { // not blocked + continue + } + val gScore = n.g + 1 // altho it's sq, it should be fine + if (gScore < neighbor.g) { + neighbor.parent = n + neighbor.g = gScore + neighbor.f = gScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } else if (neighbor.lastVisited != pfindIdx) { + neighbor.f = gScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } + } + } + return true + } + + private var pfindIdx = 0 + + + private fun openNode(x: Int, y: Int, z: Int): Node { + val coordinate = AStarUtil.Coordinate(x, y, z) + var node = nodeMap[coordinate] + if (node == null) { + node = Node(coordinate) + nodeMap[coordinate] = node + } + return node + } + + + private fun distSq(x: Float, y: Float, z: Float): Float { + return MathHelper.sqrt_float(x * x + y * y + z * z) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt new file mode 100644 index 0000000..64805fb --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt @@ -0,0 +1,417 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl + +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.EnumFacing +import net.minecraft.util.MathHelper +import org.joml.Vector3d +import org.joml.Vector3i +import java.util.* +import kotlin.math.abs + +class JPSPathfinder(room: BlockedChecker) : IPathfinderAlgorithm(room) { + private val nodeMap: HashMap = HashMap() + + + private val within = 1.5f + + private val open = PriorityQueue( + Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.x ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.y ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.z ?: Int.MAX_VALUE } + ) + + + private var destinationBB: AxisAlignedBB? = null + private var tx = 0 + private var ty = 0 + private var tz = 0 + private fun openNode(x: Int, y: Int, z: Int): Node { + val i = Node.makeHash(x, y, z) + var node = nodeMap[i] + if (node == null) { + node = Node(x, y, z) + nodeMap[i] = node + } + return node + } + + private fun addNode(parent: Node, jumpPt: Node, addToOpen: Boolean): Node { + val ng = parent.g + distSq( + (jumpPt.x - parent.x).toFloat(), + (jumpPt.y - parent.y).toFloat(), + (jumpPt.z - parent.z).toFloat() + ) + if (ng < jumpPt.g) { + if (addToOpen) { + open.remove(jumpPt) + } + jumpPt.g = ng + jumpPt.h = if (jumpPt.h == -1f) distSq( + (tx - jumpPt.x).toFloat(), + (ty - jumpPt.y).toFloat(), + (tz - jumpPt.z).toFloat() + ) else jumpPt.h + jumpPt.f = jumpPt.h + jumpPt.g + jumpPt.parent = parent + if (addToOpen) open.add(jumpPt) + } + return jumpPt + } + + private fun distSq(x: Float, y: Float, z: Float): Float { + return MathHelper.sqrt_float(x * x + y * y + z * z) + } + + fun getNeighbors(prevN: Node, n: Node): Set { + + val d = Vector3i( + MathHelper.clamp_int(n.x - prevN.x, -1, 1), + MathHelper.clamp_int(n.y - prevN.y, -1, 1), + MathHelper.clamp_int(n.z - prevN.z, -1, 1) + ) + val c = Vector3i(n.x, n.y, n.z) + val next = Vector3i(n.x + d.x, n.y + d.y, n.z + d.z) + + val nexts: MutableSet = HashSet() + when (abs(d.x) + abs(d.y) + abs(d.z)) { + 0 -> { + for (i in -1..1) for (j in -1..1) for (k in -1..1) { + if (i == 0 && j == 0 && k == 0) continue + nexts.add(openNode(c.x + i, c.y + j, c.z + k)) + } + } + + 1 -> { + nexts.add(openNode(next.x, next.y, next.z)) + for (i in -1..1) { + for (j in -1..1) { + if (i == 0 && j == 0) continue + if (d.x != 0 && roomAccessor.isBlocked(c.x, c.y + i, c.z + j)) nexts.add( + openNode( + next.x, + c.y + i, + c.z + j + ) + ) + if (d.y != 0 && roomAccessor.isBlocked(c.x + i, c.y, c.z + j)) nexts.add( + openNode( + c.x + i, + next.y, + c.z + j + ) + ) + if (d.z != 0 && roomAccessor.isBlocked(c.x + i, c.y + j, c.z)) nexts.add( + openNode( + c.x + i, + c.y + j, + next.z + ) + ) + } + } + } + + 2 -> { + if (d.z != 0) nexts.add(openNode(c.x, c.y, next.z)) + if (d.y != 0) nexts.add(openNode(c.x, next.y, c.z)) + if (d.x != 0) nexts.add(openNode(next.x, c.y, c.z)) + nexts.add(openNode(next.x, next.y, next.z)) + if (d.x == 0) { + if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { + nexts.add(openNode(c.x, next.y, c.z - d.z)) + if (roomAccessor.isBlocked(c.x + 1, c.y, c.z - d.z)) nexts.add( + openNode( + c.x + 1, + next.y, + c.z - d.z + ) + ) + if (roomAccessor.isBlocked(c.x - 1, c.y, c.z - d.z)) nexts.add( + openNode( + c.x - 1, + next.y, + c.z - d.z + ) + ) + } + if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { + nexts.add(openNode(c.x, c.y - d.y, next.z)) + if (roomAccessor.isBlocked(c.x + 1, c.y - d.y, c.z)) nexts.add( + openNode( + c.x + 1, + c.y - d.y, + next.z + ) + ) + if (roomAccessor.isBlocked(c.x - 1, c.y - d.y, c.z)) nexts.add( + openNode( + c.x + 1, + c.y - d.y, + next.z + ) + ) + } + } else if (d.y == 0) { + if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { + nexts.add(openNode(next.x, c.y, c.z - d.z)) + if (roomAccessor.isBlocked(c.x, c.y + 1, c.z - d.z)) nexts.add( + openNode( + next.x, + c.y + 1, + c.z - d.z + ) + ) + if (roomAccessor.isBlocked(c.x, c.y - 1, c.z - d.z)) nexts.add( + openNode( + next.x, + c.y - 1, + c.z - d.z + ) + ) + } + if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { + nexts.add(openNode(c.x - d.x, c.y, next.z)) + if (roomAccessor.isBlocked(c.x - d.x, c.y + 1, c.z)) nexts.add( + openNode( + c.x - d.x, + c.y + 1, + next.z + ) + ) + if (roomAccessor.isBlocked(c.x - d.x, c.y - 1, c.z)) nexts.add( + openNode( + c.x - d.x, + c.y - 1, + next.z + ) + ) + } + } else if (d.z == 0) { + if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { + nexts.add(openNode(next.x, c.y - d.y, c.z)) + if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z + 1)) nexts.add( + openNode( + next.x, + c.y - d.y, + c.z + 1 + ) + ) + if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z - 1)) nexts.add( + openNode( + next.x, + c.y - d.y, + c.z - 1 + ) + ) + } + if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { + nexts.add(openNode(c.x - d.x, next.y, c.z)) + if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z + 1)) nexts.add( + openNode( + c.x - d.x, + next.y, + c.z + 1 + ) + ) + if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z - 1)) nexts.add( + openNode( + c.x - d.x, + next.y, + c.z - 1 + ) + ) + } + } + } + + 3 -> { + nexts.add(openNode(c.x, c.y, next.z)) + nexts.add(openNode(c.x, next.y, c.z)) + nexts.add(openNode(next.x, c.y, c.z)) + nexts.add(openNode(next.x, c.y, next.z)) + nexts.add(openNode(c.x, next.y, next.z)) + nexts.add(openNode(next.x, next.y, c.z)) + nexts.add(openNode(next.x, next.y, next.z)) + if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { + nexts.add(openNode(c.x, next.y, c.z - d.z)) + nexts.add(openNode(next.x, next.y, c.z - d.z)) + nexts.add(openNode(next.x, c.y, c.z - d.z)) + } + if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { + nexts.add(openNode(c.x - d.x, next.y, next.z)) + nexts.add(openNode(c.x - d.x, next.y, c.z)) + nexts.add(openNode(c.x - d.x, c.y, next.z)) + } + if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { + nexts.add(openNode(c.x, c.y - d.y, next.z)) + nexts.add(openNode(next.x, c.y - d.y, c.z)) + nexts.add(openNode(next.x, c.y - d.y, next.z)) + } + } + } + return nexts + } + + fun expand(x: Int, y: Int, z: Int, dx: Int, dy: Int, dz: Int): Node? { + var x = x + var y = y + var z = z + while (true) { + val nx = x + dx + val ny = y + dy + val nz = z + dz + if (roomAccessor.isBlocked(nx, ny, nz)) return null + if (nx > destinationBB!!.minX && nx < destinationBB!!.maxX && ny > destinationBB!!.minY && ny < destinationBB!!.maxY && nz > destinationBB!!.minZ && nz < destinationBB!!.maxZ) return openNode( + nx, + ny, + nz + ) + val determinant = abs(dx) + abs(dy) + abs(dz) + if (determinant == 1) { + for (i in -1..1) { + for (j in -1..1) { + if (i == 0 && j == 0) continue + if (dx != 0 && roomAccessor.isBlocked(nx, ny + i, nz + j) && !roomAccessor.isBlocked( + nx + dx, + ny + i, + nz + j + ) + ) return openNode(nx, ny, nz) + if (dy != 0 && roomAccessor.isBlocked(nx + i, ny, nz + j) && !roomAccessor.isBlocked( + nx + i, + ny + dy, + nz + j + ) + ) return openNode(nx, ny, nz) + if (dz != 0 && roomAccessor.isBlocked(nx + i, ny + j, nz) && !roomAccessor.isBlocked( + nx + i, + ny + j, + nz + dz + ) + ) return openNode(nx, ny, nz) + } + } + } else if (determinant == 2) { + for (value in EnumFacing.VALUES) { + if (value.frontOffsetX == dx || value.frontOffsetY == dy || value.frontOffsetZ == dz) continue + val tx = nx + value.frontOffsetX + val ty = ny + value.frontOffsetY + val tz = nz + value.frontOffsetZ + if (roomAccessor.isBlocked(tx, ty, tz)) return openNode(nx, ny, nz) + } + if (dx != 0 && expand(nx, ny, nz, dx, 0, 0) != null) return openNode(nx, ny, nz) + if (dy != 0 && expand(nx, ny, nz, 0, dy, 0) != null) return openNode(nx, ny, nz) + if (dz != 0 && expand(nx, ny, nz, 0, 0, dz) != null) return openNode(nx, ny, nz) + } else if (determinant == 3) { + if (roomAccessor.isBlocked(x, ny, nz) || roomAccessor.isBlocked(nx, y, nz) || roomAccessor.isBlocked( + nx, + ny, + z + ) + ) return openNode(nx, ny, nz) + if (expand(nx, ny, nz, dx, 0, 0) != null || expand(nx, ny, nz, dx, dy, 0) != null || expand( + nx, + ny, + nz, + dx, + 0, + dz + ) != null || expand(nx, ny, nz, 0, dy, 0) != null || expand( + nx, + ny, + nz, + 0, + dy, + dz + ) != null || expand(nx, ny, nz, 0, 0, dz) != null + ) return openNode(nx, ny, nz) + } + x = nx + y = ny + z = nz + } + } + + class Node(val x: Int, val y: Int, val z: Int) { + var f = 0f + var g = Float.MAX_VALUE + var h = -1f + var closed = false + + var parent: Node? = null + fun close(): Node { + closed = true + return this + } + + companion object { + fun makeHash(x: Int, y: Int, z: Int): Int { + return y and 255 or (x and 32767 shl 8) or (z and 32767 shl 24) or (if (x < 0) Int.MIN_VALUE else 0) or if (z < 0) 32768 else 0 + } + } + } + + override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { + route.clear() + nodeMap.clear() + var from = Vector3d((from.x * 2) / 2.0, (from.y * 2) / 2.0, (from.z * 2) / 2.0) + var to = Vector3d((to.x * 2).toInt() / 2.0, (to.y * 2).toInt() / 2.0, (to.z * 2).toInt() / 2.0) + + tx = (to.x * 2).toInt() + ty = (to.y * 2).toInt() + tz = (to.z * 2).toInt() + destinationBB = AxisAlignedBB.fromBounds( + (to.x - within) * 2, + (to.y - within) * 2, + (to.z - within) * 2, + (to.x + within) * 2, + (to.y + within) * 2, + (to.z + within) * 2 + ) + open.clear() + var start: Node + open.add( + openNode( + from.x.toInt() * 2 + 1, + from.y.toInt() * 2, + from.z.toInt() * 2 + 1 + ).also { start = it }) + start.g = 0f + start.f = 0f + start.h = from.distanceSquared(to).toFloat() + var end: Node? = null + var minDist = Float.MAX_VALUE + val forceEnd = System.currentTimeMillis() + timeout + 999999999L + while (!open.isEmpty()) { + if (forceEnd < System.currentTimeMillis() && timeout != -1F) break + val n = open.poll() + if (n != null) { + n.closed = true + if (minDist > n.h) { + minDist = n.h + end = n + } + if (n.x > destinationBB!!.minX && n.x < destinationBB!!.maxX && n.y > destinationBB!!.minY && n.y < destinationBB!!.maxY && n.z > destinationBB!!.minZ && n.z < destinationBB!!.maxZ) { + break + } + } + for (neighbor in getNeighbors(n!!.parent ?: n, n)) { + val jumpPT = expand(n.x, n.y, n.z, neighbor.x - n.x, neighbor.y - n.y, neighbor.z - n.z) + if (jumpPT == null || jumpPT.closed) continue + addNode(n, jumpPT, true) + } + } + if (end == null) { + return false + } + var p = end + while (p != null) { + route.addLast(Vector3d((p.x / 2.0f).toDouble(), p.y / 2.0f + 0.1, (p.z / 2.0f).toDouble())) + p = p.parent + } + return true + } +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt new file mode 100644 index 0000000..360d181 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt @@ -0,0 +1,229 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl + +import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Node +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.EnumFacing +import net.minecraft.util.MathHelper +import org.joml.Vector3d +import org.joml.Vector3i +import java.util.* +import kotlin.math.ceil +import kotlin.math.roundToInt + +class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { + private var dx: Int = 0 + private var dy: Int = 0 + private var dz: Int = 0 + + + private lateinit var destinationBB: AxisAlignedBB + private val nodeMap: MutableMap = HashMap() + + private val open = PriorityQueue( + Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.x ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.y ?: Int.MAX_VALUE } + .thenComparing { _, a: Node? -> a?.coordinate?.z ?: Int.MAX_VALUE } + ) + + private var lastSx = 0 + private var lastSy = 0 + private var lastSz = 0 + + + private var pfindIdx = 0 + + + private fun openNode(x: Int, y: Int, z: Int): Node { + val coordinate = AStarUtil.Coordinate(x, y, z) + return nodeMap.computeIfAbsent(coordinate) { Node(coordinate) } + } + + override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { + pfindIdx++ + + dx = (to.x * 2).toInt() + dy = (to.y * 2).toInt() + dz = (to.z * 2).toInt() + destinationBB = AxisAlignedBB.fromBounds( + (dx - 2).toDouble(), + (dy - 2).toDouble(), + (dz - 2).toDouble(), + (dx + 2).toDouble(), + (dy + 2).toDouble(), + (dz + 2).toDouble() + ) + + if (lastSx != (from.x * 2) || lastSy != (from.y * 2) || lastSz != (from.z * 2)) { + open.clear() + } + lastSx = (from.x * 2) + lastSy = (from.y * 2) + lastSz = (from.z * 2) + if (roomAccessor.isBlocked(lastSx, lastSy, lastSz)) return false + val startNode = openNode(dx, dy, dz) + val goalNode = openNode(lastSx, lastSy, lastSz) + startNode.g = 0f + startNode.f = 0f + goalNode.g = Int.MAX_VALUE.toFloat() + goalNode.f = Int.MAX_VALUE.toFloat() + if (goalNode.parent != null) { + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast(Vector3d(curr.coordinate.x / 2.0, curr.coordinate.y / 2.0 + 0.1, curr.coordinate.z / 2.0)) + this.route = route + return true + } + open.add(startNode) + val end = System.currentTimeMillis() + timeout + while (!open.isEmpty()) { + if (System.currentTimeMillis() > end) { + return false + } + val n = open.poll() + + + if (n != null) { + if (n.lastVisited == pfindIdx) { + continue + } + n.lastVisited = pfindIdx + } + + if (n === goalNode) { + // route = reconstructPath(startNode) + val route = LinkedList() + var curr: Node? = goalNode + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + this.route = route + return true + } + for (value in EnumFacing.VALUES) { + val neighbor = openNode( + n?.coordinate!!.x + value.frontOffsetX, + n.coordinate.y + value.frontOffsetY, + n.coordinate.z + value.frontOffsetZ + ) + + // check blocked. + if (!(destinationBB.minX <= neighbor.coordinate.x && neighbor.coordinate.x <= destinationBB.maxX && destinationBB.minY <= neighbor.coordinate.y && neighbor.coordinate.y <= destinationBB.maxY && destinationBB.minZ <= neighbor.coordinate.z && neighbor.coordinate.z <= destinationBB.maxZ // near destination + || !roomAccessor.isBlocked( + neighbor.coordinate.x, + neighbor.coordinate.y, + neighbor.coordinate.z + )) + ) { // not blocked + continue + } + if (neighbor.lastVisited == pfindIdx) continue + var flag = false + if (n.parent != null) { + val tempGScore = n.parent!!.g + distSq( + (n.parent!!.coordinate.x - neighbor.coordinate.x).toFloat(), + (n.parent!!.coordinate.y - neighbor.coordinate.y).toFloat(), + (n.parent!!.coordinate.z - neighbor.coordinate.z).toFloat() + ) + if (tempGScore < neighbor.g && lineofsight(n.parent, neighbor)) { + neighbor.parent = n.parent + neighbor.g = tempGScore + neighbor.f = tempGScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + flag = true + } + } + if (!flag) { + val gScore = n.g + 1 + if (gScore < neighbor.g) { + neighbor.parent = n + neighbor.g = gScore + neighbor.f = gScore + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } else if (neighbor.lastVisited != pfindIdx) { + neighbor.f = neighbor.g + distSq( + (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), + (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), + (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) + open.add(neighbor) + } + } + } + } + return true + } + + private fun lineofsight(a: Node?, b: Node?): Boolean { + if (a == null || b == null) return false + var sx = a.coordinate.x.toFloat() + var sy = a.coordinate.y.toFloat() + var sz = a.coordinate.z.toFloat() + val ex = b.coordinate.x + val ey = b.coordinate.y + val ez = b.coordinate.z + var dxx = ex - sx + var dyy = ey - sy + var dzz = ez - sz + val len = distSq(dxx, dyy, dzz) + dxx /= len + dyy /= len + dzz /= len + var d = 0 + while (d <= len) { + val round = sx.roundToInt() + val ceil = ceil(sy.toDouble()) + val round1 = sz.roundToInt() + if (roomAccessor.isBlocked(round, ceil.toInt(), round1)) return false + if (roomAccessor.isBlocked(round + 1, ceil.toInt(), round1 + 1)) return false + if (roomAccessor.isBlocked(round - 1, ceil.toInt(), round1 - 1)) return false + if (roomAccessor.isBlocked(round + 1, ceil.toInt(), round1 - 1)) return false + if (roomAccessor.isBlocked(round - 1, ceil.toInt(), round1 + 1)) return false + sx += dxx + sy += dyy + sz += dzz + d += 1 + } + return true + } + + private fun distSq(x: Float, y: Float, z: Float): Float { + return MathHelper.sqrt_float(x * x + y * y + z * z) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt new file mode 100644 index 0000000..32095db --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt @@ -0,0 +1,84 @@ +package io.github.quantizr.dungeonrooms.test + +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.handlers.TextRenderer +import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder +import io.github.quantizr.dungeonrooms.utils.WaypointUtils +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.ScaledResolution +import net.minecraftforge.client.event.RenderGameOverlayEvent +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import org.joml.Vector3d +import org.joml.Vector3i +import java.awt.Color +import java.util.concurrent.Future + + +class PathfindTest { + companion object { + var textToDisplay: List = emptyList() + } + + private val pathfindFutures: MutableMap>> = HashMap() + private val donePathfindFutures: MutableMap> = HashMap() + + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (event.phase != TickEvent.Phase.START || Minecraft.getMinecraft().thePlayer == null) return + if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return + updateFinishedFutures() + + val scrtLoc = Vector3i(10, 6, 10) + val oldFuture = pathfindFutures[scrtLoc] + if (oldFuture == null || oldFuture.isDone) { + pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath( + Minecraft.getMinecraft().thePlayer, + scrtLoc + ) + } + } + + private fun updateFinishedFutures(){ + with(pathfindFutures.iterator()) { + forEach {(loc, ftr) -> + if(ftr.isDone){ + donePathfindFutures[loc] = ftr.get() + remove() + } + } + } + } + + @SubscribeEvent + fun onWorldRender(event: RenderWorldLastEvent) { + if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return + donePathfindFutures.forEach { (_, points) -> + WaypointUtils.drawLinesVec3(points, Color(255, 0, 0, 255), 2.0f, event.partialTicks, true) + } + } + + + @SubscribeEvent + fun renderPlayerInfo(event: RenderGameOverlayEvent.Post) { + if (event.type != RenderGameOverlayEvent.ElementType.ALL) return + if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return + val mc = Minecraft.getMinecraft() + if (textToDisplay.isNotEmpty()) { + val scaledResolution = ScaledResolution(mc) + var y = 0 + for (line in textToDisplay) { + val roomStringWidth = mc.fontRendererObj.getStringWidth(line) + TextRenderer.drawText( + mc, line, scaledResolution.scaledWidth * DRMConfig.textLocX / 100 - roomStringWidth / 2, + scaledResolution.scaledHeight * DRMConfig.textLocY / 100 + y, 1.0, true + ) + y += mc.fontRendererObj.FONT_HEIGHT + } + } + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt new file mode 100644 index 0000000..474de54 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt @@ -0,0 +1,47 @@ +package io.github.quantizr.dungeonrooms.utils + +import com.github.benmanes.caffeine.cache.Caffeine +import net.minecraft.block.Block +import net.minecraft.block.state.IBlockState +import net.minecraft.client.Minecraft +import net.minecraft.util.BlockPos +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.joml.Vector3d +import org.joml.Vector3i +import java.time.Duration + +object BlockCache { + private val cache = Caffeine.newBuilder() + .maximumSize(30_000) + .expireAfterWrite(Duration.ofMinutes(1)) + .build { key: BlockPos? -> + Minecraft.getMinecraft().theWorld.getBlockState(key) + } + + @SubscribeEvent + fun onWorldLoad(e: WorldEvent.Load?) { + cache.invalidateAll() + } + + fun getBlockState(pos: Vector3d): IBlockState? { + return cache[BlockPos(pos.x, pos.y, pos.z)] + } + + fun getBlockState(pos: BlockPos): IBlockState? { + return cache[pos] + } + + fun getBlockState(pos: Vector3i): IBlockState? { + return cache[BlockPos(pos.x, pos.y, pos.z)] + } + + fun getBlock(pos: Vector3i): Block { + return cache[BlockPos(pos.x, pos.y, pos.z)]!!.block + } + + fun getBlock(pos: BlockPos): Block { + return cache[pos]!!.block + } + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt index 3c498bc..f429898 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt @@ -22,6 +22,7 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.Tessellator import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.util.* +import org.joml.Vector3d import org.lwjgl.opengl.GL11 import java.awt.Color import kotlin.math.cos @@ -261,4 +262,51 @@ object WaypointUtils { GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f) GlStateManager.popMatrix() } + + + fun drawLinesVec3(poses: List, colour: Color, thickness: Float, partialTicks: Float, depth: Boolean) { + val render = Minecraft.getMinecraft().renderViewEntity + val worldRenderer = Tessellator.getInstance().worldRenderer + val realX = render.lastTickPosX + (render.posX - render.lastTickPosX) * partialTicks + val realY = render.lastTickPosY + (render.posY - render.lastTickPosY) * partialTicks + val realZ = render.lastTickPosZ + (render.posZ - render.lastTickPosZ) * partialTicks + GlStateManager.pushMatrix() + GlStateManager.translate(-realX, -realY, -realZ) + GlStateManager.disableTexture2D() + GlStateManager.disableLighting() + GL11.glDisable(GL11.GL_TEXTURE_2D) + GlStateManager.enableBlend() + GlStateManager.disableAlpha() + GL11.glLineWidth(thickness) + if (!depth) { + GlStateManager.disableDepth() + GlStateManager.depthMask(false) + } + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) + + GlStateManager.color(1f, 1f, 1f, 1f) + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR) + for (pos in poses) { + val i: Int = colour.rgb + worldRenderer.pos(pos.x, pos.y, pos.z).color( + (i shr 16 and 0xFF) / 255.0f, + (i shr 8 and 0xFF) / 255.0f, + (i and 0xFF) / 255.0f, + (i shr 24 and 0xFF) / 255.0f + ).endVertex() + } + Tessellator.getInstance().draw() + GlStateManager.translate(realX, realY, realZ) + GlStateManager.disableBlend() + GlStateManager.enableAlpha() + GlStateManager.enableTexture2D() + if (!depth) { + GlStateManager.enableDepth() + GlStateManager.depthMask(true) + } + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f) + GlStateManager.popMatrix() + GL11.glLineWidth(1f) + } + } \ No newline at end of file From 91f9bb52604d8967eb7634834d56f97f4b584c50 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:33:27 +0100 Subject: [PATCH 13/22] improve pathfind preformance by 400%, add changing colors to pathfind lines, general improvements --- .../quantizr/dungeonrooms/DungeonRooms.kt | 2 +- .../dungeonrooms/dungeons/RoomDetection.kt | 5 +- .../dungeonrooms/dungeons/Waypoints.kt | 62 +++++++++++++------ .../quantizr/dungeonrooms/gui/WaypointsGUI.kt | 19 +++--- .../pathfinding/CachedPathFinder.kt | 23 +++---- .../dungeonrooms/pathfinding/PfJob.kt | 2 +- .../dungeonrooms/pathfinding/PfPath.kt | 2 +- .../pathfinding/algorithms/AStarUtil.kt | 6 +- .../pathfinding/algorithms/AlgBuilder.kt | 24 ------- .../algorithms/CachedAlgBuilder.kt | 34 ++++++++++ .../algorithms/IPathfinderAlgorithm.kt | 5 +- .../algorithms/impl/AStarCornerCut.kt | 25 ++++---- .../algorithms/impl/AStarFineGrid.kt | 12 ++-- .../pathfinding/algorithms/impl/ThetaStar.kt | 50 +++++++-------- .../dungeonrooms/test/PathfindTest.kt | 14 ++++- .../quantizr/dungeonrooms/utils/BlockCache.kt | 5 +- .../dungeonrooms/utils/WaypointUtils.kt | 38 +++++++++--- 17 files changed, 195 insertions(+), 133 deletions(-) delete mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt create mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 3585544..20c5c86 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -251,7 +251,7 @@ class DungeonRooms { @JvmStatic lateinit var instance: DungeonRooms private set - const val debug = false + const val debug = true const val MODID = "@ID@" const val VERSION = "@VER@" diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 035277a..4ee26bc 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -568,6 +568,9 @@ class RoomDetection { incompleteScan = 0 redoScan = 0 DungeonRooms.instance.waypoints.secretCount = 0 + DungeonRooms.instance.waypoints.pathfindFutures.clear() + DungeonRooms.instance.waypoints.donePathfindFutures.clear() + } private fun newRoom() { @@ -583,7 +586,7 @@ class RoomDetection { } DungeonRooms.instance.waypoints.allSecretsMap[roomName]?.let { - DungeonRooms.instance.waypoints.secretsList = it.toMutableList() + DungeonRooms.instance.waypoints.secretCompletionList = it.toMutableList() } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index a156584..ba2a674 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -21,6 +21,7 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.events.PacketEvent.ReceiveEvent import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder +import io.github.quantizr.dungeonrooms.pathfinding.PfPath import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import io.github.quantizr.dungeonrooms.utils.WaypointUtils @@ -41,7 +42,6 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.InputEvent import net.minecraftforge.fml.common.gameevent.TickEvent -import org.joml.Vector3d import org.joml.Vector3i import java.awt.Color import java.util.concurrent.Future @@ -53,11 +53,18 @@ class Waypoints { var allFound = false var secretCount = 0 var allSecretsMap: MutableMap?> = HashMap() - var secretsList: MutableList = ArrayList(BooleanArray(10).toList()) + var secretCompletionList: MutableList = ArrayList(BooleanArray(10).toList()) private var tickCounter = 0 - private val pathfindFutures: MutableMap>> = HashMap() - private val donePathfindFutures: MutableMap> = HashMap() + + // secret loc <-> pfjob + // currently executing pathfind jobs that are saved here + val pathfindFutures: MutableMap> = HashMap() + + // user loc <-> pfjob + // this is used as a "last result cache", + // since new the player is moving and we want to save the last result + val donePathfindFutures: MutableMap = HashMap() @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { @@ -67,8 +74,6 @@ class Waypoints { if (DRMConfig.practiceModeOn && !DRMConfig.practiceModeKeyBind.isActive) return if (DRMConfig.disableWhenAllFound && allFound) return - - updateFinishedFutures() tickCounter++ if (tickCounter % DRMConfig.pathfindingRefreshRate != 0) return @@ -79,17 +84,18 @@ class Waypoints { val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return secretList.stream() + .filter { it.category == "chest" || it.category == "wither" || it.category == "item" || it.category == "bat" } // make sure the secret is not done / and only target the first secret in the chain .filter { secret -> val nmbr = getSecretNumber(secret.secretName) - nmbr in (1..secretCount) && secretsList[nmbr - 1] + nmbr in (1..secretCount) && secretCompletionList[nmbr - 1] } .forEach { val pos = getSecretPos(it.x, it.y, it.z) val scrtLoc = Vector3i(pos.x, pos.y, pos.z) val oldFuture = pathfindFutures[scrtLoc] if(oldFuture == null || oldFuture.isDone) { - pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath(player, scrtLoc) + pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath(player, scrtLoc, id=it.secretName) } } @@ -98,6 +104,7 @@ class Waypoints { private fun updateFinishedFutures(){ + // cache competed pathfind jobs to the donePathfindFutures map with(pathfindFutures.iterator()) { forEach {(loc, ftr) -> if(ftr.isDone){ @@ -106,6 +113,25 @@ class Waypoints { } } } + + // remove cached pathfind jobs that are leading to done secrets + val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return + secretList.stream() + .filter { secret -> + val nmbr = getSecretNumber(secret.secretName) + nmbr in (1..secretCount) && !secretCompletionList[nmbr - 1] + } + + // for each completed secret + .forEach { + // remove competed secrets from display + + donePathfindFutures + .filter { (_, job) -> job.id == it.secretName } + .forEach { (loc, _) -> donePathfindFutures.remove(loc) } + + } + } @@ -117,7 +143,7 @@ class Waypoints { if(DRMConfig.pathfindingEnabled){ donePathfindFutures.forEach { (_, points) -> - WaypointUtils.drawLinesVec3(points, Color(255, 0, 0, 255), 2.0f, event.partialTicks, true) + WaypointUtils.drawLinesVec3(points.path, Color(255, 0, 0, 255), Color(0, 255, 0, 255), 2.0f, event.partialTicks, true) } } @@ -132,7 +158,7 @@ class Waypoints { // make sure the secret is not done .filter { secret -> val nmbr = getSecretNumber(secret.secretName) - nmbr in (1..secretCount) && secretsList[nmbr - 1] + nmbr in (1..secretCount) && secretCompletionList[nmbr - 1] } // make sure we are looking at it @@ -278,8 +304,8 @@ class Waypoints { .filter { getSecretNumber(it.secretName) in (1..secretCount) } .forEach { val nmbr = getSecretNumber(it.secretName) - secretsList[nmbr - 1] = false - allSecretsMap.replace(roomId, secretsList) + secretCompletionList[nmbr - 1] = false + allSecretsMap.replace(roomId, secretCompletionList) DungeonRooms.logger.info("DungeonRooms: Detected ${it.category} click, turning off waypoint for secret #$nmbr") } } @@ -333,13 +359,13 @@ class Waypoints { // check if secret is already found .filter { (_, nmbr) -> - secretsList[nmbr - 1] + secretCompletionList[nmbr - 1] } // finish the secret .forEach { (secret, nmbr) -> - secretsList[nmbr - 1] = false - allSecretsMap.replace(roomId, secretsList) + secretCompletionList[nmbr - 1] = false + allSecretsMap.replace(roomId, secretCompletionList) DungeonRooms.logger.info( "DungeonRooms: ${entity.commandSenderEntity.name} picked up ${ StringUtils.stripControlCodes( @@ -403,13 +429,13 @@ class Waypoints { // check if secret is already found .filter { (_, nmbr) -> - secretsList[nmbr - 1] + secretCompletionList[nmbr - 1] } // finish the secret .forEach { (secret, nmbr) -> - secretsList[nmbr - 1] = false - allSecretsMap.replace(roomId, secretsList) + secretCompletionList[nmbr - 1] = false + allSecretsMap.replace(roomId, secretCompletionList) DungeonRooms.logger.info("DungeonRooms: Player sneaked near ${secret.category} secret, turning off waypoint for secret #$nmbr") return@forEach } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt index 8a1a0dc..d533f06 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/gui/WaypointsGUI.kt @@ -19,7 +19,6 @@ package io.github.quantizr.dungeonrooms.gui import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms -import io.github.quantizr.dungeonrooms.dungeons.Waypoints import io.github.quantizr.dungeonrooms.handlers.TextRenderer import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.client.Minecraft @@ -137,7 +136,7 @@ class WaypointsGUI : GuiScreen() { val adjustPos = -40 * DungeonRooms.instance.waypoints.secretCount - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( - DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) @@ -147,7 +146,7 @@ class WaypointsGUI : GuiScreen() { val adjustPos = -40 * ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2).toInt() - 70 + 80 * i secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 170, 60, 20, "$i: " + getOnOff( - DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) @@ -157,7 +156,7 @@ class WaypointsGUI : GuiScreen() { .toInt()) - 70 + 80 * (i - ceil(DungeonRooms.instance.waypoints.secretCount.toDouble() / 2).toInt()) secretButtonList[i - 1] = GuiButton( 10 + i, width / 2 + adjustPos, height / 6 + 200, 60, 20, "$i: " + getOnOff( - DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] ) ) buttonList.add(secretButtonList[i - 1]) @@ -275,12 +274,12 @@ class WaypointsGUI : GuiScreen() { if (DungeonRooms.instance.waypoints.secretCount > 0) { for (i in 1..DungeonRooms.instance.waypoints.secretCount) { if (button === secretButtonList[i - 1]) { - DungeonRooms.instance.waypoints.secretsList!![i - 1] = !DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] = !DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { - DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretsList) + DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretCompletionList) } secretButtonList[i - 1].displayString = "$i: " + getOnOff( - DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] ) break } @@ -300,12 +299,12 @@ class WaypointsGUI : GuiScreen() { if (DungeonRooms.instance.waypoints.secretCount > 0) { for (i in 1..DungeonRooms.instance.waypoints.secretCount) { if (keyCode - 1 == i) { - DungeonRooms.instance.waypoints.secretsList!![i - 1] = !DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] = !DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] if (DungeonRooms.instance.roomDetection.roomName != "undefined") { - DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretsList) + DungeonRooms.instance.waypoints.allSecretsMap.replace(DungeonRooms.instance.roomDetection.roomName, DungeonRooms.instance.waypoints.secretCompletionList) } secretButtonList[i - 1].displayString = "$i: " + getOnOff( - DungeonRooms.instance.waypoints.secretsList!![i - 1] + DungeonRooms.instance.waypoints.secretCompletionList!![i - 1] ) break } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt index 73f3f69..a3d5c2e 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt @@ -2,7 +2,7 @@ package io.github.quantizr.dungeonrooms.pathfinding import com.github.benmanes.caffeine.cache.Caffeine import io.github.quantizr.dungeonrooms.DungeonRooms -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AlgBuilder +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.CachedAlgBuilder import io.github.quantizr.dungeonrooms.test.PathfindTest import io.github.quantizr.dungeonrooms.utils.BlockCache import net.minecraft.client.Minecraft @@ -20,20 +20,19 @@ import kotlin.math.floor object CachedPathFinder { - @Suppress("UnstableApiUsage") private val cache = Caffeine.newBuilder() .maximumSize(500) .build { job: PfJob -> - val stat = AlgBuilder.buildPfStrategy(job.room) + val stat = CachedAlgBuilder.buildPfStrategy(job.to) val now = System.nanoTime() stat.pathfind(job) if (DungeonRooms.debug) { PathfindTest.textToDisplay = listOf("Pathfinding took: ${(System.nanoTime() - now) / 1000000}ms") } - return@build PfPath(stat.route) + return@build PfPath(job.id, stat.route) } - private val defaultAccessor: BlockedChecker = object : BlockedChecker { + val defaultAccessor: BlockedChecker = object : BlockedChecker { val playerWidth = 0.3f val preBuilt = Blocks.stone.getStateFromMeta(2) @@ -66,7 +65,7 @@ object CachedPathFinder { for (l1 in i1 until j1) { for (i2 in k - 1 until l) { blockPos[k1, i2] = l1 - val blxState = BlockCache.getBlockState(blockPos)!! + val blxState = BlockCache.getBlockState(blockPos, true)!! if (blxState.block.material.blocksMovement()) { if (!blxState.block.isFullCube || i2 != k - 1) { if (blxState != preBuilt) { @@ -107,14 +106,16 @@ object CachedPathFinder { fun CreatePath( entityIn: Entity, targetPos: Vector3i, - room: BlockedChecker = defaultAccessor - ): Future> { - return DungeonRooms.instance.ex.submit> { + room: BlockedChecker = defaultAccessor, + id: String = UUID.randomUUID().toString() + ): Future { + return DungeonRooms.instance.ex.submit { return@submit cache[PfJob( Vector3i(entityIn.posX.toInt(), entityIn.posY.toInt(), entityIn.posZ.toInt()), Vector3d(targetPos).add(.5, .5, .5), - room - )]!!.path + room, + id + )]!! } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt index 28b94c2..0164b39 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfJob.kt @@ -3,4 +3,4 @@ package io.github.quantizr.dungeonrooms.pathfinding import org.joml.Vector3d import org.joml.Vector3i -data class PfJob(val from: Vector3i, val to: Vector3d, val room: BlockedChecker) \ No newline at end of file +data class PfJob(val from: Vector3i, val to: Vector3d, val room: BlockedChecker, val id: String) \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt index c44bfa1..941ca56 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/PfPath.kt @@ -3,4 +3,4 @@ package io.github.quantizr.dungeonrooms.pathfinding import org.joml.Vector3d import java.util.* -data class PfPath(val path: LinkedList) \ No newline at end of file +data class PfPath(val id: String, val path: LinkedList) \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt index e10e6a6..6980385 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt @@ -1,13 +1,13 @@ package io.github.quantizr.dungeonrooms.pathfinding.algorithms +import org.joml.Vector3i + class AStarUtil { - class Node(val coordinate: Coordinate) { + class Node(val coordinate: Vector3i) { var f = Float.MAX_VALUE var g = Float.MAX_VALUE var lastVisited = 0 var parent: Node? = null } - - data class Coordinate(val x: Int = 0, val y: Int = 0, val z: Int = 0) } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt deleted file mode 100644 index 093d18d..0000000 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AlgBuilder.kt +++ /dev/null @@ -1,24 +0,0 @@ -package io.github.quantizr.dungeonrooms.pathfinding.algorithms - -import io.github.quantizr.dungeonrooms.DRMConfig -import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarCornerCut -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarFineGrid -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.JPSPathfinder -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.ThetaStar - -object AlgBuilder { - fun buildPfStrategy(roomAcessor: BlockedChecker, mode: Int): IPathfinderAlgorithm { - return when (mode) { - 0 -> ThetaStar(roomAcessor) - 1 -> AStarCornerCut(roomAcessor) - 2 -> AStarFineGrid(roomAcessor) - 3 -> JPSPathfinder(roomAcessor) - else -> ThetaStar(roomAcessor) - } - } - - fun buildPfStrategy(roomAcessor: BlockedChecker): IPathfinderAlgorithm { - return buildPfStrategy(roomAcessor, DRMConfig.secretPathfindStrategy) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt new file mode 100644 index 0000000..22291c9 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt @@ -0,0 +1,34 @@ +package io.github.quantizr.dungeonrooms.pathfinding.algorithms + +import com.github.benmanes.caffeine.cache.Caffeine +import io.github.quantizr.dungeonrooms.DRMConfig +import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder.defaultAccessor +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarCornerCut +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarFineGrid +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.JPSPathfinder +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.ThetaStar +import org.joml.Vector3d +import java.time.Duration + +object CachedAlgBuilder { + // since we pathfind to the same destination and the world does not change, + // we can cache open nodes in the A* fatality of algorithms + private val cache = Caffeine.newBuilder() + .maximumSize(20) + .expireAfterWrite(Duration.ofMinutes(2)) + .build { _: Vector3d -> + return@build when (DRMConfig.secretPathfindStrategy) { + 0 -> ThetaStar(defaultAccessor) + 1 -> AStarCornerCut(defaultAccessor) + 2 -> AStarFineGrid(defaultAccessor) + 3 -> JPSPathfinder(defaultAccessor) + else -> ThetaStar(defaultAccessor) + } + } + + fun buildPfStrategy(cacheDestenation: Vector3d): IPathfinderAlgorithm { + return cache.get(cacheDestenation)!! + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt index ee15998..882667a 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/IPathfinderAlgorithm.kt @@ -9,9 +9,10 @@ import java.util.* abstract class IPathfinderAlgorithm(open val roomAccessor: BlockedChecker) { var route = LinkedList() + protected set - abstract fun pathfind(from: Vector3i, to:Vector3d, timeout: Float): Boolean + abstract fun pathfind(from: Vector3i, to:Vector3d, timeout: Float = 2000f): Boolean fun pathfind(job: PfJob): Boolean { - return pathfind(job.from, job.to, 2000f) + return pathfind(job.from, job.to) } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt index 27ff3bb..bff60cc 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt @@ -1,7 +1,6 @@ package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Coordinate import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Node import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm import net.minecraft.util.AxisAlignedBB @@ -17,7 +16,7 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro private lateinit var destinationBB: AxisAlignedBB - private val nodeMap: MutableMap = HashMap() + private val nodeMap: MutableMap = HashMap() private val open = PriorityQueue( @@ -36,7 +35,7 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro private fun openNode(x: Int, y: Int, z: Int): Node { - val cord = Coordinate(x, y, z) + val cord = Vector3i(x, y, z) return nodeMap.getOrPut(cord) { Node(cord) } @@ -140,17 +139,15 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro ) // check blocked. - if (!(destinationBB.minX <= neighbor.coordinate.x && - neighbor.coordinate.x <= destinationBB.maxX && - destinationBB.minY <= neighbor.coordinate.y && - neighbor.coordinate.y <= destinationBB.maxY && - destinationBB.minZ <= neighbor.coordinate.z && - neighbor.coordinate.z <= destinationBB.maxZ // near destination - || !roomAccessor.isBlocked( - neighbor.coordinate.x, - neighbor.coordinate.y, - neighbor.coordinate.z - )) + if (!(destinationBB.minX <= neighbor.coordinate.x + && neighbor.coordinate.x <= destinationBB.maxX + && destinationBB.minY <= neighbor.coordinate.y + && neighbor.coordinate.y <= destinationBB.maxY + && destinationBB.minZ <= neighbor.coordinate.z + && neighbor.coordinate.z <= destinationBB.maxZ // near destination + || + !roomAccessor.isBlocked(neighbor.coordinate.x, neighbor.coordinate.y, neighbor.coordinate.z) + ) ) { // not blocked continue } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt index 1ec9b48..8a5db8f 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt @@ -11,14 +11,14 @@ import org.joml.Vector3d import org.joml.Vector3i import java.util.* -class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(room) { +class AStarFineGrid(room: BlockedChecker) : IPathfinderAlgorithm(room) { var dx: Int = 0 var dy: Int = 0 var dz: Int = 0 private lateinit var destinationBB: AxisAlignedBB - private val nodeMap: MutableMap = HashMap() + private val nodeMap: MutableMap = HashMap() private val open = PriorityQueue( Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } @@ -47,8 +47,7 @@ class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(roo (dz + 2).toDouble() ) - if (lastSx != from.x * 2 || lastSy != from.y * 2 - .toInt() || lastSz != from.z * 2 + if (lastSx != from.x * 2 || lastSy != from.y * 2 || lastSz != from.z * 2 ) open.clear() lastSx = from.x * 2 lastSy = from.y * 2 @@ -93,7 +92,6 @@ class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(roo if (n.lastVisited == pfindIdx) continue n.lastVisited = pfindIdx if (n === goalNode) { - // route = reconstructPath(startNode) val route = LinkedList() var curr: Node? = goalNode while (curr!!.parent != null) { @@ -119,7 +117,7 @@ class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(roo } for (value in EnumFacing.VALUES) { val neighbor = openNode( - n?.coordinate!!.x + value.frontOffsetX, + n!!.coordinate.x + value.frontOffsetX, n.coordinate.y + value.frontOffsetY, n.coordinate.z + value.frontOffsetZ ) @@ -161,7 +159,7 @@ class AStarFineGrid(private val room: BlockedChecker) : IPathfinderAlgorithm(roo private fun openNode(x: Int, y: Int, z: Int): Node { - val coordinate = AStarUtil.Coordinate(x, y, z) + val coordinate = Vector3i(x, y, z) var node = nodeMap[coordinate] if (node == null) { node = Node(coordinate) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt index 360d181..81d9caa 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt @@ -8,6 +8,7 @@ import net.minecraft.util.AxisAlignedBB import net.minecraft.util.EnumFacing import net.minecraft.util.MathHelper import org.joml.Vector3d +import org.joml.Vector3f import org.joml.Vector3i import java.util.* import kotlin.math.ceil @@ -20,7 +21,7 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { private lateinit var destinationBB: AxisAlignedBB - private val nodeMap: MutableMap = HashMap() + private val nodeMap: MutableMap = HashMap() private val open = PriorityQueue( Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } @@ -38,7 +39,7 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { private fun openNode(x: Int, y: Int, z: Int): Node { - val coordinate = AStarUtil.Coordinate(x, y, z) + val coordinate = Vector3i(x, y, z) return nodeMap.computeIfAbsent(coordinate) { Node(coordinate) } } @@ -152,7 +153,7 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { (n.parent!!.coordinate.y - neighbor.coordinate.y).toFloat(), (n.parent!!.coordinate.z - neighbor.coordinate.z).toFloat() ) - if (tempGScore < neighbor.g && lineofsight(n.parent, neighbor)) { + if (tempGScore < neighbor.g && lineofsightALT(n.parent, neighbor)) { neighbor.parent = n.parent neighbor.g = tempGScore neighbor.f = tempGScore + distSq( @@ -189,37 +190,30 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { return true } - private fun lineofsight(a: Node?, b: Node?): Boolean { + private fun lineofsightALT(a: Node?, b: Node?): Boolean { if (a == null || b == null) return false - var sx = a.coordinate.x.toFloat() - var sy = a.coordinate.y.toFloat() - var sz = a.coordinate.z.toFloat() - val ex = b.coordinate.x - val ey = b.coordinate.y - val ez = b.coordinate.z - var dxx = ex - sx - var dyy = ey - sy - var dzz = ez - sz - val len = distSq(dxx, dyy, dzz) - dxx /= len - dyy /= len - dzz /= len + val s = Vector3f(a.coordinate) + val e = Vector3f(b.coordinate) + val dd = Vector3f() + e.sub(s, dd) + val len = dd.length() + dd.normalize() + var d = 0 while (d <= len) { - val round = sx.roundToInt() - val ceil = ceil(sy.toDouble()) - val round1 = sz.roundToInt() - if (roomAccessor.isBlocked(round, ceil.toInt(), round1)) return false - if (roomAccessor.isBlocked(round + 1, ceil.toInt(), round1 + 1)) return false - if (roomAccessor.isBlocked(round - 1, ceil.toInt(), round1 - 1)) return false - if (roomAccessor.isBlocked(round + 1, ceil.toInt(), round1 - 1)) return false - if (roomAccessor.isBlocked(round - 1, ceil.toInt(), round1 + 1)) return false - sx += dxx - sy += dyy - sz += dzz + val x = s.x().toInt() + val y = s.y().toInt() + val z = s.z().toInt() + if (roomAccessor.isBlocked(x, y, z)) return false + if (roomAccessor.isBlocked(x + 1, y, z + 1)) return false + if (roomAccessor.isBlocked(x - 1, y, z - 1)) return false + if (roomAccessor.isBlocked(x + 1, y, z - 1)) return false + if (roomAccessor.isBlocked(x - 1, y, z + 1)) return false + s.add(dd) d += 1 } return true + } private fun distSq(x: Float, y: Float, z: Float): Float { diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt index 32095db..7c40961 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt @@ -4,6 +4,7 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.handlers.TextRenderer import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder +import io.github.quantizr.dungeonrooms.pathfinding.PfPath import io.github.quantizr.dungeonrooms.utils.WaypointUtils import net.minecraft.client.Minecraft import net.minecraft.client.gui.ScaledResolution @@ -22,8 +23,8 @@ class PathfindTest { var textToDisplay: List = emptyList() } - private val pathfindFutures: MutableMap>> = HashMap() - private val donePathfindFutures: MutableMap> = HashMap() + private val pathfindFutures: MutableMap> = HashMap() + private val donePathfindFutures: MutableMap = HashMap() @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { @@ -56,7 +57,14 @@ class PathfindTest { fun onWorldRender(event: RenderWorldLastEvent) { if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return donePathfindFutures.forEach { (_, points) -> - WaypointUtils.drawLinesVec3(points, Color(255, 0, 0, 255), 2.0f, event.partialTicks, true) + WaypointUtils.drawLinesVec3( + points.path, + Color(255, 0, 0, 255), + Color(0, 255, 0, 255), + 2.0f, + event.partialTicks, + true + ) } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt index 474de54..918dc64 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt @@ -28,7 +28,10 @@ object BlockCache { return cache[BlockPos(pos.x, pos.y, pos.z)] } - fun getBlockState(pos: BlockPos): IBlockState? { + fun getBlockState(pos: BlockPos, skip: Boolean = false): IBlockState? { + if(skip){ + return Minecraft.getMinecraft().theWorld.getBlockState(pos) + } return cache[pos] } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt index f429898..7fe0cf4 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/WaypointUtils.kt @@ -17,6 +17,7 @@ */ package io.github.quantizr.dungeonrooms.utils +import io.github.quantizr.dungeonrooms.test.PathfindTest import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.Tessellator @@ -264,7 +265,22 @@ object WaypointUtils { } - fun drawLinesVec3(poses: List, colour: Color, thickness: Float, partialTicks: Float, depth: Boolean) { + fun getTotalLength(pos: List): Long { + var total = 0.0 + for (i in 0 until pos.size - 1) { + total += pos[i].distance(pos[i + 1]) + } + return total.toLong() + } + + fun drawLinesVec3( + poses: List, + colour: Color, + colorMax: Color, + thickness: Float, + partialTicks: Float, + depth: Boolean + ) { val render = Minecraft.getMinecraft().renderViewEntity val worldRenderer = Tessellator.getInstance().worldRenderer val realX = render.lastTickPosX + (render.posX - render.lastTickPosX) * partialTicks @@ -286,14 +302,20 @@ object WaypointUtils { GlStateManager.color(1f, 1f, 1f, 1f) worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR) + + + val totalLength = getTotalLength(poses) for (pos in poses) { - val i: Int = colour.rgb - worldRenderer.pos(pos.x, pos.y, pos.z).color( - (i shr 16 and 0xFF) / 255.0f, - (i shr 8 and 0xFF) / 255.0f, - (i and 0xFF) / 255.0f, - (i shr 24 and 0xFF) / 255.0f - ).endVertex() + // mix two color based on distance in a gradient + + var progress = (totalLength - pos.x) / totalLength + if(progress < 0) progress = 0.0 + val r = ((colorMax.red + ((colour.red - colorMax.red) * progress)).toFloat() / 255.0f) + val g = ((colorMax.green + ((colour.green - colorMax.green) * progress)).toFloat() / 255.0f) + val b = ((colorMax.blue + ((colour.blue - colorMax.blue) * progress)).toFloat() / 255.0f) + val a = ((colorMax.alpha + ((colour.alpha - colorMax.alpha) * progress)).toFloat() / 255.0f) + + worldRenderer.pos(pos.x, pos.y, pos.z).color(r, g, b, a).endVertex() } Tessellator.getInstance().draw() GlStateManager.translate(realX, realY, realZ) From fcc89caae3716716acacc4e0395b8b0ddb40ae81 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:56:16 +0100 Subject: [PATCH 14/22] add force refresh map key --- .../github/quantizr/dungeonrooms/DRMConfig.kt | 4 ++ .../dungeonrooms/dungeons/RoomDetection.kt | 47 +++++-------------- 2 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt index 333b519..0dc64ef 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -7,6 +7,7 @@ import cc.polyfrost.oneconfig.config.data.InfoType import cc.polyfrost.oneconfig.config.data.Mod import cc.polyfrost.oneconfig.config.data.ModType import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_I +import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_NONE import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_O import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_P import io.github.quantizr.dungeonrooms.ChatTransmitter.Companion.addToQueue @@ -35,6 +36,9 @@ object DRMConfig : @KeyBind(name = "Quick Access Gui Key", subcategory = "General") var waypointGuiKey = OneKeyBind(KEY_P) + @KeyBind(name = "Force Refresh RoomDetection (Map Data)", subcategory = "General") + var refreshMapKeybind = OneKeyBind(KEY_NONE) + @Dropdown(name = "Secret Image Provider", options = ["gui", "dsg", "sbp"], subcategory = "Secret Images") var imageHotkeyOpen = 0 diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 4ee26bc..720cc2e 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -22,6 +22,8 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomColor import io.github.quantizr.dungeonrooms.dungeons.data.room.RoomSize +import io.github.quantizr.dungeonrooms.gui.WaypointsGUI +import io.github.quantizr.dungeonrooms.handlers.OpenLink import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.RoomDetectionUtils import io.github.quantizr.dungeonrooms.utils.Utils @@ -32,6 +34,7 @@ import net.minecraft.util.EnumChatFormatting import net.minecraft.util.MovingObjectPosition import net.minecraft.util.Vec3 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.InputEvent import net.minecraftforge.fml.common.gameevent.TickEvent import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent import java.awt.Point @@ -43,6 +46,16 @@ import java.util.concurrent.Future class RoomDetection { val mc: Minecraft = Minecraft.getMinecraft() + @SubscribeEvent + fun onKey(event: InputEvent.KeyInputEvent?) { + when { + DRMConfig.refreshMapKeybind.isActive -> { + entranceMapNullCount = 0 + stage2Ticks = 0 + } + } + } + @SubscribeEvent fun onTick(event: ClientTickEvent) { if (event.phase != TickEvent.Phase.START) return @@ -288,40 +301,6 @@ class RoomDetection { } } - -// val vecList = RoomDetectionUtils.vectorsToRaytrace(24) -// for (vec in vecList) { -// // The super fancy Minecraft built-in raytracing function so that the mod only scan line of sight blocks! -// // This is the ONLY place where this mod accesses blocks in the physical map, and they are all within FOV -// player.entityWorld.rayTraceBlocks( -// eyes, -// vec, -// false, -// false, -// true -// )?.let { raytraceResult -> -// if (raytraceResult.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { -// //the following is filtering out blocks which we don't want for detection, note that these blocks are also line of sight -// val raytracedBlockPos = raytraceResult.blockPos -// if (!currentScannedBlocks.contains(raytracedBlockPos)) { -// currentScannedBlocks.add(raytracedBlockPos) -// //scanned block is outside of current room -// if (currentPhysicalSegments.contains(MapUtils.getClosestNWPhysicalCorner(raytracedBlockPos))) { -// //scanned block may be part of a corridor -// if (!RoomDetectionUtils.blockPartOfDoorway(raytracedBlockPos)) { -// val hitBlock = mc.theWorld.getBlockState(raytracedBlockPos) -// val identifier = -// Block.getIdFromBlock(hitBlock.block) * 100 + hitBlock.block.damageDropped(hitBlock) -// if (RoomDetectionUtils.whitelistedBlocks.contains(identifier)) { -// blocksToCheck[raytracedBlockPos] = -// identifier //will be checked and filtered in getPossibleRooms() -// } -// } -// } -// } -// } -// } -// } DungeonRooms.logger.info("DungeonRooms: Finished raytracing, amount of blocks to check: ${blocksToCheck.size}") DungeonRooms.logger.info("DungeonRooms: Time to raytrace and filter (in ms): ${System.currentTimeMillis() - timeStart}") From b9414eed3677fc7d077b750b249712070f1de643 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:02:33 +0100 Subject: [PATCH 15/22] automatic debug variable setting --- build.gradle | 1 + .../kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3ecd372..5080a9d 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ loom { runs { 'client' { property('devauth.enabled','true') + property('dungeonsroommod_debug','true') client() } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 20c5c86..4f74f64 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -105,6 +105,7 @@ class DungeonRooms { DRMConfig.init() roomDataLoader.startAsyncLoad() firstLogin = isFirstLaunch() + if(System.getProperty("dungeonsroommod_debug") != null) debug = true //register classes MinecraftForge.EVENT_BUS.register(this) @@ -251,7 +252,8 @@ class DungeonRooms { @JvmStatic lateinit var instance: DungeonRooms private set - const val debug = true + var debug = false + private set const val MODID = "@ID@" const val VERSION = "@VER@" From ee97dbf0a5850c0b77161e6f47cb8667b7138f97 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:07:18 +0100 Subject: [PATCH 16/22] version bump --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5080a9d..c3cedd7 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ tasks.wrapper { // the full version (with sources and documentation) of Gradle (ALL) distributionType = Wrapper.DistributionType.ALL } -version = '3.3.2' +version = '4.0.0' group = 'io.github.quantizr.DungeonRooms' archivesBaseName = 'Dungeon_Rooms' var mod_name = 'DRM' From fa4e69aaeaa43b1559df8c1d4baaa83cf2f16d0d Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Wed, 28 Dec 2022 00:21:24 +0100 Subject: [PATCH 17/22] add credits, remove jps algorithm since its broken and no one cares anyway --- .../github/quantizr/dungeonrooms/DRMConfig.kt | 2 +- .../algorithms/CachedAlgBuilder.kt | 4 +- .../algorithms/impl/JPSPathfinder.kt | 417 ------------------ src/main/resources/mcmod.info | 2 +- 4 files changed, 3 insertions(+), 422 deletions(-) delete mode 100644 src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt index 0dc64ef..27a03c4 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -63,7 +63,7 @@ object DRMConfig : @Dropdown( description = "Select pathfinding algorithm", name = "Pathfinding Algorithm", - options = ["THETA* (recommended)", "A* Diagonal", "A* Fine-Grid", "Jump Point Search"], + options = ["THETA* (recommended)", "A* Diagonal", "A* Fine-Grid"], subcategory = "Pathfinding", category = "Waypoints" ) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt index 22291c9..e16795b 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt @@ -5,14 +5,13 @@ import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder.defaultAccessor import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarCornerCut import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarFineGrid -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.JPSPathfinder import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.ThetaStar import org.joml.Vector3d import java.time.Duration object CachedAlgBuilder { // since we pathfind to the same destination and the world does not change, - // we can cache open nodes in the A* fatality of algorithms + // we can cache open nodes in the A* family of algorithms private val cache = Caffeine.newBuilder() .maximumSize(20) .expireAfterWrite(Duration.ofMinutes(2)) @@ -21,7 +20,6 @@ object CachedAlgBuilder { 0 -> ThetaStar(defaultAccessor) 1 -> AStarCornerCut(defaultAccessor) 2 -> AStarFineGrid(defaultAccessor) - 3 -> JPSPathfinder(defaultAccessor) else -> ThetaStar(defaultAccessor) } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt deleted file mode 100644 index 64805fb..0000000 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/JPSPathfinder.kt +++ /dev/null @@ -1,417 +0,0 @@ -package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl - -import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker -import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm -import net.minecraft.util.AxisAlignedBB -import net.minecraft.util.EnumFacing -import net.minecraft.util.MathHelper -import org.joml.Vector3d -import org.joml.Vector3i -import java.util.* -import kotlin.math.abs - -class JPSPathfinder(room: BlockedChecker) : IPathfinderAlgorithm(room) { - private val nodeMap: HashMap = HashMap() - - - private val within = 1.5f - - private val open = PriorityQueue( - Comparator.comparing { a: Node? -> a?.f ?: Float.MAX_VALUE } - .thenComparing { _, a: Node? -> a?.x ?: Int.MAX_VALUE } - .thenComparing { _, a: Node? -> a?.y ?: Int.MAX_VALUE } - .thenComparing { _, a: Node? -> a?.z ?: Int.MAX_VALUE } - ) - - - private var destinationBB: AxisAlignedBB? = null - private var tx = 0 - private var ty = 0 - private var tz = 0 - private fun openNode(x: Int, y: Int, z: Int): Node { - val i = Node.makeHash(x, y, z) - var node = nodeMap[i] - if (node == null) { - node = Node(x, y, z) - nodeMap[i] = node - } - return node - } - - private fun addNode(parent: Node, jumpPt: Node, addToOpen: Boolean): Node { - val ng = parent.g + distSq( - (jumpPt.x - parent.x).toFloat(), - (jumpPt.y - parent.y).toFloat(), - (jumpPt.z - parent.z).toFloat() - ) - if (ng < jumpPt.g) { - if (addToOpen) { - open.remove(jumpPt) - } - jumpPt.g = ng - jumpPt.h = if (jumpPt.h == -1f) distSq( - (tx - jumpPt.x).toFloat(), - (ty - jumpPt.y).toFloat(), - (tz - jumpPt.z).toFloat() - ) else jumpPt.h - jumpPt.f = jumpPt.h + jumpPt.g - jumpPt.parent = parent - if (addToOpen) open.add(jumpPt) - } - return jumpPt - } - - private fun distSq(x: Float, y: Float, z: Float): Float { - return MathHelper.sqrt_float(x * x + y * y + z * z) - } - - fun getNeighbors(prevN: Node, n: Node): Set { - - val d = Vector3i( - MathHelper.clamp_int(n.x - prevN.x, -1, 1), - MathHelper.clamp_int(n.y - prevN.y, -1, 1), - MathHelper.clamp_int(n.z - prevN.z, -1, 1) - ) - val c = Vector3i(n.x, n.y, n.z) - val next = Vector3i(n.x + d.x, n.y + d.y, n.z + d.z) - - val nexts: MutableSet = HashSet() - when (abs(d.x) + abs(d.y) + abs(d.z)) { - 0 -> { - for (i in -1..1) for (j in -1..1) for (k in -1..1) { - if (i == 0 && j == 0 && k == 0) continue - nexts.add(openNode(c.x + i, c.y + j, c.z + k)) - } - } - - 1 -> { - nexts.add(openNode(next.x, next.y, next.z)) - for (i in -1..1) { - for (j in -1..1) { - if (i == 0 && j == 0) continue - if (d.x != 0 && roomAccessor.isBlocked(c.x, c.y + i, c.z + j)) nexts.add( - openNode( - next.x, - c.y + i, - c.z + j - ) - ) - if (d.y != 0 && roomAccessor.isBlocked(c.x + i, c.y, c.z + j)) nexts.add( - openNode( - c.x + i, - next.y, - c.z + j - ) - ) - if (d.z != 0 && roomAccessor.isBlocked(c.x + i, c.y + j, c.z)) nexts.add( - openNode( - c.x + i, - c.y + j, - next.z - ) - ) - } - } - } - - 2 -> { - if (d.z != 0) nexts.add(openNode(c.x, c.y, next.z)) - if (d.y != 0) nexts.add(openNode(c.x, next.y, c.z)) - if (d.x != 0) nexts.add(openNode(next.x, c.y, c.z)) - nexts.add(openNode(next.x, next.y, next.z)) - if (d.x == 0) { - if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { - nexts.add(openNode(c.x, next.y, c.z - d.z)) - if (roomAccessor.isBlocked(c.x + 1, c.y, c.z - d.z)) nexts.add( - openNode( - c.x + 1, - next.y, - c.z - d.z - ) - ) - if (roomAccessor.isBlocked(c.x - 1, c.y, c.z - d.z)) nexts.add( - openNode( - c.x - 1, - next.y, - c.z - d.z - ) - ) - } - if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { - nexts.add(openNode(c.x, c.y - d.y, next.z)) - if (roomAccessor.isBlocked(c.x + 1, c.y - d.y, c.z)) nexts.add( - openNode( - c.x + 1, - c.y - d.y, - next.z - ) - ) - if (roomAccessor.isBlocked(c.x - 1, c.y - d.y, c.z)) nexts.add( - openNode( - c.x + 1, - c.y - d.y, - next.z - ) - ) - } - } else if (d.y == 0) { - if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { - nexts.add(openNode(next.x, c.y, c.z - d.z)) - if (roomAccessor.isBlocked(c.x, c.y + 1, c.z - d.z)) nexts.add( - openNode( - next.x, - c.y + 1, - c.z - d.z - ) - ) - if (roomAccessor.isBlocked(c.x, c.y - 1, c.z - d.z)) nexts.add( - openNode( - next.x, - c.y - 1, - c.z - d.z - ) - ) - } - if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { - nexts.add(openNode(c.x - d.x, c.y, next.z)) - if (roomAccessor.isBlocked(c.x - d.x, c.y + 1, c.z)) nexts.add( - openNode( - c.x - d.x, - c.y + 1, - next.z - ) - ) - if (roomAccessor.isBlocked(c.x - d.x, c.y - 1, c.z)) nexts.add( - openNode( - c.x - d.x, - c.y - 1, - next.z - ) - ) - } - } else if (d.z == 0) { - if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { - nexts.add(openNode(next.x, c.y - d.y, c.z)) - if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z + 1)) nexts.add( - openNode( - next.x, - c.y - d.y, - c.z + 1 - ) - ) - if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z - 1)) nexts.add( - openNode( - next.x, - c.y - d.y, - c.z - 1 - ) - ) - } - if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { - nexts.add(openNode(c.x - d.x, next.y, c.z)) - if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z + 1)) nexts.add( - openNode( - c.x - d.x, - next.y, - c.z + 1 - ) - ) - if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z - 1)) nexts.add( - openNode( - c.x - d.x, - next.y, - c.z - 1 - ) - ) - } - } - } - - 3 -> { - nexts.add(openNode(c.x, c.y, next.z)) - nexts.add(openNode(c.x, next.y, c.z)) - nexts.add(openNode(next.x, c.y, c.z)) - nexts.add(openNode(next.x, c.y, next.z)) - nexts.add(openNode(c.x, next.y, next.z)) - nexts.add(openNode(next.x, next.y, c.z)) - nexts.add(openNode(next.x, next.y, next.z)) - if (roomAccessor.isBlocked(c.x, c.y, c.z - d.z)) { - nexts.add(openNode(c.x, next.y, c.z - d.z)) - nexts.add(openNode(next.x, next.y, c.z - d.z)) - nexts.add(openNode(next.x, c.y, c.z - d.z)) - } - if (roomAccessor.isBlocked(c.x - d.x, c.y, c.z)) { - nexts.add(openNode(c.x - d.x, next.y, next.z)) - nexts.add(openNode(c.x - d.x, next.y, c.z)) - nexts.add(openNode(c.x - d.x, c.y, next.z)) - } - if (roomAccessor.isBlocked(c.x, c.y - d.y, c.z)) { - nexts.add(openNode(c.x, c.y - d.y, next.z)) - nexts.add(openNode(next.x, c.y - d.y, c.z)) - nexts.add(openNode(next.x, c.y - d.y, next.z)) - } - } - } - return nexts - } - - fun expand(x: Int, y: Int, z: Int, dx: Int, dy: Int, dz: Int): Node? { - var x = x - var y = y - var z = z - while (true) { - val nx = x + dx - val ny = y + dy - val nz = z + dz - if (roomAccessor.isBlocked(nx, ny, nz)) return null - if (nx > destinationBB!!.minX && nx < destinationBB!!.maxX && ny > destinationBB!!.minY && ny < destinationBB!!.maxY && nz > destinationBB!!.minZ && nz < destinationBB!!.maxZ) return openNode( - nx, - ny, - nz - ) - val determinant = abs(dx) + abs(dy) + abs(dz) - if (determinant == 1) { - for (i in -1..1) { - for (j in -1..1) { - if (i == 0 && j == 0) continue - if (dx != 0 && roomAccessor.isBlocked(nx, ny + i, nz + j) && !roomAccessor.isBlocked( - nx + dx, - ny + i, - nz + j - ) - ) return openNode(nx, ny, nz) - if (dy != 0 && roomAccessor.isBlocked(nx + i, ny, nz + j) && !roomAccessor.isBlocked( - nx + i, - ny + dy, - nz + j - ) - ) return openNode(nx, ny, nz) - if (dz != 0 && roomAccessor.isBlocked(nx + i, ny + j, nz) && !roomAccessor.isBlocked( - nx + i, - ny + j, - nz + dz - ) - ) return openNode(nx, ny, nz) - } - } - } else if (determinant == 2) { - for (value in EnumFacing.VALUES) { - if (value.frontOffsetX == dx || value.frontOffsetY == dy || value.frontOffsetZ == dz) continue - val tx = nx + value.frontOffsetX - val ty = ny + value.frontOffsetY - val tz = nz + value.frontOffsetZ - if (roomAccessor.isBlocked(tx, ty, tz)) return openNode(nx, ny, nz) - } - if (dx != 0 && expand(nx, ny, nz, dx, 0, 0) != null) return openNode(nx, ny, nz) - if (dy != 0 && expand(nx, ny, nz, 0, dy, 0) != null) return openNode(nx, ny, nz) - if (dz != 0 && expand(nx, ny, nz, 0, 0, dz) != null) return openNode(nx, ny, nz) - } else if (determinant == 3) { - if (roomAccessor.isBlocked(x, ny, nz) || roomAccessor.isBlocked(nx, y, nz) || roomAccessor.isBlocked( - nx, - ny, - z - ) - ) return openNode(nx, ny, nz) - if (expand(nx, ny, nz, dx, 0, 0) != null || expand(nx, ny, nz, dx, dy, 0) != null || expand( - nx, - ny, - nz, - dx, - 0, - dz - ) != null || expand(nx, ny, nz, 0, dy, 0) != null || expand( - nx, - ny, - nz, - 0, - dy, - dz - ) != null || expand(nx, ny, nz, 0, 0, dz) != null - ) return openNode(nx, ny, nz) - } - x = nx - y = ny - z = nz - } - } - - class Node(val x: Int, val y: Int, val z: Int) { - var f = 0f - var g = Float.MAX_VALUE - var h = -1f - var closed = false - - var parent: Node? = null - fun close(): Node { - closed = true - return this - } - - companion object { - fun makeHash(x: Int, y: Int, z: Int): Int { - return y and 255 or (x and 32767 shl 8) or (z and 32767 shl 24) or (if (x < 0) Int.MIN_VALUE else 0) or if (z < 0) 32768 else 0 - } - } - } - - override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { - route.clear() - nodeMap.clear() - var from = Vector3d((from.x * 2) / 2.0, (from.y * 2) / 2.0, (from.z * 2) / 2.0) - var to = Vector3d((to.x * 2).toInt() / 2.0, (to.y * 2).toInt() / 2.0, (to.z * 2).toInt() / 2.0) - - tx = (to.x * 2).toInt() - ty = (to.y * 2).toInt() - tz = (to.z * 2).toInt() - destinationBB = AxisAlignedBB.fromBounds( - (to.x - within) * 2, - (to.y - within) * 2, - (to.z - within) * 2, - (to.x + within) * 2, - (to.y + within) * 2, - (to.z + within) * 2 - ) - open.clear() - var start: Node - open.add( - openNode( - from.x.toInt() * 2 + 1, - from.y.toInt() * 2, - from.z.toInt() * 2 + 1 - ).also { start = it }) - start.g = 0f - start.f = 0f - start.h = from.distanceSquared(to).toFloat() - var end: Node? = null - var minDist = Float.MAX_VALUE - val forceEnd = System.currentTimeMillis() + timeout + 999999999L - while (!open.isEmpty()) { - if (forceEnd < System.currentTimeMillis() && timeout != -1F) break - val n = open.poll() - if (n != null) { - n.closed = true - if (minDist > n.h) { - minDist = n.h - end = n - } - if (n.x > destinationBB!!.minX && n.x < destinationBB!!.maxX && n.y > destinationBB!!.minY && n.y < destinationBB!!.maxY && n.z > destinationBB!!.minZ && n.z < destinationBB!!.maxZ) { - break - } - } - for (neighbor in getNeighbors(n!!.parent ?: n, n)) { - val jumpPT = expand(n.x, n.y, n.z, neighbor.x - n.x, neighbor.y - n.y, neighbor.z - n.z) - if (jumpPT == null || jumpPT.closed) continue - addNode(n, jumpPT, true) - } - } - if (end == null) { - return false - } - var p = end - while (p != null) { - route.addLast(Vector3d((p.x / 2.0f).toDouble(), p.y / 2.0f + 0.1, (p.z / 2.0f).toDouble())) - p = p.parent - } - return true - } -} \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index e3227db..4bbf55c 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -7,7 +7,7 @@ "mcversion": "1.8.9", "url": "https://discord.gg/7B5RbsArYK", "updateUrl": "", - "authorList": ["_risk (aka Quantizr)"], + "authorList": ["_risk (aka Quantizr)", "cyoung06 (DungeonGuide developer, thanks for pathfind code)"], "credits": "", "logoFile": "assets/dungeonrooms/logo.png", "screenshots": [], From f19695bb815f585e55089b9a3fd7149259c7b6d5 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Wed, 28 Dec 2022 03:12:07 +0100 Subject: [PATCH 18/22] remove useless duplicate logo --- src/main/resources/drm_logo_x128.png | Bin 24661 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/drm_logo_x128.png diff --git a/src/main/resources/drm_logo_x128.png b/src/main/resources/drm_logo_x128.png deleted file mode 100644 index 63a9fc46f981098a99ce7bf5bb1747c35fbef2a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24661 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 KxXB`yi=wLh?h>n^W`&;EuMhpRVzB0+F_p( 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 From 22efadbf1b602ad3e79d526ae06165643154f5fd Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Wed, 28 Dec 2022 03:12:33 +0100 Subject: [PATCH 19/22] add licence/credits for dg --- src/main/resources/mcmod.info | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 4bbf55c..c8f9a6f 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -7,8 +7,8 @@ "mcversion": "1.8.9", "url": "https://discord.gg/7B5RbsArYK", "updateUrl": "", - "authorList": ["_risk (aka Quantizr)", "cyoung06 (DungeonGuide developer, thanks for pathfind code)"], - "credits": "", + "authorList": ["_risk (aka Quantizr)"], + "credits": "Credits for inspiring pathfinder code to DungeonGuide ( https://github.com/Dungeons-Guide/Skyblock-Dungeons-Guide ) licenced under AGPL \n licence: \n GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate. Many developers of free software are heartened and\nencouraged by the resulting cooperation. However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community. It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server. Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals. This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Remote Network Interaction; Use with the GNU General Public License.\n\n Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software. This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time. Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n \n Copyright (C) \n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU Affero General Public License as published\n by the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License\n along with this program. If not, see .\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source. For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code. There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n.", "logoFile": "assets/dungeonrooms/logo.png", "screenshots": [], "dependencies": [] From 71afaa4c2501a47e5ae1d5dcf60ed0d968a21080 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Wed, 28 Dec 2022 03:13:30 +0100 Subject: [PATCH 20/22] point to real logo file --- src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt index 27a03c4..a2a5d62 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -13,7 +13,7 @@ import cc.polyfrost.oneconfig.libs.universal.UKeyboard.KEY_P import io.github.quantizr.dungeonrooms.ChatTransmitter.Companion.addToQueue object DRMConfig : - Config(Mod("DungeonsRoomsMod", ModType.SKYBLOCK, "/drm_logo_x128.png"), DungeonRooms.MODID + ".json") { + Config(Mod("DungeonsRoomsMod", ModType.SKYBLOCK, "/assets/dungeonrooms/logo.png"), DungeonRooms.MODID + ".json") { fun init(){ initialize() From a7879a97dab6000978a59fbb198efe307dc1fa34 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Wed, 28 Dec 2022 05:08:59 +0100 Subject: [PATCH 21/22] cleanup pathfinding --- .../pathfinding/CachedPathFinder.kt | 16 +- .../pathfinding/algorithms/AStarUtil.kt | 39 +++- .../algorithms/CachedAlgBuilder.kt | 4 +- .../algorithms/impl/AStarCornerCut.kt | 8 +- .../algorithms/impl/AStarFineGrid.kt | 47 ++-- .../pathfinding/algorithms/impl/ThetaStar.kt | 212 ++++++++---------- 6 files changed, 160 insertions(+), 166 deletions(-) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt index a3d5c2e..d0e37d3 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt @@ -37,7 +37,7 @@ object CachedPathFinder { val preBuilt = Blocks.stone.getStateFromMeta(2) private val cache = Caffeine.newBuilder() - .maximumSize(500_000) + .maximumSize(50_000) .expireAfterWrite(Duration.ofSeconds(6)) .build { key: Vector3i -> if(Minecraft.getMinecraft().theWorld == null) return@build null @@ -65,18 +65,18 @@ object CachedPathFinder { for (l1 in i1 until j1) { for (i2 in k - 1 until l) { blockPos[k1, i2] = l1 - val blxState = BlockCache.getBlockState(blockPos, true)!! - if (blxState.block.material.blocksMovement()) { - if (!blxState.block.isFullCube || i2 != k - 1) { - if (blxState != preBuilt) { - if (blxState.block.isFullCube) { + val blockState = BlockCache.getBlockState(blockPos, true) ?: return@build true + if (blockState.block.material.blocksMovement()) { + if (!blockState.block.isFullCube || i2 != k - 1) { + if (blockState != preBuilt) { + if (blockState.block.isFullCube) { return@build true } try { - blxState.block.addCollisionBoxesToList( + blockState.block.addCollisionBoxesToList( Minecraft.getMinecraft().theWorld, blockPos, - blxState, + blockState, bb, list, null diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt index 6980385..318eb0c 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/AStarUtil.kt @@ -1,13 +1,48 @@ package io.github.quantizr.dungeonrooms.pathfinding.algorithms +import net.minecraft.util.MathHelper +import org.joml.Vector3d import org.joml.Vector3i +import java.util.* +import kotlin.math.sqrt -class AStarUtil { +object AStarUtil { class Node(val coordinate: Vector3i) { var f = Float.MAX_VALUE var g = Float.MAX_VALUE - var lastVisited = 0 + var cacheMarker = 0 var parent: Node? = null } + + fun reconstructPath(current: Node): LinkedList { + val route = LinkedList() + var curr: Node? = current + while (curr!!.parent != null) { + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + curr = curr.parent + } + route.addLast( + Vector3d( + curr.coordinate.x / 2.0, + curr.coordinate.y / 2.0 + 0.1, + curr.coordinate.z / 2.0 + ) + ) + return route + } + + fun distSq(x: Float, y: Float, z: Float): Float { + return MathHelper.sqrt_float(x * x + y * y + z * z) + } + + fun distSq(x: Int, y: Int, z: Int): Float { + return sqrt((x * x + y * y + z * z).toDouble()).toFloat() + } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt index e16795b..f3cbdff 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt @@ -13,7 +13,7 @@ object CachedAlgBuilder { // since we pathfind to the same destination and the world does not change, // we can cache open nodes in the A* family of algorithms private val cache = Caffeine.newBuilder() - .maximumSize(20) + .maximumSize(11) .expireAfterWrite(Duration.ofMinutes(2)) .build { _: Vector3d -> return@build when (DRMConfig.secretPathfindStrategy) { @@ -27,6 +27,4 @@ object CachedAlgBuilder { fun buildPfStrategy(cacheDestenation: Vector3d): IPathfinderAlgorithm { return cache.get(cacheDestenation)!! } - - } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt index bff60cc..423eda5 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarCornerCut.kt @@ -103,8 +103,8 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro } val n = open.poll() if (n != null) { - if (n.lastVisited == pfindIdx) continue - n.lastVisited = pfindIdx + if (n.cacheMarker == pfindIdx) continue + n.cacheMarker = pfindIdx } if (n === goalNode) { // route = reconstructPath(startNode) @@ -151,7 +151,7 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro ) { // not blocked continue } - if (neighbor.lastVisited == pfindIdx) continue + if (neighbor.cacheMarker == pfindIdx) continue val gScore = n.g.plus( MathHelper.sqrt_float((x * x + y * y + z * z).toFloat()) @@ -165,7 +165,7 @@ class AStarCornerCut(private val room: BlockedChecker) : IPathfinderAlgorithm(ro (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() ) open.add(neighbor) - } else if (neighbor.lastVisited != pfindIdx) { + } else if (neighbor.cacheMarker != pfindIdx) { neighbor.f = gScore + distSq( (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt index 8a5db8f..d5adce4 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/AStarFineGrid.kt @@ -89,8 +89,8 @@ class AStarFineGrid(room: BlockedChecker) : IPathfinderAlgorithm(room) { } val n = open.poll() if (n != null) { - if (n.lastVisited == pfindIdx) continue - n.lastVisited = pfindIdx + if (n.cacheMarker == pfindIdx) continue + n.cacheMarker = pfindIdx if (n === goalNode) { val route = LinkedList() var curr: Node? = goalNode @@ -123,33 +123,35 @@ class AStarFineGrid(room: BlockedChecker) : IPathfinderAlgorithm(room) { ) // check blocked. - if (!(destinationBB.minX <= neighbor.coordinate.x && neighbor.coordinate.x <= destinationBB.maxX && destinationBB.minY <= neighbor.coordinate.y && neighbor.coordinate.y <= destinationBB.maxY && destinationBB.minZ <= neighbor.coordinate.z && neighbor.coordinate.z <= destinationBB.maxZ // near destination - || !roomAccessor.isBlocked( + if (destinationBB.minX <= neighbor.coordinate.x + && neighbor.coordinate.x <= destinationBB.maxX + && destinationBB.minY <= neighbor.coordinate.y + && neighbor.coordinate.y <= destinationBB.maxY + && destinationBB.minZ <= neighbor.coordinate.z + && neighbor.coordinate.z <= destinationBB.maxZ // near destination + || !roomAccessor.isBlocked( neighbor.coordinate.x, neighbor.coordinate.y, neighbor.coordinate.z - )) - ) { // not blocked - continue - } - val gScore = n.g + 1 // altho it's sq, it should be fine - if (gScore < neighbor.g) { - neighbor.parent = n - neighbor.g = gScore - neighbor.f = gScore + distSq( - (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), - (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), - (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() ) - open.add(neighbor) - } else if (neighbor.lastVisited != pfindIdx) { - neighbor.f = gScore + distSq( + ) { + val gScore = n.g + 1 + val distSq = AStarUtil.distSq( (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() ) - open.add(neighbor) + if (gScore < neighbor.g) { + neighbor.parent = n + neighbor.g = gScore + neighbor.f = gScore + distSq + open.add(neighbor) + } else if (neighbor.cacheMarker != pfindIdx) { + neighbor.f = gScore + distSq + open.add(neighbor) + } } + // not blocked } } return true @@ -168,9 +170,4 @@ class AStarFineGrid(room: BlockedChecker) : IPathfinderAlgorithm(room) { return node } - - private fun distSq(x: Float, y: Float, z: Float): Float { - return MathHelper.sqrt_float(x * x + y * y + z * z) - } - } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt index 81d9caa..7fc86fe 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/impl/ThetaStar.kt @@ -3,16 +3,14 @@ package io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl import io.github.quantizr.dungeonrooms.pathfinding.BlockedChecker import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.Node +import io.github.quantizr.dungeonrooms.pathfinding.algorithms.AStarUtil.reconstructPath import io.github.quantizr.dungeonrooms.pathfinding.algorithms.IPathfinderAlgorithm import net.minecraft.util.AxisAlignedBB import net.minecraft.util.EnumFacing -import net.minecraft.util.MathHelper import org.joml.Vector3d import org.joml.Vector3f import org.joml.Vector3i import java.util.* -import kotlin.math.ceil -import kotlin.math.roundToInt class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { private var dx: Int = 0 @@ -34,17 +32,44 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { private var lastSy = 0 private var lastSz = 0 - - private var pfindIdx = 0 - + private var cacheMarker = 0 private fun openNode(x: Int, y: Int, z: Int): Node { val coordinate = Vector3i(x, y, z) return nodeMap.computeIfAbsent(coordinate) { Node(coordinate) } } + /** + * raytrace and check if the path is blocked along the way + */ + private fun lineofsight(a: Node?, b: Node?): Boolean { + if (a == null || b == null) return false + val s = Vector3f(a.coordinate) + val e = Vector3f(b.coordinate) + val dd = Vector3f() + e.sub(s, dd) + val len = dd.length() + dd.normalize() + + var d = 0 + while (d <= len) { + val x = s.x().toInt() + val y = s.y().toInt() + val z = s.z().toInt() + if (roomAccessor.isBlocked(x, y, z)) return false + if (roomAccessor.isBlocked(x + 1, y, z + 1)) return false + if (roomAccessor.isBlocked(x - 1, y, z - 1)) return false + if (roomAccessor.isBlocked(x + 1, y, z - 1)) return false + if (roomAccessor.isBlocked(x - 1, y, z + 1)) return false + s.add(dd) + d += 1 + } + return true + + } + override fun pathfind(from: Vector3i, to: Vector3d, timeout: Float): Boolean { - pfindIdx++ + cacheMarker++ dx = (to.x * 2).toInt() dy = (to.y * 2).toInt() @@ -58,34 +83,24 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { (dz + 2).toDouble() ) - if (lastSx != (from.x * 2) || lastSy != (from.y * 2) || lastSz != (from.z * 2)) { + val i = from.x * 2 + val i1 = from.y * 2 + val i2 = from.z * 2 + if (lastSx != i || lastSy != i1 || lastSz != i2) { open.clear() } - lastSx = (from.x * 2) - lastSy = (from.y * 2) - lastSz = (from.z * 2) + lastSx = i + lastSy = i1 + lastSz = i2 if (roomAccessor.isBlocked(lastSx, lastSy, lastSz)) return false val startNode = openNode(dx, dy, dz) val goalNode = openNode(lastSx, lastSy, lastSz) startNode.g = 0f startNode.f = 0f - goalNode.g = Int.MAX_VALUE.toFloat() - goalNode.f = Int.MAX_VALUE.toFloat() + goalNode.g = Float.MAX_VALUE + goalNode.f = Float.MAX_VALUE if (goalNode.parent != null) { - val route = LinkedList() - var curr: Node? = goalNode - while (curr!!.parent != null) { - route.addLast( - Vector3d( - curr.coordinate.x / 2.0, - curr.coordinate.y / 2.0 + 0.1, - curr.coordinate.z / 2.0 - ) - ) - curr = curr.parent - } - route.addLast(Vector3d(curr.coordinate.x / 2.0, curr.coordinate.y / 2.0 + 0.1, curr.coordinate.z / 2.0)) - this.route = route + this.route = reconstructPath(goalNode) return true } open.add(startNode) @@ -98,91 +113,70 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { if (n != null) { - if (n.lastVisited == pfindIdx) { + if (n.cacheMarker == cacheMarker) { continue } - n.lastVisited = pfindIdx + n.cacheMarker = cacheMarker } if (n === goalNode) { - // route = reconstructPath(startNode) - val route = LinkedList() - var curr: Node? = goalNode - while (curr!!.parent != null) { - route.addLast( - Vector3d( - curr.coordinate.x / 2.0, - curr.coordinate.y / 2.0 + 0.1, - curr.coordinate.z / 2.0 - ) - ) - curr = curr.parent - } - route.addLast( - Vector3d( - curr.coordinate.x / 2.0, - curr.coordinate.y / 2.0 + 0.1, - curr.coordinate.z / 2.0 - ) - ) - this.route = route + this.route = reconstructPath(goalNode) return true } for (value in EnumFacing.VALUES) { + n!! val neighbor = openNode( - n?.coordinate!!.x + value.frontOffsetX, + n.coordinate.x + value.frontOffsetX, n.coordinate.y + value.frontOffsetY, n.coordinate.z + value.frontOffsetZ ) - // check blocked. - if (!(destinationBB.minX <= neighbor.coordinate.x && neighbor.coordinate.x <= destinationBB.maxX && destinationBB.minY <= neighbor.coordinate.y && neighbor.coordinate.y <= destinationBB.maxY && destinationBB.minZ <= neighbor.coordinate.z && neighbor.coordinate.z <= destinationBB.maxZ // near destination - || !roomAccessor.isBlocked( + if (destinationBB.minX <= neighbor.coordinate.x + && neighbor.coordinate.x <= destinationBB.maxX + && destinationBB.minY <= neighbor.coordinate.y + && neighbor.coordinate.y <= destinationBB.maxY + && destinationBB.minZ <= neighbor.coordinate.z + && neighbor.coordinate.z <= destinationBB.maxZ + || !roomAccessor.isBlocked( neighbor.coordinate.x, neighbor.coordinate.y, neighbor.coordinate.z - )) - ) { // not blocked - continue - } - if (neighbor.lastVisited == pfindIdx) continue - var flag = false - if (n.parent != null) { - val tempGScore = n.parent!!.g + distSq( - (n.parent!!.coordinate.x - neighbor.coordinate.x).toFloat(), - (n.parent!!.coordinate.y - neighbor.coordinate.y).toFloat(), - (n.parent!!.coordinate.z - neighbor.coordinate.z).toFloat() ) - if (tempGScore < neighbor.g && lineofsightALT(n.parent, neighbor)) { - neighbor.parent = n.parent - neighbor.g = tempGScore - neighbor.f = tempGScore + distSq( - (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), - (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), - (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() + ) { + if (neighbor.cacheMarker != cacheMarker) { + var flag = false + val distSq = AStarUtil.distSq( + goalNode.coordinate.x - neighbor.coordinate.x, + goalNode.coordinate.y - neighbor.coordinate.y, + goalNode.coordinate.z - neighbor.coordinate.z ) - open.add(neighbor) - flag = true - } - } - if (!flag) { - val gScore = n.g + 1 - if (gScore < neighbor.g) { - neighbor.parent = n - neighbor.g = gScore - neighbor.f = gScore + distSq( - (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), - (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), - (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() - ) - open.add(neighbor) - } else if (neighbor.lastVisited != pfindIdx) { - neighbor.f = neighbor.g + distSq( - (goalNode.coordinate.x - neighbor.coordinate.x).toFloat(), - (goalNode.coordinate.y - neighbor.coordinate.y).toFloat(), - (goalNode.coordinate.z - neighbor.coordinate.z).toFloat() - ) - open.add(neighbor) + val parent = n.parent + if (parent != null) { + val tempGScore = parent.g + AStarUtil.distSq( + parent.coordinate.x - neighbor.coordinate.x, + parent.coordinate.y - neighbor.coordinate.y, + parent.coordinate.z - neighbor.coordinate.z + ) + if (tempGScore < neighbor.g && lineofsight(parent, neighbor)) { + neighbor.parent = parent + neighbor.g = tempGScore + neighbor.f = tempGScore + distSq + open.add(neighbor) + flag = true + } + } + if (!flag) { + val gScore = n.g + 1 + if (gScore < neighbor.g) { + neighbor.parent = n + neighbor.g = gScore + neighbor.f = gScore + distSq + open.add(neighbor) + } else if (neighbor.cacheMarker != cacheMarker) { + neighbor.f = neighbor.g + distSq + open.add(neighbor) + } + } } } } @@ -190,34 +184,4 @@ class ThetaStar(room: BlockedChecker) : IPathfinderAlgorithm(room) { return true } - private fun lineofsightALT(a: Node?, b: Node?): Boolean { - if (a == null || b == null) return false - val s = Vector3f(a.coordinate) - val e = Vector3f(b.coordinate) - val dd = Vector3f() - e.sub(s, dd) - val len = dd.length() - dd.normalize() - - var d = 0 - while (d <= len) { - val x = s.x().toInt() - val y = s.y().toInt() - val z = s.z().toInt() - if (roomAccessor.isBlocked(x, y, z)) return false - if (roomAccessor.isBlocked(x + 1, y, z + 1)) return false - if (roomAccessor.isBlocked(x - 1, y, z - 1)) return false - if (roomAccessor.isBlocked(x + 1, y, z - 1)) return false - if (roomAccessor.isBlocked(x - 1, y, z + 1)) return false - s.add(dd) - d += 1 - } - return true - - } - - private fun distSq(x: Float, y: Float, z: Float): Float { - return MathHelper.sqrt_float(x * x + y * y + z * z) - } - } \ No newline at end of file From fd077f3c49b4b65930fa80ff16873075565f1e21 Mon Sep 17 00:00:00 2001 From: kingstefan26 <70776766+kingstefan26@users.noreply.github.com> Date: Thu, 29 Dec 2022 20:53:00 +0100 Subject: [PATCH 22/22] inline the debug config val --- build.gradle | 1 - .../quantizr/dungeonrooms/ChatTransmitter.kt | 2 +- .../github/quantizr/dungeonrooms/DRMConfig.kt | 8 +- .../quantizr/dungeonrooms/DungeonRooms.kt | 24 +- .../dungeonrooms/dungeons/DungeonManager.kt | 1 + .../dungeonrooms/dungeons/RoomDetection.kt | 1 - .../dungeonrooms/dungeons/Waypoints.kt | 38 +- .../pathfinding/CachedPathFinder.kt | 63 +- .../algorithms/CachedAlgBuilder.kt | 20 +- .../dungeonrooms/test/PathfindTest.kt | 43 +- .../quantizr/dungeonrooms/utils/BlockCache.kt | 1 - .../utils/DungeonRoomInfoRegistry.kt | 45 + .../00d66020-b34e-429d-9fd3-696bc15cfce2.json | 1672 +++++ .../01949106-2ddc-4601-9b4c-e934f5d373a6.json | 1 + .../02b94b9a-8990-446a-993a-9b59de987b16.json | 1468 +++++ .../05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json | 1 + .../067df8a7-9d28-4fdd-a538-c6d38f126cd2.json | 1 + .../07ce87bb-a49a-412b-a8f7-c9dde9f884de.json | 1 + .../0877607a-b8a2-433a-b893-f4de7c83378a.json | 1 + .../09c3072e-3099-4019-a577-7ddc17a9e29d.json | 1 + .../11982f7f-703e-4d98-9d27-4e07ba3fef71.json | 1 + .../12080b02-4ccc-49ce-9eaf-e7d8946f3984.json | 1 + .../15083814-fb7b-4791-b5d7-0810dd396b01.json | 1 + .../1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json | 5412 +++++++++++++++++ .../1df3a849-2a5b-451d-8bd7-971eb608363c.json | 2405 ++++++++ .../1e8d4327-7465-4bff-a8c7-505528273985.json | 1579 +++++ .../23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json | 1 + .../250624ee-bb7a-4330-b698-a78f5e44ba99.json | 1 + .../25956a46-7094-4a9e-b5d9-c9f8291ffef4.json | 1 + .../296fd7ea-4ac5-46e5-beb9-5d27019e3796.json | 1 + .../2b5cb4ef-00a3-4aae-baec-d2094a158d60.json | 1403 +++++ .../2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json | 1 + .../2d9705f3-2e69-4035-905d-6b11d6ee270b.json | 1 + .../2f7927cc-4ce0-4f02-a81a-88d5709248e8.json | 1 + .../31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json | 1 + .../31766264-1004-492f-9d65-cb5deaff82f0.json | 1 + .../3406a386-c56d-47de-a0ad-aa0ab74d2abb.json | 1 + .../340c5665-e59b-42c1-bf84-8fc03d38981f.json | 1 + .../34639497-d991-4137-83c4-db0a25542b71.json | 1 + .../35fb741d-b0b1-471a-a5b6-8224f99a1133.json | 1 + .../388e95fc-4775-4747-8473-5329fbb8e5cc.json | 1 + .../38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json | 1 + .../3acb9949-d252-4f16-9983-a1fcdc38a6cf.json | 1 + .../4067578d-c259-4f89-8b88-a891b2decbbf.json | 1 + .../40fb4b64-18d7-4301-b899-0da7b1d466c1.json | 1 + .../41086d97-5e36-41a5-88ff-d3fb296791ce.json | 1 + .../42029218-9142-4286-b184-e17b3734886f.json | 1 + .../43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json | 1 + .../44d9b135-d2ca-4350-969e-6e9c34af2fe6.json | 1 + .../4538898f-8e79-4d53-aae6-08e4df6abb61.json | 1 + .../4b5f4983-0453-4402-821c-804f092d1ecd.json | 1 + .../4e8087d2-0c64-4558-b4ff-4be94275a320.json | 1 + .../4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json | 1 + .../4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json | 1 + .../4ffce449-eab8-470b-bc8c-d30507248fc2.json | 1 + .../5000be9d-3081-4a5e-8563-dd826705663a.json | 1 + .../54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json | 1 + .../54aaf168-7039-48dc-99a3-8d1f02d79097.json | 1 + .../5aef2a82-42a3-495a-9e72-63a9b611e1cb.json | 1 + .../5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json | 1 + .../63634341-8ef3-4197-aafa-17f5875dd307.json | 1 + .../6367a338-dd48-4c30-9e03-7ff6b5c7a936.json | 1 + .../65d8264d-f47c-4306-b89f-46e28b117511.json | 1 + .../6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json | 1380 +++++ .../6b7256ae-8673-4c2f-825f-6cd727801ea9.json | 1 + .../6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json | 1 + .../6fac9602-c596-458f-9750-9b331e2cb845.json | 1 + .../70a1451a-5430-40bd-b20b-13245aac910a.json | 1 + .../7a594650-2a42-46e5-81a6-9b7d198e9c1c.json | 1 + .../7d975e04-15c8-40cb-8c12-d664edc1b0d7.json | 1 + .../7dd6596f-c647-4144-9eec-fb4690e12251.json | 1 + .../8116e928-56f1-4e0b-933a-f86b841938c8.json | 1 + .../81cf3e0b-70c5-4803-9169-7e7864b096ce.json | 1 + .../83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json | 1 + .../845aec22-bc9e-4d50-b8de-db67188232e9.json | 1 + .../86a3b53b-6ede-43bd-8988-135001149d4b.json | 1 + .../8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json | 1 + .../8c184746-6857-480a-958e-f22e09bb1295.json | 1 + .../8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json | 393 ++ .../8f317c52-6550-42dd-829b-2a477389fe89.json | 1 + .../9087fdc7-43e2-4736-b53b-33477ac65351.json | 1 + .../91068a01-bd3e-402c-99aa-e148f9f04c41.json | 1 + .../9139cb1c-b6f3-4bac-92de-909b1eb73449.json | 1 + .../95c57abe-34d4-443c-baac-11d43cbc821f.json | 1 + .../9650cb39-5f22-45f4-86cd-5d197a4266e5.json | 1 + .../9890fbac-d382-4525-ab88-fe1ebc118702.json | 1 + .../990f6e4c-f7cf-4d27-ae91-11219b85861f.json | 1 + .../9a0e71bf-babd-421e-a785-442c13d5a8b2.json | 1 + .../9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json | 1 + .../9cd523a2-0c7f-4072-a374-9b99d59554ea.json | 1 + .../9fa09d68-c483-4320-872e-9e07b049ee37.json | 1 + .../a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json | 1 + .../a069f006-0728-4952-8d9f-1d318cee60d8.json | 1 + .../a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json | 1 + .../a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json | 1 + .../a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json | 1 + .../a5b419e7-49ee-4d6d-bdce-470f508b315d.json | 1 + .../a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json | 1 + .../a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json | 1 + .../ae5b48ac-43ec-4837-a34e-ac70cba71481.json | 1 + .../b2dce4ed-2bda-4303-a4d7-3ebb914db318.json | 1 + .../b2df250c-4af2-4201-963c-0ee1cb6bd3de.json | 1 + .../b58cfdf5-a11d-4f28-b3c4-6576e5157374.json | 1 + .../b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json | 1 + .../c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json | 1 + .../c2ea0a41-d495-437f-86cc-235a71c49f22.json | 1 + .../c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json | 1 + .../c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json | 1 + .../c9078cd2-91d4-457d-ae30-3579293821da.json | 1 + .../cab054ed-b9ea-4f54-9d23-9864a50789f0.json | 1 + .../cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json | 1 + .../cf6d49d3-4f1e-4ec9-836e-049573793ddd.json | 1 + .../d3e61abf-4198-4520-a950-a03761a0eb6f.json | 1 + .../d4a015ae-f123-4696-8fb6-719b5a21b623.json | 1 + .../d712ae5b-903a-4d80-96ee-8ee54b050ea5.json | 1 + .../dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json | 1 + .../dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json | 1 + .../e0608346-08a0-490b-a6d5-96786ebd5d96.json | 1 + .../e22c44d7-4094-4230-89ba-efa438aa3615.json | 1 + .../e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json | 1 + .../e6d51aea-c715-4396-986d-2e09d31993e1.json | 1 + .../e773dc09-f989-4d8f-8aba-43dbb71e7b62.json | 1 + .../e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json | 1 + .../e83ed91c-4a35-4020-985a-d0306f17117a.json | 1 + .../e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json | 1 + .../ed57833a-01ca-4487-b516-6c3690c6221c.json | 1 + .../ef097340-7c03-407d-b634-7bf7af551d01.json | 1 + .../f8bee714-de5b-4007-a572-575fcd467c82.json | 1 + .../fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json | 1 + .../ffd5411b-6ff4-4f60-b387-72f00510ec50.json | 1 + src/main/resources/mcmod.info | 1 - src/main/resources/roomdataindex.txt | 118 + 132 files changed, 16095 insertions(+), 93 deletions(-) create mode 100755 src/main/kotlin/io/github/quantizr/dungeonrooms/utils/DungeonRoomInfoRegistry.kt create mode 100644 src/main/resources/dgroomdata/00d66020-b34e-429d-9fd3-696bc15cfce2.json create mode 100644 src/main/resources/dgroomdata/01949106-2ddc-4601-9b4c-e934f5d373a6.json create mode 100644 src/main/resources/dgroomdata/02b94b9a-8990-446a-993a-9b59de987b16.json create mode 100644 src/main/resources/dgroomdata/05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json create mode 100644 src/main/resources/dgroomdata/067df8a7-9d28-4fdd-a538-c6d38f126cd2.json create mode 100644 src/main/resources/dgroomdata/07ce87bb-a49a-412b-a8f7-c9dde9f884de.json create mode 100644 src/main/resources/dgroomdata/0877607a-b8a2-433a-b893-f4de7c83378a.json create mode 100644 src/main/resources/dgroomdata/09c3072e-3099-4019-a577-7ddc17a9e29d.json create mode 100644 src/main/resources/dgroomdata/11982f7f-703e-4d98-9d27-4e07ba3fef71.json create mode 100644 src/main/resources/dgroomdata/12080b02-4ccc-49ce-9eaf-e7d8946f3984.json create mode 100644 src/main/resources/dgroomdata/15083814-fb7b-4791-b5d7-0810dd396b01.json create mode 100644 src/main/resources/dgroomdata/1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json create mode 100644 src/main/resources/dgroomdata/1df3a849-2a5b-451d-8bd7-971eb608363c.json create mode 100644 src/main/resources/dgroomdata/1e8d4327-7465-4bff-a8c7-505528273985.json create mode 100644 src/main/resources/dgroomdata/23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json create mode 100644 src/main/resources/dgroomdata/250624ee-bb7a-4330-b698-a78f5e44ba99.json create mode 100644 src/main/resources/dgroomdata/25956a46-7094-4a9e-b5d9-c9f8291ffef4.json create mode 100644 src/main/resources/dgroomdata/296fd7ea-4ac5-46e5-beb9-5d27019e3796.json create mode 100644 src/main/resources/dgroomdata/2b5cb4ef-00a3-4aae-baec-d2094a158d60.json create mode 100644 src/main/resources/dgroomdata/2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json create mode 100644 src/main/resources/dgroomdata/2d9705f3-2e69-4035-905d-6b11d6ee270b.json create mode 100644 src/main/resources/dgroomdata/2f7927cc-4ce0-4f02-a81a-88d5709248e8.json create mode 100644 src/main/resources/dgroomdata/31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json create mode 100644 src/main/resources/dgroomdata/31766264-1004-492f-9d65-cb5deaff82f0.json create mode 100644 src/main/resources/dgroomdata/3406a386-c56d-47de-a0ad-aa0ab74d2abb.json create mode 100644 src/main/resources/dgroomdata/340c5665-e59b-42c1-bf84-8fc03d38981f.json create mode 100644 src/main/resources/dgroomdata/34639497-d991-4137-83c4-db0a25542b71.json create mode 100644 src/main/resources/dgroomdata/35fb741d-b0b1-471a-a5b6-8224f99a1133.json create mode 100644 src/main/resources/dgroomdata/388e95fc-4775-4747-8473-5329fbb8e5cc.json create mode 100644 src/main/resources/dgroomdata/38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json create mode 100644 src/main/resources/dgroomdata/3acb9949-d252-4f16-9983-a1fcdc38a6cf.json create mode 100644 src/main/resources/dgroomdata/4067578d-c259-4f89-8b88-a891b2decbbf.json create mode 100644 src/main/resources/dgroomdata/40fb4b64-18d7-4301-b899-0da7b1d466c1.json create mode 100644 src/main/resources/dgroomdata/41086d97-5e36-41a5-88ff-d3fb296791ce.json create mode 100644 src/main/resources/dgroomdata/42029218-9142-4286-b184-e17b3734886f.json create mode 100644 src/main/resources/dgroomdata/43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json create mode 100644 src/main/resources/dgroomdata/44d9b135-d2ca-4350-969e-6e9c34af2fe6.json create mode 100644 src/main/resources/dgroomdata/4538898f-8e79-4d53-aae6-08e4df6abb61.json create mode 100644 src/main/resources/dgroomdata/4b5f4983-0453-4402-821c-804f092d1ecd.json create mode 100644 src/main/resources/dgroomdata/4e8087d2-0c64-4558-b4ff-4be94275a320.json create mode 100644 src/main/resources/dgroomdata/4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json create mode 100644 src/main/resources/dgroomdata/4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json create mode 100644 src/main/resources/dgroomdata/4ffce449-eab8-470b-bc8c-d30507248fc2.json create mode 100644 src/main/resources/dgroomdata/5000be9d-3081-4a5e-8563-dd826705663a.json create mode 100644 src/main/resources/dgroomdata/54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json create mode 100644 src/main/resources/dgroomdata/54aaf168-7039-48dc-99a3-8d1f02d79097.json create mode 100644 src/main/resources/dgroomdata/5aef2a82-42a3-495a-9e72-63a9b611e1cb.json create mode 100644 src/main/resources/dgroomdata/5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json create mode 100644 src/main/resources/dgroomdata/63634341-8ef3-4197-aafa-17f5875dd307.json create mode 100644 src/main/resources/dgroomdata/6367a338-dd48-4c30-9e03-7ff6b5c7a936.json create mode 100644 src/main/resources/dgroomdata/65d8264d-f47c-4306-b89f-46e28b117511.json create mode 100644 src/main/resources/dgroomdata/6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json create mode 100644 src/main/resources/dgroomdata/6b7256ae-8673-4c2f-825f-6cd727801ea9.json create mode 100644 src/main/resources/dgroomdata/6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json create mode 100644 src/main/resources/dgroomdata/6fac9602-c596-458f-9750-9b331e2cb845.json create mode 100644 src/main/resources/dgroomdata/70a1451a-5430-40bd-b20b-13245aac910a.json create mode 100644 src/main/resources/dgroomdata/7a594650-2a42-46e5-81a6-9b7d198e9c1c.json create mode 100644 src/main/resources/dgroomdata/7d975e04-15c8-40cb-8c12-d664edc1b0d7.json create mode 100644 src/main/resources/dgroomdata/7dd6596f-c647-4144-9eec-fb4690e12251.json create mode 100644 src/main/resources/dgroomdata/8116e928-56f1-4e0b-933a-f86b841938c8.json create mode 100644 src/main/resources/dgroomdata/81cf3e0b-70c5-4803-9169-7e7864b096ce.json create mode 100644 src/main/resources/dgroomdata/83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json create mode 100644 src/main/resources/dgroomdata/845aec22-bc9e-4d50-b8de-db67188232e9.json create mode 100644 src/main/resources/dgroomdata/86a3b53b-6ede-43bd-8988-135001149d4b.json create mode 100644 src/main/resources/dgroomdata/8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json create mode 100644 src/main/resources/dgroomdata/8c184746-6857-480a-958e-f22e09bb1295.json create mode 100644 src/main/resources/dgroomdata/8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json create mode 100644 src/main/resources/dgroomdata/8f317c52-6550-42dd-829b-2a477389fe89.json create mode 100644 src/main/resources/dgroomdata/9087fdc7-43e2-4736-b53b-33477ac65351.json create mode 100644 src/main/resources/dgroomdata/91068a01-bd3e-402c-99aa-e148f9f04c41.json create mode 100644 src/main/resources/dgroomdata/9139cb1c-b6f3-4bac-92de-909b1eb73449.json create mode 100644 src/main/resources/dgroomdata/95c57abe-34d4-443c-baac-11d43cbc821f.json create mode 100644 src/main/resources/dgroomdata/9650cb39-5f22-45f4-86cd-5d197a4266e5.json create mode 100644 src/main/resources/dgroomdata/9890fbac-d382-4525-ab88-fe1ebc118702.json create mode 100644 src/main/resources/dgroomdata/990f6e4c-f7cf-4d27-ae91-11219b85861f.json create mode 100644 src/main/resources/dgroomdata/9a0e71bf-babd-421e-a785-442c13d5a8b2.json create mode 100644 src/main/resources/dgroomdata/9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json create mode 100644 src/main/resources/dgroomdata/9cd523a2-0c7f-4072-a374-9b99d59554ea.json create mode 100644 src/main/resources/dgroomdata/9fa09d68-c483-4320-872e-9e07b049ee37.json create mode 100644 src/main/resources/dgroomdata/a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json create mode 100644 src/main/resources/dgroomdata/a069f006-0728-4952-8d9f-1d318cee60d8.json create mode 100644 src/main/resources/dgroomdata/a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json create mode 100644 src/main/resources/dgroomdata/a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json create mode 100644 src/main/resources/dgroomdata/a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json create mode 100644 src/main/resources/dgroomdata/a5b419e7-49ee-4d6d-bdce-470f508b315d.json create mode 100644 src/main/resources/dgroomdata/a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json create mode 100644 src/main/resources/dgroomdata/a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json create mode 100644 src/main/resources/dgroomdata/ae5b48ac-43ec-4837-a34e-ac70cba71481.json create mode 100644 src/main/resources/dgroomdata/b2dce4ed-2bda-4303-a4d7-3ebb914db318.json create mode 100644 src/main/resources/dgroomdata/b2df250c-4af2-4201-963c-0ee1cb6bd3de.json create mode 100644 src/main/resources/dgroomdata/b58cfdf5-a11d-4f28-b3c4-6576e5157374.json create mode 100644 src/main/resources/dgroomdata/b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json create mode 100644 src/main/resources/dgroomdata/c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json create mode 100644 src/main/resources/dgroomdata/c2ea0a41-d495-437f-86cc-235a71c49f22.json create mode 100644 src/main/resources/dgroomdata/c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json create mode 100644 src/main/resources/dgroomdata/c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json create mode 100644 src/main/resources/dgroomdata/c9078cd2-91d4-457d-ae30-3579293821da.json create mode 100644 src/main/resources/dgroomdata/cab054ed-b9ea-4f54-9d23-9864a50789f0.json create mode 100644 src/main/resources/dgroomdata/cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json create mode 100644 src/main/resources/dgroomdata/cf6d49d3-4f1e-4ec9-836e-049573793ddd.json create mode 100644 src/main/resources/dgroomdata/d3e61abf-4198-4520-a950-a03761a0eb6f.json create mode 100644 src/main/resources/dgroomdata/d4a015ae-f123-4696-8fb6-719b5a21b623.json create mode 100644 src/main/resources/dgroomdata/d712ae5b-903a-4d80-96ee-8ee54b050ea5.json create mode 100644 src/main/resources/dgroomdata/dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json create mode 100644 src/main/resources/dgroomdata/dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json create mode 100644 src/main/resources/dgroomdata/e0608346-08a0-490b-a6d5-96786ebd5d96.json create mode 100644 src/main/resources/dgroomdata/e22c44d7-4094-4230-89ba-efa438aa3615.json create mode 100644 src/main/resources/dgroomdata/e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json create mode 100644 src/main/resources/dgroomdata/e6d51aea-c715-4396-986d-2e09d31993e1.json create mode 100644 src/main/resources/dgroomdata/e773dc09-f989-4d8f-8aba-43dbb71e7b62.json create mode 100644 src/main/resources/dgroomdata/e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json create mode 100644 src/main/resources/dgroomdata/e83ed91c-4a35-4020-985a-d0306f17117a.json create mode 100644 src/main/resources/dgroomdata/e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json create mode 100644 src/main/resources/dgroomdata/ed57833a-01ca-4487-b516-6c3690c6221c.json create mode 100644 src/main/resources/dgroomdata/ef097340-7c03-407d-b634-7bf7af551d01.json create mode 100644 src/main/resources/dgroomdata/f8bee714-de5b-4007-a572-575fcd467c82.json create mode 100644 src/main/resources/dgroomdata/fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json create mode 100644 src/main/resources/dgroomdata/ffd5411b-6ff4-4f60-b387-72f00510ec50.json create mode 100644 src/main/resources/roomdataindex.txt diff --git a/build.gradle b/build.gradle index c3cedd7..e14cd54 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,6 @@ loom { runs { 'client' { property('devauth.enabled','true') - property('dungeonsroommod_debug','true') client() } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt index 4e0a6f3..872a422 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/ChatTransmitter.kt @@ -60,7 +60,7 @@ class ChatTransmitter { @JvmStatic fun sendDebugChat(iChatComponent: IChatComponent) { - if (DungeonRooms.debug) addToQueue(iChatComponent as ChatComponentText) + if (DRMConfig.debug) addToQueue(iChatComponent as ChatComponentText) } @JvmStatic diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt index a2a5d62..e77729d 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DRMConfig.kt @@ -18,12 +18,13 @@ object DRMConfig : fun init(){ initialize() addListener("practiceModeOn") { - val text = """ + addToQueue( + """ §eDungeon Rooms: Practice Mode has been enabled. §e Waypoints will ONLY show up while you are pressing ${practiceModeKeyBind.display} §r (Hotkey is configurable in Minecraft Controls menu) """.trimIndent() - addToQueue(text) + ) } } @@ -45,6 +46,9 @@ object DRMConfig : @KeyBind(name = "Keybinding For Opening Room Images From DSG/SBP", size = 2, subcategory = "Secret Images") var openSecretImages = OneKeyBind(KEY_O) + @Switch(name = "Debug mode", subcategory = "Debug") + var debug = false + @Switch(name = "Waypoints Enabled", category = "Waypoints", subcategory = "Preferences", size = 2) var waypointsEnabled = true diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt index 4f74f64..49ead31 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/DungeonRooms.kt @@ -67,17 +67,12 @@ class DungeonRooms { val mc: Minecraft = Minecraft.getMinecraft() val motd: MutableList = ArrayList() var textToDisplay: List = emptyList() - lateinit var ex: ExecutorService private var tickAmount = 1 @Mod.EventHandler fun preInit(event: FMLPreInitializationEvent) { ClientCommandHandler.instance.registerCommand(RoomCommand()) - ex = Executors.newCachedThreadPool( - ThreadFactoryBuilder().setNameFormat("Dg-AsyncPathFinder-%d").build() - ) - //initialize logger logger = LogManager.getLogger(instance::class.java) // if(debug) Utils.setLogLevel(LogManager.getLogger(DungeonRooms::class.java), Level.DEBUG) @@ -105,7 +100,6 @@ class DungeonRooms { DRMConfig.init() roomDataLoader.startAsyncLoad() firstLogin = isFirstLaunch() - if(System.getProperty("dungeonsroommod_debug") != null) debug = true //register classes MinecraftForge.EVENT_BUS.register(this) @@ -115,7 +109,7 @@ class DungeonRooms { MinecraftForge.EVENT_BUS.register(dungeonManager) MinecraftForge.EVENT_BUS.register(roomDetection) MinecraftForge.EVENT_BUS.register(waypoints) - if(debug) MinecraftForge.EVENT_BUS.register(PathfindTest()) + if (DRMConfig.debug) MinecraftForge.EVENT_BUS.register(PathfindTest()) roomDataLoader.blockTillLoad() @@ -123,7 +117,10 @@ class DungeonRooms { try { logger.info("DungeonRooms: Checking for updates...") val gson = Gson() - val thaobject = gson.fromJson(IOUtils.toString(URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest")), JsonObject::class.java) + val thaobject = gson.fromJson( + IOUtils.toString(URL("https://api.github.com/repos/Quantizr/DungeonRoomsMod/releases/latest")), + JsonObject::class.java + ) val latestTag = thaobject.get("tag_name").asString val currentVersion = DefaultArtifactVersion(VERSION) val latestVersion = DefaultArtifactVersion(latestTag.substring(1)) @@ -132,7 +129,9 @@ class DungeonRooms { val update = ChatComponentText("${EnumChatFormatting.GREEN}${EnumChatFormatting.BOLD} [UPDATE] ") update.chatStyle.chatClickEvent = ClickEvent(ClickEvent.Action.OPEN_URL, releaseURL) ChatTransmitter.addToQueue( - ChatComponentText("${EnumChatFormatting.RED}Dungeon Rooms Mod is outdated. Please update to $latestTag.").appendSibling(update) + ChatComponentText("${EnumChatFormatting.RED}Dungeon Rooms Mod is outdated. Please update to $latestTag.").appendSibling( + update + ) ) } else { logger.info("DungeonRooms: No update found") @@ -145,10 +144,10 @@ class DungeonRooms { logger.info("DungeonRooms: MOTD has been checked") } catch (e: IOException) { - ChatTransmitter.addToQueue(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: An error has occured. See logs for more details.") e.printStackTrace() } catch (e: InterruptedException) { - ChatTransmitter.addToQueue(ChatComponentText(EnumChatFormatting.RED.toString() + "Dungeon Rooms: An error has occured. See logs for more details.")) + ChatTransmitter.addToQueue("${EnumChatFormatting.RED}Dungeon Rooms: An error has occured. See logs for more details.") e.printStackTrace() } }.start() @@ -172,7 +171,6 @@ class DungeonRooms { * Modified from Danker's Skyblock Mod under the GNU General Public License v3.0 * https://github.com/bowser0000/SkyblockMod/blob/master/LICENSE * @author bowser0000 - * modified by kingstefan26 */ @SubscribeEvent fun onServerConnect(event: ClientConnectedToServerEvent) { @@ -252,8 +250,6 @@ class DungeonRooms { @JvmStatic lateinit var instance: DungeonRooms private set - var debug = false - private set const val MODID = "@ID@" const val VERSION = "@VER@" diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt index c0c5562..fc47651 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/DungeonManager.kt @@ -21,6 +21,7 @@ import io.github.quantizr.dungeonrooms.ChatTransmitter import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.DungeonRooms.Companion.instance +import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import net.minecraft.client.Minecraft diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt index 720cc2e..da3570c 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/RoomDetection.kt @@ -547,7 +547,6 @@ class RoomDetection { incompleteScan = 0 redoScan = 0 DungeonRooms.instance.waypoints.secretCount = 0 - DungeonRooms.instance.waypoints.pathfindFutures.clear() DungeonRooms.instance.waypoints.donePathfindFutures.clear() } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt index ba2a674..a53b115 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/dungeons/Waypoints.kt @@ -25,6 +25,7 @@ import io.github.quantizr.dungeonrooms.pathfinding.PfPath import io.github.quantizr.dungeonrooms.utils.MapUtils import io.github.quantizr.dungeonrooms.utils.Utils import io.github.quantizr.dungeonrooms.utils.WaypointUtils +import kotlinx.coroutines.Deferred import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.culling.Frustum @@ -44,12 +45,14 @@ import net.minecraftforge.fml.common.gameevent.InputEvent import net.minecraftforge.fml.common.gameevent.TickEvent import org.joml.Vector3i import java.awt.Color -import java.util.concurrent.Future +import java.util.concurrent.ConcurrentHashMap class Waypoints { private var frustum = Frustum() private var completedSecrets = 0 + val cachedPathFinder = CachedPathFinder() + var allFound = false var secretCount = 0 var allSecretsMap: MutableMap?> = HashMap() @@ -57,15 +60,13 @@ class Waypoints { private var tickCounter = 0 - // secret loc <-> pfjob - // currently executing pathfind jobs that are saved here - val pathfindFutures: MutableMap> = HashMap() // user loc <-> pfjob // this is used as a "last result cache", - // since new the player is moving and we want to save the last result + // since new the player is moving, and we want to save the last processed path val donePathfindFutures: MutableMap = HashMap() + @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { if (event.phase != TickEvent.Phase.START) return @@ -79,12 +80,11 @@ class Waypoints { if (tickCounter % DRMConfig.pathfindingRefreshRate != 0) return tickCounter = 0 - val player = Minecraft.getMinecraft().thePlayer - val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return secretList.stream() .filter { it.category == "chest" || it.category == "wither" || it.category == "item" || it.category == "bat" } + // make sure the secret is not done / and only target the first secret in the chain .filter { secret -> val nmbr = getSecretNumber(secret.secretName) @@ -93,9 +93,17 @@ class Waypoints { .forEach { val pos = getSecretPos(it.x, it.y, it.z) val scrtLoc = Vector3i(pos.x, pos.y, pos.z) - val oldFuture = pathfindFutures[scrtLoc] - if(oldFuture == null || oldFuture.isDone) { - pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath(player, scrtLoc, id=it.secretName) + cachedPathFinder.createPathAsync( + Vector3i( + Minecraft.getMinecraft().thePlayer.posX.toInt(), + Minecraft.getMinecraft().thePlayer.posY.toInt(), + Minecraft.getMinecraft().thePlayer.posZ.toInt() + ), + scrtLoc, + id = it.secretName, + lockProcessingThisTarget = true + ) { path -> + donePathfindFutures[scrtLoc] = path } } @@ -104,16 +112,6 @@ class Waypoints { private fun updateFinishedFutures(){ - // cache competed pathfind jobs to the donePathfindFutures map - with(pathfindFutures.iterator()) { - forEach {(loc, ftr) -> - if(ftr.isDone){ - donePathfindFutures[loc] = ftr.get() - remove() - } - } - } - // remove cached pathfind jobs that are leading to done secrets val (_, secretList) = DungeonRooms.instance.getJsonSecretList() ?: return secretList.stream() diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt index d0e37d3..570f939 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/CachedPathFinder.kt @@ -1,32 +1,33 @@ package io.github.quantizr.dungeonrooms.pathfinding import com.github.benmanes.caffeine.cache.Caffeine -import io.github.quantizr.dungeonrooms.DungeonRooms +import io.github.quantizr.dungeonrooms.DRMConfig import io.github.quantizr.dungeonrooms.pathfinding.algorithms.CachedAlgBuilder import io.github.quantizr.dungeonrooms.test.PathfindTest import io.github.quantizr.dungeonrooms.utils.BlockCache +import kotlinx.coroutines.* import net.minecraft.client.Minecraft -import net.minecraft.entity.Entity import net.minecraft.init.Blocks import net.minecraft.util.AxisAlignedBB import net.minecraft.util.BlockPos import org.joml.Vector3d import org.joml.Vector3i -import java.time.Duration import java.util.* -import java.util.concurrent.Future +import java.util.concurrent.ConcurrentHashMap import kotlin.math.floor -object CachedPathFinder { +class CachedPathFinder { - private val cache = Caffeine.newBuilder() + private val algBuilder = CachedAlgBuilder(this) + + private val pathfindCache = Caffeine.newBuilder() .maximumSize(500) .build { job: PfJob -> - val stat = CachedAlgBuilder.buildPfStrategy(job.to) + val stat = algBuilder.buildPfAlg(job.to) val now = System.nanoTime() stat.pathfind(job) - if (DungeonRooms.debug) { + if (DRMConfig.debug) { PathfindTest.textToDisplay = listOf("Pathfinding took: ${(System.nanoTime() - now) / 1000000}ms") } return@build PfPath(job.id, stat.route) @@ -37,8 +38,7 @@ object CachedPathFinder { val preBuilt = Blocks.stone.getStateFromMeta(2) private val cache = Caffeine.newBuilder() - .maximumSize(50_000) - .expireAfterWrite(Duration.ofSeconds(6)) + .maximumSize(250_000) .build { key: Vector3i -> if(Minecraft.getMinecraft().theWorld == null) return@build null val wX = key.x / 2.0f @@ -65,7 +65,7 @@ object CachedPathFinder { for (l1 in i1 until j1) { for (i2 in k - 1 until l) { blockPos[k1, i2] = l1 - val blockState = BlockCache.getBlockState(blockPos, true) ?: return@build true + val blockState = BlockCache.getBlockState(blockPos) ?: return@build true if (blockState.block.material.blocksMovement()) { if (!blockState.block.isFullCube || i2 != k - 1) { if (blockState != preBuilt) { @@ -102,20 +102,43 @@ object CachedPathFinder { } + private val scope = CoroutineScope(Dispatchers.Default) + + fun destroy() { + scope.cancel() + pathfindCache.invalidateAll() + algBuilder.destroy() + } + + private val currProcesed: MutableMap = ConcurrentHashMap() - fun CreatePath( - entityIn: Entity, - targetPos: Vector3i, + /** + * [lockProcessingThisTarget] if true prevents multiple pathfinds from being processed at the same time + * to one destination + */ + fun createPathAsync( + start: Vector3i, + target: Vector3i, room: BlockedChecker = defaultAccessor, - id: String = UUID.randomUUID().toString() - ): Future { - return DungeonRooms.instance.ex.submit { - return@submit cache[PfJob( - Vector3i(entityIn.posX.toInt(), entityIn.posY.toInt(), entityIn.posZ.toInt()), - Vector3d(targetPos).add(.5, .5, .5), + id: String = UUID.randomUUID().toString(), + lockProcessingThisTarget: Boolean = false, + callback: (PfPath) -> Unit = {} + ) { + if(lockProcessingThisTarget) { + if (currProcesed[target] == true) { + return + } + currProcesed[target] = true + } + scope.async { + val path = pathfindCache[PfJob( + start, + Vector3d(target).add(.5, .5, .5), room, id )]!! + callback(path) + if(lockProcessingThisTarget) currProcesed[target] = false } } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt index f3cbdff..10dcbbc 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/pathfinding/algorithms/CachedAlgBuilder.kt @@ -2,14 +2,14 @@ package io.github.quantizr.dungeonrooms.pathfinding.algorithms import com.github.benmanes.caffeine.cache.Caffeine import io.github.quantizr.dungeonrooms.DRMConfig -import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder.defaultAccessor +import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarCornerCut import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.AStarFineGrid import io.github.quantizr.dungeonrooms.pathfinding.algorithms.impl.ThetaStar import org.joml.Vector3d import java.time.Duration -object CachedAlgBuilder { +class CachedAlgBuilder(val parent: CachedPathFinder) { // since we pathfind to the same destination and the world does not change, // we can cache open nodes in the A* family of algorithms private val cache = Caffeine.newBuilder() @@ -17,14 +17,18 @@ object CachedAlgBuilder { .expireAfterWrite(Duration.ofMinutes(2)) .build { _: Vector3d -> return@build when (DRMConfig.secretPathfindStrategy) { - 0 -> ThetaStar(defaultAccessor) - 1 -> AStarCornerCut(defaultAccessor) - 2 -> AStarFineGrid(defaultAccessor) - else -> ThetaStar(defaultAccessor) + 0 -> ThetaStar(parent.defaultAccessor) + 1 -> AStarCornerCut(parent.defaultAccessor) + 2 -> AStarFineGrid(parent.defaultAccessor) + else -> ThetaStar(parent.defaultAccessor) } } - fun buildPfStrategy(cacheDestenation: Vector3d): IPathfinderAlgorithm { - return cache.get(cacheDestenation)!! + fun buildPfAlg(destination: Vector3d): IPathfinderAlgorithm { + return cache.get(destination)!! + } + + fun destroy() { + cache.invalidateAll() } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt index 7c40961..20c9cfd 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/test/PathfindTest.kt @@ -1,7 +1,6 @@ package io.github.quantizr.dungeonrooms.test import io.github.quantizr.dungeonrooms.DRMConfig -import io.github.quantizr.dungeonrooms.DungeonRooms import io.github.quantizr.dungeonrooms.handlers.TextRenderer import io.github.quantizr.dungeonrooms.pathfinding.CachedPathFinder import io.github.quantizr.dungeonrooms.pathfinding.PfPath @@ -12,50 +11,46 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent import net.minecraftforge.client.event.RenderWorldLastEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent -import org.joml.Vector3d import org.joml.Vector3i import java.awt.Color -import java.util.concurrent.Future class PathfindTest { + + val pathFinder: CachedPathFinder = CachedPathFinder() + companion object { var textToDisplay: List = emptyList() } - private val pathfindFutures: MutableMap> = HashMap() private val donePathfindFutures: MutableMap = HashMap() @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { if (event.phase != TickEvent.Phase.START || Minecraft.getMinecraft().thePlayer == null) return - if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return - updateFinishedFutures() + if (!Minecraft.getMinecraft().isSingleplayer || !DRMConfig.debug) return - val scrtLoc = Vector3i(10, 6, 10) - val oldFuture = pathfindFutures[scrtLoc] - if (oldFuture == null || oldFuture.isDone) { - pathfindFutures[scrtLoc] = CachedPathFinder.CreatePath( - Minecraft.getMinecraft().thePlayer, - scrtLoc - ) - } - } + val locs = listOf(Vector3i(10, 6, 10), Vector3i(10, 6, 15)) - private fun updateFinishedFutures(){ - with(pathfindFutures.iterator()) { - forEach {(loc, ftr) -> - if(ftr.isDone){ - donePathfindFutures[loc] = ftr.get() - remove() - } + for (loc in locs) { + pathFinder.createPathAsync( + Vector3i( + Minecraft.getMinecraft().thePlayer.posX.toInt(), + Minecraft.getMinecraft().thePlayer.posY.toInt(), + Minecraft.getMinecraft().thePlayer.posZ.toInt() + ), + loc, + lockProcessingThisTarget = true + ) { + donePathfindFutures[loc] = it } + } } @SubscribeEvent fun onWorldRender(event: RenderWorldLastEvent) { - if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return + if (!Minecraft.getMinecraft().isSingleplayer || !DRMConfig.debug) return donePathfindFutures.forEach { (_, points) -> WaypointUtils.drawLinesVec3( points.path, @@ -72,7 +67,7 @@ class PathfindTest { @SubscribeEvent fun renderPlayerInfo(event: RenderGameOverlayEvent.Post) { if (event.type != RenderGameOverlayEvent.ElementType.ALL) return - if (!Minecraft.getMinecraft().isSingleplayer || !DungeonRooms.debug) return + if (!Minecraft.getMinecraft().isSingleplayer || !DRMConfig.debug) return val mc = Minecraft.getMinecraft() if (textToDisplay.isNotEmpty()) { val scaledResolution = ScaledResolution(mc) diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt index 918dc64..f0cf140 100644 --- a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/BlockCache.kt @@ -14,7 +14,6 @@ import java.time.Duration object BlockCache { private val cache = Caffeine.newBuilder() .maximumSize(30_000) - .expireAfterWrite(Duration.ofMinutes(1)) .build { key: BlockPos? -> Minecraft.getMinecraft().theWorld.getBlockState(key) } diff --git a/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/DungeonRoomInfoRegistry.kt b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/DungeonRoomInfoRegistry.kt new file mode 100755 index 0000000..5d1a7e9 --- /dev/null +++ b/src/main/kotlin/io/github/quantizr/dungeonrooms/utils/DungeonRoomInfoRegistry.kt @@ -0,0 +1,45 @@ +package io.github.quantizr.dungeonrooms.utils + +import com.google.gson.Gson +import com.google.gson.JsonObject +import io.github.quantizr.dungeonrooms.DungeonRooms +import org.apache.commons.io.IOUtils +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger +import java.io.* +import java.util.* + +object DungeonRoomInfoRegistry { + val logger: Logger = LogManager.getLogger("DungeonRoomInfoRegistry") + + val thing: MutableSet = HashSet() + + + @JvmStatic + fun loadAll(dir: File) { + val gson = Gson() + + val lines = IOUtils.readLines( + Objects.requireNonNull( + DungeonRooms::class.java.getResourceAsStream("/roomdataindex.txt") + ) + ) + for (name in lines) { + if (name.endsWith(".json")) { + try { + DungeonRooms::class.java.getResourceAsStream("/$name") + .use { fis -> + fis?.let { + InputStreamReader(fis).use { yas -> + thing.add(gson.fromJson(yas, JsonObject::class.java)) + } + } + } + } catch (e: Exception) { + logger.error(name) + e.printStackTrace() + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/00d66020-b34e-429d-9fd3-696bc15cfce2.json b/src/main/resources/dgroomdata/00d66020-b34e-429d-9fd3-696bc15cfce2.json new file mode 100644 index 0000000..9d751d7 --- /dev/null +++ b/src/main/resources/dgroomdata/00d66020-b34e-429d-9fd3-696bc15cfce2.json @@ -0,0 +1,1672 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 98, + 98, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 98, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 159, + 159, + 159, + 159, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 1, + 1, + 98, + 98, + 159, + 159, + 159, + 159, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 144, + 0, + 0, + 0, + 1, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 98, + 98, + 0, + 144, + 144, + 0, + 98, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 50, + 0, + 0, + 0, + 17, + 0, + 0, + 18, + 18, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 136, + 5, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18, + 98, + 98, + 98, + 98, + 98, + 1, + 98, + 0, + 5, + 134, + 0, + 0, + 0, + 0, + 5, + 136, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 98, + 98, + 98, + 98, + 98, + 1, + 1, + 134, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 98, + 98, + 98, + 1, + 98, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51, + 109, + 109, + 109, + 109, + 109, + 51, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 144, + 0, + 0, + 0, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 4, + 48, + 4, + 4, + 4, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 48, + 4, + 48, + 48, + 48, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 144, + 0, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 0, + 0, + 144, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "00d66020-b34e-429d-9fd3-696bc15cfce2", + "name": "red-green", + "processorId": "default", + "properties": {}, + "mechanics": { + "chest-1": { + "mechType": "Secret", + "secretPoint": { + "x": 16, + "y": 5, + "z": 2 + }, + "secretType": "CHEST", + "preRequisite": [ + "door-1:open" + ] + }, + "door-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 15, + "y": 7, + "z": 8 + }, + { + "x": 15, + "y": 6, + "z": 8 + }, + { + "x": 15, + "y": 5, + "z": 8 + }, + { + "x": 15, + "y": 4, + "z": 8 + }, + { + "x": 16, + "y": 7, + "z": 8 + }, + { + "x": 16, + "y": 6, + "z": 8 + }, + { + "x": 16, + "y": 5, + "z": 8 + }, + { + "x": 16, + "y": 4, + "z": 8 + }, + { + "x": 17, + "y": 7, + "z": 8 + }, + { + "x": 17, + "y": 6, + "z": 8 + }, + { + "x": 17, + "y": 5, + "z": 8 + }, + { + "x": 17, + "y": 4, + "z": 8 + } + ] + }, + "preRequisite": [ + "lever-1:triggered" + ], + "mechType": "OnewayDoor" + }, + "lever-1": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 16, + "y": -9, + "z": 2 + }, + "preRequisite": [], + "triggering": "door-1" + }, + "lever-2": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 16, + "y": 15, + "z": 28 + }, + "preRequisite": [], + "triggering": "door-2" + }, + "door-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 15, + "y": -6, + "z": 29 + }, + { + "x": 15, + "y": -7, + "z": 29 + }, + { + "x": 15, + "y": -8, + "z": 29 + }, + { + "x": 15, + "y": -9, + "z": 29 + }, + { + "x": 16, + "y": -6, + "z": 29 + }, + { + "x": 16, + "y": -7, + "z": 29 + }, + { + "x": 16, + "y": -8, + "z": 29 + }, + { + "x": 16, + "y": -9, + "z": 29 + }, + { + "x": 17, + "y": -6, + "z": 29 + }, + { + "x": 17, + "y": -7, + "z": 29 + }, + { + "x": 17, + "y": -8, + "z": 29 + }, + { + "x": 17, + "y": -9, + "z": 29 + } + ] + }, + "preRequisite": [ + "lever-2:triggered" + ], + "mechType": "OnewayDoor" + }, + "itemdrop-1": { + "mechType": "Secret", + "secretPoint": { + "x": 16, + "y": -9, + "z": 30 + }, + "secretType": "ITEM_DROP", + "preRequisite": [] + }, + "itemdrop-2": { + "mechType": "Secret", + "secretPoint": { + "x": 29, + "y": 7, + "z": 18 + }, + "secretType": "ITEM_DROP", + "preRequisite": [ + "superboom-1:open" + ] + }, + "crypt-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 6, + "y": 14, + "z": 20 + }, + { + "x": 6, + "y": 13, + "z": 20 + }, + { + "x": 7, + "y": 14, + "z": 20 + }, + { + "x": 7, + "y": 13, + "z": 20 + }, + { + "x": 8, + "y": 14, + "z": 20 + }, + { + "x": 8, + "y": 13, + "z": 20 + }, + { + "x": 6, + "y": 14, + "z": 21 + }, + { + "x": 6, + "y": 13, + "z": 21 + }, + { + "x": 7, + "y": 14, + "z": 21 + }, + { + "x": 7, + "y": 13, + "z": 21 + }, + { + "x": 8, + "y": 14, + "z": 21 + }, + { + "x": 8, + "y": 13, + "z": 21 + }, + { + "x": 6, + "y": 14, + "z": 22 + }, + { + "x": 6, + "y": 13, + "z": 22 + }, + { + "x": 7, + "y": 14, + "z": 22 + }, + { + "x": 7, + "y": 13, + "z": 22 + }, + { + "x": 8, + "y": 14, + "z": 22 + }, + { + "x": 8, + "y": 13, + "z": 22 + }, + { + "x": 6, + "y": 14, + "z": 23 + }, + { + "x": 6, + "y": 13, + "z": 23 + }, + { + "x": 7, + "y": 14, + "z": 23 + }, + { + "x": 7, + "y": 13, + "z": 23 + }, + { + "x": 8, + "y": 14, + "z": 23 + }, + { + "x": 8, + "y": 13, + "z": 23 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 24, + "y": 14, + "z": 20 + }, + { + "x": 24, + "y": 13, + "z": 20 + }, + { + "x": 25, + "y": 14, + "z": 20 + }, + { + "x": 25, + "y": 13, + "z": 20 + }, + { + "x": 26, + "y": 14, + "z": 20 + }, + { + "x": 26, + "y": 13, + "z": 20 + }, + { + "x": 24, + "y": 14, + "z": 21 + }, + { + "x": 24, + "y": 13, + "z": 21 + }, + { + "x": 25, + "y": 14, + "z": 21 + }, + { + "x": 25, + "y": 13, + "z": 21 + }, + { + "x": 26, + "y": 14, + "z": 21 + }, + { + "x": 26, + "y": 13, + "z": 21 + }, + { + "x": 24, + "y": 14, + "z": 22 + }, + { + "x": 24, + "y": 13, + "z": 22 + }, + { + "x": 25, + "y": 14, + "z": 22 + }, + { + "x": 25, + "y": 13, + "z": 22 + }, + { + "x": 26, + "y": 14, + "z": 22 + }, + { + "x": 26, + "y": 13, + "z": 22 + }, + { + "x": 24, + "y": 14, + "z": 23 + }, + { + "x": 24, + "y": 13, + "z": 23 + }, + { + "x": 25, + "y": 14, + "z": 23 + }, + { + "x": 25, + "y": 13, + "z": 23 + }, + { + "x": 26, + "y": 14, + "z": 23 + }, + { + "x": 26, + "y": 13, + "z": 23 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "superboom-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 25, + "y": 9, + "z": 17 + }, + { + "x": 25, + "y": 8, + "z": 17 + }, + { + "x": 25, + "y": 7, + "z": 17 + }, + { + "x": 25, + "y": 9, + "z": 18 + }, + { + "x": 25, + "y": 8, + "z": 18 + }, + { + "x": 25, + "y": 7, + "z": 18 + }, + { + "x": 25, + "y": 9, + "z": 19 + }, + { + "x": 25, + "y": 8, + "z": 19 + }, + { + "x": 25, + "y": 7, + "z": 19 + } + ] + }, + "preRequisite": [], + "mechType": "BreakableWall" + } + }, + "totalSecrets": 3 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/01949106-2ddc-4601-9b4c-e934f5d373a6.json b/src/main/resources/dgroomdata/01949106-2ddc-4601-9b4c-e934f5d373a6.json new file mode 100644 index 0000000..baedf79 --- /dev/null +++ b/src/main/resources/dgroomdata/01949106-2ddc-4601-9b4c-e934f5d373a6.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,1,1,0,0,0,0,0,0,0,139,1,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,69,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,159,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,1,139,0,0,0,0,0,0,0,1,139,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,101,101,101,98,1,1,50,0,0,0,0,0,50,1,1,109,101,101,101,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,0,0,0,0,98,98,1,0,0,0,0,0,139,98,98,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,159,144,0,0,0,0,0,98,98,1,0,0,0,0,0,139,98,109,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,144,0,0,0,0,98,98,0,0,0,0,0,0,0,109,98,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,109,109,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,-1,0,0,0,0,0,109,98,0,0,0,0,0,0,18,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,0,0,0,0,0,109,98,139,0,0,0,0,0,139,98,98,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,0,0,98,98,1,0,0,0,0,0,139,98,98,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,101,101,101,98,1,1,50,0,0,0,0,0,50,1,1,98,101,101,101,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,0,0,139,139,0,0,0,0,0,0,0,139,1,50,0,0,0,50,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,0,0,1,139,0,0,0,0,0,0,0,139,1,50,0,0,0,50,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"01949106-2ddc-4601-9b4c-e934f5d373a6","name":"Redstone-key","processorId":"default","properties":{},"mechanics":{"key-slot":{"secretPoint":{"x":24,"y":-2,"z":28},"preRequisite":["door-1:open","redstone-key:found"],"mechType":"Dummy"},"chest-1":{"mechType":"Secret","secretPoint":{"x":8,"y":-8,"z":29},"secretType":"CHEST","preRequisite":["door-2:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":4,"y":0,"z":6},"preRequisite":["crypt-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":21,"y":4,"z":25},{"x":21,"y":3,"z":25},{"x":21,"y":2,"z":25},{"x":21,"y":1,"z":25},{"x":21,"y":0,"z":25},{"x":21,"y":-1,"z":25},{"x":21,"y":4,"z":26},{"x":21,"y":3,"z":26},{"x":21,"y":2,"z":26},{"x":21,"y":1,"z":26},{"x":21,"y":0,"z":26},{"x":21,"y":-1,"z":26},{"x":21,"y":4,"z":27},{"x":21,"y":3,"z":27},{"x":21,"y":2,"z":27},{"x":21,"y":1,"z":27},{"x":21,"y":0,"z":27},{"x":21,"y":-1,"z":27}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"door-2":{"secretPoint":{"offsetPointList":[{"x":8,"y":-2,"z":19},{"x":8,"y":-2,"z":20},{"x":8,"y":-2,"z":21},{"x":8,"y":-2,"z":22}]},"preRequisite":["key-slot:click"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":26,"y":-1,"z":26},"secretType":"ITEM_DROP","preRequisite":["door-1:open"]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":4,"y":0,"z":25},{"x":4,"y":-1,"z":25},{"x":5,"y":0,"z":25},{"x":5,"y":-1,"z":25},{"x":6,"y":0,"z":25},{"x":6,"y":-1,"z":25},{"x":7,"y":0,"z":25},{"x":7,"y":-1,"z":25},{"x":4,"y":0,"z":26},{"x":4,"y":-1,"z":26},{"x":5,"y":0,"z":26},{"x":5,"y":-1,"z":26},{"x":6,"y":0,"z":26},{"x":6,"y":-1,"z":26},{"x":7,"y":0,"z":26},{"x":7,"y":-1,"z":26},{"x":4,"y":0,"z":27},{"x":4,"y":-1,"z":27},{"x":5,"y":0,"z":27},{"x":5,"y":-1,"z":27},{"x":6,"y":0,"z":27},{"x":6,"y":-1,"z":27},{"x":7,"y":0,"z":27},{"x":7,"y":-1,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":23,"y":-2,"z":19},{"x":23,"y":-3,"z":19},{"x":24,"y":-2,"z":19},{"x":24,"y":-3,"z":19},{"x":25,"y":-2,"z":19},{"x":25,"y":-3,"z":19},{"x":23,"y":-2,"z":20},{"x":23,"y":-3,"z":20},{"x":24,"y":-2,"z":20},{"x":24,"y":-3,"z":20},{"x":25,"y":-2,"z":20},{"x":25,"y":-3,"z":20},{"x":23,"y":-2,"z":21},{"x":23,"y":-3,"z":21},{"x":24,"y":-2,"z":21},{"x":24,"y":-3,"z":21},{"x":25,"y":-2,"z":21},{"x":25,"y":-3,"z":21},{"x":23,"y":-2,"z":22},{"x":23,"y":-3,"z":22},{"x":24,"y":-2,"z":22},{"x":24,"y":-3,"z":22},{"x":25,"y":-2,"z":22},{"x":25,"y":-3,"z":22}]},"preRequisite":[],"mechType":"Tomb"},"redstone-key":{"mechType":"Secret","secretPoint":{"x":5,"y":0,"z":11},"secretType":"ESSENCE","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":23,"y":-2,"z":10},{"x":23,"y":-3,"z":10},{"x":24,"y":-2,"z":10},{"x":24,"y":-3,"z":10},{"x":25,"y":-2,"z":10},{"x":25,"y":-3,"z":10},{"x":23,"y":-2,"z":11},{"x":23,"y":-3,"z":11},{"x":24,"y":-2,"z":11},{"x":24,"y":-3,"z":11},{"x":25,"y":-2,"z":11},{"x":25,"y":-3,"z":11},{"x":23,"y":-2,"z":12},{"x":23,"y":-3,"z":12},{"x":24,"y":-2,"z":12},{"x":24,"y":-3,"z":12},{"x":25,"y":-2,"z":12},{"x":25,"y":-3,"z":12},{"x":23,"y":-2,"z":13},{"x":23,"y":-3,"z":13},{"x":24,"y":-2,"z":13},{"x":24,"y":-3,"z":13},{"x":25,"y":-2,"z":13},{"x":25,"y":-3,"z":13}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":0,"z":5},{"x":5,"y":-1,"z":5},{"x":6,"y":0,"z":5},{"x":6,"y":-1,"z":5},{"x":7,"y":0,"z":5},{"x":7,"y":-1,"z":5},{"x":8,"y":0,"z":5},{"x":8,"y":-1,"z":5},{"x":5,"y":0,"z":6},{"x":5,"y":-1,"z":6},{"x":6,"y":0,"z":6},{"x":6,"y":-1,"z":6},{"x":7,"y":0,"z":6},{"x":7,"y":-1,"z":6},{"x":8,"y":0,"z":6},{"x":8,"y":-1,"z":6},{"x":5,"y":0,"z":7},{"x":5,"y":-1,"z":7},{"x":6,"y":0,"z":7},{"x":6,"y":-1,"z":7},{"x":7,"y":0,"z":7},{"x":7,"y":-1,"z":7},{"x":8,"y":0,"z":7},{"x":8,"y":-1,"z":7}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":0,"z":18},{"x":5,"y":-1,"z":18},{"x":5,"y":-2,"z":18},{"x":5,"y":0,"z":19},{"x":5,"y":-1,"z":19},{"x":5,"y":-2,"z":19},{"x":5,"y":0,"z":20},{"x":5,"y":-1,"z":20},{"x":5,"y":-2,"z":20}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/02b94b9a-8990-446a-993a-9b59de987b16.json b/src/main/resources/dgroomdata/02b94b9a-8990-446a-993a-9b59de987b16.json new file mode 100644 index 0000000..2497da0 --- /dev/null +++ b/src/main/resources/dgroomdata/02b94b9a-8990-446a-993a-9b59de987b16.json @@ -0,0 +1,1468 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 98, + 139, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 139, + 139, + 0, + 0, + 0, + 1, + 98, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 139, + 139, + 0, + 0, + 0, + 1, + 98, + 5, + 164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 5, + 164, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 125, + 125, + 126, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 139, + 139, + 0, + 0, + 0, + 139, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 126, + 0, + 0, + 0, + 0, + 0, + 109, + 98, + 98, + 98, + 44, + 44, + 44, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 162, + 162, + 162, + 162, + 1, + 50, + 1, + 98, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + -1, + -1, + -1, + -1, + 1, + 98, + 98, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 139, + 139, + 0, + 0, + 139, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 139, + 109, + 0, + 139, + 139, + 0, + 0, + 139, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 139, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 139, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 98, + 0, + 139, + 139, + 0, + 0, + 139, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 1, + 98, + 98, + 98, + 98, + 98, + 4, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 126, + 126, + 98, + 0, + 139, + 139, + 0, + 0, + 139, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 109, + 109, + 98, + 98, + 98, + 98, + 98, + 1, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 126, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 139, + 139, + 5, + 5, + 139, + 139, + 50, + 98, + 98, + 1, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 98, + 98, + 159, + 159, + 159, + 159, + 159, + 159, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 139, + 139, + 164, + 164, + 139, + 139, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 139, + 98, + 44, + 44, + 98, + 98, + 44, + 44, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 139, + 139, + 50, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 44, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 44, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 139, + 139, + 0, + 0, + 139, + 139, + 0, + 98, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 139, + 139, + 50, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "02b94b9a-8990-446a-993a-9b59de987b16", + "name": "Golden-oasis", + "processorId": "default", + "properties": {}, + "mechanics": { + "chest-2": { + "mechType": "Secret", + "secretPoint": { + "x": 13, + "y": -7, + "z": 24 + }, + "secretType": "CHEST", + "preRequisite": [ + "door-2:open" + ] + }, + "key-slot": { + "secretPoint": { + "x": 11, + "y": 1, + "z": 4 + }, + "preRequisite": [ + "door-1:open", + "redstone-key:found" + ], + "mechType": "Dummy" + }, + "chest-1": { + "mechType": "Secret", + "secretPoint": { + "x": 14, + "y": -7, + "z": 26 + }, + "secretType": "CHEST", + "preRequisite": [ + "door-2:open" + ] + }, + "lever-1": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 30, + "y": 1, + "z": 26 + }, + "preRequisite": [], + "triggering": "door-1" + }, + "door-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 5, + "y": 2, + "z": 12 + }, + { + "x": 5, + "y": 1, + "z": 12 + }, + { + "x": 5, + "y": 0, + "z": 12 + }, + { + "x": 5, + "y": -1, + "z": 12 + }, + { + "x": 6, + "y": 2, + "z": 12 + }, + { + "x": 6, + "y": 1, + "z": 12 + }, + { + "x": 6, + "y": 0, + "z": 12 + }, + { + "x": 6, + "y": -1, + "z": 12 + }, + { + "x": 7, + "y": 2, + "z": 12 + }, + { + "x": 7, + "y": 1, + "z": 12 + }, + { + "x": 7, + "y": 0, + "z": 12 + }, + { + "x": 7, + "y": -1, + "z": 12 + }, + { + "x": 8, + "y": 2, + "z": 12 + }, + { + "x": 8, + "y": 1, + "z": 12 + }, + { + "x": 8, + "y": 0, + "z": 12 + }, + { + "x": 8, + "y": -1, + "z": 12 + } + ] + }, + "preRequisite": [ + "lever-1:triggered" + ], + "mechType": "OnewayDoor" + }, + "door-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 0, + "z": 26 + }, + { + "x": 28, + "y": 0, + "z": 26 + }, + { + "x": 29, + "y": 0, + "z": 26 + } + ] + }, + "preRequisite": [ + "key-slot:click" + ], + "mechType": "OnewayDoor" + }, + "redstone-key": { + "mechType": "Secret", + "secretPoint": { + "x": 13, + "y": 1, + "z": 9 + }, + "secretType": "ESSENCE", + "preRequisite": [] + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 0, + "z": 5 + }, + { + "x": 27, + "y": -1, + "z": 5 + }, + { + "x": 28, + "y": 0, + "z": 5 + }, + { + "x": 28, + "y": -1, + "z": 5 + }, + { + "x": 29, + "y": 0, + "z": 5 + }, + { + "x": 29, + "y": -1, + "z": 5 + }, + { + "x": 30, + "y": 0, + "z": 5 + }, + { + "x": 30, + "y": -1, + "z": 5 + }, + { + "x": 27, + "y": 0, + "z": 6 + }, + { + "x": 27, + "y": -1, + "z": 6 + }, + { + "x": 28, + "y": 0, + "z": 6 + }, + { + "x": 28, + "y": -1, + "z": 6 + }, + { + "x": 29, + "y": 0, + "z": 6 + }, + { + "x": 29, + "y": -1, + "z": 6 + }, + { + "x": 30, + "y": 0, + "z": 6 + }, + { + "x": 30, + "y": -1, + "z": 6 + }, + { + "x": 27, + "y": 0, + "z": 7 + }, + { + "x": 27, + "y": -1, + "z": 7 + }, + { + "x": 28, + "y": 0, + "z": 7 + }, + { + "x": 28, + "y": -1, + "z": 7 + }, + { + "x": 29, + "y": 0, + "z": 7 + }, + { + "x": 29, + "y": -1, + "z": 7 + }, + { + "x": 30, + "y": 0, + "z": 7 + }, + { + "x": 30, + "y": -1, + "z": 7 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + } + }, + "totalSecrets": 1 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json b/src/main/resources/dgroomdata/05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json new file mode 100644 index 0000000..edcdbbd --- /dev/null +++ b/src/main/resources/dgroomdata/05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,98,1,98,98,109,109,0,0,0,0,0,109,109,98,98,98,4,0,0,0,0,0,4,0,0,0,0,0,4,4,98,98,98,98,98,98,1,0,0,0,0,0,0,0,98,98,98,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,0,67,98,98,0,0,0,0,0,0,0,0,0,0,44,44,44,44,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,11,109,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,44,44,44,44,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,109,109,109,109,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,11,109,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,44,44,44,44,98,1,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,98,98,4,0,0,0,0,0,4,0,0,0,0,0,4,4,1,98,98,98,109,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,98,98,109,0,0,0,0,0,0,0,109,4,98,98,4,4,0,154,0,4,4,4,0,154,0,4,4,4,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,109,109,0,0,0,0,0,0,0,109,4,98,98,98,98,98,98,98,98,98,1,98,98,98,98,98,98,98,98,98,98,98,98,98,5,5,0,0,0,0,0,5,5,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,11,11,4,98,109,0,0,0,0,0,0,0,0,0,0,4,98,1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,125,125,125,5,0,0,0,0,65,5,5,85,0,85,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,109,109,0,109,109,0,11,0,0,0,0,0,0,0,0,67,98,1,1,98,98,109,109,109,109,98,98,98,98,98,98,98,98,98,98,98,98,125,125,125,0,0,0,0,0,0,5,5,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,4,98,98,98,98,1,0,0,0,0,98,98,1,98,98,98,98,98,98,98,98,1,0,0,0,0,0,0,0,0,0,0,0,85,0,85,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,4,98,98,98,98,98,5,5,5,5,98,98,98,98,98,98,98,98,98,98,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,159,98,98,98,98,-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,98,98,98,0,0,0,0,98,1,98,98,98,98,98,98,98,98,109,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,0,0,0,0,109,109,98,98,109,109,109,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,17,5,5,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,161,0,0,109,109,161,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,1,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,4,4,67,4,4,4,67,67,4,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,1,0,144,0,144,98,98,0,0,144,144,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,159,159,159,159,159,159,159,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,98,98,1,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,1,98,98,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,139,0,126,126,109,109,4,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,4,109,17,0,0,0,17,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,126,126,125,125,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,125,125,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,65,0,0,0,0,0,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,17,17,0,0,0,17,44,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,109,109,109,109,109,98,98,98,109,109,109,109,109,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,98,109,109,109,109,109,98,4,98,109,109,109,109,109,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,159,159,159,159,159,98,1,98,159,159,159,159,159,98,98,139,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,139,98,98,159,159,159,159,159,98,1,98,159,159,159,159,159,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,109,109,109,109,109,98,4,98,109,109,109,109,109,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,98,109,109,109,109,109,98,98,98,109,109,109,109,109,1,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,17,0,0,0,0,65,17,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,109,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,109,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,11,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,17,0,0,0,0,0,17,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,139,0,0,0,109,109,4,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,4,109,109,0,0,0,139,1,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,98,98,1,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,109,98,98,98,1,98,98,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,159,109,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,109,1,98,98,98,109,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,109,109,98,98,98,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,139,1,0,0,18,18,109,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,161,0,0,109,109,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,126,126,126,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,109,109,109,98,98,109,109,0,0,0,0,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,98,98,98,98,98,98,98,98,1,98,0,0,0,0,98,98,98,109,109,109,109,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1,98,98,98,98,159,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,98,98,98,4,1,1,98,98,98,98,5,5,5,5,98,98,98,98,98,98,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,98,98,98,98,67,67,67,98,1,98,98,109,109,109,109,1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,1,139,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,0,0,0,98,98,98,98,98,98,98,98,98,98,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,144,0,144,0,98,1,17,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,0,0,0,109,98,98,98,98,98,98,98,98,98,98,1,98,109,0,0,0,0,0,0,0,0,0,1,1,0,0,0,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,159,159,159,98,98,1,139,0,0,0,0,0,0,0,1,98,98,98,98,98,98,0,0,0,109,98,98,1,98,98,98,98,98,98,98,98,98,98,98,0,0,0,17,0,0,0,0,1,1,0,0,0,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,98,98,98,98,1,0,0,0,0,0,0,0,139,1,98,98,98,98,98,0,0,0,98,98,109,109,98,98,109,109,109,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,109,109,98,98,98,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,1,98,159,0,0,0,0,0,0,0,0,0,0,109,109,98,4,109,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,159,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,159,144,0,0,0,0,0,0,0,0,0,109,98,98,4,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,159,98,98,17,0,0,0,0,0,0,0,0,1,1,109,109,109,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,159,144,0,0,0,0,0,0,0,0,0,109,98,98,4,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,159,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,98,98,139,0,0,0,0,0,0,0,139,98,98,98,4,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,159,98,98,98,0,0,0,0,0,0,0,98,1,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"05ba6123-3468-4ec3-8e32-0553a8e5d3b2","name":"Flags","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":60,"y":17,"z":42},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":15,"y":38,"z":42},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":38,"y":-3,"z":59},"secretType":"CHEST","preRequisite":[]},"door-1a":{"secretPoint":{"offsetPointList":[{"x":34,"y":4,"z":49},{"x":34,"y":3,"z":49},{"x":34,"y":2,"z":49},{"x":34,"y":1,"z":49},{"x":34,"y":0,"z":49},{"x":34,"y":-1,"z":49},{"x":35,"y":4,"z":49},{"x":35,"y":3,"z":49},{"x":35,"y":2,"z":49},{"x":35,"y":1,"z":49},{"x":35,"y":0,"z":49},{"x":35,"y":-1,"z":49},{"x":36,"y":4,"z":49},{"x":36,"y":3,"z":49},{"x":36,"y":2,"z":49},{"x":36,"y":1,"z":49},{"x":36,"y":0,"z":49},{"x":36,"y":-1,"z":49},{"x":37,"y":4,"z":49},{"x":37,"y":3,"z":49},{"x":37,"y":2,"z":49},{"x":37,"y":1,"z":49},{"x":37,"y":0,"z":49},{"x":37,"y":-1,"z":49}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":32,"y":1,"z":32},"preRequisite":[],"triggering":"door-1a"},"bat-1":{"mechType":"Secret","secretPoint":{"x":52,"y":4,"z":39},"secretType":"BAT","preRequisite":[]},"chest-4":{"mechType":"Secret","secretPoint":{"x":15,"y":38,"z":28},"secretType":"CHEST","preRequisite":[]},"chest-5":{"mechType":"Secret","secretPoint":{"x":12,"y":27,"z":8},"secretType":"CHEST","preRequisite":[]},"crypt-7":{"secretPoint":{"offsetPointList":[{"x":9,"y":38,"z":34},{"x":9,"y":37,"z":34},{"x":10,"y":38,"z":34},{"x":10,"y":37,"z":34},{"x":11,"y":38,"z":34},{"x":11,"y":37,"z":34},{"x":12,"y":38,"z":34},{"x":12,"y":37,"z":34},{"x":9,"y":38,"z":35},{"x":9,"y":37,"z":35},{"x":10,"y":38,"z":35},{"x":10,"y":37,"z":35},{"x":11,"y":38,"z":35},{"x":11,"y":37,"z":35},{"x":12,"y":38,"z":35},{"x":12,"y":37,"z":35},{"x":9,"y":38,"z":36},{"x":9,"y":37,"z":36},{"x":10,"y":38,"z":36},{"x":10,"y":37,"z":36},{"x":11,"y":38,"z":36},{"x":11,"y":37,"z":36},{"x":12,"y":38,"z":36},{"x":12,"y":37,"z":36}]},"preRequisite":[],"mechType":"Tomb"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":54,"y":-1,"z":24},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":36,"y":28,"z":32},{"x":36,"y":27,"z":32},{"x":37,"y":28,"z":32},{"x":37,"y":27,"z":32},{"x":38,"y":28,"z":32},{"x":38,"y":27,"z":32},{"x":39,"y":28,"z":32},{"x":39,"y":27,"z":32},{"x":36,"y":28,"z":33},{"x":36,"y":27,"z":33},{"x":37,"y":28,"z":33},{"x":37,"y":27,"z":33},{"x":38,"y":28,"z":33},{"x":38,"y":27,"z":33},{"x":39,"y":28,"z":33},{"x":39,"y":27,"z":33}]},"preRequisite":[],"mechType":"Tomb"},"door-1b":{"secretPoint":{"offsetPointList":[{"x":27,"y":4,"z":15},{"x":27,"y":3,"z":15},{"x":27,"y":2,"z":15},{"x":27,"y":1,"z":15},{"x":27,"y":0,"z":15},{"x":27,"y":-1,"z":15},{"x":28,"y":4,"z":15},{"x":28,"y":3,"z":15},{"x":28,"y":2,"z":15},{"x":28,"y":1,"z":15},{"x":28,"y":0,"z":15},{"x":28,"y":-1,"z":15},{"x":29,"y":4,"z":15},{"x":29,"y":3,"z":15},{"x":29,"y":2,"z":15},{"x":29,"y":1,"z":15},{"x":29,"y":0,"z":15},{"x":29,"y":-1,"z":15},{"x":30,"y":4,"z":15},{"x":30,"y":3,"z":15},{"x":30,"y":2,"z":15},{"x":30,"y":1,"z":15},{"x":30,"y":0,"z":15},{"x":30,"y":-1,"z":15}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":36,"y":28,"z":37},{"x":36,"y":27,"z":37},{"x":37,"y":28,"z":37},{"x":37,"y":27,"z":37},{"x":38,"y":28,"z":37},{"x":38,"y":27,"z":37},{"x":39,"y":28,"z":37},{"x":39,"y":27,"z":37},{"x":36,"y":28,"z":38},{"x":36,"y":27,"z":38},{"x":37,"y":28,"z":38},{"x":37,"y":27,"z":38},{"x":38,"y":28,"z":38},{"x":38,"y":27,"z":38},{"x":39,"y":28,"z":38},{"x":39,"y":27,"z":38}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":14,"y":16,"z":52},{"x":14,"y":15,"z":52},{"x":15,"y":16,"z":52},{"x":15,"y":15,"z":52},{"x":16,"y":16,"z":52},{"x":16,"y":15,"z":52},{"x":14,"y":16,"z":53},{"x":14,"y":15,"z":53},{"x":15,"y":16,"z":53},{"x":15,"y":15,"z":53},{"x":16,"y":16,"z":53},{"x":16,"y":15,"z":53},{"x":14,"y":16,"z":54},{"x":14,"y":15,"z":54},{"x":15,"y":16,"z":54},{"x":15,"y":15,"z":54},{"x":16,"y":16,"z":54},{"x":16,"y":15,"z":54},{"x":14,"y":16,"z":55},{"x":14,"y":15,"z":55},{"x":15,"y":16,"z":55},{"x":15,"y":15,"z":55},{"x":16,"y":16,"z":55},{"x":16,"y":15,"z":55}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":14,"y":18,"z":44},{"x":14,"y":17,"z":44},{"x":15,"y":18,"z":44},{"x":15,"y":17,"z":44},{"x":16,"y":18,"z":44},{"x":16,"y":17,"z":44},{"x":17,"y":18,"z":44},{"x":17,"y":17,"z":44},{"x":14,"y":18,"z":45},{"x":14,"y":17,"z":45},{"x":15,"y":18,"z":45},{"x":15,"y":17,"z":45},{"x":16,"y":18,"z":45},{"x":16,"y":17,"z":45},{"x":17,"y":18,"z":45},{"x":17,"y":17,"z":45},{"x":14,"y":18,"z":46},{"x":14,"y":17,"z":46},{"x":15,"y":18,"z":46},{"x":15,"y":17,"z":46},{"x":16,"y":18,"z":46},{"x":16,"y":17,"z":46},{"x":17,"y":18,"z":46},{"x":17,"y":17,"z":46}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":14,"y":18,"z":18},{"x":14,"y":17,"z":18},{"x":15,"y":18,"z":18},{"x":15,"y":17,"z":18},{"x":16,"y":18,"z":18},{"x":16,"y":17,"z":18},{"x":17,"y":18,"z":18},{"x":17,"y":17,"z":18},{"x":14,"y":18,"z":19},{"x":14,"y":17,"z":19},{"x":15,"y":18,"z":19},{"x":15,"y":17,"z":19},{"x":16,"y":18,"z":19},{"x":16,"y":17,"z":19},{"x":17,"y":18,"z":19},{"x":17,"y":17,"z":19},{"x":14,"y":18,"z":20},{"x":14,"y":17,"z":20},{"x":15,"y":18,"z":20},{"x":15,"y":17,"z":20},{"x":16,"y":18,"z":20},{"x":16,"y":17,"z":20},{"x":17,"y":18,"z":20},{"x":17,"y":17,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":20,"y":16,"z":21},{"x":20,"y":15,"z":21},{"x":21,"y":16,"z":21},{"x":21,"y":15,"z":21},{"x":22,"y":16,"z":21},{"x":22,"y":15,"z":21},{"x":23,"y":16,"z":21},{"x":23,"y":15,"z":21},{"x":20,"y":16,"z":22},{"x":20,"y":15,"z":22},{"x":21,"y":16,"z":22},{"x":21,"y":15,"z":22},{"x":22,"y":16,"z":22},{"x":22,"y":15,"z":22},{"x":23,"y":16,"z":22},{"x":23,"y":15,"z":22},{"x":20,"y":16,"z":23},{"x":20,"y":15,"z":23},{"x":21,"y":16,"z":23},{"x":21,"y":15,"z":23},{"x":22,"y":16,"z":23},{"x":22,"y":15,"z":23},{"x":23,"y":16,"z":23},{"x":23,"y":15,"z":23}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":7} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/067df8a7-9d28-4fdd-a538-c6d38f126cd2.json b/src/main/resources/dgroomdata/067df8a7-9d28-4fdd-a538-c6d38f126cd2.json new file mode 100644 index 0000000..29a626d --- /dev/null +++ b/src/main/resources/dgroomdata/067df8a7-9d28-4fdd-a538-c6d38f126cd2.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":49,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,144,139,139,4,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,171,171,1,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,171,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,101,1,101,101,101,101,1,0,0,0,0,1,0,0,0,0,0,0,0,0,171,144,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,44,98,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,44,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,98,98,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,98,1,44,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,98,44,44,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,98,1,98,98,98,98,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,98,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,139,0,4,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,98,98,0,0,0,98,109,159,159,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,118,0,0,0,159,159,98,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,109,159,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,1,1,109,0,0,0,0,0,1,98,109,0,0,0,0,0,0,0,0,1,0,0,0,0,0,98,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,136,5,126,126,0,0,0,0,109,0,0,0,0,0,0,109,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,136,5,0,0,0,0,0,0,109,0,0,0,0,0,0,0,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,144,159,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,139,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,44,159,98,1,98,0,0,0,98,109,109,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,118,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,159,98,98,98,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,98,98,98,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,98,98,98,1,98,109,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,144,159,98,109,1,98,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,118,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,5,0,0,0,0,0,109,0,0,0,0,0,0,144,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,136,0,0,0,0,0,109,0,0,0,0,0,0,0,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,0,0,0,0,109,1,1,98,109,1,0,0,0,0,0,0,1,109,98,1,0,0,0,0,1,0,0,0,0,0,98,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,98,98,0,0,0,0,0,0,0,0,0,0,98,159,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,164,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,5,98,109,0,0,0,0,0,0,0,0,0,144,159,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,118,0,0,0,118,0,0,0,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,0,0,85,0,0,0,109,109,0,0,0,109,109,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,44,0,0,0,0,0,0,0,0,98,98,98,0,0,0,98,0,159,159,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"067df8a7-9d28-4fdd-a538-c6d38f126cd2","name":"Dino-dig-site","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":25,"y":22,"z":30},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":55,"y":-18,"z":52},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":47,"y":-13,"z":37},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":31,"y":0,"z":43},{"x":31,"y":-1,"z":43},{"x":32,"y":0,"z":43},{"x":32,"y":-1,"z":43},{"x":33,"y":0,"z":43},{"x":33,"y":-1,"z":43},{"x":31,"y":0,"z":44},{"x":31,"y":-1,"z":44},{"x":32,"y":0,"z":44},{"x":32,"y":-1,"z":44},{"x":33,"y":0,"z":44},{"x":33,"y":-1,"z":44},{"x":31,"y":0,"z":45},{"x":31,"y":-1,"z":45},{"x":32,"y":0,"z":45},{"x":32,"y":-1,"z":45},{"x":33,"y":0,"z":45},{"x":33,"y":-1,"z":45},{"x":31,"y":0,"z":46},{"x":31,"y":-1,"z":46},{"x":32,"y":0,"z":46},{"x":32,"y":-1,"z":46},{"x":33,"y":0,"z":46},{"x":33,"y":-1,"z":46},{"x":31,"y":0,"z":47},{"x":31,"y":-1,"z":47},{"x":32,"y":0,"z":47},{"x":32,"y":-1,"z":47},{"x":33,"y":0,"z":47},{"x":33,"y":-1,"z":47}]},"preRequisite":[],"mechType":"Tomb"},"bat-1":{"mechType":"Secret","secretPoint":{"x":10,"y":-22,"z":35},"secretType":"BAT","preRequisite":[]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":24,"y":0,"z":21},{"x":24,"y":-1,"z":21},{"x":25,"y":0,"z":21},{"x":25,"y":-1,"z":21},{"x":26,"y":0,"z":21},{"x":26,"y":-1,"z":21},{"x":24,"y":0,"z":22},{"x":24,"y":-1,"z":22},{"x":25,"y":0,"z":22},{"x":25,"y":-1,"z":22},{"x":26,"y":0,"z":22},{"x":26,"y":-1,"z":22},{"x":24,"y":0,"z":23},{"x":24,"y":-1,"z":23},{"x":25,"y":0,"z":23},{"x":25,"y":-1,"z":23},{"x":26,"y":0,"z":23},{"x":26,"y":-1,"z":23},{"x":24,"y":0,"z":24},{"x":24,"y":-1,"z":24},{"x":25,"y":0,"z":24},{"x":25,"y":-1,"z":24},{"x":26,"y":0,"z":24},{"x":26,"y":-1,"z":24},{"x":24,"y":0,"z":25},{"x":24,"y":-1,"z":25},{"x":25,"y":0,"z":25},{"x":25,"y":-1,"z":25},{"x":26,"y":0,"z":25},{"x":26,"y":-1,"z":25}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":51,"y":13,"z":51},{"x":51,"y":12,"z":51},{"x":52,"y":13,"z":51},{"x":52,"y":12,"z":51},{"x":53,"y":13,"z":51},{"x":53,"y":12,"z":51},{"x":54,"y":13,"z":51},{"x":54,"y":12,"z":51},{"x":55,"y":13,"z":51},{"x":55,"y":12,"z":51},{"x":51,"y":13,"z":52},{"x":51,"y":12,"z":52},{"x":52,"y":13,"z":52},{"x":52,"y":12,"z":52},{"x":53,"y":13,"z":52},{"x":53,"y":12,"z":52},{"x":54,"y":13,"z":52},{"x":54,"y":12,"z":52},{"x":55,"y":13,"z":52},{"x":55,"y":12,"z":52},{"x":51,"y":13,"z":53},{"x":51,"y":12,"z":53},{"x":52,"y":13,"z":53},{"x":52,"y":12,"z":53},{"x":53,"y":13,"z":53},{"x":53,"y":12,"z":53},{"x":54,"y":13,"z":53},{"x":54,"y":12,"z":53},{"x":55,"y":13,"z":53},{"x":55,"y":12,"z":53}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":51,"y":13,"z":43},{"x":51,"y":12,"z":43},{"x":52,"y":13,"z":43},{"x":52,"y":12,"z":43},{"x":53,"y":13,"z":43},{"x":53,"y":12,"z":43},{"x":54,"y":13,"z":43},{"x":54,"y":12,"z":43},{"x":55,"y":13,"z":43},{"x":55,"y":12,"z":43},{"x":51,"y":13,"z":44},{"x":51,"y":12,"z":44},{"x":52,"y":13,"z":44},{"x":52,"y":12,"z":44},{"x":53,"y":13,"z":44},{"x":53,"y":12,"z":44},{"x":54,"y":13,"z":44},{"x":54,"y":12,"z":44},{"x":55,"y":13,"z":44},{"x":55,"y":12,"z":44},{"x":51,"y":13,"z":45},{"x":51,"y":12,"z":45},{"x":52,"y":13,"z":45},{"x":52,"y":12,"z":45},{"x":53,"y":13,"z":45},{"x":53,"y":12,"z":45},{"x":54,"y":13,"z":45},{"x":54,"y":12,"z":45},{"x":55,"y":13,"z":45},{"x":55,"y":12,"z":45}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":24,"y":26,"z":36},{"x":24,"y":25,"z":36},{"x":24,"y":24,"z":36},{"x":24,"y":23,"z":36},{"x":24,"y":22,"z":36},{"x":25,"y":26,"z":36},{"x":25,"y":25,"z":36},{"x":25,"y":24,"z":36},{"x":25,"y":23,"z":36},{"x":25,"y":22,"z":36},{"x":26,"y":26,"z":36},{"x":26,"y":25,"z":36},{"x":26,"y":24,"z":36},{"x":26,"y":23,"z":36},{"x":26,"y":22,"z":36}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/07ce87bb-a49a-412b-a8f7-c9dde9f884de.json b/src/main/resources/dgroomdata/07ce87bb-a49a-412b-a8f7-c9dde9f884de.json new file mode 100644 index 0000000..9335d49 --- /dev/null +++ b/src/main/resources/dgroomdata/07ce87bb-a49a-412b-a8f7-c9dde9f884de.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,67,0,0,0,0,0,0,50,67,67,0,0,0,0,0,67,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,4,0,0,0,0,0,0,0,67,4,50,0,0,0,0,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,4,0,0,0,0,0,0,0,67,1,98,0,0,0,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,1,98,0,0,0,0,0,1,1,67,4,101,0,101,4,4,67,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,1,1,5,0,0,0,0,98,98,0,0,0,0,191,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,1,98,67,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,101,0,101,4,4,1,1,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,191,0,109,1,1,1,98,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,109,4,1,1,98,0,0,0,1,98,1,67,0,0,0,4,4,67,67,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,139,4,67,109,109,109,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,4,44,44,44,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,4,0,0,0,67,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,67,0,0,0,67,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,139,4,67,0,0,0,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,109,4,1,1,101,101,101,101,101,1,1,4,101,0,101,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,1,1,1,1,0,0,0,0,0,98,98,0,0,0,0,0,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,4,4,1,1,4,0,0,0,0,5,5,0,0,0,0,0,0,0,0,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,4,145,85,0,0,134,134,0,0,85,0,0,85,0,145,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,85,0,0,85,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,1,1,1,1,0,0,0,0,0,0,0,85,0,0,85,0,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,4,145,0,0,0,0,0,0,0,85,0,0,85,0,145,67,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,4,0,0,0,0,0,0,0,65,0,0,0,5,5,0,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"07ce87bb-a49a-412b-a8f7-c9dde9f884de","name":"Lots-of-floors","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":2,"y":6,"z":6},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":26,"y":14,"z":8},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":6,"y":-1,"z":29},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":10,"z":5},{"x":11,"y":9,"z":5},{"x":11,"y":8,"z":5},{"x":11,"y":7,"z":5},{"x":11,"y":6,"z":5},{"x":11,"y":10,"z":6},{"x":11,"y":9,"z":6},{"x":11,"y":8,"z":6},{"x":11,"y":7,"z":6},{"x":11,"y":6,"z":6},{"x":11,"y":10,"z":7},{"x":11,"y":9,"z":7},{"x":11,"y":8,"z":7},{"x":11,"y":7,"z":7},{"x":11,"y":6,"z":7}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":13,"y":-8,"z":15},"preRequisite":[],"triggering":"door-1"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-7,"z":20},{"x":15,"y":-8,"z":20},{"x":16,"y":-7,"z":20},{"x":16,"y":-8,"z":20},{"x":17,"y":-7,"z":20},{"x":17,"y":-8,"z":20},{"x":15,"y":-7,"z":21},{"x":15,"y":-8,"z":21},{"x":16,"y":-7,"z":21},{"x":16,"y":-8,"z":21},{"x":17,"y":-7,"z":21},{"x":17,"y":-8,"z":21},{"x":15,"y":-7,"z":22},{"x":15,"y":-8,"z":22},{"x":16,"y":-7,"z":22},{"x":16,"y":-8,"z":22},{"x":17,"y":-7,"z":22},{"x":17,"y":-8,"z":22},{"x":15,"y":-7,"z":23},{"x":15,"y":-8,"z":23},{"x":16,"y":-7,"z":23},{"x":16,"y":-8,"z":23},{"x":17,"y":-7,"z":23},{"x":17,"y":-8,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":0,"z":22},{"x":6,"y":1,"z":22},{"x":6,"y":0,"z":22},{"x":6,"y":-1,"z":22},{"x":7,"y":2,"z":22},{"x":7,"y":1,"z":22},{"x":7,"y":0,"z":22},{"x":7,"y":-1,"z":22}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/0877607a-b8a2-433a-b893-f4de7c83378a.json b/src/main/resources/dgroomdata/0877607a-b8a2-433a-b893-f4de7c83378a.json new file mode 100644 index 0000000..f8efe85 --- /dev/null +++ b/src/main/resources/dgroomdata/0877607a-b8a2-433a-b893-f4de7c83378a.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,1,98,35,139,0,0,0,0,0,0,1,98,98,0,7,7,1,98,1,4,1,4,1,1,4,1,1,1,1,1,1,1,1,1,7,50,0,0,0,0,0,0,0,0,0,139,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,98,98,7,0,0,0,0,0,0,0,0,101,0,0,0,139,7,98,1,1,50,0,188,98,98,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,109,109,109,109,98,98,7,0,0,0,0,0,0,0,0,0,0,0,0,0,35,98,1,1,0,0,0,0,18,7,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,134,5,7,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,67,67,0,0,0,0,18,7,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,134,5,103,7,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,98,0,0,0,0,0,18,7,1,1,1,1,1,1,1,1,1,35,35,35,0,0,0,0,0,0,0,0,0,0,144,7,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,-1,98,0,0,0,0,35,0,0,0,0,98,109,0,0,0,0,98,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,1,35,35,0,0,0,0,0,0,0,0,5,5,5,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,-1,98,98,0,0,0,35,1,35,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,164,164,5,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,7,7,7,0,0,0,98,98,0,0,159,1,7,7,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,159,159,7,0,139,7,109,0,0,0,7,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,7,7,159,7,1,109,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,109,50,0,0,0,0,0,0,159,159,159,159,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,35,7,1,98,159,0,0,0,0,0,0,0,0,1,98,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,7,4,1,1,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,35,1,4,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,35,35,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,44,44,4,4,1,44,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,35,7,7,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,44,44,4,1,4,1,1,44,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,44,44,44,4,4,1,4,1,1,1,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,50,35,7,1,1,1,1,1,1,1,139,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,4,4,1,4,1,1,1,4,4,1,44,44,44,0,0,7,7,0,0,0,0,0,7,1,1,1,1,1,1,1,1,50,0,0,0,0,0,0,0,0,0,7,7,1,1,1,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,4,4,1,4,4,1,4,1,1,1,44,44,159,35,1,1,1,1,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,98,98,1,1,0,0,0,0,35,98,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,1,1,1,1,1,4,4,1,1,1,1,98,98,4,98,1,1,1,1,0,0,0,0,159,159,1,1,1,1,1,1,1,1,1,98,0,0,0,0,171,171,171,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,1,1,4,1,4,4,1,4,1,4,4,1,4,4,98,1,1,1,1,1,0,0,0,159,0,159,1,1,1,1,1,1,1,1,98,1,1,0,0,171,0,0,171,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,1,4,1,4,4,1,1,1,1,1,1,1,1,4,1,1,98,1,1,1,1,1,0,0,0,0,0,0,0,0,98,1,1,1,1,1,98,1,1,159,139,0,0,0,0,0,0,0,1,1,1,0,0,67,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,1,1,1,1,1,4,1,1,4,4,1,1,1,1,4,98,1,1,1,1,159,0,0,0,0,0,0,0,0,139,98,1,1,1,1,98,1,1,1,7,7,7,7,0,0,0,0,1,98,98,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,4,1,1,1,4,1,1,4,4,4,4,1,1,4,1,98,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,98,4,4,4,1,1,98,1,1,0,44,44,1,98,98,4,4,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,1,1,1,1,4,4,1,1,1,4,1,1,1,1,4,98,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,98,4,4,4,1,1,98,1,1,44,44,4,4,1,4,4,1,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,1,4,4,4,1,4,1,1,1,1,4,4,1,1,1,1,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,98,4,4,1,4,1,98,1,1,1,1,4,1,4,1,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,1,4,1,4,4,4,4,1,1,1,4,4,1,4,1,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,98,4,4,1,1,1,1,1,4,4,4,1,1,4,4,4,1,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,4,4,1,1,1,1,1,4,1,1,1,1,4,1,98,1,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,1,1,98,4,1,1,1,1,98,98,98,1,4,4,4,98,98,1,4,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,44,44,44,1,1,4,1,1,4,1,1,1,1,1,4,4,1,1,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,1,98,4,1,1,4,1,98,98,98,1,1,4,1,98,98,1,4,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,98,1,1,1,98,98,1,1,4,4,4,4,98,1,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,1,98,4,1,4,4,67,67,1,4,4,1,1,1,1,1,1,4,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,98,98,4,4,1,1,1,4,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,4,1,1,1,4,67,4,4,1,1,1,1,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,98,1,98,1,98,98,98,1,98,98,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,4,4,4,4,4,67,67,1,1,1,1,4,4,4,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,159,159,1,4,4,4,4,4,1,4,4,1,1,1,1,1,159,0,0,98,139,0,0,0,0,0,0,0,0,0,1,1,1,98,4,67,67,1,1,98,98,98,4,1,4,4,1,98,4,4,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,101,139,1,4,1,4,1,4,1,4,4,1,4,98,1,1,159,0,0,139,98,0,0,0,0,0,0,0,0,0,1,1,1,98,1,4,67,67,1,98,98,1,4,1,4,1,98,98,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,101,0,4,1,1,1,4,1,1,1,4,4,4,98,1,1,159,159,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,98,4,4,1,4,1,98,4,4,4,4,4,4,1,1,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,43,159,4,159,159,4,159,159,1,159,159,98,1,1,1,1,35,7,0,0,0,0,0,0,0,0,1,1,1,1,1,98,1,1,4,1,4,98,4,67,1,1,67,67,4,4,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,4,4,1,0,0,4,101,101,1,0,0,98,1,1,1,1,1,1,7,159,0,0,0,0,0,0,1,1,1,1,1,98,4,1,1,1,1,98,1,44,44,44,44,44,44,44,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,44,1,4,4,0,101,4,0,0,1,0,0,98,1,1,1,1,1,1,1,1,159,1,1,1,0,0,1,1,1,1,1,1,1,4,67,4,1,98,98,98,0,0,0,0,98,98,4,67,67,67,-1,-1,-1,-1],[-1,-1,-1,-1,7,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,126,126,3,98,98,98,98,98,4,67,67,4,4,98,98,98,0,0,0,0,98,98,0,5,134,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,4,4,1,1,4,4,1,1,3,134,3,3,4,4,1,1,1,1,67,4,1,4,98,0,0,0,0,0,0,0,0,0,134,134,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,98,98,1,1,1,1,4,1,4,1,1,1,1,3,4,125,3,4,1,4,4,1,67,4,4,4,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,98,98,1,1,1,4,1,4,4,4,4,4,1,1,1,1,4,4,4,4,4,1,1,1,1,4,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,4,1,4,4,4,1,4,1,1,4,1,4,4,1,1,4,4,4,4,4,4,4,98,98,0,0,0,0,0,139,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,4,4,1,4,4,4,1,4,4,4,1,4,4,4,1,1,1,1,1,4,1,98,0,0,0,0,0,139,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,4,4,4,1,4,4,4,1,1,1,4,1,1,4,1,4,4,1,4,4,4,1,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,1,1,1,1,1,4,4,4,4,1,4,1,4,1,4,4,4,1,4,1,4,4,1,4,4,1,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,35,35,35,1,4,1,1,4,1,1,1,4,1,4,4,4,1,4,1,1,1,4,1,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,1,1,1,4,4,1,1,1,1,4,4,1,4,4,1,4,4,4,1,1,0,0,0,0,0,0,0,109,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,4,1,1,4,1,1,1,1,1,4,1,4,1,4,1,4,1,1,1,4,44,0,0,0,0,0,0,98,98,67,67,67,4,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,4,4,4,1,1,1,1,1,1,4,1,4,1,4,4,1,1,4,4,4,44,44,0,0,0,0,0,1,1,1,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,7,188,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,4,1,1,1,1,4,1,4,4,4,1,1,4,1,1,4,1,4,4,1,4,44,44,44,0,0,0,0,1,1,1,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,1,1,3,4,1,4,1,1,4,1,4,1,1,1,1,1,1,4,4,4,1,1,1,44,44,44,44,44,44,44,1,1,1,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,1,0,0,4,0,0,1,0,0,1,0,0,4,1,1,1,1,3,3,1,3,1,1,1,1,1,1,4,4,4,4,1,4,4,4,1,1,44,44,44,98,1,4,4,4,1,98,98,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,35,4,0,0,1,0,0,1,0,0,4,0,0,4,1,1,1,1,3,3,3,1,4,4,4,4,4,4,4,4,1,1,4,1,1,1,44,44,44,0,0,98,98,4,4,4,4,1,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,4,0,0,1,1,1,1,1,4,3,3,4,1,4,1,4,4,4,1,4,1,1,1,1,1,44,44,0,0,0,0,0,0,7,4,4,4,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,4,3,3,3,1,1,1,4,1,4,4,4,4,1,1,4,1,44,0,0,0,0,0,0,0,35,4,4,4,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,50,0,0,0,0,0,0,159,1,1,1,1,1,1,4,4,4,4,4,4,1,4,4,4,1,4,1,1,1,1,7,0,0,0,0,0,0,35,1,4,4,4,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"0877607a-b8a2-433a-b893-f4de7c83378a","name":"Stairs","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":45,"y":18,"z":29},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":32,"y":18,"z":23},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":9,"y":0,"z":10},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":39,"y":17,"z":35},"secretType":"ITEM_DROP","preRequisite":[]},"fairysoul-6":{"secretPoint":{"x":28,"y":15,"z":52},"preRequisite":[],"mechType":"Fairysoul"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":10,"y":2,"z":27},{"x":10,"y":1,"z":27},{"x":11,"y":2,"z":27},{"x":11,"y":1,"z":27},{"x":12,"y":2,"z":27},{"x":12,"y":1,"z":27},{"x":13,"y":2,"z":27},{"x":13,"y":1,"z":27},{"x":14,"y":2,"z":27},{"x":14,"y":1,"z":27},{"x":10,"y":2,"z":28},{"x":10,"y":1,"z":28},{"x":11,"y":2,"z":28},{"x":11,"y":1,"z":28},{"x":12,"y":2,"z":28},{"x":12,"y":1,"z":28},{"x":13,"y":2,"z":28},{"x":13,"y":1,"z":28},{"x":14,"y":2,"z":28},{"x":14,"y":1,"z":28},{"x":10,"y":2,"z":29},{"x":10,"y":1,"z":29},{"x":11,"y":2,"z":29},{"x":11,"y":1,"z":29},{"x":12,"y":2,"z":29},{"x":12,"y":1,"z":29},{"x":13,"y":2,"z":29},{"x":13,"y":1,"z":29},{"x":14,"y":2,"z":29},{"x":14,"y":1,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":40,"y":23,"z":44},{"x":40,"y":22,"z":44},{"x":40,"y":21,"z":44},{"x":40,"y":20,"z":44},{"x":40,"y":24,"z":45},{"x":40,"y":23,"z":45},{"x":40,"y":22,"z":45},{"x":40,"y":21,"z":45},{"x":40,"y":20,"z":45},{"x":40,"y":22,"z":46},{"x":40,"y":21,"z":46},{"x":40,"y":20,"z":46}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/09c3072e-3099-4019-a577-7ddc17a9e29d.json b/src/main/resources/dgroomdata/09c3072e-3099-4019-a577-7ddc17a9e29d.json new file mode 100644 index 0000000..4548d66 --- /dev/null +++ b/src/main/resources/dgroomdata/09c3072e-3099-4019-a577-7ddc17a9e29d.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,67,0,1,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,98,0,67,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,134,126,126,126,134,126,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,125,126,126,126,125,134,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,134,134,134,126,126,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,134,65,134,126,126,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,134,134,134,126,126,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,125,126,126,126,125,4,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,0,0,1,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,98,126,126,4,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"09c3072e-3099-4019-a577-7ddc17a9e29d","name":"Doors","processorId":"default","properties":{},"mechanics":{"door-3":{"secretPoint":{"offsetPointList":[{"x":40,"y":-7,"z":15},{"x":40,"y":-8,"z":15},{"x":40,"y":-9,"z":15},{"x":40,"y":-10,"z":15},{"x":40,"y":-11,"z":15},{"x":40,"y":-12,"z":15},{"x":40,"y":-7,"z":16},{"x":40,"y":-8,"z":16},{"x":40,"y":-9,"z":16},{"x":40,"y":-10,"z":16},{"x":40,"y":-11,"z":16},{"x":40,"y":-12,"z":16},{"x":40,"y":-7,"z":17},{"x":40,"y":-8,"z":17},{"x":40,"y":-9,"z":17},{"x":40,"y":-10,"z":17},{"x":40,"y":-11,"z":17},{"x":40,"y":-12,"z":17}]},"preRequisite":["lever-3:triggered"],"mechType":"OnewayDoor"},"chest-2":{"mechType":"Secret","secretPoint":{"x":32,"y":-19,"z":18},"secretType":"CHEST","preRequisite":["prince-1:open"]},"door-4":{"secretPoint":{"offsetPointList":[{"x":24,"y":-6,"z":15},{"x":24,"y":-7,"z":15},{"x":24,"y":-8,"z":15},{"x":24,"y":-9,"z":15},{"x":24,"y":-10,"z":15},{"x":24,"y":-11,"z":15},{"x":24,"y":-12,"z":15},{"x":24,"y":-6,"z":16},{"x":24,"y":-7,"z":16},{"x":24,"y":-8,"z":16},{"x":24,"y":-9,"z":16},{"x":24,"y":-10,"z":16},{"x":24,"y":-11,"z":16},{"x":24,"y":-12,"z":16},{"x":24,"y":-6,"z":17},{"x":24,"y":-7,"z":17},{"x":24,"y":-8,"z":17},{"x":24,"y":-9,"z":17},{"x":24,"y":-10,"z":17},{"x":24,"y":-11,"z":17},{"x":24,"y":-12,"z":17}]},"preRequisite":["lever-4:triggered"],"mechType":"OnewayDoor"},"chest-3":{"mechType":"Secret","secretPoint":{"x":6,"y":17,"z":29},"secretType":"CHEST","preRequisite":[]},"dummy-1":{"secretPoint":{"x":9,"y":-12,"z":14},"preRequisite":["door-2:open","door-4:open"],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":62,"y":-11,"z":16},"preRequisite":["superboom-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":51,"y":-7,"z":15},{"x":51,"y":-8,"z":15},{"x":51,"y":-9,"z":15},{"x":51,"y":-10,"z":15},{"x":51,"y":-11,"z":15},{"x":51,"y":-12,"z":15},{"x":51,"y":-7,"z":16},{"x":51,"y":-8,"z":16},{"x":51,"y":-9,"z":16},{"x":51,"y":-10,"z":16},{"x":51,"y":-11,"z":16},{"x":51,"y":-12,"z":16},{"x":51,"y":-7,"z":17},{"x":51,"y":-8,"z":17},{"x":51,"y":-9,"z":17},{"x":51,"y":-10,"z":17},{"x":51,"y":-11,"z":17},{"x":51,"y":-12,"z":17}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":46,"y":-11,"z":16},"preRequisite":["door-1:open"],"triggering":"door-2"},"door-2":{"secretPoint":{"offsetPointList":[{"x":20,"y":-6,"z":15},{"x":20,"y":-7,"z":15},{"x":20,"y":-8,"z":15},{"x":20,"y":-9,"z":15},{"x":20,"y":-10,"z":15},{"x":20,"y":-11,"z":15},{"x":20,"y":-12,"z":15},{"x":20,"y":-6,"z":16},{"x":20,"y":-7,"z":16},{"x":20,"y":-8,"z":16},{"x":20,"y":-9,"z":16},{"x":20,"y":-10,"z":16},{"x":20,"y":-11,"z":16},{"x":20,"y":-12,"z":16},{"x":20,"y":-6,"z":17},{"x":20,"y":-7,"z":17},{"x":20,"y":-8,"z":17},{"x":20,"y":-9,"z":17},{"x":20,"y":-10,"z":17},{"x":20,"y":-11,"z":17},{"x":20,"y":-12,"z":17}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":49,"y":-6,"z":17},"secretType":"BAT","preRequisite":["door-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":58,"y":-8,"z":15},{"x":58,"y":-9,"z":15},{"x":58,"y":-12,"z":15},{"x":58,"y":-8,"z":16},{"x":58,"y":-9,"z":16},{"x":58,"y":-10,"z":16},{"x":58,"y":-11,"z":16},{"x":58,"y":-12,"z":16},{"x":58,"y":-8,"z":17},{"x":58,"y":-9,"z":17},{"x":58,"y":-10,"z":17},{"x":58,"y":-11,"z":17},{"x":58,"y":-12,"z":17}]},"preRequisite":[],"mechType":"BreakableWall"},"chests-1":{"mechType":"Secret","secretPoint":{"x":9,"y":-12,"z":18},"secretType":"CHEST","preRequisite":["dummy-1:click"]},"lever-3":{"mechType":"OnewayLever","leverPoint":{"x":51,"y":-11,"z":2},"preRequisite":[],"triggering":"door-3"},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":31,"y":-11,"z":25},{"x":31,"y":-12,"z":25},{"x":32,"y":-11,"z":25},{"x":32,"y":-12,"z":25},{"x":33,"y":-11,"z":25},{"x":33,"y":-12,"z":25},{"x":31,"y":-11,"z":26},{"x":31,"y":-12,"z":26},{"x":32,"y":-11,"z":26},{"x":32,"y":-12,"z":26},{"x":33,"y":-11,"z":26},{"x":33,"y":-12,"z":26},{"x":31,"y":-11,"z":27},{"x":31,"y":-12,"z":27},{"x":32,"y":-11,"z":27},{"x":32,"y":-12,"z":27},{"x":33,"y":-11,"z":27},{"x":33,"y":-12,"z":27},{"x":31,"y":-11,"z":28},{"x":31,"y":-12,"z":28},{"x":32,"y":-11,"z":28},{"x":32,"y":-12,"z":28},{"x":33,"y":-11,"z":28},{"x":33,"y":-12,"z":28}]},"preRequisite":[],"mechType":"Tomb"},"lever-4":{"mechType":"OnewayLever","leverPoint":{"x":44,"y":-11,"z":16},"preRequisite":["door-3:open"],"triggering":"door-4"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":41,"y":-11,"z":19},{"x":41,"y":-12,"z":19},{"x":42,"y":-11,"z":19},{"x":42,"y":-12,"z":19},{"x":43,"y":-11,"z":19},{"x":43,"y":-12,"z":19},{"x":44,"y":-11,"z":19},{"x":44,"y":-12,"z":19},{"x":41,"y":-11,"z":20},{"x":41,"y":-12,"z":20},{"x":42,"y":-11,"z":20},{"x":42,"y":-12,"z":20},{"x":43,"y":-11,"z":20},{"x":43,"y":-12,"z":20},{"x":44,"y":-11,"z":20},{"x":44,"y":-12,"z":20},{"x":41,"y":-11,"z":21},{"x":41,"y":-12,"z":21},{"x":42,"y":-11,"z":21},{"x":42,"y":-12,"z":21},{"x":43,"y":-11,"z":21},{"x":43,"y":-12,"z":21},{"x":44,"y":-11,"z":21},{"x":44,"y":-12,"z":21},{"x":41,"y":-11,"z":22},{"x":41,"y":-12,"z":22},{"x":42,"y":-11,"z":22},{"x":42,"y":-12,"z":22},{"x":43,"y":-11,"z":22},{"x":43,"y":-12,"z":22},{"x":44,"y":-11,"z":22},{"x":44,"y":-12,"z":22}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":47,"y":-11,"z":19},{"x":47,"y":-12,"z":19},{"x":48,"y":-11,"z":19},{"x":48,"y":-12,"z":19},{"x":49,"y":-11,"z":19},{"x":49,"y":-12,"z":19},{"x":47,"y":-11,"z":20},{"x":47,"y":-12,"z":20},{"x":48,"y":-11,"z":20},{"x":48,"y":-12,"z":20},{"x":49,"y":-11,"z":20},{"x":49,"y":-12,"z":20},{"x":47,"y":-11,"z":21},{"x":47,"y":-12,"z":21},{"x":48,"y":-11,"z":21},{"x":48,"y":-12,"z":21},{"x":49,"y":-11,"z":21},{"x":49,"y":-12,"z":21},{"x":47,"y":-11,"z":22},{"x":47,"y":-12,"z":22},{"x":48,"y":-11,"z":22},{"x":48,"y":-12,"z":22},{"x":49,"y":-11,"z":22},{"x":49,"y":-12,"z":22}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":31,"y":-11,"z":15},{"x":31,"y":-12,"z":15},{"x":32,"y":-11,"z":15},{"x":32,"y":-12,"z":15},{"x":33,"y":-11,"z":15},{"x":33,"y":-12,"z":15},{"x":31,"y":-11,"z":16},{"x":31,"y":-12,"z":16},{"x":32,"y":-11,"z":16},{"x":32,"y":-12,"z":16},{"x":33,"y":-11,"z":16},{"x":33,"y":-12,"z":16},{"x":31,"y":-11,"z":17},{"x":31,"y":-12,"z":17},{"x":32,"y":-11,"z":17},{"x":32,"y":-12,"z":17},{"x":33,"y":-11,"z":17},{"x":33,"y":-12,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":21,"y":-11,"z":11},{"x":21,"y":-12,"z":11},{"x":22,"y":-11,"z":11},{"x":22,"y":-12,"z":11},{"x":21,"y":-11,"z":12},{"x":21,"y":-12,"z":12},{"x":22,"y":-11,"z":12},{"x":22,"y":-12,"z":12},{"x":21,"y":-11,"z":13},{"x":21,"y":-12,"z":13},{"x":22,"y":-11,"z":13},{"x":22,"y":-12,"z":13}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-11,"z":5},{"x":15,"y":-12,"z":5},{"x":16,"y":-11,"z":5},{"x":16,"y":-12,"z":5},{"x":17,"y":-11,"z":5},{"x":17,"y":-12,"z":5},{"x":15,"y":-11,"z":6},{"x":15,"y":-12,"z":6},{"x":16,"y":-11,"z":6},{"x":16,"y":-12,"z":6},{"x":17,"y":-11,"z":6},{"x":17,"y":-12,"z":6},{"x":15,"y":-11,"z":7},{"x":15,"y":-12,"z":7},{"x":16,"y":-11,"z":7},{"x":16,"y":-12,"z":7},{"x":17,"y":-11,"z":7},{"x":17,"y":-12,"z":7},{"x":15,"y":-11,"z":8},{"x":15,"y":-12,"z":8},{"x":16,"y":-11,"z":8},{"x":16,"y":-12,"z":8},{"x":17,"y":-11,"z":8},{"x":17,"y":-12,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":37,"y":-11,"z":26},{"x":37,"y":-12,"z":26},{"x":38,"y":-11,"z":26},{"x":38,"y":-12,"z":26},{"x":39,"y":-11,"z":26},{"x":39,"y":-12,"z":26},{"x":40,"y":-11,"z":26},{"x":40,"y":-12,"z":26},{"x":41,"y":-11,"z":26},{"x":41,"y":-12,"z":26},{"x":37,"y":-11,"z":27},{"x":37,"y":-12,"z":27},{"x":38,"y":-11,"z":27},{"x":38,"y":-12,"z":27},{"x":39,"y":-11,"z":27},{"x":39,"y":-12,"z":27},{"x":40,"y":-11,"z":27},{"x":40,"y":-12,"z":27},{"x":41,"y":-11,"z":27},{"x":41,"y":-12,"z":27},{"x":37,"y":-11,"z":28},{"x":37,"y":-12,"z":28},{"x":38,"y":-11,"z":28},{"x":38,"y":-12,"z":28},{"x":39,"y":-11,"z":28},{"x":39,"y":-12,"z":28},{"x":40,"y":-11,"z":28},{"x":40,"y":-12,"z":28},{"x":41,"y":-11,"z":28},{"x":41,"y":-12,"z":28},{"x":37,"y":-11,"z":29},{"x":37,"y":-12,"z":29},{"x":38,"y":-11,"z":29},{"x":38,"y":-12,"z":29},{"x":39,"y":-11,"z":29},{"x":39,"y":-12,"z":29},{"x":40,"y":-11,"z":29},{"x":40,"y":-12,"z":29},{"x":41,"y":-11,"z":29},{"x":41,"y":-12,"z":29},{"x":39,"y":-10,"z":28},{"x":39,"y":-10,"z":29}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/11982f7f-703e-4d98-9d27-4e07ba3fef71.json b/src/main/resources/dgroomdata/11982f7f-703e-4d98-9d27-4e07ba3fef71.json new file mode 100644 index 0000000..c91e4bf --- /dev/null +++ b/src/main/resources/dgroomdata/11982f7f-703e-4d98-9d27-4e07ba3fef71.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,139,1,139,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,139,1,139,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"11982f7f-703e-4d98-9d27-4e07ba3fef71","name":"puzzle-creeper","processorId":"puzzle_creeper_solver","properties":{},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/12080b02-4ccc-49ce-9eaf-e7d8946f3984.json b/src/main/resources/dgroomdata/12080b02-4ccc-49ce-9eaf-e7d8946f3984.json new file mode 100644 index 0000000..b6b3fad --- /dev/null +++ b/src/main/resources/dgroomdata/12080b02-4ccc-49ce-9eaf-e7d8946f3984.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,98,35,98,0,0,0,0,0,98,98,1,98,98,98,98,67,67,4,67,4,4,4,48,67,67,3,67,67,109,109,0,0,0,109,109,0,0,0,0,0,109,109,98,48,4,48,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,98,1,0,0,0,0,0,0,50,1,0,0,0,0,109,67,4,48,48,4,67,4,48,48,67,3,3,67,109,0,0,0,0,0,0,0,0,0,0,0,0,50,98,48,48,4,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,109,4,48,48,4,67,67,4,67,67,4,48,3,3,109,0,0,0,0,0,0,0,0,0,0,0,0,0,98,67,67,67,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,4,48,48,4,4,169,67,4,4,4,3,48,109,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,44,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,67,4,67,67,35,4,169,35,4,4,67,48,4,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,67,4,4,4,48,35,169,4,35,67,67,48,4,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,3,3,3,4,35,48,169,4,35,48,67,4,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,98,159,159,98,98,0,0,0,0,0,0,0,0,0,0,0,139,98,98,67,3,48,67,67,67,169,4,35,48,4,3,3,1,1,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,109,109,109,109,98,98,0,0,0,0,0,0,0,0,0,0,1,98,67,67,4,48,48,67,4,169,35,35,4,4,67,67,67,1,98,144,0,0,109,98,0,0,144,98,0,0,0,0,0,0,139,144,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,98,4,4,4,67,4,4,4,35,169,48,67,67,4,4,48,3,3,98,159,159,159,98,98,159,159,159,44,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,3,4,3,67,67,4,35,48,169,4,35,48,48,4,4,48,3,4,98,98,98,98,98,98,98,159,0,50,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,1,3,3,67,48,48,4,35,4,48,67,35,48,4,48,4,4,4,98,98,98,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,3,48,67,4,48,48,48,67,67,48,4,4,67,48,4,1,98,1,98,98,1,98,98,98,159,144,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,48,48,4,48,67,67,67,67,67,67,67,67,67,48,48,98,159,159,159,98,98,98,98,98,159,44,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,1,98,1,1,1,48,0,0,0,0,0,0,0,4,1,1,1,1,0,144,0,159,159,159,98,98,98,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,0,0,0,0,0,50,98,98,98,109,109,109,109,98,98,1,4,0,0,0,0,0,0,0,4,98,98,98,98,0,0,0,0,0,0,159,159,98,98,1,1,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,144,0,144,0,0,98,98,98,0,0,0,144,1,98,109,109,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,144,0,0,0,98,98,1,1,139,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,159,159,159,159,98,98,98,159,159,159,159,1,98,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0,144,98,98,98,98,98,0,144,0,0,144,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,1,98,98,98,98,98,98,98,98,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,159,159,159,159,159,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,0,0,0,0,0,4,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,7,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,159,1,7,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,159,159,0,7,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,35,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,56,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,56,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,14,14,14,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,5,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,56,56,14,0,0,0,0,0,0,0,5,5,164,0,0,0,0,0,0,5,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,56,56,14,0,0,0,0,0,0,0,0,164,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,135,135,0,5,5,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,135,0,164,5,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,118,0,0,0,5,0,0,0,0,0,0,0,118,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,44,4,0,5,0,0,0,0,0,0,0,4,44,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,98,98,162,0,0,0,0,162,5,5,162,98,98,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,14,14,0,1,0,1,0,0,0,0,0,0,0,1,0,1,44,98,1,98,1,0,0,0,0,0,0,0,0,0,1,98,98,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,50,56,56,14,98,159,101,159,98,0,0,0,0,0,98,159,101,159,98,1,98,98,0,0,0,0,0,0,0,0,0,0,144,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,44,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,56,56,0,98,159,51,159,98,0,0,0,0,0,98,159,51,159,98,98,51,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,44,44,109,0,0,0,0,0,0,0,98,44,44,98,98,98,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,159,98,98,0,0,0,0,0,98,98,159,98,98,98,0,0,0,0,0,0,0,0,0,0,0,144,0,98,159,159,109,101,101,109,0,0,0,0,0,0,0,98,101,101,98,98,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,159,159,98,98,109,0,0,0,0,0,0,0,0,139,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,144,0,0,0,50,109,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,44,44,98,98,109,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,1,144,44,44,44,1,98,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,44,159,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,5,0,0,0,139,98,98,50,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,98,159,159,159,159,98,98,152,68,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,44,159,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,134,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,1,44,44,44,144,1,98,98,0,0,0,144,109,0,0,0,0,0,0,0,98,98,0,0,0,109,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,109,0,0,0,0,0,0,0,101,0,0,0,0,109,109,134,134,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,44,44,0,0,0,0,0,44,44,98,98,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,68,0,101,0,0,0,0,0,109,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"12080b02-4ccc-49ce-9eaf-e7d8946f3984","name":"mithril-cave","processorId":"default","properties":{},"mechanics":{"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":35,"y":9,"z":60},"preRequisite":[],"triggering":"door-1"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":15,"y":10,"z":4},"preRequisite":["crypt-5:open"],"triggering":"door-2"},"lever-3":{"mechType":"OnewayLever","leverPoint":{"x":53,"y":9,"z":10},"preRequisite":["crypt-7:open"],"triggering":"door-3"},"chest-2":{"mechType":"Secret","secretPoint":{"x":10,"y":38,"z":18},"secretType":"CHEST","preRequisite":[]},"door-3":{"secretPoint":{"offsetPointList":[{"x":47,"y":13,"z":11},{"x":47,"y":12,"z":11},{"x":47,"y":11,"z":11},{"x":47,"y":10,"z":11},{"x":47,"y":13,"z":12},{"x":47,"y":12,"z":12},{"x":47,"y":11,"z":12},{"x":47,"y":10,"z":12},{"x":47,"y":13,"z":13},{"x":47,"y":12,"z":13},{"x":47,"y":11,"z":13},{"x":47,"y":10,"z":13},{"x":47,"y":13,"z":14},{"x":47,"y":12,"z":14},{"x":47,"y":11,"z":14},{"x":47,"y":10,"z":14},{"x":47,"y":13,"z":15},{"x":47,"y":12,"z":15},{"x":47,"y":11,"z":15},{"x":47,"y":10,"z":15}]},"preRequisite":["lever-3:triggered"],"mechType":"OnewayDoor"},"chest-3":{"mechType":"Secret","secretPoint":{"x":57,"y":8,"z":59},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":32,"y":29,"z":59},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":50,"y":14,"z":58},{"x":50,"y":13,"z":58},{"x":50,"y":12,"z":58},{"x":50,"y":11,"z":58},{"x":50,"y":10,"z":58},{"x":50,"y":9,"z":58},{"x":50,"y":8,"z":58},{"x":50,"y":14,"z":59},{"x":50,"y":13,"z":59},{"x":50,"y":12,"z":59},{"x":50,"y":11,"z":59},{"x":50,"y":10,"z":59},{"x":50,"y":9,"z":59},{"x":50,"y":8,"z":59},{"x":50,"y":14,"z":60},{"x":50,"y":13,"z":60},{"x":50,"y":12,"z":60},{"x":50,"y":11,"z":60},{"x":50,"y":10,"z":60},{"x":50,"y":9,"z":60},{"x":50,"y":8,"z":60}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"door-2":{"secretPoint":{"offsetPointList":[{"x":4,"y":25,"z":19},{"x":4,"y":24,"z":19},{"x":4,"y":23,"z":19},{"x":4,"y":22,"z":19},{"x":4,"y":21,"z":19},{"x":4,"y":20,"z":19},{"x":5,"y":25,"z":19},{"x":5,"y":24,"z":19},{"x":5,"y":23,"z":19},{"x":5,"y":22,"z":19},{"x":5,"y":21,"z":19},{"x":5,"y":20,"z":19},{"x":6,"y":25,"z":19},{"x":6,"y":24,"z":19},{"x":6,"y":23,"z":19},{"x":6,"y":22,"z":19},{"x":6,"y":21,"z":19},{"x":6,"y":20,"z":19},{"x":7,"y":25,"z":19},{"x":7,"y":24,"z":19},{"x":7,"y":23,"z":19},{"x":7,"y":22,"z":19},{"x":7,"y":21,"z":19},{"x":7,"y":20,"z":19},{"x":8,"y":25,"z":19},{"x":8,"y":24,"z":19},{"x":8,"y":23,"z":19},{"x":8,"y":22,"z":19},{"x":8,"y":21,"z":19},{"x":8,"y":20,"z":19}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"crypt-10":{"secretPoint":{"offsetPointList":[{"x":25,"y":0,"z":59},{"x":25,"y":-1,"z":59},{"x":26,"y":0,"z":59},{"x":26,"y":-1,"z":59},{"x":27,"y":0,"z":59},{"x":27,"y":-1,"z":59},{"x":25,"y":0,"z":60},{"x":25,"y":-1,"z":60},{"x":26,"y":0,"z":60},{"x":26,"y":-1,"z":60},{"x":27,"y":0,"z":60},{"x":27,"y":-1,"z":60},{"x":25,"y":0,"z":61},{"x":25,"y":-1,"z":61},{"x":26,"y":0,"z":61},{"x":26,"y":-1,"z":61},{"x":27,"y":0,"z":61},{"x":27,"y":-1,"z":61},{"x":25,"y":0,"z":62},{"x":25,"y":-1,"z":62},{"x":26,"y":0,"z":62},{"x":26,"y":-1,"z":62},{"x":27,"y":0,"z":62},{"x":27,"y":-1,"z":62}]},"preRequisite":[],"mechType":"Tomb"},"crypt-11":{"secretPoint":{"offsetPointList":[{"x":9,"y":41,"z":29},{"x":9,"y":40,"z":29},{"x":10,"y":41,"z":29},{"x":10,"y":40,"z":29},{"x":11,"y":41,"z":29},{"x":11,"y":40,"z":29},{"x":9,"y":41,"z":30},{"x":9,"y":40,"z":30},{"x":10,"y":41,"z":30},{"x":10,"y":40,"z":30},{"x":11,"y":41,"z":30},{"x":11,"y":40,"z":30},{"x":9,"y":41,"z":31},{"x":9,"y":40,"z":31},{"x":10,"y":41,"z":31},{"x":10,"y":40,"z":31},{"x":11,"y":41,"z":31},{"x":11,"y":40,"z":31},{"x":9,"y":41,"z":32},{"x":9,"y":40,"z":32},{"x":10,"y":41,"z":32},{"x":10,"y":40,"z":32},{"x":11,"y":41,"z":32},{"x":11,"y":40,"z":32}]},"preRequisite":["superboom-2:open"],"mechType":"Tomb"},"chest-6":{"mechType":"Secret","secretPoint":{"x":42,"y":10,"z":13},"secretType":"CHEST","preRequisite":["door-3:open"]},"chest-7":{"mechType":"Secret","secretPoint":{"x":10,"y":39,"z":31},"secretType":"CHEST","preRequisite":["crypt-11:open"]},"chest-4":{"mechType":"Secret","secretPoint":{"x":61,"y":-27,"z":51},"secretType":"CHEST","preRequisite":[]},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":13,"y":44,"z":22},{"x":13,"y":43,"z":22},{"x":13,"y":42,"z":22},{"x":13,"y":41,"z":22},{"x":13,"y":40,"z":22},{"x":14,"y":44,"z":22},{"x":14,"y":43,"z":22},{"x":14,"y":42,"z":22},{"x":14,"y":41,"z":22},{"x":14,"y":40,"z":22},{"x":15,"y":44,"z":22},{"x":15,"y":43,"z":22},{"x":15,"y":42,"z":22},{"x":15,"y":41,"z":22},{"x":15,"y":40,"z":22}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":10,"y":12,"z":22},"secretType":"CHEST","preRequisite":["door-2:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":7,"y":21,"z":57},{"x":7,"y":20,"z":57},{"x":7,"y":22,"z":58},{"x":7,"y":21,"z":58},{"x":7,"y":20,"z":58},{"x":7,"y":19,"z":58},{"x":7,"y":20,"z":59},{"x":7,"y":19,"z":59}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-9":{"secretPoint":{"offsetPointList":[{"x":6,"y":37,"z":56},{"x":6,"y":36,"z":56},{"x":7,"y":37,"z":56},{"x":7,"y":36,"z":56},{"x":8,"y":37,"z":56},{"x":8,"y":36,"z":56},{"x":9,"y":37,"z":56},{"x":9,"y":36,"z":56},{"x":6,"y":37,"z":57},{"x":6,"y":36,"z":57},{"x":7,"y":37,"z":57},{"x":7,"y":36,"z":57},{"x":8,"y":37,"z":57},{"x":8,"y":36,"z":57},{"x":9,"y":37,"z":57},{"x":9,"y":36,"z":57},{"x":6,"y":37,"z":58},{"x":6,"y":36,"z":58},{"x":7,"y":37,"z":58},{"x":7,"y":36,"z":58},{"x":8,"y":37,"z":58},{"x":8,"y":36,"z":58},{"x":9,"y":37,"z":58},{"x":9,"y":36,"z":58}]},"preRequisite":[],"mechType":"Tomb"},"crypt-8":{"secretPoint":{"offsetPointList":[{"x":6,"y":37,"z":50},{"x":6,"y":36,"z":50},{"x":7,"y":37,"z":50},{"x":7,"y":36,"z":50},{"x":8,"y":37,"z":50},{"x":8,"y":36,"z":50},{"x":9,"y":37,"z":50},{"x":9,"y":36,"z":50},{"x":6,"y":37,"z":51},{"x":6,"y":36,"z":51},{"x":7,"y":37,"z":51},{"x":7,"y":36,"z":51},{"x":8,"y":37,"z":51},{"x":8,"y":36,"z":51},{"x":9,"y":37,"z":51},{"x":9,"y":36,"z":51},{"x":6,"y":37,"z":52},{"x":6,"y":36,"z":52},{"x":7,"y":37,"z":52},{"x":7,"y":36,"z":52},{"x":8,"y":37,"z":52},{"x":8,"y":36,"z":52},{"x":9,"y":37,"z":52},{"x":9,"y":36,"z":52}]},"preRequisite":[],"mechType":"Tomb"},"itemdrop-3":{"mechType":"Secret","secretPoint":{"x":5,"y":-16,"z":57},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-7":{"secretPoint":{"offsetPointList":[{"x":52,"y":11,"z":9},{"x":52,"y":10,"z":9},{"x":53,"y":11,"z":9},{"x":53,"y":10,"z":9},{"x":54,"y":11,"z":9},{"x":54,"y":10,"z":9},{"x":55,"y":11,"z":9},{"x":55,"y":10,"z":9},{"x":52,"y":11,"z":10},{"x":52,"y":10,"z":10},{"x":53,"y":11,"z":10},{"x":53,"y":10,"z":10},{"x":54,"y":11,"z":10},{"x":54,"y":10,"z":10},{"x":55,"y":11,"z":10},{"x":55,"y":10,"z":10},{"x":52,"y":11,"z":11},{"x":52,"y":10,"z":11},{"x":53,"y":11,"z":11},{"x":53,"y":10,"z":11},{"x":54,"y":11,"z":11},{"x":54,"y":10,"z":11},{"x":55,"y":11,"z":11},{"x":55,"y":10,"z":11}]},"preRequisite":[],"mechType":"Tomb"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":54,"y":-22,"z":10},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":3,"y":12,"z":15},{"x":3,"y":11,"z":15},{"x":4,"y":12,"z":15},{"x":4,"y":11,"z":15},{"x":5,"y":12,"z":15},{"x":5,"y":11,"z":15},{"x":6,"y":12,"z":15},{"x":6,"y":11,"z":15},{"x":3,"y":12,"z":16},{"x":3,"y":11,"z":16},{"x":4,"y":12,"z":16},{"x":4,"y":11,"z":16},{"x":5,"y":12,"z":16},{"x":5,"y":11,"z":16},{"x":6,"y":12,"z":16},{"x":6,"y":11,"z":16},{"x":3,"y":12,"z":17},{"x":3,"y":11,"z":17},{"x":4,"y":12,"z":17},{"x":4,"y":11,"z":17},{"x":5,"y":12,"z":17},{"x":5,"y":11,"z":17},{"x":6,"y":12,"z":17},{"x":6,"y":11,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":14,"y":12,"z":3},{"x":14,"y":11,"z":3},{"x":15,"y":12,"z":3},{"x":15,"y":11,"z":3},{"x":16,"y":12,"z":3},{"x":16,"y":11,"z":3},{"x":14,"y":12,"z":4},{"x":14,"y":11,"z":4},{"x":15,"y":12,"z":4},{"x":15,"y":11,"z":4},{"x":16,"y":12,"z":4},{"x":16,"y":11,"z":4},{"x":14,"y":12,"z":5},{"x":14,"y":11,"z":5},{"x":15,"y":12,"z":5},{"x":15,"y":11,"z":5},{"x":16,"y":12,"z":5},{"x":16,"y":11,"z":5},{"x":14,"y":12,"z":6},{"x":14,"y":11,"z":6},{"x":15,"y":12,"z":6},{"x":15,"y":11,"z":6},{"x":16,"y":12,"z":6},{"x":16,"y":11,"z":6}]},"preRequisite":[],"mechType":"Tomb"},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":2,"y":19,"z":58},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":14,"y":9,"z":60},{"x":14,"y":8,"z":60},{"x":15,"y":9,"z":60},{"x":15,"y":8,"z":60},{"x":14,"y":9,"z":61},{"x":14,"y":8,"z":61},{"x":15,"y":9,"z":61},{"x":15,"y":8,"z":61},{"x":14,"y":9,"z":62},{"x":14,"y":8,"z":62},{"x":15,"y":9,"z":62},{"x":15,"y":8,"z":62}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":9,"y":9,"z":60},{"x":9,"y":8,"z":60},{"x":10,"y":9,"z":60},{"x":10,"y":8,"z":60},{"x":9,"y":9,"z":61},{"x":9,"y":8,"z":61},{"x":10,"y":9,"z":61},{"x":10,"y":8,"z":61},{"x":9,"y":9,"z":62},{"x":9,"y":8,"z":62},{"x":10,"y":9,"z":62},{"x":10,"y":8,"z":62}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":5,"y":38,"z":17},{"x":5,"y":37,"z":17},{"x":6,"y":38,"z":17},{"x":6,"y":37,"z":17},{"x":7,"y":38,"z":17},{"x":7,"y":37,"z":17},{"x":5,"y":38,"z":18},{"x":5,"y":37,"z":18},{"x":6,"y":38,"z":18},{"x":6,"y":37,"z":18},{"x":7,"y":38,"z":18},{"x":7,"y":37,"z":18},{"x":5,"y":38,"z":19},{"x":5,"y":37,"z":19},{"x":6,"y":38,"z":19},{"x":6,"y":37,"z":19},{"x":7,"y":38,"z":19},{"x":7,"y":37,"z":19},{"x":5,"y":38,"z":20},{"x":5,"y":37,"z":20},{"x":6,"y":38,"z":20},{"x":6,"y":37,"z":20},{"x":7,"y":38,"z":20},{"x":7,"y":37,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":13,"y":38,"z":17},{"x":13,"y":37,"z":17},{"x":14,"y":38,"z":17},{"x":14,"y":37,"z":17},{"x":15,"y":38,"z":17},{"x":15,"y":37,"z":17},{"x":13,"y":38,"z":18},{"x":13,"y":37,"z":18},{"x":14,"y":38,"z":18},{"x":14,"y":37,"z":18},{"x":15,"y":38,"z":18},{"x":15,"y":37,"z":18},{"x":13,"y":38,"z":19},{"x":13,"y":37,"z":19},{"x":14,"y":38,"z":19},{"x":14,"y":37,"z":19},{"x":15,"y":38,"z":19},{"x":15,"y":37,"z":19},{"x":13,"y":38,"z":20},{"x":13,"y":37,"z":20},{"x":14,"y":38,"z":20},{"x":14,"y":37,"z":20},{"x":15,"y":38,"z":20},{"x":15,"y":37,"z":20}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":10} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/15083814-fb7b-4791-b5d7-0810dd396b01.json b/src/main/resources/dgroomdata/15083814-fb7b-4791-b5d7-0810dd396b01.json new file mode 100644 index 0000000..1302074 --- /dev/null +++ b/src/main/resources/dgroomdata/15083814-fb7b-4791-b5d7-0810dd396b01.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,159,144,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,159,44,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,159,44,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,159,109,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,109,109,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,17,109,109,0,0,0,0,0,0,44,4,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,98,98,98,109,109,0,0,0,0,0,0,0,4,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,159,109,0,0,0,0,0,0,0,0,98,98,4,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,144,159,44,0,0,0,0,0,0,0,0,98,98,0,0,98,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,159,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,43,98,43,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,43,98,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,43,109,159,144,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,98,98,98,98,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,98,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,159,43,0,0,0,0,0,0,0,0,0,109,98,109,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,98,4,98,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,98,4,109,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,4,109,109,109,109,0,109,0,98,98,0,109,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,50,139,98,98,98,98,98,98,98,98,98,98,98,98,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,1,1,98,98,98,98,98,98,98,98,98,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"15083814-fb7b-4791-b5d7-0810dd396b01","name":"Big-red-flag","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":8,"y":5,"z":21},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":5,"y":5,"z":27},"secretType":"ITEM_DROP","preRequisite":[]},"prince-1":{"secretPoint":{"offsetPointList":[{"x":22,"y":2,"z":16},{"x":22,"y":1,"z":16},{"x":22,"y":0,"z":16},{"x":22,"y":-1,"z":16},{"x":23,"y":2,"z":16},{"x":23,"y":1,"z":16},{"x":23,"y":0,"z":16},{"x":23,"y":-1,"z":16},{"x":24,"y":2,"z":16},{"x":24,"y":1,"z":16},{"x":24,"y":0,"z":16},{"x":24,"y":-1,"z":16},{"x":25,"y":2,"z":16},{"x":25,"y":1,"z":16},{"x":25,"y":0,"z":16},{"x":25,"y":-1,"z":16},{"x":26,"y":2,"z":16},{"x":26,"y":1,"z":16},{"x":26,"y":0,"z":16},{"x":26,"y":-1,"z":16},{"x":22,"y":2,"z":17},{"x":22,"y":1,"z":17},{"x":22,"y":0,"z":17},{"x":22,"y":-1,"z":17},{"x":23,"y":2,"z":17},{"x":23,"y":1,"z":17},{"x":23,"y":0,"z":17},{"x":23,"y":-1,"z":17},{"x":24,"y":2,"z":17},{"x":24,"y":1,"z":17},{"x":24,"y":0,"z":17},{"x":24,"y":-1,"z":17},{"x":25,"y":2,"z":17},{"x":25,"y":1,"z":17},{"x":25,"y":0,"z":17},{"x":25,"y":-1,"z":17},{"x":26,"y":2,"z":17},{"x":26,"y":1,"z":17},{"x":26,"y":0,"z":17},{"x":26,"y":-1,"z":17},{"x":22,"y":2,"z":18},{"x":22,"y":1,"z":18},{"x":22,"y":0,"z":18},{"x":22,"y":-1,"z":18},{"x":23,"y":2,"z":18},{"x":23,"y":1,"z":18},{"x":23,"y":0,"z":18},{"x":23,"y":-1,"z":18},{"x":24,"y":2,"z":18},{"x":24,"y":1,"z":18},{"x":24,"y":0,"z":18},{"x":24,"y":-1,"z":18},{"x":25,"y":2,"z":18},{"x":25,"y":1,"z":18},{"x":25,"y":0,"z":18},{"x":25,"y":-1,"z":18},{"x":26,"y":2,"z":18},{"x":26,"y":1,"z":18},{"x":26,"y":0,"z":18},{"x":26,"y":-1,"z":18},{"x":22,"y":2,"z":19},{"x":22,"y":1,"z":19},{"x":22,"y":0,"z":19},{"x":22,"y":-1,"z":19},{"x":23,"y":2,"z":19},{"x":23,"y":1,"z":19},{"x":23,"y":0,"z":19},{"x":23,"y":-1,"z":19},{"x":24,"y":2,"z":19},{"x":24,"y":1,"z":19},{"x":24,"y":0,"z":19},{"x":24,"y":-1,"z":19},{"x":25,"y":2,"z":19},{"x":25,"y":1,"z":19},{"x":25,"y":0,"z":19},{"x":25,"y":-1,"z":19},{"x":26,"y":2,"z":19},{"x":26,"y":1,"z":19},{"x":26,"y":0,"z":19},{"x":26,"y":-1,"z":19}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json b/src/main/resources/dgroomdata/1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json new file mode 100644 index 0000000..b333ebe --- /dev/null +++ b/src/main/resources/dgroomdata/1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json @@ -0,0 +1,5412 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 4, + 4, + 1, + 1, + 4, + 67, + 67, + 1, + 1, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 67, + 67, + 4, + 1, + 1, + 4, + 4, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 109, + 109, + 98, + 109, + 109, + 109, + 109, + 109, + 98, + 109, + 109, + 0, + 0, + 0, + 1, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 1, + 98, + 0, + 0, + 0, + 98, + 44, + 98, + 109, + 109, + 109, + 109, + 109, + 98, + 1, + 1, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 67, + 4, + 1, + 1, + 4, + 4, + 4, + 1, + 1, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 67, + 67, + 4, + 1, + 1, + 4, + 4, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "1ae1d65c-2c72-4ed6-afab-84d0de759e1e", + "name": "Admins", + "processorId": "default", + "properties": {}, + "mechanics": { + "AgentK": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 15, + "z": 21 + }, + { + "x": 14, + "y": 14, + "z": 21 + }, + { + "x": 15, + "y": 15, + "z": 21 + }, + { + "x": 15, + "y": 14, + "z": 21 + }, + { + "x": 16, + "y": 15, + "z": 21 + }, + { + "x": 16, + "y": 14, + "z": 21 + }, + { + "x": 17, + "y": 15, + "z": 21 + }, + { + "x": 17, + "y": 14, + "z": 21 + }, + { + "x": 18, + "y": 15, + "z": 21 + }, + { + "x": 18, + "y": 14, + "z": 21 + }, + { + "x": 14, + "y": 15, + "z": 22 + }, + { + "x": 14, + "y": 14, + "z": 22 + }, + { + "x": 15, + "y": 15, + "z": 22 + }, + { + "x": 15, + "y": 14, + "z": 22 + }, + { + "x": 16, + "y": 15, + "z": 22 + }, + { + "x": 16, + "y": 14, + "z": 22 + }, + { + "x": 17, + "y": 15, + "z": 22 + }, + { + "x": 17, + "y": 14, + "z": 22 + }, + { + "x": 18, + "y": 15, + "z": 22 + }, + { + "x": 18, + "y": 14, + "z": 22 + }, + { + "x": 14, + "y": 15, + "z": 23 + }, + { + "x": 14, + "y": 14, + "z": 23 + }, + { + "x": 15, + "y": 15, + "z": 23 + }, + { + "x": 15, + "y": 14, + "z": 23 + }, + { + "x": 16, + "y": 15, + "z": 23 + }, + { + "x": 16, + "y": 14, + "z": 23 + }, + { + "x": 17, + "y": 15, + "z": 23 + }, + { + "x": 17, + "y": 14, + "z": 23 + }, + { + "x": 18, + "y": 15, + "z": 23 + }, + { + "x": 18, + "y": 14, + "z": 23 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "JamieTheGeek": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 15, + "z": 4 + }, + { + "x": 22, + "y": 14, + "z": 4 + }, + { + "x": 23, + "y": 15, + "z": 4 + }, + { + "x": 23, + "y": 14, + "z": 4 + }, + { + "x": 24, + "y": 15, + "z": 4 + }, + { + "x": 24, + "y": 14, + "z": 4 + }, + { + "x": 22, + "y": 15, + "z": 5 + }, + { + "x": 22, + "y": 14, + "z": 5 + }, + { + "x": 23, + "y": 15, + "z": 5 + }, + { + "x": 23, + "y": 14, + "z": 5 + }, + { + "x": 24, + "y": 15, + "z": 5 + }, + { + "x": 24, + "y": 14, + "z": 5 + }, + { + "x": 22, + "y": 15, + "z": 6 + }, + { + "x": 22, + "y": 14, + "z": 6 + }, + { + "x": 23, + "y": 15, + "z": 6 + }, + { + "x": 23, + "y": 14, + "z": 6 + }, + { + "x": 24, + "y": 15, + "z": 6 + }, + { + "x": 24, + "y": 14, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Rezzus": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 26, + "z": 3 + }, + { + "x": 14, + "y": 25, + "z": 3 + }, + { + "x": 15, + "y": 26, + "z": 3 + }, + { + "x": 15, + "y": 25, + "z": 3 + }, + { + "x": 16, + "y": 26, + "z": 3 + }, + { + "x": 16, + "y": 25, + "z": 3 + }, + { + "x": 17, + "y": 26, + "z": 3 + }, + { + "x": 17, + "y": 25, + "z": 3 + }, + { + "x": 18, + "y": 26, + "z": 3 + }, + { + "x": 18, + "y": 25, + "z": 3 + }, + { + "x": 14, + "y": 26, + "z": 4 + }, + { + "x": 14, + "y": 25, + "z": 4 + }, + { + "x": 15, + "y": 26, + "z": 4 + }, + { + "x": 15, + "y": 25, + "z": 4 + }, + { + "x": 16, + "y": 26, + "z": 4 + }, + { + "x": 16, + "y": 25, + "z": 4 + }, + { + "x": 17, + "y": 26, + "z": 4 + }, + { + "x": 17, + "y": 25, + "z": 4 + }, + { + "x": 18, + "y": 26, + "z": 4 + }, + { + "x": 18, + "y": 25, + "z": 4 + }, + { + "x": 14, + "y": 26, + "z": 5 + }, + { + "x": 14, + "y": 25, + "z": 5 + }, + { + "x": 15, + "y": 26, + "z": 5 + }, + { + "x": 15, + "y": 25, + "z": 5 + }, + { + "x": 16, + "y": 26, + "z": 5 + }, + { + "x": 16, + "y": 25, + "z": 5 + }, + { + "x": 17, + "y": 26, + "z": 5 + }, + { + "x": 17, + "y": 25, + "z": 5 + }, + { + "x": 18, + "y": 26, + "z": 5 + }, + { + "x": 18, + "y": 25, + "z": 5 + }, + { + "x": 14, + "y": 26, + "z": 6 + }, + { + "x": 14, + "y": 25, + "z": 6 + }, + { + "x": 15, + "y": 26, + "z": 6 + }, + { + "x": 15, + "y": 25, + "z": 6 + }, + { + "x": 16, + "y": 26, + "z": 6 + }, + { + "x": 16, + "y": 25, + "z": 6 + }, + { + "x": 17, + "y": 26, + "z": 6 + }, + { + "x": 17, + "y": 25, + "z": 6 + }, + { + "x": 18, + "y": 26, + "z": 6 + }, + { + "x": 18, + "y": 25, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "LadyBleu": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 15, + "z": 4 + }, + { + "x": 27, + "y": 14, + "z": 4 + }, + { + "x": 28, + "y": 15, + "z": 4 + }, + { + "x": 28, + "y": 14, + "z": 4 + }, + { + "x": 29, + "y": 15, + "z": 4 + }, + { + "x": 29, + "y": 14, + "z": 4 + }, + { + "x": 27, + "y": 15, + "z": 5 + }, + { + "x": 27, + "y": 14, + "z": 5 + }, + { + "x": 28, + "y": 15, + "z": 5 + }, + { + "x": 28, + "y": 14, + "z": 5 + }, + { + "x": 29, + "y": 15, + "z": 5 + }, + { + "x": 29, + "y": 14, + "z": 5 + }, + { + "x": 27, + "y": 15, + "z": 6 + }, + { + "x": 27, + "y": 14, + "z": 6 + }, + { + "x": 28, + "y": 15, + "z": 6 + }, + { + "x": 28, + "y": 14, + "z": 6 + }, + { + "x": 29, + "y": 15, + "z": 6 + }, + { + "x": 29, + "y": 14, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "sfarnham": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 4, + "z": 26 + }, + { + "x": 14, + "y": 3, + "z": 26 + }, + { + "x": 15, + "y": 4, + "z": 26 + }, + { + "x": 15, + "y": 3, + "z": 26 + }, + { + "x": 16, + "y": 4, + "z": 26 + }, + { + "x": 16, + "y": 3, + "z": 26 + }, + { + "x": 17, + "y": 4, + "z": 26 + }, + { + "x": 17, + "y": 3, + "z": 26 + }, + { + "x": 18, + "y": 4, + "z": 26 + }, + { + "x": 18, + "y": 3, + "z": 26 + }, + { + "x": 14, + "y": 4, + "z": 27 + }, + { + "x": 14, + "y": 3, + "z": 27 + }, + { + "x": 15, + "y": 4, + "z": 27 + }, + { + "x": 15, + "y": 3, + "z": 27 + }, + { + "x": 16, + "y": 4, + "z": 27 + }, + { + "x": 16, + "y": 3, + "z": 27 + }, + { + "x": 17, + "y": 4, + "z": 27 + }, + { + "x": 17, + "y": 3, + "z": 27 + }, + { + "x": 18, + "y": 4, + "z": 27 + }, + { + "x": 18, + "y": 3, + "z": 27 + }, + { + "x": 14, + "y": 4, + "z": 28 + }, + { + "x": 14, + "y": 3, + "z": 28 + }, + { + "x": 15, + "y": 4, + "z": 28 + }, + { + "x": 15, + "y": 3, + "z": 28 + }, + { + "x": 16, + "y": 4, + "z": 28 + }, + { + "x": 16, + "y": 3, + "z": 28 + }, + { + "x": 17, + "y": 4, + "z": 28 + }, + { + "x": 17, + "y": 3, + "z": 28 + }, + { + "x": 18, + "y": 4, + "z": 28 + }, + { + "x": 18, + "y": 3, + "z": 28 + }, + { + "x": 14, + "y": 4, + "z": 29 + }, + { + "x": 14, + "y": 3, + "z": 29 + }, + { + "x": 15, + "y": 4, + "z": 29 + }, + { + "x": 15, + "y": 3, + "z": 29 + }, + { + "x": 16, + "y": 4, + "z": 29 + }, + { + "x": 16, + "y": 3, + "z": 29 + }, + { + "x": 17, + "y": 4, + "z": 29 + }, + { + "x": 17, + "y": 3, + "z": 29 + }, + { + "x": 18, + "y": 4, + "z": 29 + }, + { + "x": 18, + "y": 3, + "z": 29 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "PJoke1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 26, + "z": 26 + }, + { + "x": 8, + "y": 25, + "z": 26 + }, + { + "x": 9, + "y": 26, + "z": 26 + }, + { + "x": 9, + "y": 25, + "z": 26 + }, + { + "x": 10, + "y": 26, + "z": 26 + }, + { + "x": 10, + "y": 25, + "z": 26 + }, + { + "x": 8, + "y": 26, + "z": 27 + }, + { + "x": 8, + "y": 25, + "z": 27 + }, + { + "x": 9, + "y": 26, + "z": 27 + }, + { + "x": 9, + "y": 25, + "z": 27 + }, + { + "x": 10, + "y": 26, + "z": 27 + }, + { + "x": 10, + "y": 25, + "z": 27 + }, + { + "x": 8, + "y": 26, + "z": 28 + }, + { + "x": 8, + "y": 25, + "z": 28 + }, + { + "x": 9, + "y": 26, + "z": 28 + }, + { + "x": 9, + "y": 25, + "z": 28 + }, + { + "x": 10, + "y": 26, + "z": 28 + }, + { + "x": 10, + "y": 25, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Judg3": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 26, + "z": 4 + }, + { + "x": 22, + "y": 25, + "z": 4 + }, + { + "x": 23, + "y": 26, + "z": 4 + }, + { + "x": 23, + "y": 25, + "z": 4 + }, + { + "x": 24, + "y": 26, + "z": 4 + }, + { + "x": 24, + "y": 25, + "z": 4 + }, + { + "x": 22, + "y": 26, + "z": 5 + }, + { + "x": 22, + "y": 25, + "z": 5 + }, + { + "x": 23, + "y": 26, + "z": 5 + }, + { + "x": 23, + "y": 25, + "z": 5 + }, + { + "x": 24, + "y": 26, + "z": 5 + }, + { + "x": 24, + "y": 25, + "z": 5 + }, + { + "x": 22, + "y": 26, + "z": 6 + }, + { + "x": 22, + "y": 25, + "z": 6 + }, + { + "x": 23, + "y": 26, + "z": 6 + }, + { + "x": 23, + "y": 25, + "z": 6 + }, + { + "x": 24, + "y": 26, + "z": 6 + }, + { + "x": 24, + "y": 25, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Cecer": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 26, + "z": 26 + }, + { + "x": 3, + "y": 25, + "z": 26 + }, + { + "x": 4, + "y": 26, + "z": 26 + }, + { + "x": 4, + "y": 25, + "z": 26 + }, + { + "x": 5, + "y": 26, + "z": 26 + }, + { + "x": 5, + "y": 25, + "z": 26 + }, + { + "x": 3, + "y": 26, + "z": 27 + }, + { + "x": 3, + "y": 25, + "z": 27 + }, + { + "x": 4, + "y": 26, + "z": 27 + }, + { + "x": 4, + "y": 25, + "z": 27 + }, + { + "x": 5, + "y": 26, + "z": 27 + }, + { + "x": 5, + "y": 25, + "z": 27 + }, + { + "x": 3, + "y": 26, + "z": 28 + }, + { + "x": 3, + "y": 25, + "z": 28 + }, + { + "x": 4, + "y": 26, + "z": 28 + }, + { + "x": 4, + "y": 25, + "z": 28 + }, + { + "x": 5, + "y": 26, + "z": 28 + }, + { + "x": 5, + "y": 25, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Revengeee": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 26, + "z": 4 + }, + { + "x": 27, + "y": 25, + "z": 4 + }, + { + "x": 28, + "y": 26, + "z": 4 + }, + { + "x": 28, + "y": 25, + "z": 4 + }, + { + "x": 29, + "y": 26, + "z": 4 + }, + { + "x": 29, + "y": 25, + "z": 4 + }, + { + "x": 27, + "y": 26, + "z": 5 + }, + { + "x": 27, + "y": 25, + "z": 5 + }, + { + "x": 28, + "y": 26, + "z": 5 + }, + { + "x": 28, + "y": 25, + "z": 5 + }, + { + "x": 29, + "y": 26, + "z": 5 + }, + { + "x": 29, + "y": 25, + "z": 5 + }, + { + "x": 27, + "y": 26, + "z": 6 + }, + { + "x": 27, + "y": 25, + "z": 6 + }, + { + "x": 28, + "y": 26, + "z": 6 + }, + { + "x": 28, + "y": 25, + "z": 6 + }, + { + "x": 29, + "y": 26, + "z": 6 + }, + { + "x": 29, + "y": 25, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "ChiLynn": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 26, + "z": 26 + }, + { + "x": 27, + "y": 25, + "z": 26 + }, + { + "x": 28, + "y": 26, + "z": 26 + }, + { + "x": 28, + "y": 25, + "z": 26 + }, + { + "x": 29, + "y": 26, + "z": 26 + }, + { + "x": 29, + "y": 25, + "z": 26 + }, + { + "x": 27, + "y": 26, + "z": 27 + }, + { + "x": 27, + "y": 25, + "z": 27 + }, + { + "x": 28, + "y": 26, + "z": 27 + }, + { + "x": 28, + "y": 25, + "z": 27 + }, + { + "x": 29, + "y": 26, + "z": 27 + }, + { + "x": 29, + "y": 25, + "z": 27 + }, + { + "x": 27, + "y": 26, + "z": 28 + }, + { + "x": 27, + "y": 25, + "z": 28 + }, + { + "x": 28, + "y": 26, + "z": 28 + }, + { + "x": 28, + "y": 25, + "z": 28 + }, + { + "x": 29, + "y": 26, + "z": 28 + }, + { + "x": 29, + "y": 25, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "flameboy101": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 26, + "z": 26 + }, + { + "x": 22, + "y": 25, + "z": 26 + }, + { + "x": 23, + "y": 26, + "z": 26 + }, + { + "x": 23, + "y": 25, + "z": 26 + }, + { + "x": 24, + "y": 26, + "z": 26 + }, + { + "x": 24, + "y": 25, + "z": 26 + }, + { + "x": 22, + "y": 26, + "z": 27 + }, + { + "x": 22, + "y": 25, + "z": 27 + }, + { + "x": 23, + "y": 26, + "z": 27 + }, + { + "x": 23, + "y": 25, + "z": 27 + }, + { + "x": 24, + "y": 26, + "z": 27 + }, + { + "x": 24, + "y": 25, + "z": 27 + }, + { + "x": 22, + "y": 26, + "z": 28 + }, + { + "x": 22, + "y": 25, + "z": 28 + }, + { + "x": 23, + "y": 26, + "z": 28 + }, + { + "x": 23, + "y": 25, + "z": 28 + }, + { + "x": 24, + "y": 26, + "z": 28 + }, + { + "x": 24, + "y": 25, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "fairysoul-?(9)": { + "secretPoint": { + "x": 16, + "y": 25, + "z": 30 + }, + "preRequisite": [ + "Hypixel:open" + ], + "mechType": "Fairysoul" + }, + "Jayavarmen": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 4, + "z": 3 + }, + { + "x": 14, + "y": 3, + "z": 3 + }, + { + "x": 15, + "y": 4, + "z": 3 + }, + { + "x": 15, + "y": 3, + "z": 3 + }, + { + "x": 16, + "y": 4, + "z": 3 + }, + { + "x": 16, + "y": 3, + "z": 3 + }, + { + "x": 17, + "y": 4, + "z": 3 + }, + { + "x": 17, + "y": 3, + "z": 3 + }, + { + "x": 18, + "y": 4, + "z": 3 + }, + { + "x": 18, + "y": 3, + "z": 3 + }, + { + "x": 14, + "y": 4, + "z": 4 + }, + { + "x": 14, + "y": 3, + "z": 4 + }, + { + "x": 15, + "y": 4, + "z": 4 + }, + { + "x": 15, + "y": 3, + "z": 4 + }, + { + "x": 16, + "y": 4, + "z": 4 + }, + { + "x": 16, + "y": 3, + "z": 4 + }, + { + "x": 17, + "y": 4, + "z": 4 + }, + { + "x": 17, + "y": 3, + "z": 4 + }, + { + "x": 18, + "y": 4, + "z": 4 + }, + { + "x": 18, + "y": 3, + "z": 4 + }, + { + "x": 14, + "y": 4, + "z": 5 + }, + { + "x": 14, + "y": 3, + "z": 5 + }, + { + "x": 15, + "y": 4, + "z": 5 + }, + { + "x": 15, + "y": 3, + "z": 5 + }, + { + "x": 16, + "y": 4, + "z": 5 + }, + { + "x": 16, + "y": 3, + "z": 5 + }, + { + "x": 17, + "y": 4, + "z": 5 + }, + { + "x": 17, + "y": 3, + "z": 5 + }, + { + "x": 18, + "y": 4, + "z": 5 + }, + { + "x": 18, + "y": 3, + "z": 5 + }, + { + "x": 14, + "y": 4, + "z": 6 + }, + { + "x": 14, + "y": 3, + "z": 6 + }, + { + "x": 15, + "y": 4, + "z": 6 + }, + { + "x": 15, + "y": 3, + "z": 6 + }, + { + "x": 16, + "y": 4, + "z": 6 + }, + { + "x": 16, + "y": 3, + "z": 6 + }, + { + "x": 17, + "y": 4, + "z": 6 + }, + { + "x": 17, + "y": 3, + "z": 6 + }, + { + "x": 18, + "y": 4, + "z": 6 + }, + { + "x": 18, + "y": 3, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "skyerzz": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 26, + "z": 4 + }, + { + "x": 3, + "y": 25, + "z": 4 + }, + { + "x": 4, + "y": 26, + "z": 4 + }, + { + "x": 4, + "y": 25, + "z": 4 + }, + { + "x": 5, + "y": 26, + "z": 4 + }, + { + "x": 5, + "y": 25, + "z": 4 + }, + { + "x": 3, + "y": 26, + "z": 5 + }, + { + "x": 3, + "y": 25, + "z": 5 + }, + { + "x": 4, + "y": 26, + "z": 5 + }, + { + "x": 4, + "y": 25, + "z": 5 + }, + { + "x": 5, + "y": 26, + "z": 5 + }, + { + "x": 5, + "y": 25, + "z": 5 + }, + { + "x": 3, + "y": 26, + "z": 6 + }, + { + "x": 3, + "y": 25, + "z": 6 + }, + { + "x": 4, + "y": 26, + "z": 6 + }, + { + "x": 4, + "y": 25, + "z": 6 + }, + { + "x": 5, + "y": 26, + "z": 6 + }, + { + "x": 5, + "y": 25, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Minikloon": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 4, + "z": 4 + }, + { + "x": 8, + "y": 3, + "z": 4 + }, + { + "x": 9, + "y": 4, + "z": 4 + }, + { + "x": 9, + "y": 3, + "z": 4 + }, + { + "x": 10, + "y": 4, + "z": 4 + }, + { + "x": 10, + "y": 3, + "z": 4 + }, + { + "x": 8, + "y": 4, + "z": 5 + }, + { + "x": 8, + "y": 3, + "z": 5 + }, + { + "x": 9, + "y": 4, + "z": 5 + }, + { + "x": 9, + "y": 3, + "z": 5 + }, + { + "x": 10, + "y": 4, + "z": 5 + }, + { + "x": 10, + "y": 3, + "z": 5 + }, + { + "x": 8, + "y": 4, + "z": 6 + }, + { + "x": 8, + "y": 3, + "z": 6 + }, + { + "x": 9, + "y": 4, + "z": 6 + }, + { + "x": 9, + "y": 3, + "z": 6 + }, + { + "x": 10, + "y": 4, + "z": 6 + }, + { + "x": 10, + "y": 3, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Linfoot": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 4, + "z": 4 + }, + { + "x": 27, + "y": 3, + "z": 4 + }, + { + "x": 28, + "y": 4, + "z": 4 + }, + { + "x": 28, + "y": 3, + "z": 4 + }, + { + "x": 29, + "y": 4, + "z": 4 + }, + { + "x": 29, + "y": 3, + "z": 4 + }, + { + "x": 27, + "y": 4, + "z": 5 + }, + { + "x": 27, + "y": 3, + "z": 5 + }, + { + "x": 28, + "y": 4, + "z": 5 + }, + { + "x": 28, + "y": 3, + "z": 5 + }, + { + "x": 29, + "y": 4, + "z": 5 + }, + { + "x": 29, + "y": 3, + "z": 5 + }, + { + "x": 27, + "y": 4, + "z": 6 + }, + { + "x": 27, + "y": 3, + "z": 6 + }, + { + "x": 28, + "y": 4, + "z": 6 + }, + { + "x": 28, + "y": 3, + "z": 6 + }, + { + "x": 29, + "y": 4, + "z": 6 + }, + { + "x": 29, + "y": 3, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Plancke": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 15, + "z": 4 + }, + { + "x": 3, + "y": 14, + "z": 4 + }, + { + "x": 4, + "y": 15, + "z": 4 + }, + { + "x": 4, + "y": 14, + "z": 4 + }, + { + "x": 5, + "y": 15, + "z": 4 + }, + { + "x": 5, + "y": 14, + "z": 4 + }, + { + "x": 3, + "y": 15, + "z": 5 + }, + { + "x": 3, + "y": 14, + "z": 5 + }, + { + "x": 4, + "y": 15, + "z": 5 + }, + { + "x": 4, + "y": 14, + "z": 5 + }, + { + "x": 5, + "y": 15, + "z": 5 + }, + { + "x": 5, + "y": 14, + "z": 5 + }, + { + "x": 3, + "y": 15, + "z": 6 + }, + { + "x": 3, + "y": 14, + "z": 6 + }, + { + "x": 4, + "y": 15, + "z": 6 + }, + { + "x": 4, + "y": 14, + "z": 6 + }, + { + "x": 5, + "y": 15, + "z": 6 + }, + { + "x": 5, + "y": 14, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Bloozing": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 26, + "z": 4 + }, + { + "x": 8, + "y": 25, + "z": 4 + }, + { + "x": 9, + "y": 26, + "z": 4 + }, + { + "x": 9, + "y": 25, + "z": 4 + }, + { + "x": 10, + "y": 26, + "z": 4 + }, + { + "x": 10, + "y": 25, + "z": 4 + }, + { + "x": 8, + "y": 26, + "z": 5 + }, + { + "x": 8, + "y": 25, + "z": 5 + }, + { + "x": 9, + "y": 26, + "z": 5 + }, + { + "x": 9, + "y": 25, + "z": 5 + }, + { + "x": 10, + "y": 26, + "z": 5 + }, + { + "x": 10, + "y": 25, + "z": 5 + }, + { + "x": 8, + "y": 26, + "z": 6 + }, + { + "x": 8, + "y": 25, + "z": 6 + }, + { + "x": 9, + "y": 26, + "z": 6 + }, + { + "x": 9, + "y": 25, + "z": 6 + }, + { + "x": 10, + "y": 26, + "z": 6 + }, + { + "x": 10, + "y": 25, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Thorlon": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 15, + "z": 26 + }, + { + "x": 14, + "y": 14, + "z": 26 + }, + { + "x": 15, + "y": 15, + "z": 26 + }, + { + "x": 15, + "y": 14, + "z": 26 + }, + { + "x": 16, + "y": 15, + "z": 26 + }, + { + "x": 16, + "y": 14, + "z": 26 + }, + { + "x": 17, + "y": 15, + "z": 26 + }, + { + "x": 17, + "y": 14, + "z": 26 + }, + { + "x": 18, + "y": 15, + "z": 26 + }, + { + "x": 18, + "y": 14, + "z": 26 + }, + { + "x": 14, + "y": 15, + "z": 27 + }, + { + "x": 14, + "y": 14, + "z": 27 + }, + { + "x": 15, + "y": 15, + "z": 27 + }, + { + "x": 15, + "y": 14, + "z": 27 + }, + { + "x": 16, + "y": 15, + "z": 27 + }, + { + "x": 16, + "y": 14, + "z": 27 + }, + { + "x": 17, + "y": 15, + "z": 27 + }, + { + "x": 17, + "y": 14, + "z": 27 + }, + { + "x": 18, + "y": 15, + "z": 27 + }, + { + "x": 18, + "y": 14, + "z": 27 + }, + { + "x": 14, + "y": 15, + "z": 28 + }, + { + "x": 14, + "y": 14, + "z": 28 + }, + { + "x": 15, + "y": 15, + "z": 28 + }, + { + "x": 15, + "y": 14, + "z": 28 + }, + { + "x": 16, + "y": 15, + "z": 28 + }, + { + "x": 16, + "y": 14, + "z": 28 + }, + { + "x": 17, + "y": 15, + "z": 28 + }, + { + "x": 17, + "y": 14, + "z": 28 + }, + { + "x": 18, + "y": 15, + "z": 28 + }, + { + "x": 18, + "y": 14, + "z": 28 + }, + { + "x": 14, + "y": 15, + "z": 29 + }, + { + "x": 14, + "y": 14, + "z": 29 + }, + { + "x": 15, + "y": 15, + "z": 29 + }, + { + "x": 15, + "y": 14, + "z": 29 + }, + { + "x": 16, + "y": 15, + "z": 29 + }, + { + "x": 16, + "y": 14, + "z": 29 + }, + { + "x": 17, + "y": 15, + "z": 29 + }, + { + "x": 17, + "y": 14, + "z": 29 + }, + { + "x": 18, + "y": 15, + "z": 29 + }, + { + "x": 18, + "y": 14, + "z": 29 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "RobityBobity": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 15, + "z": 26 + }, + { + "x": 8, + "y": 14, + "z": 26 + }, + { + "x": 9, + "y": 15, + "z": 26 + }, + { + "x": 9, + "y": 14, + "z": 26 + }, + { + "x": 10, + "y": 15, + "z": 26 + }, + { + "x": 10, + "y": 14, + "z": 26 + }, + { + "x": 8, + "y": 15, + "z": 27 + }, + { + "x": 8, + "y": 14, + "z": 27 + }, + { + "x": 9, + "y": 15, + "z": 27 + }, + { + "x": 9, + "y": 14, + "z": 27 + }, + { + "x": 10, + "y": 15, + "z": 27 + }, + { + "x": 10, + "y": 14, + "z": 27 + }, + { + "x": 8, + "y": 15, + "z": 28 + }, + { + "x": 8, + "y": 14, + "z": 28 + }, + { + "x": 9, + "y": 15, + "z": 28 + }, + { + "x": 9, + "y": 14, + "z": 28 + }, + { + "x": 10, + "y": 15, + "z": 28 + }, + { + "x": 10, + "y": 14, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Hypixel": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 26, + "z": 26 + }, + { + "x": 14, + "y": 25, + "z": 26 + }, + { + "x": 15, + "y": 26, + "z": 26 + }, + { + "x": 15, + "y": 25, + "z": 26 + }, + { + "x": 16, + "y": 26, + "z": 26 + }, + { + "x": 16, + "y": 25, + "z": 26 + }, + { + "x": 17, + "y": 26, + "z": 26 + }, + { + "x": 17, + "y": 25, + "z": 26 + }, + { + "x": 18, + "y": 26, + "z": 26 + }, + { + "x": 18, + "y": 25, + "z": 26 + }, + { + "x": 14, + "y": 26, + "z": 27 + }, + { + "x": 14, + "y": 25, + "z": 27 + }, + { + "x": 15, + "y": 26, + "z": 27 + }, + { + "x": 15, + "y": 25, + "z": 27 + }, + { + "x": 16, + "y": 26, + "z": 27 + }, + { + "x": 16, + "y": 25, + "z": 27 + }, + { + "x": 17, + "y": 26, + "z": 27 + }, + { + "x": 17, + "y": 25, + "z": 27 + }, + { + "x": 18, + "y": 26, + "z": 27 + }, + { + "x": 18, + "y": 25, + "z": 27 + }, + { + "x": 14, + "y": 26, + "z": 28 + }, + { + "x": 14, + "y": 25, + "z": 28 + }, + { + "x": 15, + "y": 26, + "z": 28 + }, + { + "x": 15, + "y": 25, + "z": 28 + }, + { + "x": 16, + "y": 26, + "z": 28 + }, + { + "x": 16, + "y": 25, + "z": 28 + }, + { + "x": 17, + "y": 26, + "z": 28 + }, + { + "x": 17, + "y": 25, + "z": 28 + }, + { + "x": 18, + "y": 26, + "z": 28 + }, + { + "x": 18, + "y": 25, + "z": 28 + }, + { + "x": 14, + "y": 26, + "z": 29 + }, + { + "x": 14, + "y": 25, + "z": 29 + }, + { + "x": 15, + "y": 26, + "z": 29 + }, + { + "x": 15, + "y": 25, + "z": 29 + }, + { + "x": 16, + "y": 26, + "z": 29 + }, + { + "x": 16, + "y": 25, + "z": 29 + }, + { + "x": 17, + "y": 26, + "z": 29 + }, + { + "x": 17, + "y": 25, + "z": 29 + }, + { + "x": 18, + "y": 26, + "z": 29 + }, + { + "x": 18, + "y": 25, + "z": 29 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Bembo": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 15, + "z": 26 + }, + { + "x": 3, + "y": 14, + "z": 26 + }, + { + "x": 4, + "y": 15, + "z": 26 + }, + { + "x": 4, + "y": 14, + "z": 26 + }, + { + "x": 5, + "y": 15, + "z": 26 + }, + { + "x": 5, + "y": 14, + "z": 26 + }, + { + "x": 3, + "y": 15, + "z": 27 + }, + { + "x": 3, + "y": 14, + "z": 27 + }, + { + "x": 4, + "y": 15, + "z": 27 + }, + { + "x": 4, + "y": 14, + "z": 27 + }, + { + "x": 5, + "y": 15, + "z": 27 + }, + { + "x": 5, + "y": 14, + "z": 27 + }, + { + "x": 3, + "y": 15, + "z": 28 + }, + { + "x": 3, + "y": 14, + "z": 28 + }, + { + "x": 4, + "y": 15, + "z": 28 + }, + { + "x": 4, + "y": 14, + "z": 28 + }, + { + "x": 5, + "y": 15, + "z": 28 + }, + { + "x": 5, + "y": 14, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "codename_B": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 4, + "z": 26 + }, + { + "x": 3, + "y": 3, + "z": 26 + }, + { + "x": 4, + "y": 4, + "z": 26 + }, + { + "x": 4, + "y": 3, + "z": 26 + }, + { + "x": 5, + "y": 4, + "z": 26 + }, + { + "x": 5, + "y": 3, + "z": 26 + }, + { + "x": 3, + "y": 4, + "z": 27 + }, + { + "x": 3, + "y": 3, + "z": 27 + }, + { + "x": 4, + "y": 4, + "z": 27 + }, + { + "x": 4, + "y": 3, + "z": 27 + }, + { + "x": 5, + "y": 4, + "z": 27 + }, + { + "x": 5, + "y": 3, + "z": 27 + }, + { + "x": 3, + "y": 4, + "z": 28 + }, + { + "x": 3, + "y": 3, + "z": 28 + }, + { + "x": 4, + "y": 4, + "z": 28 + }, + { + "x": 4, + "y": 3, + "z": 28 + }, + { + "x": 5, + "y": 4, + "z": 28 + }, + { + "x": 5, + "y": 3, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "aPunch": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 4, + "z": 4 + }, + { + "x": 3, + "y": 3, + "z": 4 + }, + { + "x": 4, + "y": 4, + "z": 4 + }, + { + "x": 4, + "y": 3, + "z": 4 + }, + { + "x": 5, + "y": 4, + "z": 4 + }, + { + "x": 5, + "y": 3, + "z": 4 + }, + { + "x": 3, + "y": 4, + "z": 5 + }, + { + "x": 3, + "y": 3, + "z": 5 + }, + { + "x": 4, + "y": 4, + "z": 5 + }, + { + "x": 4, + "y": 3, + "z": 5 + }, + { + "x": 5, + "y": 4, + "z": 5 + }, + { + "x": 5, + "y": 3, + "z": 5 + }, + { + "x": 3, + "y": 4, + "z": 6 + }, + { + "x": 3, + "y": 3, + "z": 6 + }, + { + "x": 4, + "y": 4, + "z": 6 + }, + { + "x": 4, + "y": 3, + "z": 6 + }, + { + "x": 5, + "y": 4, + "z": 6 + }, + { + "x": 5, + "y": 3, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "WilliamTiger": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 15, + "z": 26 + }, + { + "x": 27, + "y": 14, + "z": 26 + }, + { + "x": 28, + "y": 15, + "z": 26 + }, + { + "x": 28, + "y": 14, + "z": 26 + }, + { + "x": 29, + "y": 15, + "z": 26 + }, + { + "x": 29, + "y": 14, + "z": 26 + }, + { + "x": 27, + "y": 15, + "z": 27 + }, + { + "x": 27, + "y": 14, + "z": 27 + }, + { + "x": 28, + "y": 15, + "z": 27 + }, + { + "x": 28, + "y": 14, + "z": 27 + }, + { + "x": 29, + "y": 15, + "z": 27 + }, + { + "x": 29, + "y": 14, + "z": 27 + }, + { + "x": 27, + "y": 15, + "z": 28 + }, + { + "x": 27, + "y": 14, + "z": 28 + }, + { + "x": 28, + "y": 15, + "z": 28 + }, + { + "x": 28, + "y": 14, + "z": 28 + }, + { + "x": 29, + "y": 15, + "z": 28 + }, + { + "x": 29, + "y": 14, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Nitroholic": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 4, + "z": 26 + }, + { + "x": 22, + "y": 3, + "z": 26 + }, + { + "x": 23, + "y": 4, + "z": 26 + }, + { + "x": 23, + "y": 3, + "z": 26 + }, + { + "x": 24, + "y": 4, + "z": 26 + }, + { + "x": 24, + "y": 3, + "z": 26 + }, + { + "x": 22, + "y": 4, + "z": 27 + }, + { + "x": 22, + "y": 3, + "z": 27 + }, + { + "x": 23, + "y": 4, + "z": 27 + }, + { + "x": 23, + "y": 3, + "z": 27 + }, + { + "x": 24, + "y": 4, + "z": 27 + }, + { + "x": 24, + "y": 3, + "z": 27 + }, + { + "x": 22, + "y": 4, + "z": 28 + }, + { + "x": 22, + "y": 3, + "z": 28 + }, + { + "x": 23, + "y": 4, + "z": 28 + }, + { + "x": 23, + "y": 3, + "z": 28 + }, + { + "x": 24, + "y": 4, + "z": 28 + }, + { + "x": 24, + "y": 3, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Don Pireso": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 26, + "z": 21 + }, + { + "x": 14, + "y": 25, + "z": 21 + }, + { + "x": 15, + "y": 26, + "z": 21 + }, + { + "x": 15, + "y": 25, + "z": 21 + }, + { + "x": 16, + "y": 26, + "z": 21 + }, + { + "x": 16, + "y": 25, + "z": 21 + }, + { + "x": 17, + "y": 26, + "z": 21 + }, + { + "x": 17, + "y": 25, + "z": 21 + }, + { + "x": 18, + "y": 26, + "z": 21 + }, + { + "x": 18, + "y": 25, + "z": 21 + }, + { + "x": 14, + "y": 26, + "z": 22 + }, + { + "x": 14, + "y": 25, + "z": 22 + }, + { + "x": 15, + "y": 26, + "z": 22 + }, + { + "x": 15, + "y": 25, + "z": 22 + }, + { + "x": 16, + "y": 26, + "z": 22 + }, + { + "x": 16, + "y": 25, + "z": 22 + }, + { + "x": 17, + "y": 26, + "z": 22 + }, + { + "x": 17, + "y": 25, + "z": 22 + }, + { + "x": 18, + "y": 26, + "z": 22 + }, + { + "x": 18, + "y": 25, + "z": 22 + }, + { + "x": 14, + "y": 26, + "z": 23 + }, + { + "x": 14, + "y": 25, + "z": 23 + }, + { + "x": 15, + "y": 26, + "z": 23 + }, + { + "x": 15, + "y": 25, + "z": 23 + }, + { + "x": 16, + "y": 26, + "z": 23 + }, + { + "x": 16, + "y": 25, + "z": 23 + }, + { + "x": 17, + "y": 26, + "z": 23 + }, + { + "x": 17, + "y": 25, + "z": 23 + }, + { + "x": 18, + "y": 26, + "z": 23 + }, + { + "x": 18, + "y": 25, + "z": 23 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Kessie": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 15, + "z": 26 + }, + { + "x": 22, + "y": 14, + "z": 26 + }, + { + "x": 23, + "y": 15, + "z": 26 + }, + { + "x": 23, + "y": 14, + "z": 26 + }, + { + "x": 24, + "y": 15, + "z": 26 + }, + { + "x": 24, + "y": 14, + "z": 26 + }, + { + "x": 22, + "y": 15, + "z": 27 + }, + { + "x": 22, + "y": 14, + "z": 27 + }, + { + "x": 23, + "y": 15, + "z": 27 + }, + { + "x": 23, + "y": 14, + "z": 27 + }, + { + "x": 24, + "y": 15, + "z": 27 + }, + { + "x": 24, + "y": 14, + "z": 27 + }, + { + "x": 22, + "y": 15, + "z": 28 + }, + { + "x": 22, + "y": 14, + "z": 28 + }, + { + "x": 23, + "y": 15, + "z": 28 + }, + { + "x": 23, + "y": 14, + "z": 28 + }, + { + "x": 24, + "y": 15, + "z": 28 + }, + { + "x": 24, + "y": 14, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Sylent": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 15, + "z": 4 + }, + { + "x": 8, + "y": 14, + "z": 4 + }, + { + "x": 9, + "y": 15, + "z": 4 + }, + { + "x": 9, + "y": 14, + "z": 4 + }, + { + "x": 10, + "y": 15, + "z": 4 + }, + { + "x": 10, + "y": 14, + "z": 4 + }, + { + "x": 8, + "y": 15, + "z": 5 + }, + { + "x": 8, + "y": 14, + "z": 5 + }, + { + "x": 9, + "y": 15, + "z": 5 + }, + { + "x": 9, + "y": 14, + "z": 5 + }, + { + "x": 10, + "y": 15, + "z": 5 + }, + { + "x": 10, + "y": 14, + "z": 5 + }, + { + "x": 8, + "y": 15, + "z": 6 + }, + { + "x": 8, + "y": 14, + "z": 6 + }, + { + "x": 9, + "y": 15, + "z": 6 + }, + { + "x": 9, + "y": 14, + "z": 6 + }, + { + "x": 10, + "y": 15, + "z": 6 + }, + { + "x": 10, + "y": 14, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Ob111": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 15, + "z": 9 + }, + { + "x": 14, + "y": 14, + "z": 9 + }, + { + "x": 15, + "y": 15, + "z": 9 + }, + { + "x": 15, + "y": 14, + "z": 9 + }, + { + "x": 16, + "y": 15, + "z": 9 + }, + { + "x": 16, + "y": 14, + "z": 9 + }, + { + "x": 17, + "y": 15, + "z": 9 + }, + { + "x": 17, + "y": 14, + "z": 9 + }, + { + "x": 18, + "y": 15, + "z": 9 + }, + { + "x": 18, + "y": 14, + "z": 9 + }, + { + "x": 14, + "y": 15, + "z": 10 + }, + { + "x": 14, + "y": 14, + "z": 10 + }, + { + "x": 15, + "y": 15, + "z": 10 + }, + { + "x": 15, + "y": 14, + "z": 10 + }, + { + "x": 16, + "y": 15, + "z": 10 + }, + { + "x": 16, + "y": 14, + "z": 10 + }, + { + "x": 17, + "y": 15, + "z": 10 + }, + { + "x": 17, + "y": 14, + "z": 10 + }, + { + "x": 18, + "y": 15, + "z": 10 + }, + { + "x": 18, + "y": 14, + "z": 10 + }, + { + "x": 14, + "y": 15, + "z": 11 + }, + { + "x": 14, + "y": 14, + "z": 11 + }, + { + "x": 15, + "y": 15, + "z": 11 + }, + { + "x": 15, + "y": 14, + "z": 11 + }, + { + "x": 16, + "y": 15, + "z": 11 + }, + { + "x": 16, + "y": 14, + "z": 11 + }, + { + "x": 17, + "y": 15, + "z": 11 + }, + { + "x": 17, + "y": 14, + "z": 11 + }, + { + "x": 18, + "y": 15, + "z": 11 + }, + { + "x": 18, + "y": 14, + "z": 11 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "erosemberg": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 26, + "z": 9 + }, + { + "x": 14, + "y": 25, + "z": 9 + }, + { + "x": 15, + "y": 26, + "z": 9 + }, + { + "x": 15, + "y": 25, + "z": 9 + }, + { + "x": 16, + "y": 26, + "z": 9 + }, + { + "x": 16, + "y": 25, + "z": 9 + }, + { + "x": 17, + "y": 26, + "z": 9 + }, + { + "x": 17, + "y": 25, + "z": 9 + }, + { + "x": 18, + "y": 26, + "z": 9 + }, + { + "x": 18, + "y": 25, + "z": 9 + }, + { + "x": 14, + "y": 26, + "z": 10 + }, + { + "x": 14, + "y": 25, + "z": 10 + }, + { + "x": 15, + "y": 26, + "z": 10 + }, + { + "x": 15, + "y": 25, + "z": 10 + }, + { + "x": 16, + "y": 26, + "z": 10 + }, + { + "x": 16, + "y": 25, + "z": 10 + }, + { + "x": 17, + "y": 26, + "z": 10 + }, + { + "x": 17, + "y": 25, + "z": 10 + }, + { + "x": 18, + "y": 26, + "z": 10 + }, + { + "x": 18, + "y": 25, + "z": 10 + }, + { + "x": 14, + "y": 26, + "z": 11 + }, + { + "x": 14, + "y": 25, + "z": 11 + }, + { + "x": 15, + "y": 26, + "z": 11 + }, + { + "x": 15, + "y": 25, + "z": 11 + }, + { + "x": 16, + "y": 26, + "z": 11 + }, + { + "x": 16, + "y": 25, + "z": 11 + }, + { + "x": 17, + "y": 26, + "z": 11 + }, + { + "x": 17, + "y": 25, + "z": 11 + }, + { + "x": 18, + "y": 26, + "z": 11 + }, + { + "x": 18, + "y": 25, + "z": 11 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Externalizable": { + "secretPoint": { + "offsetPointList": [ + { + "x": 14, + "y": 15, + "z": 3 + }, + { + "x": 14, + "y": 14, + "z": 3 + }, + { + "x": 15, + "y": 15, + "z": 3 + }, + { + "x": 15, + "y": 14, + "z": 3 + }, + { + "x": 16, + "y": 15, + "z": 3 + }, + { + "x": 16, + "y": 14, + "z": 3 + }, + { + "x": 17, + "y": 15, + "z": 3 + }, + { + "x": 17, + "y": 14, + "z": 3 + }, + { + "x": 18, + "y": 15, + "z": 3 + }, + { + "x": 18, + "y": 14, + "z": 3 + }, + { + "x": 14, + "y": 15, + "z": 4 + }, + { + "x": 14, + "y": 14, + "z": 4 + }, + { + "x": 15, + "y": 15, + "z": 4 + }, + { + "x": 15, + "y": 14, + "z": 4 + }, + { + "x": 16, + "y": 15, + "z": 4 + }, + { + "x": 16, + "y": 14, + "z": 4 + }, + { + "x": 17, + "y": 15, + "z": 4 + }, + { + "x": 17, + "y": 14, + "z": 4 + }, + { + "x": 18, + "y": 15, + "z": 4 + }, + { + "x": 18, + "y": 14, + "z": 4 + }, + { + "x": 14, + "y": 15, + "z": 5 + }, + { + "x": 14, + "y": 14, + "z": 5 + }, + { + "x": 15, + "y": 15, + "z": 5 + }, + { + "x": 15, + "y": 14, + "z": 5 + }, + { + "x": 16, + "y": 15, + "z": 5 + }, + { + "x": 16, + "y": 14, + "z": 5 + }, + { + "x": 17, + "y": 15, + "z": 5 + }, + { + "x": 17, + "y": 14, + "z": 5 + }, + { + "x": 18, + "y": 15, + "z": 5 + }, + { + "x": 18, + "y": 14, + "z": 5 + }, + { + "x": 14, + "y": 15, + "z": 6 + }, + { + "x": 14, + "y": 14, + "z": 6 + }, + { + "x": 15, + "y": 15, + "z": 6 + }, + { + "x": 15, + "y": 14, + "z": 6 + }, + { + "x": 16, + "y": 15, + "z": 6 + }, + { + "x": 16, + "y": 14, + "z": 6 + }, + { + "x": 17, + "y": 15, + "z": 6 + }, + { + "x": 17, + "y": 14, + "z": 6 + }, + { + "x": 18, + "y": 15, + "z": 6 + }, + { + "x": 18, + "y": 14, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Relenter": { + "secretPoint": { + "offsetPointList": [ + { + "x": 8, + "y": 4, + "z": 26 + }, + { + "x": 8, + "y": 3, + "z": 26 + }, + { + "x": 9, + "y": 4, + "z": 26 + }, + { + "x": 9, + "y": 3, + "z": 26 + }, + { + "x": 10, + "y": 4, + "z": 26 + }, + { + "x": 10, + "y": 3, + "z": 26 + }, + { + "x": 8, + "y": 4, + "z": 27 + }, + { + "x": 8, + "y": 3, + "z": 27 + }, + { + "x": 9, + "y": 4, + "z": 27 + }, + { + "x": 9, + "y": 3, + "z": 27 + }, + { + "x": 10, + "y": 4, + "z": 27 + }, + { + "x": 10, + "y": 3, + "z": 27 + }, + { + "x": 8, + "y": 4, + "z": 28 + }, + { + "x": 8, + "y": 3, + "z": 28 + }, + { + "x": 9, + "y": 4, + "z": 28 + }, + { + "x": 9, + "y": 3, + "z": 28 + }, + { + "x": 10, + "y": 4, + "z": 28 + }, + { + "x": 10, + "y": 3, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Dctr": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 4, + "z": 4 + }, + { + "x": 22, + "y": 3, + "z": 4 + }, + { + "x": 23, + "y": 4, + "z": 4 + }, + { + "x": 23, + "y": 3, + "z": 4 + }, + { + "x": 24, + "y": 4, + "z": 4 + }, + { + "x": 24, + "y": 3, + "z": 4 + }, + { + "x": 22, + "y": 4, + "z": 5 + }, + { + "x": 22, + "y": 3, + "z": 5 + }, + { + "x": 23, + "y": 4, + "z": 5 + }, + { + "x": 23, + "y": 3, + "z": 5 + }, + { + "x": 24, + "y": 4, + "z": 5 + }, + { + "x": 24, + "y": 3, + "z": 5 + }, + { + "x": 22, + "y": 4, + "z": 6 + }, + { + "x": 22, + "y": 3, + "z": 6 + }, + { + "x": 23, + "y": 4, + "z": 6 + }, + { + "x": 23, + "y": 3, + "z": 6 + }, + { + "x": 24, + "y": 4, + "z": 6 + }, + { + "x": 24, + "y": 3, + "z": 6 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "Likaos": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": 4, + "z": 26 + }, + { + "x": 27, + "y": 3, + "z": 26 + }, + { + "x": 28, + "y": 4, + "z": 26 + }, + { + "x": 28, + "y": 3, + "z": 26 + }, + { + "x": 29, + "y": 4, + "z": 26 + }, + { + "x": 29, + "y": 3, + "z": 26 + }, + { + "x": 27, + "y": 4, + "z": 27 + }, + { + "x": 27, + "y": 3, + "z": 27 + }, + { + "x": 28, + "y": 4, + "z": 27 + }, + { + "x": 28, + "y": 3, + "z": 27 + }, + { + "x": 29, + "y": 4, + "z": 27 + }, + { + "x": 29, + "y": 3, + "z": 27 + }, + { + "x": 27, + "y": 4, + "z": 28 + }, + { + "x": 27, + "y": 3, + "z": 28 + }, + { + "x": 28, + "y": 4, + "z": 28 + }, + { + "x": 28, + "y": 3, + "z": 28 + }, + { + "x": 29, + "y": 4, + "z": 28 + }, + { + "x": 29, + "y": 3, + "z": 28 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + } + }, + "totalSecrets": 0 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/1df3a849-2a5b-451d-8bd7-971eb608363c.json b/src/main/resources/dgroomdata/1df3a849-2a5b-451d-8bd7-971eb608363c.json new file mode 100644 index 0000000..4783fe9 --- /dev/null +++ b/src/main/resources/dgroomdata/1df3a849-2a5b-451d-8bd7-971eb608363c.json @@ -0,0 +1,2405 @@ +{ + "isUserMade": false, + "shape": 3, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 101, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 98, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 139, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 0, + 144, + 171, + 171, + 0, + 109, + 0, + 0, + 0, + 0, + 0, + 98, + 1, + 1, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 144, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 109, + 98, + 98, + 98, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 50, + 139, + 0, + 0, + 0, + 0, + 139, + 50, + 139, + 98, + 98, + 98, + 98, + 159, + 159, + 159, + 98, + 98, + 98, + 98, + 98, + 50, + 139, + 0, + 0, + 0, + 0, + 98, + 50, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 51, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 98, + 0, + 0, + 139, + 0, + 0, + 0, + 139, + 0, + 0, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 51, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 159, + 159, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 139, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 44, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 159, + 159, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 0, + 0, + 139, + 0, + 0, + 0, + 139, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 51, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 50, + 139, + 0, + 0, + 0, + 0, + 139, + 50, + 98, + 98, + 98, + 98, + 98, + 159, + 159, + 159, + 98, + 98, + 98, + 98, + 98, + 50, + 139, + 0, + 0, + 0, + 0, + 139, + 50, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 51, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 159, + 144, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 139, + 98, + 1, + 109, + 109, + 109, + 109, + 109, + 1, + 98, + 139, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 98, + 98, + 98, + 139, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 98, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 98, + 44, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 98, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "1df3a849-2a5b-451d-8bd7-971eb608363c", + "name": "Pedestal", + "processorId": "default", + "properties": {}, + "mechanics": { + "chest-2": { + "mechType": "Secret", + "secretPoint": { + "x": 33, + "y": -10, + "z": 24 + }, + "secretType": "CHEST", + "preRequisite": [ + "crypt-1:open" + ] + }, + "chest-3": { + "mechType": "Secret", + "secretPoint": { + "x": 8, + "y": 24, + "z": 22 + }, + "secretType": "CHEST", + "preRequisite": [] + }, + "chest-1": { + "mechType": "Secret", + "secretPoint": { + "x": 32, + "y": 0, + "z": 16 + }, + "secretType": "CHEST", + "preRequisite": [] + }, + "itemdrop-1": { + "mechType": "Secret", + "secretPoint": { + "x": 51, + "y": -8, + "z": 21 + }, + "secretType": "ITEM_DROP", + "preRequisite": [] + }, + "essence-1": { + "mechType": "Secret", + "secretPoint": { + "x": 54, + "y": -9, + "z": 23 + }, + "secretType": "ESSENCE", + "preRequisite": [] + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 32, + "y": -8, + "z": 24 + }, + { + "x": 32, + "y": -9, + "z": 24 + }, + { + "x": 33, + "y": -8, + "z": 24 + }, + { + "x": 33, + "y": -9, + "z": 24 + }, + { + "x": 34, + "y": -8, + "z": 24 + }, + { + "x": 34, + "y": -9, + "z": 24 + }, + { + "x": 32, + "y": -8, + "z": 25 + }, + { + "x": 32, + "y": -9, + "z": 25 + }, + { + "x": 33, + "y": -8, + "z": 25 + }, + { + "x": 33, + "y": -9, + "z": 25 + }, + { + "x": 34, + "y": -8, + "z": 25 + }, + { + "x": 34, + "y": -9, + "z": 25 + }, + { + "x": 32, + "y": -8, + "z": 26 + }, + { + "x": 32, + "y": -9, + "z": 26 + }, + { + "x": 33, + "y": -8, + "z": 26 + }, + { + "x": 33, + "y": -9, + "z": 26 + }, + { + "x": 34, + "y": -8, + "z": 26 + }, + { + "x": 34, + "y": -9, + "z": 26 + }, + { + "x": 32, + "y": -8, + "z": 27 + }, + { + "x": 32, + "y": -9, + "z": 27 + }, + { + "x": 33, + "y": -8, + "z": 27 + }, + { + "x": 33, + "y": -9, + "z": 27 + }, + { + "x": 34, + "y": -8, + "z": 27 + }, + { + "x": 34, + "y": -9, + "z": 27 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + } + }, + "totalSecrets": 5 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/1e8d4327-7465-4bff-a8c7-505528273985.json b/src/main/resources/dgroomdata/1e8d4327-7465-4bff-a8c7-505528273985.json new file mode 100644 index 0000000..4e7033d --- /dev/null +++ b/src/main/resources/dgroomdata/1e8d4327-7465-4bff-a8c7-505528273985.json @@ -0,0 +1,1579 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 4, + 67, + 67, + 4, + 4, + 4, + 4, + 4, + 67, + 67, + 4, + 4, + 4, + 67, + 67, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 1, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 1, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 109, + 1, + 1, + 1, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 67, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 67, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 7, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 67, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 67, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18, + 35, + 7, + 4, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 159, + 7, + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "1e8d4327-7465-4bff-a8c7-505528273985", + "name": "Waterfall", + "processorId": "default", + "properties": {}, + "mechanics": { + "crypt-5": { + "secretPoint": { + "offsetPointList": [ + { + "x": 28, + "y": 4, + "z": 25 + }, + { + "x": 28, + "y": 3, + "z": 25 + }, + { + "x": 29, + "y": 4, + "z": 25 + }, + { + "x": 29, + "y": 3, + "z": 25 + }, + { + "x": 30, + "y": 4, + "z": 25 + }, + { + "x": 30, + "y": 3, + "z": 25 + }, + { + "x": 28, + "y": 4, + "z": 26 + }, + { + "x": 28, + "y": 3, + "z": 26 + }, + { + "x": 29, + "y": 4, + "z": 26 + }, + { + "x": 29, + "y": 3, + "z": 26 + }, + { + "x": 30, + "y": 4, + "z": 26 + }, + { + "x": 30, + "y": 3, + "z": 26 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "crypt-4": { + "secretPoint": { + "offsetPointList": [ + { + "x": 28, + "y": 4, + "z": 19 + }, + { + "x": 28, + "y": 3, + "z": 19 + }, + { + "x": 29, + "y": 4, + "z": 19 + }, + { + "x": 29, + "y": 3, + "z": 19 + }, + { + "x": 30, + "y": 4, + "z": 19 + }, + { + "x": 30, + "y": 3, + "z": 19 + }, + { + "x": 28, + "y": 4, + "z": 20 + }, + { + "x": 28, + "y": 3, + "z": 20 + }, + { + "x": 29, + "y": 4, + "z": 20 + }, + { + "x": 29, + "y": 3, + "z": 20 + }, + { + "x": 30, + "y": 4, + "z": 20 + }, + { + "x": 30, + "y": 3, + "z": 20 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "bat-1": { + "mechType": "Secret", + "secretPoint": { + "x": 4, + "y": 12, + "z": 23 + }, + "secretType": "BAT", + "preRequisite": [] + }, + "crypt-3": { + "secretPoint": { + "offsetPointList": [ + { + "x": 29, + "y": 4, + "z": 6 + }, + { + "x": 29, + "y": 3, + "z": 6 + }, + { + "x": 30, + "y": 4, + "z": 6 + }, + { + "x": 30, + "y": 3, + "z": 6 + }, + { + "x": 29, + "y": 4, + "z": 7 + }, + { + "x": 29, + "y": 3, + "z": 7 + }, + { + "x": 30, + "y": 4, + "z": 7 + }, + { + "x": 30, + "y": 3, + "z": 7 + }, + { + "x": 29, + "y": 4, + "z": 8 + }, + { + "x": 29, + "y": 3, + "z": 8 + }, + { + "x": 30, + "y": 4, + "z": 8 + }, + { + "x": 30, + "y": 3, + "z": 8 + }, + { + "x": 29, + "y": 4, + "z": 9 + }, + { + "x": 29, + "y": 3, + "z": 9 + }, + { + "x": 30, + "y": 4, + "z": 9 + }, + { + "x": 30, + "y": 3, + "z": 9 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "crypt-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 12, + "y": 4, + "z": 3 + }, + { + "x": 12, + "y": 3, + "z": 3 + }, + { + "x": 13, + "y": 4, + "z": 3 + }, + { + "x": 13, + "y": 3, + "z": 3 + }, + { + "x": 12, + "y": 4, + "z": 4 + }, + { + "x": 12, + "y": 3, + "z": 4 + }, + { + "x": 13, + "y": 4, + "z": 4 + }, + { + "x": 13, + "y": 3, + "z": 4 + }, + { + "x": 12, + "y": 4, + "z": 5 + }, + { + "x": 12, + "y": 3, + "z": 5 + }, + { + "x": 13, + "y": 4, + "z": 5 + }, + { + "x": 13, + "y": 3, + "z": 5 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "essence-1": { + "mechType": "Secret", + "secretPoint": { + "x": 7, + "y": 7, + "z": 27 + }, + "secretType": "ESSENCE", + "preRequisite": [] + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 6, + "y": 8, + "z": 23 + }, + { + "x": 6, + "y": 7, + "z": 23 + }, + { + "x": 7, + "y": 8, + "z": 23 + }, + { + "x": 7, + "y": 7, + "z": 23 + }, + { + "x": 8, + "y": 8, + "z": 23 + }, + { + "x": 8, + "y": 7, + "z": 23 + }, + { + "x": 6, + "y": 8, + "z": 24 + }, + { + "x": 6, + "y": 7, + "z": 24 + }, + { + "x": 7, + "y": 8, + "z": 24 + }, + { + "x": 7, + "y": 7, + "z": 24 + }, + { + "x": 8, + "y": 8, + "z": 24 + }, + { + "x": 8, + "y": 7, + "z": 24 + }, + { + "x": 6, + "y": 8, + "z": 25 + }, + { + "x": 6, + "y": 7, + "z": 25 + }, + { + "x": 7, + "y": 8, + "z": 25 + }, + { + "x": 7, + "y": 7, + "z": 25 + }, + { + "x": 8, + "y": 8, + "z": 25 + }, + { + "x": 8, + "y": 7, + "z": 25 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + } + }, + "totalSecrets": 2 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json b/src/main/resources/dgroomdata/23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json new file mode 100644 index 0000000..5d3f300 --- /dev/null +++ b/src/main/resources/dgroomdata/23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,44,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,0,0,0,0,0,-1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"23d6e1f6-efa3-476b-b452-ad5cf6a37be9","name":"quad-lava","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":11,"y":-10,"z":12},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":26,"y":0,"z":26},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/250624ee-bb7a-4330-b698-a78f5e44ba99.json b/src/main/resources/dgroomdata/250624ee-bb7a-4330-b698-a78f5e44ba99.json new file mode 100644 index 0000000..f82a044 --- /dev/null +++ b/src/main/resources/dgroomdata/250624ee-bb7a-4330-b698-a78f5e44ba99.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":17,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,67,44,44,44,0,0,98,98,0,0,0,0,0,98,98,0,0,44,44,44,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,67,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,1,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,1,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,109,89,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,139,0,139,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,139,0,139,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,109,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,50,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,109,98,50,0,0,0,0,0,50,98,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,159,-1,-1,-1,-1],[-1,-1,-1,-1,47,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,47,-1,-1,-1,-1],[-1,-1,-1,-1,98,47,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,47,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,47,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,47,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,47,159,98,109,109,50,0,0,0,0,0,50,98,109,109,159,47,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"250624ee-bb7a-4330-b698-a78f5e44ba99","name":"grand-library","processorId":"default","properties":{},"mechanics":{"door-3":{"secretPoint":{"offsetPointList":[{"x":16,"y":-7,"z":48}]},"preRequisite":["lever-3:triggered"],"mechType":"OnewayDoor"},"chest-2":{"mechType":"Secret","secretPoint":{"x":16,"y":-12,"z":32},"secretType":"CHEST","preRequisite":["composed-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":29,"y":23,"z":24},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":14,"y":-5,"z":46},{"x":15,"y":-5,"z":46},{"x":16,"y":-5,"z":46},{"x":17,"y":-5,"z":46},{"x":18,"y":-5,"z":46},{"x":14,"y":-5,"z":47},{"x":15,"y":-5,"z":47},{"x":16,"y":-5,"z":47},{"x":17,"y":-5,"z":47},{"x":18,"y":-5,"z":47},{"x":14,"y":-5,"z":48},{"x":15,"y":-5,"z":48},{"x":16,"y":-5,"z":48},{"x":17,"y":-5,"z":48},{"x":18,"y":-5,"z":48},{"x":14,"y":-5,"z":49},{"x":15,"y":-5,"z":49},{"x":16,"y":-5,"z":49},{"x":17,"y":-5,"z":49},{"x":18,"y":-5,"z":49},{"x":14,"y":-5,"z":50},{"x":15,"y":-5,"z":50},{"x":16,"y":-5,"z":50},{"x":17,"y":-5,"z":50},{"x":18,"y":-5,"z":50}]},"preRequisite":["lever-1-1:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":3,"y":18,"z":48},"preRequisite":[],"triggering":"door-2"},"door-2":{"secretPoint":{"offsetPointList":[{"x":15,"y":-6,"z":47},{"x":16,"y":-6,"z":47},{"x":17,"y":-6,"z":47},{"x":15,"y":-6,"z":48},{"x":16,"y":-6,"z":48},{"x":17,"y":-6,"z":48},{"x":15,"y":-6,"z":49},{"x":16,"y":-6,"z":49},{"x":17,"y":-6,"z":49}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"composed-1":{"secretPoint":{"offsetPointList":[{"x":14,"y":-5,"z":46},{"x":15,"y":-5,"z":46},{"x":16,"y":-5,"z":46},{"x":17,"y":-5,"z":46},{"x":18,"y":-5,"z":46},{"x":14,"y":-5,"z":47},{"x":15,"y":-5,"z":47},{"x":15,"y":-6,"z":47},{"x":16,"y":-5,"z":47},{"x":16,"y":-6,"z":47},{"x":17,"y":-5,"z":47},{"x":17,"y":-6,"z":47},{"x":18,"y":-5,"z":47},{"x":14,"y":-5,"z":48},{"x":15,"y":-5,"z":48},{"x":15,"y":-6,"z":48},{"x":16,"y":-5,"z":48},{"x":16,"y":-6,"z":48},{"x":16,"y":-7,"z":48},{"x":17,"y":-5,"z":48},{"x":17,"y":-6,"z":48},{"x":18,"y":-5,"z":48},{"x":14,"y":-5,"z":49},{"x":15,"y":-5,"z":49},{"x":15,"y":-6,"z":49},{"x":16,"y":-5,"z":49},{"x":16,"y":-6,"z":49},{"x":17,"y":-5,"z":49},{"x":17,"y":-6,"z":49},{"x":18,"y":-5,"z":49},{"x":14,"y":-5,"z":50},{"x":15,"y":-5,"z":50},{"x":16,"y":-5,"z":50},{"x":17,"y":-5,"z":50},{"x":18,"y":-5,"z":50}]},"preRequisite":["door-1:open","door-2:open","door-3:open"],"mechType":"OnewayDoor"},"journal-1":{"secretPoint":{"x":24,"y":11,"z":36},"preRequisite":[],"mechType":"Journal"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":12,"z":12},{"x":25,"y":11,"z":12},{"x":25,"y":10,"z":12},{"x":26,"y":12,"z":12},{"x":26,"y":11,"z":12},{"x":26,"y":10,"z":12}]},"preRequisite":[],"mechType":"BreakableWall"},"lever-3":{"mechType":"OnewayLever","leverPoint":{"x":28,"y":24,"z":60},"preRequisite":[],"triggering":"door-3"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":12,"y":-13,"z":28},"secretType":"ITEM_DROP","preRequisite":["composed-1:open"]},"lever-1-2":{"mechType":"OnewayLever","leverPoint":{"x":16,"y":7,"z":61},"preRequisite":[],"triggering":"door-1"},"lever-1-1":{"mechType":"OnewayLever","leverPoint":{"x":29,"y":7,"z":48},"preRequisite":[],"triggering":"door-1"},"essence-1":{"mechType":"Secret","secretPoint":{"x":28,"y":10,"z":7},"secretType":"ESSENCE","preRequisite":[]},"lever-1-3":{"mechType":"OnewayLever","leverPoint":{"x":3,"y":7,"z":48},"preRequisite":[],"triggering":"door-1"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/25956a46-7094-4a9e-b5d9-c9f8291ffef4.json b/src/main/resources/dgroomdata/25956a46-7094-4a9e-b5d9-c9f8291ffef4.json new file mode 100644 index 0000000..dc936ff --- /dev/null +++ b/src/main/resources/dgroomdata/25956a46-7094-4a9e-b5d9-c9f8291ffef4.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":50,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,139,98,139,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,109,109,98,98,109,109,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,139,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,0,98,0,0,0,0,98,1,1,0,0,0,0,0,0,0,0,0,0,0,144,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,0,18,0,18,18,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,109,109,98,98,109,109,98,1,98,0,0,0,0,0,139,98,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,1,98,109,109,1,109,98,1,109,0,0,0,0,9,1,1,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,17,85,0,58,17,0,0,98,98,0,0,0,0,0,139,98,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,17,0,0,0,17,50,0,0,0,0,0,0,0,0,0,0,0,144,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,98,98,4,1,109,109,98,0,0,0,0,0,139,98,98,109,109,109,1,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,4,1,1,4,1,1,1,1,0,0,0,0,0,98,98,98,109,98,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,118,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,68,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,144,0,0,0,0,0,0,0,0,0,0,0,0,0,144,109,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,1,98,98,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,109,1,1,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,98,98,98,0,0,0,0,0,109,109,109,0,0,0,0,0,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,159,159,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,9,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,144,0,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,109,1,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,44,109,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,98,0,0,98,0,0,98,109,109,1,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,98,0,0,0,0,0,0,109,144,0,109,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,109,159,159,0,0,0,0,0,0,0,0,0,0,188,159,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,159,109,0,144,98,0,0,0,0,0,0,188,159,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,144,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,159,159,159,0,0,0,0,0,0,0,101,159,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,159,159,98,44,144,109,0,0,0,0,0,0,98,109,44,109,1,4,109,44,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,0,139,0,0,0,0,0,0,0,134,5,5,0,135,5,17,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,109,109,109,0,0,0,0,0,0,0,0,134,134,5,0,135,135,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,68,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,44,144,44,109,98,0,0,0,0,0,50,1,0,144,109,-1,-1,-1,-1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,159,159,1,0,0,0,0,0,17,98,159,159,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,109,1,159,109,0,0,0,0,0,0,109,159,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,0,0,0,0,0,0,109,0,0,0,109,159,144,0,0,0,0,0,0,109,159,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,0,0,0,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,139,109,0,0,0,0,159,0,126,126,0,0,0,0,98,159,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,144,98,0,0,98,0,0,98,98,98,109,98,98,144,50,0,144,98,109,0,0,0,0,159,0,126,126,0,0,0,0,98,159,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,139,1,109,0,0,0,109,159,159,159,159,109,139,0,0,0,144,159,44,0,0,0,0,0,0,109,159,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,109,0,0,0,0,0,0,109,159,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,109,0,0,0,0,0,0,98,4,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"25956a46-7094-4a9e-b5d9-c9f8291ffef4","name":"Chambers","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":58,"y":-1,"z":59},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":3,"y":13,"z":48},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":48,"y":-13,"z":10},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":38,"y":1,"z":8},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":29,"y":1,"z":59},{"x":29,"y":0,"z":59},{"x":29,"y":-1,"z":59},{"x":29,"y":1,"z":60},{"x":29,"y":0,"z":60},{"x":29,"y":-1,"z":60}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":58,"y":13,"z":30},"secretType":"BAT","preRequisite":[]},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":17,"y":14,"z":37},{"x":17,"y":13,"z":37},{"x":17,"y":12,"z":37},{"x":17,"y":11,"z":37},{"x":17,"y":14,"z":38},{"x":17,"y":13,"z":38},{"x":17,"y":12,"z":38},{"x":17,"y":11,"z":38}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":41,"y":-1,"z":56},"secretType":"CHEST","preRequisite":["door-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":56,"y":3,"z":52},{"x":56,"y":2,"z":52},{"x":56,"y":1,"z":52},{"x":56,"y":0,"z":52},{"x":56,"y":-1,"z":52},{"x":57,"y":3,"z":52},{"x":57,"y":2,"z":52},{"x":57,"y":1,"z":52},{"x":57,"y":0,"z":52},{"x":57,"y":-1,"z":52},{"x":58,"y":3,"z":52},{"x":58,"y":2,"z":52},{"x":58,"y":1,"z":52},{"x":58,"y":0,"z":52},{"x":58,"y":-1,"z":52},{"x":59,"y":3,"z":52},{"x":59,"y":2,"z":52},{"x":59,"y":1,"z":52},{"x":59,"y":0,"z":52},{"x":59,"y":-1,"z":52}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":36,"y":21,"z":56},{"x":36,"y":20,"z":56},{"x":37,"y":21,"z":56},{"x":37,"y":20,"z":56},{"x":38,"y":21,"z":56},{"x":38,"y":20,"z":56},{"x":36,"y":21,"z":57},{"x":36,"y":20,"z":57},{"x":37,"y":21,"z":57},{"x":37,"y":20,"z":57},{"x":38,"y":21,"z":57},{"x":38,"y":20,"z":57},{"x":36,"y":21,"z":58},{"x":36,"y":20,"z":58},{"x":37,"y":21,"z":58},{"x":37,"y":20,"z":58},{"x":38,"y":21,"z":58},{"x":38,"y":20,"z":58},{"x":36,"y":21,"z":59},{"x":36,"y":20,"z":59},{"x":37,"y":21,"z":59},{"x":37,"y":20,"z":59},{"x":38,"y":21,"z":59},{"x":38,"y":20,"z":59},{"x":36,"y":21,"z":60},{"x":36,"y":20,"z":60},{"x":37,"y":21,"z":60},{"x":37,"y":20,"z":60},{"x":38,"y":21,"z":60},{"x":38,"y":20,"z":60}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":45,"y":21,"z":56},{"x":45,"y":20,"z":56},{"x":46,"y":21,"z":56},{"x":46,"y":20,"z":56},{"x":47,"y":21,"z":56},{"x":47,"y":20,"z":56},{"x":45,"y":21,"z":57},{"x":45,"y":20,"z":57},{"x":46,"y":21,"z":57},{"x":46,"y":20,"z":57},{"x":47,"y":21,"z":57},{"x":47,"y":20,"z":57},{"x":45,"y":21,"z":58},{"x":45,"y":20,"z":58},{"x":46,"y":21,"z":58},{"x":46,"y":20,"z":58},{"x":47,"y":21,"z":58},{"x":47,"y":20,"z":58},{"x":45,"y":21,"z":59},{"x":45,"y":20,"z":59},{"x":46,"y":21,"z":59},{"x":46,"y":20,"z":59},{"x":47,"y":21,"z":59},{"x":47,"y":20,"z":59},{"x":45,"y":21,"z":60},{"x":45,"y":20,"z":60},{"x":46,"y":21,"z":60},{"x":46,"y":20,"z":60},{"x":47,"y":21,"z":60},{"x":47,"y":20,"z":60}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":46,"y":21,"z":37},{"x":46,"y":20,"z":37},{"x":47,"y":21,"z":37},{"x":47,"y":20,"z":37},{"x":48,"y":21,"z":37},{"x":48,"y":20,"z":37},{"x":46,"y":21,"z":38},{"x":46,"y":20,"z":38},{"x":47,"y":21,"z":38},{"x":47,"y":20,"z":38},{"x":48,"y":21,"z":38},{"x":48,"y":20,"z":38},{"x":46,"y":21,"z":39},{"x":46,"y":20,"z":39},{"x":47,"y":21,"z":39},{"x":47,"y":20,"z":39},{"x":48,"y":21,"z":39},{"x":48,"y":20,"z":39},{"x":46,"y":21,"z":40},{"x":46,"y":20,"z":40},{"x":47,"y":21,"z":40},{"x":47,"y":20,"z":40},{"x":48,"y":21,"z":40},{"x":48,"y":20,"z":40},{"x":46,"y":21,"z":41},{"x":46,"y":20,"z":41},{"x":47,"y":21,"z":41},{"x":47,"y":20,"z":41},{"x":48,"y":21,"z":41},{"x":48,"y":20,"z":41}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":24,"y":-4,"z":47},{"x":24,"y":-5,"z":47},{"x":25,"y":-4,"z":47},{"x":25,"y":-5,"z":47},{"x":26,"y":-4,"z":47},{"x":26,"y":-5,"z":47},{"x":27,"y":-4,"z":47},{"x":27,"y":-5,"z":47},{"x":28,"y":-4,"z":47},{"x":28,"y":-5,"z":47},{"x":24,"y":-4,"z":48},{"x":24,"y":-5,"z":48},{"x":25,"y":-4,"z":48},{"x":25,"y":-5,"z":48},{"x":26,"y":-4,"z":48},{"x":26,"y":-5,"z":48},{"x":27,"y":-4,"z":48},{"x":27,"y":-5,"z":48},{"x":28,"y":-4,"z":48},{"x":28,"y":-5,"z":48},{"x":24,"y":-4,"z":49},{"x":24,"y":-5,"z":49},{"x":25,"y":-4,"z":49},{"x":25,"y":-5,"z":49},{"x":26,"y":-4,"z":49},{"x":26,"y":-5,"z":49},{"x":27,"y":-4,"z":49},{"x":27,"y":-5,"z":49},{"x":28,"y":-4,"z":49},{"x":28,"y":-5,"z":49}]},"preRequisite":[],"mechType":"Tomb"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":34,"y":21,"z":43},{"x":34,"y":20,"z":43},{"x":35,"y":21,"z":43},{"x":35,"y":20,"z":43},{"x":36,"y":21,"z":43},{"x":36,"y":20,"z":43},{"x":37,"y":21,"z":43},{"x":37,"y":20,"z":43},{"x":38,"y":21,"z":43},{"x":38,"y":20,"z":43},{"x":39,"y":21,"z":43},{"x":39,"y":20,"z":43},{"x":34,"y":21,"z":44},{"x":34,"y":20,"z":44},{"x":35,"y":21,"z":44},{"x":35,"y":20,"z":44},{"x":36,"y":21,"z":44},{"x":36,"y":20,"z":44},{"x":37,"y":21,"z":44},{"x":37,"y":20,"z":44},{"x":38,"y":21,"z":44},{"x":38,"y":20,"z":44},{"x":39,"y":21,"z":44},{"x":39,"y":20,"z":44},{"x":34,"y":21,"z":45},{"x":34,"y":20,"z":45},{"x":35,"y":21,"z":45},{"x":35,"y":20,"z":45},{"x":36,"y":21,"z":45},{"x":36,"y":20,"z":45},{"x":37,"y":21,"z":45},{"x":37,"y":20,"z":45},{"x":38,"y":21,"z":45},{"x":38,"y":20,"z":45},{"x":39,"y":21,"z":45},{"x":39,"y":20,"z":45}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/296fd7ea-4ac5-46e5-beb9-5d27019e3796.json b/src/main/resources/dgroomdata/296fd7ea-4ac5-46e5-beb9-5d27019e3796.json new file mode 100644 index 0000000..6d5d81c --- /dev/null +++ b/src/main/resources/dgroomdata/296fd7ea-4ac5-46e5-beb9-5d27019e3796.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":15,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,159,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,0,101,0,98,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,98,1,4,4,4,4,4,1,98,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,98,0,101,0,0,0,0,0,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,101,0,0,0,0,98,1,1,1,1,4,4,1,48,1,4,4,1,1,1,1,98,0,0,0,0,101,0,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,98,101,0,101,98,98,98,1,1,1,1,1,1,4,4,4,98,98,98,0,50,98,0,0,0,98,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,98,0,0,0,98,50,0,98,98,98,4,4,4,1,1,1,1,1,1,98,98,98,101,0,101,98,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,98,1,101,101,101,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,98,98,98,98,98,98,98,98,0,0,0,98,98,98,98,109,98,0,0,0,98,98,98,109,98,1,1,1,1,1,98,1,4,4,4,4,4,1,98,1,1,1,1,1,98,109,98,98,98,0,0,0,98,109,98,98,98,98,0,0,0,98,98,98,98,98,98,98,98,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,101,101,101,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,98,98,0,0,0,98,98,0,0,0,98,0,0,0,98,0,0,0,98,98,1,1,1,1,98,4,1,4,44,4,1,4,98,1,1,1,1,98,98,0,0,0,98,0,0,0,98,0,0,0,98,98,0,0,0,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,1,1,98,1,44,44,44,44,44,1,98,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,159,44,44,44,44,0,44,44,44,44,159,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,44,44,0,0,0,0,0,44,44,159,159,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,0,0,0,0,139,139,98,109,109,109,98,139,139,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,98,0,0,0,0,0,0,0,98,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,139,139,98,109,109,109,98,139,139,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,139,139,1,98,1,1,1,139,139,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,139,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,139,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,139,139,1,1,1,98,1,139,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,98,1,1,1,1,1,1,1,98,1,0,0,0,0,4,1,4,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,109,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,109,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,4,1,4,0,0,0,0,1,98,1,1,1,1,1,1,1,98,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,109,0,0,0,0,0,4,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,4,0,0,0,0,0,109,1,1,1,1,1,1,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,1,1,1,169,1,1,98,109,0,0,0,0,0,48,1,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,1,48,0,0,0,0,0,109,98,1,1,169,1,1,1,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,109,0,0,0,0,0,4,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,4,0,0,0,0,0,109,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,98,1,1,1,1,1,1,1,98,1,0,0,0,0,48,1,4,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,98,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,98,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,4,1,48,0,0,0,0,1,98,1,1,1,1,1,1,1,98,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,139,139,1,98,1,1,1,139,139,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,139,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,139,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,139,139,1,1,1,98,1,139,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,0,0,0,0,139,139,98,109,109,109,98,139,139,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,98,0,0,0,0,0,0,0,98,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,139,139,98,109,109,109,98,139,139,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,44,44,0,0,0,0,0,44,44,159,159,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,159,44,44,44,44,0,44,44,44,44,159,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,1,1,98,48,44,44,44,44,44,48,98,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,98,98,0,0,0,98,98,0,0,0,98,0,0,0,98,0,0,0,98,1,1,1,1,1,98,4,4,1,44,1,4,4,98,1,1,1,1,1,98,0,0,0,98,0,0,0,98,0,0,0,98,98,0,0,0,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,0,101,101,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,98,98,109,109,109,98,98,98,0,0,0,98,98,98,98,98,98,0,0,0,98,98,98,98,98,1,1,1,1,1,98,4,1,1,1,1,1,4,98,1,1,1,1,1,98,98,98,98,98,0,0,0,98,98,98,98,98,98,0,0,0,98,98,98,109,109,109,98,98,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,101,101,0,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,101,0,101,98,98,98,1,1,1,1,1,1,4,4,48,1,0,0,50,1,98,0,0,0,98,1,0,0,0,1,1,1,1,1,4,4,4,1,1,1,4,4,4,1,1,1,1,1,0,0,0,1,98,0,0,0,98,1,50,0,0,1,48,4,4,1,1,1,1,1,1,98,98,98,101,0,101,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,144,159,109,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,98,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,98,1,1,1,4,4,1,1,1,1,1,4,4,1,1,1,98,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,98,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,101,0,1,1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,98,4,1,4,4,4,1,4,98,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,0,101,0,0,0,0,0,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"296fd7ea-4ac5-46e5-beb9-5d27019e3796","name":"Mossy","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":48,"y":19,"z":5},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":3,"y":-1,"z":5},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":64,"y":25,"z":16},"secretType":"CHEST","preRequisite":[]},"fairysoul-4":{"secretPoint":{"x":71,"y":12,"z":16},"preRequisite":[],"mechType":"Fairysoul"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":64,"y":0,"z":30},"preRequisite":["crypt-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":56,"y":25,"z":3},{"x":56,"y":24,"z":3},{"x":56,"y":23,"z":3},{"x":56,"y":22,"z":3},{"x":56,"y":21,"z":3},{"x":56,"y":20,"z":3},{"x":56,"y":19,"z":3},{"x":56,"y":25,"z":4},{"x":56,"y":24,"z":4},{"x":56,"y":23,"z":4},{"x":56,"y":22,"z":4},{"x":56,"y":21,"z":4},{"x":56,"y":20,"z":4},{"x":56,"y":19,"z":4},{"x":56,"y":25,"z":5},{"x":56,"y":24,"z":5},{"x":56,"y":23,"z":5},{"x":56,"y":22,"z":5},{"x":56,"y":21,"z":5},{"x":56,"y":20,"z":5},{"x":56,"y":19,"z":5},{"x":56,"y":25,"z":6},{"x":56,"y":24,"z":6},{"x":56,"y":23,"z":6},{"x":56,"y":22,"z":6},{"x":56,"y":21,"z":6},{"x":56,"y":20,"z":6},{"x":56,"y":19,"z":6}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":78,"y":17,"z":10},"secretType":"BAT","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":63,"y":2,"z":2},{"x":63,"y":1,"z":2},{"x":64,"y":2,"z":2},{"x":64,"y":1,"z":2},{"x":65,"y":2,"z":2},{"x":65,"y":1,"z":2},{"x":63,"y":2,"z":3},{"x":63,"y":1,"z":3},{"x":64,"y":2,"z":3},{"x":64,"y":1,"z":3},{"x":65,"y":2,"z":3},{"x":65,"y":1,"z":3},{"x":63,"y":2,"z":4},{"x":63,"y":1,"z":4},{"x":64,"y":2,"z":4},{"x":64,"y":1,"z":4},{"x":65,"y":2,"z":4},{"x":65,"y":1,"z":4},{"x":63,"y":2,"z":5},{"x":63,"y":1,"z":5},{"x":64,"y":2,"z":5},{"x":64,"y":1,"z":5},{"x":65,"y":2,"z":5},{"x":65,"y":1,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":63,"y":2,"z":27},{"x":63,"y":1,"z":27},{"x":64,"y":2,"z":27},{"x":64,"y":1,"z":27},{"x":65,"y":2,"z":27},{"x":65,"y":1,"z":27},{"x":63,"y":2,"z":28},{"x":63,"y":1,"z":28},{"x":64,"y":2,"z":28},{"x":64,"y":1,"z":28},{"x":65,"y":2,"z":28},{"x":65,"y":1,"z":28},{"x":63,"y":2,"z":29},{"x":63,"y":1,"z":29},{"x":64,"y":2,"z":29},{"x":64,"y":1,"z":29},{"x":65,"y":2,"z":29},{"x":65,"y":1,"z":29},{"x":63,"y":2,"z":30},{"x":63,"y":1,"z":30},{"x":64,"y":2,"z":30},{"x":64,"y":1,"z":30},{"x":65,"y":2,"z":30},{"x":65,"y":1,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":1,"z":8},{"x":6,"y":0,"z":8},{"x":6,"y":-1,"z":8},{"x":6,"y":2,"z":9},{"x":6,"y":1,"z":9},{"x":6,"y":0,"z":9},{"x":6,"y":-1,"z":9},{"x":6,"y":0,"z":10},{"x":6,"y":-1,"z":10}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/2b5cb4ef-00a3-4aae-baec-d2094a158d60.json b/src/main/resources/dgroomdata/2b5cb4ef-00a3-4aae-baec-d2094a158d60.json new file mode 100644 index 0000000..8174fb3 --- /dev/null +++ b/src/main/resources/dgroomdata/2b5cb4ef-00a3-4aae-baec-d2094a158d60.json @@ -0,0 +1,1403 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 63, + "blocks": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 159, + 159, + 159, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 44, + 144, + 0, + 1, + 1, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 126, + 0, + 0, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 4, + 50, + 0, + 0, + 0, + 98, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 4, + 5, + 0, + 0, + 0, + 98, + -1, + 0, + 0, + 0, + 44, + 98, + 44, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 134, + 188, + 0, + 98, + 98, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 159, + 1, + 109, + 109, + 109, + 98, + 1, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 50, + 0, + 98, + 98, + 0, + 0, + 98, + 98, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 139, + 98, + 98, + 0, + 0, + 98, + 98, + 0, + 50, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 98, + 98, + 0, + 0, + 98, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 98, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43, + 43, + 43, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 0, + 0, + 98, + 98, + 0, + 0, + 98, + 44, + 0, + 0, + 0, + 43, + 169, + 43, + 0, + 0, + 0, + 98, + 98, + 0, + 0, + 98, + 98, + 0, + 0, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 50, + 0, + 98, + 98, + 0, + 0, + 98, + 0, + 0, + 50, + 0, + 43, + 43, + 43, + 0, + 50, + 0, + 98, + 98, + 0, + 0, + 98, + 98, + 0, + 50, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 159, + 159, + 159, + 159, + 159, + 169, + 159, + 159, + 159, + 1, + 1, + 1, + 1, + 159, + 159, + 48, + 48, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 43, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 48, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 48, + 48, + 1, + 1, + 48, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 48, + 1, + 1, + 48, + 48, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 48, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "uuid": "2b5cb4ef-00a3-4aae-baec-d2094a158d60", + "name": "Sloth", + "processorId": "default", + "properties": {}, + "mechanics": { + "itemdrop-1": { + "mechType": "Secret", + "secretPoint": { + "x": 9, + "y": -1, + "z": 10 + }, + "secretType": "ITEM_DROP", + "preRequisite": [ + "superboom-1:open" + ] + }, + "prince-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 12, + "y": 2, + "z": 26 + }, + { + "x": 12, + "y": 1, + "z": 26 + }, + { + "x": 13, + "y": 2, + "z": 26 + }, + { + "x": 13, + "y": 1, + "z": 26 + }, + { + "x": 14, + "y": 2, + "z": 26 + }, + { + "x": 14, + "y": 1, + "z": 26 + }, + { + "x": 12, + "y": 2, + "z": 27 + }, + { + "x": 12, + "y": 1, + "z": 27 + }, + { + "x": 13, + "y": 2, + "z": 27 + }, + { + "x": 13, + "y": 1, + "z": 27 + }, + { + "x": 14, + "y": 2, + "z": 27 + }, + { + "x": 14, + "y": 1, + "z": 27 + }, + { + "x": 12, + "y": 2, + "z": 28 + }, + { + "x": 12, + "y": 1, + "z": 28 + }, + { + "x": 13, + "y": 2, + "z": 28 + }, + { + "x": 13, + "y": 1, + "z": 28 + }, + { + "x": 14, + "y": 2, + "z": 28 + }, + { + "x": 14, + "y": 1, + "z": 28 + }, + { + "x": 12, + "y": 2, + "z": 29 + }, + { + "x": 12, + "y": 1, + "z": 29 + }, + { + "x": 13, + "y": 2, + "z": 29 + }, + { + "x": 13, + "y": 1, + "z": 29 + }, + { + "x": 14, + "y": 2, + "z": 29 + }, + { + "x": 14, + "y": 1, + "z": 29 + }, + { + "x": 12, + "y": 2, + "z": 30 + }, + { + "x": 12, + "y": 1, + "z": 30 + }, + { + "x": 13, + "y": 2, + "z": 30 + }, + { + "x": 13, + "y": 1, + "z": 30 + }, + { + "x": 14, + "y": 2, + "z": 30 + }, + { + "x": 14, + "y": 1, + "z": 30 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "journal-1": { + "secretPoint": { + "x": 7, + "y": -1, + "z": 8 + }, + "preRequisite": [ + "superboom-1:open" + ], + "mechType": "Journal" + }, + "superboom-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 11, + "y": 3, + "z": 8 + }, + { + "x": 11, + "y": 2, + "z": 8 + }, + { + "x": 11, + "y": 1, + "z": 8 + }, + { + "x": 11, + "y": 0, + "z": 8 + }, + { + "x": 11, + "y": -1, + "z": 8 + }, + { + "x": 11, + "y": 2, + "z": 9 + }, + { + "x": 11, + "y": 1, + "z": 9 + }, + { + "x": 11, + "y": 0, + "z": 9 + }, + { + "x": 11, + "y": -1, + "z": 9 + } + ] + }, + "preRequisite": [], + "mechType": "BreakableWall" + } + }, + "totalSecrets": 1 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json b/src/main/resources/dgroomdata/2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json new file mode 100644 index 0000000..a5b9979 --- /dev/null +++ b/src/main/resources/dgroomdata/2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,103,103,0,0,0,0,103,103,103,0,0,0,0,98,98,1,1,50,0,0,0,159,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,103,0,0,0,0,0,0,0,0,0,0,0,0,98,159,0,0,0,0,0,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,144,0,0,144,0,98,159,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,17,103,0,0,0,103,17,0,0,0,0,0,17,98,159,0,0,0,0,0,0,0,0,50,1,-1,-1,-1,-1],[-1,-1,-1,-1,103,103,0,0,0,0,103,103,103,0,0,0,0,98,159,0,0,0,0,0,0,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,103,0,0,0,0,0,103,103,0,0,0,103,103,98,159,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,103,103,98,159,0,144,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,1,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,48,4,4,48,4,48,4,4,48,4,4,98,98,109,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,1,0,0,0,1,1,0,0,0,44,1,0,0,0,0,0,0,0,0,0,0,50,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,109,0,0,0,109,109,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,50,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,98,98,4,4,48,98,98,4,4,48,98,98,98,98,0,0,0,0,0,0,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,50,98,98,98,98,109,0,0,0,98,98,139,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,98,109,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,1,0,0,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,109,0,0,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,0,0,0,0,0,159,159,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,1,1,0,0,0,159,1,1,35,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"2ccc73b5-883f-4436-9b8f-1a32123b2cb9","name":"Dueces","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":3,"y":8,"z":16},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":11,"y":0,"z":7},"secretType":"ITEM_DROP","preRequisite":["superboom-2:open"]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":6,"y":8,"z":27},{"x":6,"y":7,"z":27},{"x":7,"y":8,"z":27},{"x":7,"y":7,"z":27},{"x":8,"y":8,"z":27},{"x":8,"y":7,"z":27},{"x":6,"y":8,"z":28},{"x":6,"y":7,"z":28},{"x":7,"y":8,"z":28},{"x":7,"y":7,"z":28},{"x":8,"y":8,"z":28},{"x":8,"y":7,"z":28},{"x":6,"y":8,"z":29},{"x":6,"y":7,"z":29},{"x":7,"y":8,"z":29},{"x":7,"y":7,"z":29},{"x":8,"y":8,"z":29},{"x":8,"y":7,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":11,"y":8,"z":27},{"x":11,"y":7,"z":27},{"x":12,"y":8,"z":27},{"x":12,"y":7,"z":27},{"x":13,"y":8,"z":27},{"x":13,"y":7,"z":27},{"x":11,"y":8,"z":28},{"x":11,"y":7,"z":28},{"x":12,"y":8,"z":28},{"x":12,"y":7,"z":28},{"x":13,"y":8,"z":28},{"x":13,"y":7,"z":28},{"x":11,"y":8,"z":29},{"x":11,"y":7,"z":29},{"x":12,"y":8,"z":29},{"x":12,"y":7,"z":29},{"x":13,"y":8,"z":29},{"x":13,"y":7,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":16,"y":8,"z":27},{"x":16,"y":7,"z":27},{"x":17,"y":8,"z":27},{"x":17,"y":7,"z":27},{"x":18,"y":8,"z":27},{"x":18,"y":7,"z":27},{"x":16,"y":8,"z":28},{"x":16,"y":7,"z":28},{"x":17,"y":8,"z":28},{"x":17,"y":7,"z":28},{"x":18,"y":8,"z":28},{"x":18,"y":7,"z":28},{"x":16,"y":8,"z":29},{"x":16,"y":7,"z":29},{"x":17,"y":8,"z":29},{"x":17,"y":7,"z":29},{"x":18,"y":8,"z":29},{"x":18,"y":7,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"bat-1":{"mechType":"Secret","secretPoint":{"x":9,"y":4,"z":8},"secretType":"BAT","preRequisite":["superboom-2:open"]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":6,"y":8,"z":12},{"x":6,"y":7,"z":12},{"x":7,"y":8,"z":12},{"x":7,"y":7,"z":12},{"x":8,"y":8,"z":12},{"x":8,"y":7,"z":12},{"x":9,"y":8,"z":12},{"x":9,"y":7,"z":12},{"x":10,"y":8,"z":12},{"x":10,"y":7,"z":12},{"x":11,"y":8,"z":12},{"x":11,"y":7,"z":12},{"x":6,"y":8,"z":13},{"x":6,"y":7,"z":13},{"x":7,"y":8,"z":13},{"x":7,"y":7,"z":13},{"x":8,"y":8,"z":13},{"x":8,"y":7,"z":13},{"x":9,"y":8,"z":13},{"x":9,"y":7,"z":13},{"x":10,"y":8,"z":13},{"x":10,"y":7,"z":13},{"x":11,"y":8,"z":13},{"x":11,"y":7,"z":13}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":3,"y":8,"z":6},{"x":3,"y":7,"z":6},{"x":4,"y":8,"z":6},{"x":4,"y":7,"z":6},{"x":5,"y":8,"z":6},{"x":5,"y":7,"z":6},{"x":6,"y":8,"z":6},{"x":6,"y":7,"z":6},{"x":7,"y":8,"z":6},{"x":7,"y":7,"z":6},{"x":3,"y":8,"z":7},{"x":3,"y":7,"z":7},{"x":4,"y":8,"z":7},{"x":4,"y":7,"z":7},{"x":5,"y":8,"z":7},{"x":5,"y":7,"z":7},{"x":6,"y":8,"z":7},{"x":6,"y":7,"z":7},{"x":7,"y":8,"z":7},{"x":7,"y":7,"z":7},{"x":3,"y":8,"z":8},{"x":3,"y":7,"z":8},{"x":4,"y":8,"z":8},{"x":4,"y":7,"z":8},{"x":5,"y":8,"z":8},{"x":5,"y":7,"z":8},{"x":6,"y":8,"z":8},{"x":6,"y":7,"z":8},{"x":7,"y":8,"z":8},{"x":7,"y":7,"z":8},{"x":3,"y":8,"z":9},{"x":3,"y":7,"z":9},{"x":4,"y":8,"z":9},{"x":4,"y":7,"z":9},{"x":5,"y":8,"z":9},{"x":5,"y":7,"z":9},{"x":6,"y":8,"z":9},{"x":6,"y":7,"z":9},{"x":7,"y":8,"z":9},{"x":7,"y":7,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":8,"z":2},{"x":6,"y":7,"z":2},{"x":7,"y":8,"z":2},{"x":7,"y":7,"z":2},{"x":8,"y":8,"z":2},{"x":8,"y":7,"z":2},{"x":9,"y":8,"z":2},{"x":9,"y":7,"z":2},{"x":10,"y":8,"z":2},{"x":10,"y":7,"z":2},{"x":11,"y":8,"z":2},{"x":11,"y":7,"z":2},{"x":6,"y":8,"z":3},{"x":6,"y":7,"z":3},{"x":7,"y":8,"z":3},{"x":7,"y":7,"z":3},{"x":8,"y":8,"z":3},{"x":8,"y":7,"z":3},{"x":9,"y":8,"z":3},{"x":9,"y":7,"z":3},{"x":10,"y":8,"z":3},{"x":10,"y":7,"z":3},{"x":11,"y":8,"z":3},{"x":11,"y":7,"z":3}]},"preRequisite":[],"mechType":"Tomb"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":18,"y":2,"z":3},{"x":18,"y":1,"z":3},{"x":18,"y":0,"z":3},{"x":18,"y":-1,"z":3}]},"preRequisite":[],"mechType":"BreakableWall"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":12,"y":11,"z":15},{"x":12,"y":10,"z":15},{"x":12,"y":9,"z":15},{"x":12,"y":11,"z":16},{"x":12,"y":10,"z":16},{"x":12,"y":9,"z":16},{"x":12,"y":11,"z":17},{"x":12,"y":10,"z":17},{"x":12,"y":9,"z":17}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/2d9705f3-2e69-4035-905d-6b11d6ee270b.json b/src/main/resources/dgroomdata/2d9705f3-2e69-4035-905d-6b11d6ee270b.json new file mode 100644 index 0000000..8d5458b --- /dev/null +++ b/src/main/resources/dgroomdata/2d9705f3-2e69-4035-905d-6b11d6ee270b.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":273,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,67,0,0,0,0,109,98,98,109,0,0,0,0,0,109,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,67,0,0,0,0,109,1,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,98,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,101,0,0,0,98,159,144,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,101,0,0,0,98,159,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,50,98,0,0,0,98,159,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,50,98,1,159,159,159,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,98,0,0,0,98,0,98,109,0,0,0,0,0,109,98,0,98,144,0,0,98,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,1,0,144,0,1,50,98,109,0,0,0,0,0,109,98,50,98,0,0,0,98,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,159,159,159,98,98,98,98,0,0,0,0,0,98,98,98,1,159,159,159,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,98,98,98,98,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,0,0,0,0,98,98,109,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,18,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,98,4,98,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,109,98,1,4,44,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,109,98,1,4,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,1,1,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,98,98,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,1,4,67,67,4,67,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,0,0,0,109,98,98,109,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,0,0,0,109,1,98,109,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,1,109,0,0,0,0,0,0,0,109,98,98,109,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,109,98,98,109,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,67,67,67,98,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,1,4,1,98,109,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,4,1,98,109,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,1,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,109,0,0,0,0,0,0,0,109,1,98,0,0,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,109,109,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,139,1,139,0,0,98,98,0,0,0,0,0,98,98,0,0,139,1,139,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,139,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,139,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,44,44,44,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,44,0,0,0,0,0,44,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,0,0,0,44,0,0,0,0,0,44,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,50,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,0,0,0,0,0,0,50,44,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,0,98,50,0,0,0,0,0,0,0,0,0,0,0,50,98,144,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,1,44,0,139,98,0,0,0,0,0,139,139,0,44,1,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"2d9705f3-2e69-4035-905d-6b11d6ee270b","name":"Wizard","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":5,"y":22,"z":18},"secretType":"CHEST","preRequisite":["superboom-3:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":7,"y":19,"z":91},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"crystal-1":{"mechType":"Secret","secretPoint":{"x":5,"y":-7,"z":90},"secretType":"ESSENCE","preRequisite":[]},"superboom-3":{"secretPoint":{"offsetPointList":[{"x":11,"y":25,"z":5},{"x":11,"y":24,"z":5},{"x":11,"y":23,"z":5},{"x":11,"y":22,"z":5},{"x":11,"y":21,"z":5},{"x":11,"y":25,"z":6},{"x":11,"y":24,"z":6},{"x":11,"y":23,"z":6},{"x":11,"y":22,"z":6},{"x":11,"y":21,"z":6},{"x":11,"y":25,"z":7},{"x":11,"y":24,"z":7},{"x":11,"y":23,"z":7},{"x":11,"y":22,"z":7},{"x":11,"y":21,"z":7},{"x":11,"y":25,"z":8},{"x":11,"y":24,"z":8},{"x":11,"y":23,"z":8},{"x":11,"y":22,"z":8},{"x":11,"y":21,"z":8}]},"preRequisite":[],"mechType":"BreakableWall"},"bat-1":{"mechType":"Secret","secretPoint":{"x":23,"y":-16,"z":28},"secretType":"BAT","preRequisite":[]},"journal-1":{"secretPoint":{"x":8,"y":0,"z":3},"preRequisite":["superboom-1:open"],"mechType":"Journal"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":5,"y":16,"z":75},{"x":5,"y":15,"z":75},{"x":5,"y":14,"z":75},{"x":5,"y":13,"z":75},{"x":5,"y":12,"z":75},{"x":5,"y":11,"z":75},{"x":6,"y":16,"z":75},{"x":6,"y":15,"z":75},{"x":6,"y":14,"z":75},{"x":6,"y":13,"z":75},{"x":6,"y":12,"z":75},{"x":6,"y":11,"z":75},{"x":7,"y":16,"z":75},{"x":7,"y":15,"z":75},{"x":7,"y":14,"z":75},{"x":7,"y":13,"z":75},{"x":7,"y":12,"z":75},{"x":7,"y":11,"z":75},{"x":8,"y":16,"z":75},{"x":8,"y":15,"z":75},{"x":8,"y":14,"z":75},{"x":8,"y":13,"z":75},{"x":8,"y":12,"z":75},{"x":8,"y":11,"z":75},{"x":9,"y":16,"z":75},{"x":9,"y":15,"z":75},{"x":9,"y":14,"z":75},{"x":9,"y":13,"z":75},{"x":9,"y":12,"z":75},{"x":9,"y":11,"z":75}]},"preRequisite":[],"mechType":"BreakableWall"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":7,"y":3,"z":11},{"x":7,"y":2,"z":11},{"x":7,"y":1,"z":11},{"x":7,"y":0,"z":11},{"x":7,"y":-1,"z":11},{"x":8,"y":3,"z":11},{"x":8,"y":2,"z":11},{"x":8,"y":1,"z":11},{"x":8,"y":0,"z":11},{"x":8,"y":-1,"z":11},{"x":9,"y":3,"z":11},{"x":9,"y":2,"z":11},{"x":9,"y":1,"z":11},{"x":9,"y":0,"z":11},{"x":9,"y":-1,"z":11}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":9,"y":6,"z":4},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"Wizard(blessing)":{"secretPoint":{"x":27,"y":20,"z":5},"preRequisite":["crystal-1:found"],"mechType":"Npc"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":15,"y":19,"z":58},{"x":15,"y":18,"z":58},{"x":16,"y":19,"z":58},{"x":16,"y":18,"z":58},{"x":17,"y":19,"z":58},{"x":17,"y":18,"z":58},{"x":15,"y":19,"z":59},{"x":15,"y":18,"z":59},{"x":16,"y":19,"z":59},{"x":16,"y":18,"z":59},{"x":17,"y":19,"z":59},{"x":17,"y":18,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":15,"y":12,"z":17},{"x":15,"y":11,"z":17},{"x":16,"y":12,"z":17},{"x":16,"y":11,"z":17},{"x":17,"y":12,"z":17},{"x":17,"y":11,"z":17},{"x":15,"y":12,"z":18},{"x":15,"y":11,"z":18},{"x":16,"y":12,"z":18},{"x":16,"y":11,"z":18},{"x":17,"y":12,"z":18},{"x":17,"y":11,"z":18},{"x":15,"y":12,"z":19},{"x":15,"y":11,"z":19},{"x":16,"y":12,"z":19},{"x":16,"y":11,"z":19},{"x":17,"y":12,"z":19},{"x":17,"y":11,"z":19},{"x":15,"y":12,"z":20},{"x":15,"y":11,"z":20},{"x":16,"y":12,"z":20},{"x":16,"y":11,"z":20},{"x":17,"y":12,"z":20},{"x":17,"y":11,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":20,"y":12,"z":17},{"x":20,"y":11,"z":17},{"x":21,"y":12,"z":17},{"x":21,"y":11,"z":17},{"x":22,"y":12,"z":17},{"x":22,"y":11,"z":17},{"x":20,"y":12,"z":18},{"x":20,"y":11,"z":18},{"x":21,"y":12,"z":18},{"x":21,"y":11,"z":18},{"x":22,"y":12,"z":18},{"x":22,"y":11,"z":18},{"x":20,"y":12,"z":19},{"x":20,"y":11,"z":19},{"x":21,"y":12,"z":19},{"x":21,"y":11,"z":19},{"x":22,"y":12,"z":19},{"x":22,"y":11,"z":19},{"x":20,"y":12,"z":20},{"x":20,"y":11,"z":20},{"x":21,"y":12,"z":20},{"x":21,"y":11,"z":20},{"x":22,"y":12,"z":20},{"x":22,"y":11,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":12,"z":17},{"x":25,"y":11,"z":17},{"x":26,"y":12,"z":17},{"x":26,"y":11,"z":17},{"x":27,"y":12,"z":17},{"x":27,"y":11,"z":17},{"x":25,"y":12,"z":18},{"x":25,"y":11,"z":18},{"x":26,"y":12,"z":18},{"x":26,"y":11,"z":18},{"x":27,"y":12,"z":18},{"x":27,"y":11,"z":18},{"x":25,"y":12,"z":19},{"x":25,"y":11,"z":19},{"x":26,"y":12,"z":19},{"x":26,"y":11,"z":19},{"x":27,"y":12,"z":19},{"x":27,"y":11,"z":19},{"x":25,"y":12,"z":20},{"x":25,"y":11,"z":20},{"x":26,"y":12,"z":20},{"x":26,"y":11,"z":20},{"x":27,"y":12,"z":20},{"x":27,"y":11,"z":20}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/2f7927cc-4ce0-4f02-a81a-88d5709248e8.json b/src/main/resources/dgroomdata/2f7927cc-4ce0-4f02-a81a-88d5709248e8.json new file mode 100644 index 0000000..07ab98f --- /dev/null +++ b/src/main/resources/dgroomdata/2f7927cc-4ce0-4f02-a81a-88d5709248e8.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,159,67,67,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,159,67,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,0,0,0,101,0,0,0,0,0,0,0,0,0,188,50,0,0,159,67,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,67,67,4,4,109,50,0,0,0,0,0,0,0,5,136,136,0,159,4,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,4,67,1,109,109,0,0,0,0,0,0,0,0,5,5,5,98,1,4,101,101,101,4,-1,-1,-1,-1],[-1,-1,-1,-1,139,50,5,5,1,0,0,0,0,0,0,0,0,0,0,0,134,5,5,109,109,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,53,53,0,0,0,0,0,0,0,0,0,0,0,0,134,5,5,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,134,134,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,164,164,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,136,5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,5,5,50,139,1,0,0,0,0,0,0,0,0,0,109,109,0,0,0,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,4,67,4,98,109,0,144,0,0,0,144,109,1,4,0,101,101,4,1,4,101,101,101,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,159,159,159,159,159,159,159,159,159,1,67,0,0,0,67,1,67,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,109,144,0,0,0,144,0,109,98,4,1,67,0,0,0,67,1,67,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,50,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,4,1,4,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,17,0,0,0,0,0,0,0,0,44,4,4,67,67,4,1,1,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,109,0,0,0,0,0,0,0,0,67,4,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"2f7927cc-4ce0-4f02-a81a-88d5709248e8","name":"Tomioka","processorId":"default","properties":{},"mechanics":{"fairysoul-2":{"secretPoint":{"x":7,"y":-1,"z":28},"preRequisite":[],"mechType":"Fairysoul"},"Tomioka":{"secretPoint":{"x":5,"y":5,"z":4},"preRequisite":[],"mechType":"Npc"}},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json b/src/main/resources/dgroomdata/31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json new file mode 100644 index 0000000..caec3a8 --- /dev/null +++ b/src/main/resources/dgroomdata/31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":4369,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,109,98,0,0,0,0,0,109,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,4,98,98,109,109,109,109,109,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,1,1,98,1,98,98,1,1,98,1,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,1,1,1,1,1,98,1,1,1,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,1,1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,98,98,98,98,98,1,1,1,1,98,1,1,98,98,98,98,98,4,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,98,109,109,109,98,98,98,98,109,109,109,109,109,109,109,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,98,0,0,0,98,109,98,98,0,0,0,0,0,0,0,98,98,44,0,98,0,44,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,109,109,44,0,0,44,98,98,0,0,0,0,0,0,0,139,98,109,44,98,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,98,98,109,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,98,44,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,18,0,18,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,98,98,109,0,0,0,0,0,0,0,0,0,0,159,18,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,159,0,0,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,144,0,159,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,144,0,0,0,0,0,0,0,0,0,109,98,109,0,106,106,18,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,98,98,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,159,98,44,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,98,98,139,0,0,0,0,0,139,98,98,98,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,98,98,139,0,0,0,0,0,98,98,98,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,98,98,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,98,98,98,139,0,0,0,0,0,98,98,98,98,98,98,4,98,98,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,98,98,139,0,0,0,0,0,139,139,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,109,98,98,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,109,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,159,159,98,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,98,44,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,139,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,139,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,98,98,44,0,98,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,44,98,139,0,0,0,0,0,0,0,0,109,98,159,159,98,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,98,98,98,98,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,4,98,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,0,0,0,98,1,1,0,0,0,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,1,1,1,109,109,109,98,0,0,0,0,0,0,0,0,0,98,1,1,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,98,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,98,1,1,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,98,50,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,98,98,98,98,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,159,98,44,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,1,1,1,1,98,0,0,0,0,0,0,0,0,0,98,0,159,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,159,44,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,98,98,109,0,0,0,0,0,0,0,0,0,0,98,0,159,98,1,50,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,159,98,1,1,0,17,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,159,98,1,1,98,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,98,98,98,98,98,98,0,0,0,0,0,0,0,50,98,98,98,98,98,98,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,139,0,0,0,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,109,109,98,98,109,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,98,98,98,44,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,98,98,98,109,0,0,0,0,0,0,98,98,98,98,98,109,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,4,98,98,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,109,0,0,0,0,0,0,0,98,98,159,98,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,44,0,0,0,0,0,0,0,98,1,159,159,159,1,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,44,0,0,0,0,0,0,0,44,1,144,0,0,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,98,98,98,109,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,109,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,4,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,98,1,0,144,0,1,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,4,1,0,0,0,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,139,98,98,159,159,159,98,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,4,98,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,98,98,98,109,0,0,0,0,0,0,0,0,109,98,4,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,109,98,98,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,1,1,98,98,98,98,98,0,0,0,0,0,0,139,98,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,109,109,109,98,1,98,98,98,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,98,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,50,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,98,0,0,0,98,98,0,0,0,0,0,0,0,0,109,98,109,109,98,98,98,98,98,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,98,98,98,139,0,0,0,0,0,0,98,98,98,98,98,98,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,139,98,0,0,0,0,0,0,0,98,98,4,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,139,98,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,109,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,4,139,0,0,0,0,0,0,0,109,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,109,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7","name":"Hallway","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":28,"y":-1,"z":29},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":26,"y":-1,"z":55},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":25,"y":15,"z":86},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":28,"y":2,"z":74},{"x":28,"y":1,"z":74},{"x":28,"y":0,"z":74},{"x":28,"y":-1,"z":74},{"x":29,"y":2,"z":74},{"x":29,"y":1,"z":74},{"x":29,"y":0,"z":74},{"x":29,"y":-1,"z":74}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":11,"y":6,"z":93},"preRequisite":[],"triggering":"door-1"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":7,"z":5},{"x":25,"y":6,"z":5},{"x":26,"y":7,"z":5},{"x":26,"y":6,"z":5},{"x":27,"y":7,"z":5},{"x":27,"y":6,"z":5},{"x":25,"y":7,"z":6},{"x":25,"y":6,"z":6},{"x":26,"y":7,"z":6},{"x":26,"y":6,"z":6},{"x":27,"y":7,"z":6},{"x":27,"y":6,"z":6},{"x":25,"y":7,"z":7},{"x":25,"y":6,"z":7},{"x":26,"y":7,"z":7},{"x":26,"y":6,"z":7},{"x":27,"y":7,"z":7},{"x":27,"y":6,"z":7},{"x":25,"y":7,"z":8},{"x":25,"y":6,"z":8},{"x":26,"y":7,"z":8},{"x":26,"y":6,"z":8},{"x":27,"y":7,"z":8},{"x":27,"y":6,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":5,"z":28},{"x":25,"y":5,"z":29},{"x":26,"y":5,"z":29},{"x":25,"y":5,"z":30},{"x":26,"y":5,"z":30},{"x":25,"y":5,"z":31},{"x":26,"y":5,"z":31},{"x":25,"y":5,"z":32},{"x":26,"y":5,"z":32}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/31766264-1004-492f-9d65-cb5deaff82f0.json b/src/main/resources/dgroomdata/31766264-1004-492f-9d65-cb5deaff82f0.json new file mode 100644 index 0000000..fd21227 --- /dev/null +++ b/src/main/resources/dgroomdata/31766264-1004-492f-9d65-cb5deaff82f0.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,126,0,0,0,17,98,98,0,17,0,0,67,98,98,50,0,0,98,139,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,17,0,0,0,126,0,17,0,0,0,17,0,18,67,67,0,0,0,0,0,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,98,17,0,0,0,126,0,17,0,0,0,17,18,18,18,67,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,126,17,17,17,17,17,17,17,0,0,0,17,0,0,67,67,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,126,0,18,126,0,17,18,0,0,17,0,0,67,67,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,126,0,0,18,18,17,17,17,17,17,17,17,17,67,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,126,126,0,18,18,17,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,17,17,17,17,17,17,17,17,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,17,0,17,0,98,98,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,134,0,134,0,98,98,0,0,0,0,0,0,0,0,18,139,139,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,51,51,139,139,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,18,0,0,1,98,0,0,0,0,0,0,0,51,51,98,139,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,1,1,139,139,0,0,0,0,0,139,139,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,98,1,1,1,1,139,50,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,109,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,76,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,0,0,0,0,0,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"31766264-1004-492f-9d65-cb5deaff82f0","name":"double-diamond","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":20,"y":12,"z":20},"secretType":"CHEST","preRequisite":["door-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":19,"y":14,"z":19},{"x":19,"y":13,"z":19},{"x":19,"y":12,"z":19},{"x":19,"y":14,"z":20},{"x":19,"y":13,"z":20},{"x":19,"y":12,"z":20},{"x":19,"y":14,"z":21},{"x":19,"y":13,"z":21},{"x":19,"y":12,"z":21}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":27,"y":18,"z":7},"preRequisite":[],"triggering":"door-1"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":24,"y":-5,"z":7},"secretType":"ITEM_DROP","preRequisite":[""]},"essence-1":{"mechType":"Secret","secretPoint":{"x":7,"y":-1,"z":25},"secretType":"ESSENCE","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":0,"z":24},{"x":11,"y":-1,"z":24},{"x":11,"y":1,"z":25},{"x":11,"y":0,"z":25},{"x":11,"y":-1,"z":25},{"x":11,"y":1,"z":26},{"x":11,"y":0,"z":26},{"x":11,"y":-1,"z":26}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/3406a386-c56d-47de-a0ad-aa0ab74d2abb.json b/src/main/resources/dgroomdata/3406a386-c56d-47de-a0ad-aa0ab74d2abb.json new file mode 100644 index 0000000..07e6f4c --- /dev/null +++ b/src/main/resources/dgroomdata/3406a386-c56d-47de-a0ad-aa0ab74d2abb.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,13,1,1,0,0,0,0,0,0,0,0,0,0,0,0,139,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,67,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,44,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,67,0,0,85,0,0,85,0,0,0,0,85,0,0,0,0,85,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,13,44,144,0,0,44,98,164,164,0,0,0,0,0,0,0,0,0,159,159,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,159,159,159,159,159,0,5,5,5,0,0,0,0,0,0,0,0,159,159,44,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,159,159,159,159,159,0,5,5,136,0,0,0,0,0,0,0,144,159,159,44,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,159,159,159,159,159,0,5,134,0,0,0,0,0,0,0,0,44,159,159,144,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,109,44,144,0,109,98,0,0,85,0,0,0,0,0,0,0,44,159,159,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,44,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,144,44,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,13,50,0,0,0,0,85,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,98,109,44,144,0,144,44,109,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,98,159,159,159,159,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,109,109,44,144,0,0,44,109,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,1,1,67,139,0,0,0,0,0,17,0,0,0,0,0,98,44,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,1,67,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,159,44,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,4,13,164,164,5,0,0,0,0,0,0,0,0,0,0,159,159,159,144,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,4,13,5,164,164,0,0,0,0,0,0,0,0,0,144,159,159,159,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,67,1,1,1,0,0,0,0,0,0,0,0,0,50,44,159,159,159,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,67,1,1,1,0,0,0,0,17,126,126,126,126,17,109,159,159,159,44,17,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,67,1,1,1,98,98,-1,-1,67,4,4,4,67,67,4,4,4,4,67,67,4,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,1,4,67,4,98,98,98,98,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,98,0,0,50,98,0,0,0,98,0,144,159,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"3406a386-c56d-47de-a0ad-aa0ab74d2abb","name":"Chains","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":14,"y":16,"z":17},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-1,"z":21},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":3,"z":25},{"x":11,"y":2,"z":25},{"x":12,"y":3,"z":25},{"x":12,"y":2,"z":25},{"x":12,"y":1,"z":25},{"x":12,"y":0,"z":25},{"x":12,"y":-1,"z":25},{"x":13,"y":1,"z":25},{"x":13,"y":0,"z":25},{"x":13,"y":-1,"z":25}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/340c5665-e59b-42c1-bf84-8fc03d38981f.json b/src/main/resources/dgroomdata/340c5665-e59b-42c1-bf84-8fc03d38981f.json new file mode 100644 index 0000000..32ca744 --- /dev/null +++ b/src/main/resources/dgroomdata/340c5665-e59b-42c1-bf84-8fc03d38981f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":17,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,35,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,159,159,159,35,35,0,0,144,159,1,18,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,139,1,1,1,1,1,1,35,159,159,1,1,1,98,139,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,1,98,98,98,109,109,98,98,98,98,98,98,98,98,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,1,98,1,0,0,0,0,0,1,98,98,98,1,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,1,139,0,0,0,0,0,0,0,1,4,1,1,159,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,4,0,0,0,0,0,0,0,139,139,98,159,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,17,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,139,0,0,0,0,0,0,0,4,139,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,139,139,4,0,0,0,0,0,0,0,139,1,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,98,50,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,50,0,0,0,0,43,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,139,4,0,0,0,0,0,0,0,139,4,98,67,67,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,139,0,0,0,0,0,0,0,4,139,98,67,4,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,98,4,4,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,1,0,0,0,0,0,0,0,0,0,0,0,98,1,4,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,50,98,0,0,0,0,0,0,0,0,0,0,0,98,1,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,98,1,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,139,0,0,0,0,0,0,0,139,4,98,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,9,0,0,67,67,98,139,4,0,0,0,0,0,0,0,139,139,98,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,1,1,44,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,109,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,98,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,98,139,0,0,0,0,0,0,0,139,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,139,4,4,0,0,0,0,0,0,0,139,139,98,7,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,7,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,35,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,35,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,35,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,159,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,139,139,0,0,0,0,0,0,0,139,4,98,159,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,139,0,0,0,0,0,0,0,4,139,98,159,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,98,1,1,1,0,0,0,0,0,1,1,1,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,1,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,139,35,1,1,1,1,1,1,1,1,7,0,98,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,35,35,35,1,1,1,35,35,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,35,0,0,0,0,0,0,0,0,0,35,159,35,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"340c5665-e59b-42c1-bf84-8fc03d38981f","name":"Crypt","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":5,"y":16,"z":45},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":15,"y":11,"z":3},"secretType":"CHEST","preRequisite":[]},"fairysoul-3":{"secretPoint":{"x":15,"y":5,"z":9},"preRequisite":[],"mechType":"Fairysoul"},"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":-10,"z":14},"secretType":"CHEST","preRequisite":["crypt-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":16,"y":18,"z":46},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":25,"y":19,"z":29},{"x":25,"y":18,"z":29},{"x":26,"y":19,"z":29},{"x":26,"y":18,"z":29},{"x":27,"y":19,"z":29},{"x":27,"y":18,"z":29},{"x":25,"y":19,"z":30},{"x":25,"y":18,"z":30},{"x":26,"y":19,"z":30},{"x":26,"y":18,"z":30},{"x":27,"y":19,"z":30},{"x":27,"y":18,"z":30},{"x":25,"y":19,"z":31},{"x":25,"y":18,"z":31},{"x":26,"y":19,"z":31},{"x":26,"y":18,"z":31},{"x":27,"y":19,"z":31},{"x":27,"y":18,"z":31}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-2,"z":32},{"x":15,"y":-3,"z":32},{"x":16,"y":-2,"z":32},{"x":16,"y":-3,"z":32},{"x":17,"y":-2,"z":32},{"x":17,"y":-3,"z":32},{"x":15,"y":-2,"z":33},{"x":15,"y":-3,"z":33},{"x":16,"y":-2,"z":33},{"x":16,"y":-3,"z":33},{"x":17,"y":-2,"z":33},{"x":17,"y":-3,"z":33},{"x":15,"y":-2,"z":34},{"x":15,"y":-3,"z":34},{"x":16,"y":-2,"z":34},{"x":16,"y":-3,"z":34},{"x":17,"y":-2,"z":34},{"x":17,"y":-3,"z":34},{"x":15,"y":-2,"z":35},{"x":15,"y":-3,"z":35},{"x":16,"y":-2,"z":35},{"x":16,"y":-3,"z":35},{"x":17,"y":-2,"z":35},{"x":17,"y":-3,"z":35}]},"preRequisite":[],"mechType":"Tomb"},"journal-1":{"secretPoint":{"x":5,"y":16,"z":56},"preRequisite":[],"mechType":"Journal"},"chest-4":{"mechType":"Secret","secretPoint":{"x":29,"y":19,"z":20},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":23,"y":21,"z":16},{"x":23,"y":20,"z":16},{"x":24,"y":21,"z":16},{"x":24,"y":20,"z":16},{"x":24,"y":19,"z":16},{"x":24,"y":18,"z":16},{"x":25,"y":22,"z":16},{"x":25,"y":21,"z":16},{"x":25,"y":20,"z":16},{"x":25,"y":19,"z":16},{"x":25,"y":18,"z":16},{"x":26,"y":22,"z":16},{"x":26,"y":20,"z":16},{"x":26,"y":19,"z":16},{"x":26,"y":18,"z":16}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/34639497-d991-4137-83c4-db0a25542b71.json b/src/main/resources/dgroomdata/34639497-d991-4137-83c4-db0a25542b71.json new file mode 100644 index 0000000..ede4241 --- /dev/null +++ b/src/main/resources/dgroomdata/34639497-d991-4137-83c4-db0a25542b71.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,4,0,0,4,0,0,0,0,0,4,0,0,4,0,0,4,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,159,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,134,17,0,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,1,67,67,67,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,17,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,67,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,4,0,0,4,0,0,4,0,0,0,0,0,4,0,0,4,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,159,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"34639497-d991-4137-83c4-db0a25542b71","name":"Cages","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":20,"y":-12,"z":8},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":29,"y":15,"z":7},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":17,"y":-10,"z":7},{"x":17,"y":-11,"z":7},{"x":17,"y":-12,"z":7},{"x":17,"y":-13,"z":7},{"x":17,"y":-10,"z":8},{"x":17,"y":-11,"z":8},{"x":17,"y":-12,"z":8},{"x":17,"y":-13,"z":8},{"x":17,"y":-10,"z":9},{"x":17,"y":-11,"z":9},{"x":17,"y":-12,"z":9},{"x":17,"y":-13,"z":9}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":26,"y":28,"z":29},"secretType":"ITEM_DROP","preRequisite":[]}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/35fb741d-b0b1-471a-a5b6-8224f99a1133.json b/src/main/resources/dgroomdata/35fb741d-b0b1-471a-a5b6-8224f99a1133.json new file mode 100644 index 0000000..2d86e16 --- /dev/null +++ b/src/main/resources/dgroomdata/35fb741d-b0b1-471a-a5b6-8224f99a1133.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,0,69,50,98,1,98,4,50,0,0,0,0,0,0,109,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,98,-1,0,0,0,0,0,0,0,109,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,197,0,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,23,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,0,0,0,98,98,98,98,98,0,0,0,0,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,101,101,101,98,98,109,98,98,0,0,0,0,1,109,98,1,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,109,98,0,0,0,109,109,139,50,0,0,0,0,0,0,144,139,98,98,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,0,0,0,1,98,139,0,0,0,0,0,0,0,0,0,109,109,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,101,101,101,1,98,101,101,101,98,98,98,98,109,109,98,0,0,0,109,109,109,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,0,0,0,98,1,139,0,0,98,98,0,0,0,98,98,18,3,3,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,35,35,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"35fb741d-b0b1-471a-a5b6-8224f99a1133","name":"long-hall","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":29,"y":11,"z":26},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":29,"y":12,"z":16},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":19,"y":-8,"z":24},"secretType":"CHEST","preRequisite":["crypt-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":11,"y":0,"z":4},"preRequisite":["superboom-1:open::::::::"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":10,"y":18,"z":21},{"x":10,"y":17,"z":21},{"x":10,"y":16,"z":21},{"x":10,"y":15,"z":21},{"x":10,"y":14,"z":21},{"x":11,"y":18,"z":21},{"x":11,"y":17,"z":21},{"x":11,"y":16,"z":21},{"x":11,"y":15,"z":21},{"x":11,"y":14,"z":21},{"x":12,"y":18,"z":21},{"x":12,"y":17,"z":21},{"x":12,"y":16,"z":21},{"x":12,"y":15,"z":21},{"x":12,"y":14,"z":21}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":5,"y":7,"z":5},{"x":5,"y":6,"z":5},{"x":6,"y":7,"z":5},{"x":6,"y":6,"z":5},{"x":7,"y":7,"z":5},{"x":7,"y":6,"z":5},{"x":5,"y":7,"z":6},{"x":5,"y":6,"z":6},{"x":6,"y":7,"z":6},{"x":6,"y":6,"z":6},{"x":7,"y":7,"z":6},{"x":7,"y":6,"z":6},{"x":5,"y":7,"z":7},{"x":5,"y":6,"z":7},{"x":6,"y":7,"z":7},{"x":6,"y":6,"z":7},{"x":7,"y":7,"z":7},{"x":7,"y":6,"z":7},{"x":5,"y":7,"z":8},{"x":5,"y":6,"z":8},{"x":6,"y":7,"z":8},{"x":6,"y":6,"z":8},{"x":7,"y":7,"z":8},{"x":7,"y":6,"z":8},{"x":5,"y":7,"z":9},{"x":5,"y":6,"z":9},{"x":6,"y":7,"z":9},{"x":6,"y":6,"z":9},{"x":7,"y":7,"z":9},{"x":7,"y":6,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":22,"y":0,"z":15},{"x":22,"y":-1,"z":15},{"x":23,"y":0,"z":15},{"x":23,"y":-1,"z":15},{"x":24,"y":0,"z":15},{"x":24,"y":-1,"z":15},{"x":25,"y":0,"z":15},{"x":25,"y":-1,"z":15},{"x":26,"y":0,"z":15},{"x":26,"y":-1,"z":15},{"x":22,"y":0,"z":16},{"x":22,"y":-1,"z":16},{"x":23,"y":0,"z":16},{"x":23,"y":-1,"z":16},{"x":24,"y":0,"z":16},{"x":24,"y":-1,"z":16},{"x":25,"y":0,"z":16},{"x":25,"y":-1,"z":16},{"x":26,"y":0,"z":16},{"x":26,"y":-1,"z":16},{"x":22,"y":0,"z":17},{"x":22,"y":-1,"z":17},{"x":23,"y":0,"z":17},{"x":23,"y":-1,"z":17},{"x":24,"y":0,"z":17},{"x":24,"y":-1,"z":17},{"x":25,"y":0,"z":17},{"x":25,"y":-1,"z":17},{"x":26,"y":0,"z":17},{"x":26,"y":-1,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":0,"z":26},{"x":5,"y":-1,"z":26},{"x":6,"y":0,"z":26},{"x":6,"y":-1,"z":26},{"x":7,"y":0,"z":26},{"x":7,"y":-1,"z":26},{"x":8,"y":0,"z":26},{"x":8,"y":-1,"z":26},{"x":9,"y":0,"z":26},{"x":9,"y":-1,"z":26},{"x":5,"y":0,"z":27},{"x":5,"y":-1,"z":27},{"x":6,"y":0,"z":27},{"x":6,"y":-1,"z":27},{"x":7,"y":0,"z":27},{"x":7,"y":-1,"z":27},{"x":8,"y":0,"z":27},{"x":8,"y":-1,"z":27},{"x":9,"y":0,"z":27},{"x":9,"y":-1,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":16,"y":1,"z":5},{"x":16,"y":0,"z":5},{"x":16,"y":-1,"z":5},{"x":16,"y":2,"z":6},{"x":16,"y":1,"z":6},{"x":16,"y":0,"z":6},{"x":16,"y":-1,"z":6},{"x":16,"y":2,"z":7},{"x":16,"y":1,"z":7},{"x":16,"y":0,"z":7},{"x":16,"y":-1,"z":7},{"x":16,"y":1,"z":8},{"x":16,"y":0,"z":8}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/388e95fc-4775-4747-8473-5329fbb8e5cc.json b/src/main/resources/dgroomdata/388e95fc-4775-4747-8473-5329fbb8e5cc.json new file mode 100644 index 0000000..1f932f7 --- /dev/null +++ b/src/main/resources/dgroomdata/388e95fc-4775-4747-8473-5329fbb8e5cc.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,0,0,0,101,0,0,0,0,0,0,0,0,1,1,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,9,0,0,101,0,0,0,0,0,0,0,0,109,109,159,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,0,0,0,101,0,0,0,0,0,0,0,0,144,0,159,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,50,0,0,101,0,0,0,0,0,0,0,0,0,144,159,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,0,0,0,101,0,0,0,0,0,0,0,0,1,1,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,109,109,98,98,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,18,188,98,98,98,139,0,0,0,0,0,139,139,98,109,109,109,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,4,44,0,0,98,98,0,0,0,0,0,0,0,0,0,101,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,44,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,101,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,4,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,0,0,98,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,18,188,98,98,98,98,0,0,0,0,0,98,98,98,98,98,98,109,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,109,109,98,98,139,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,50,0,0,101,0,0,0,0,0,0,0,0,139,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,0,0,0,101,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,144,0,0,101,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,144,0,0,101,0,0,0,0,0,0,0,0,50,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,139,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,1,1,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,44,4,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,0,144,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,109,109,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,1,1,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"388e95fc-4775-4747-8473-5329fbb8e5cc","name":"Cell","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":9,"y":-1,"z":11},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"journal-1":{"secretPoint":{"x":7,"y":-1,"z":13},"preRequisite":["superboom-1:open"],"mechType":"Journal"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":2,"z":11},{"x":11,"y":1,"z":11},{"x":11,"y":3,"z":12},{"x":11,"y":2,"z":12},{"x":11,"y":1,"z":12},{"x":11,"y":0,"z":12},{"x":11,"y":-1,"z":12},{"x":11,"y":3,"z":13},{"x":11,"y":2,"z":13},{"x":11,"y":1,"z":13},{"x":11,"y":0,"z":13},{"x":11,"y":-1,"z":13},{"x":11,"y":2,"z":14},{"x":11,"y":1,"z":14},{"x":11,"y":0,"z":14},{"x":11,"y":-1,"z":14}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json b/src/main/resources/dgroomdata/38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json new file mode 100644 index 0000000..7d51a59 --- /dev/null +++ b/src/main/resources/dgroomdata/38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,1,1,98,98,98,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,67,67,67,98,98,1,1,1,1,98,67,67,67,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,98,98,0,0,0,98,98,4,4,4,98,98,0,0,0,98,98,4,4,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,17,1,1,98,1,0,0,0,98,1,1,1,1,1,1,0,0,0,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,85,98,1,0,0,0,1,1,0,0,0,98,1,0,0,0,1,1,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,58,58,0,0,0,0,0,0,0,0,0,0,17,0,0,0,17,5,5,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,85,0,0,85,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,85,85,0,0,85,0,85,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,85,0,85,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,58,58,0,0,0,85,85,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,126,126,126,58,58,0,0,0,17,0,85,5,5,17,85,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,126,126,126,1,1,0,0,0,1,98,5,5,125,1,1,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,98,1,0,0,0,1,1,1,1,1,98,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,4,4,98,98,4,67,67,98,50,0,0,0,50,98,67,67,4,98,98,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,98,1,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,4,4,1,1,98,98,1,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,1,4,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,1,4,67,0,0,0,0,0,0,0,1,4,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,1,1,1,4,67,0,0,0,0,0,0,0,1,4,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"38affd31-fc6f-44cd-a41e-ae7d0589ba0d","name":"Steps","processorId":"default","properties":{},"mechanics":{"bat-1":{"mechType":"Secret","secretPoint":{"x":16,"y":6,"z":7},"secretType":"BAT","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":4,"y":2,"z":26},{"x":4,"y":1,"z":26},{"x":5,"y":2,"z":26},{"x":5,"y":1,"z":26},{"x":6,"y":2,"z":26},{"x":6,"y":1,"z":26},{"x":7,"y":2,"z":26},{"x":7,"y":1,"z":26},{"x":4,"y":2,"z":27},{"x":4,"y":1,"z":27},{"x":5,"y":2,"z":27},{"x":5,"y":1,"z":27},{"x":6,"y":2,"z":27},{"x":6,"y":1,"z":27},{"x":7,"y":2,"z":27},{"x":7,"y":1,"z":27},{"x":4,"y":2,"z":28},{"x":4,"y":1,"z":28},{"x":5,"y":2,"z":28},{"x":5,"y":1,"z":28},{"x":6,"y":2,"z":28},{"x":6,"y":1,"z":28},{"x":7,"y":2,"z":28},{"x":7,"y":1,"z":28}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/3acb9949-d252-4f16-9983-a1fcdc38a6cf.json b/src/main/resources/dgroomdata/3acb9949-d252-4f16-9983-a1fcdc38a6cf.json new file mode 100644 index 0000000..01172f0 --- /dev/null +++ b/src/main/resources/dgroomdata/3acb9949-d252-4f16-9983-a1fcdc38a6cf.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,0,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,98,0,0,85,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,1,1,139,50,0,0,0,0,0,0,0,0,85,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,109,109,109,109,109,98,109,109,109,109,109,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,17,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,134,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,134,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,17,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,65,65,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,98,1,1,18,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,144,0,0,0,0,0,0,0,0,0,0,0,1,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,109,1,159,98,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,139,144,139,0,0,0,0,0,139,0,139,1,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"3acb9949-d252-4f16-9983-a1fcdc38a6cf","name":"overgrown-chains","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":11,"y":16,"z":27},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":27,"y":11,"z":4},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-3,"z":11},{"x":15,"y":-4,"z":11},{"x":16,"y":-3,"z":11},{"x":16,"y":-4,"z":11},{"x":17,"y":-3,"z":11},{"x":17,"y":-4,"z":11},{"x":18,"y":-3,"z":11},{"x":18,"y":-4,"z":11},{"x":19,"y":-3,"z":11},{"x":19,"y":-4,"z":11},{"x":15,"y":-3,"z":12},{"x":15,"y":-4,"z":12},{"x":16,"y":-3,"z":12},{"x":16,"y":-4,"z":12},{"x":17,"y":-3,"z":12},{"x":17,"y":-4,"z":12},{"x":18,"y":-3,"z":12},{"x":18,"y":-4,"z":12},{"x":19,"y":-3,"z":12},{"x":19,"y":-4,"z":12},{"x":15,"y":-3,"z":13},{"x":15,"y":-4,"z":13},{"x":16,"y":-3,"z":13},{"x":16,"y":-4,"z":13},{"x":17,"y":-3,"z":13},{"x":17,"y":-4,"z":13},{"x":18,"y":-3,"z":13},{"x":18,"y":-4,"z":13},{"x":19,"y":-3,"z":13},{"x":19,"y":-4,"z":13}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4067578d-c259-4f89-8b88-a891b2decbbf.json b/src/main/resources/dgroomdata/4067578d-c259-4f89-8b88-a891b2decbbf.json new file mode 100644 index 0000000..e88e0b5 --- /dev/null +++ b/src/main/resources/dgroomdata/4067578d-c259-4f89-8b88-a891b2decbbf.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,159,98,98,0,0,0,0,0,0,0,0,0,0,0,67,1,98,1,-1,-1,-1,98,98,109,109,109,98,98,-1,-1,-1,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,159,0,98,98,0,0,0,0,0,0,0,0,0,0,0,67,98,0,0,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,0,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,159,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,0,0,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,0,98,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,67,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,18,109,109,0,0,0,0,0,0,0,0,0,67,98,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,44,98,67,0,0,0,0,0,0,0,0,50,109,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,1,109,0,0,0,0,0,0,0,0,0,67,109,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,67,67,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,43,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,50,67,98,0,0,0,0,98,139,0,0,0,0,0,98,1,0,0,0,109,98,98,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,109,1,1,18,0,0,0,67,1,101,101,101,101,98,98,-1,-1,-1,-1,-1,98,98,101,101,101,101,98,98,0,0,0,0,1,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,18,1,98,18,18,31,0,98,98,0,0,18,18,98,98,0,0,0,0,0,1,98,31,0,18,18,1,98,18,18,0,31,1,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,31,18,18,18,18,0,109,109,0,0,0,0,0,109,109,0,18,18,31,18,18,18,18,18,31,0,18,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,18,0,0,18,18,18,18,109,109,0,0,0,0,0,109,109,0,18,18,0,0,18,0,18,0,18,31,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,18,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,18,0,0,0,0,0,0,50,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,98,0,0,0,0,0,67,4,98,98,98,98,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,67,67,67,98,98,1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,98,98,109,0,0,0,0,0,0,0,0,50,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,144,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,31,0,0,0,0,0,0,0,0,109,98,0,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,31,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,0,0,109,98,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,1,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,98,109,0,0,0,0,0,0,0,0,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,98,109,0,0,0,0,0,109,98,98,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,98,109,0,0,0,0,0,109,98,98,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,98,109,0,0,0,0,0,0,0,0,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,4,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,18,18,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,0,109,98,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,31,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,31,31,18,0,0,0,0,0,0,0,109,98,0,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,50,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,43,67,0,0,0,0,43,67,139,98,98,98,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,98,98,109,0,0,0,0,0,0,0,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,67,0,0,0,0,44,43,98,98,98,1,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,98,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,50,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,31,18,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,31,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,18,0,0,18,18,0,0,109,109,0,0,0,0,0,109,109,0,0,0,18,18,0,18,18,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,0,18,18,31,109,109,0,0,0,0,0,109,109,31,18,18,18,18,18,18,0,0,31,18,18,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,18,98,98,18,18,0,31,98,98,31,31,18,18,98,1,0,0,0,0,0,98,98,18,18,31,18,98,98,0,31,0,18,98,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,18,109,98,98,0,0,0,18,98,98,0,0,0,0,98,98,0,0,0,0,0,98,1,18,0,0,18,98,98,0,0,0,18,98,98,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,18,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,1,1,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,67,67,67,109,109,109,0,0,0,0,0,109,109,109,67,67,67,98,98,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,98,98,109,0,0,0,0,0,109,98,98,1,1,1,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,98,98,109,1,0,0,0,1,109,98,98,1,1,1,98,1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,-1,-1,-1,1,1,1,1,1,1,1,98,98,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,0,98,98,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,98,98,98,1,1,1,1,1,1,1,98,98,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,98,98,18,18,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4067578d-c259-4f89-8b88-a891b2decbbf","name":"Museum","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":49,"y":-8,"z":7},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":35,"y":13,"z":12},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":32,"y":0,"z":61},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":27,"y":14,"z":10},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":30,"y":7,"z":16},{"x":30,"y":6,"z":16},{"x":30,"y":5,"z":16},{"x":30,"y":4,"z":16},{"x":30,"y":3,"z":16},{"x":30,"y":2,"z":16},{"x":30,"y":1,"z":16},{"x":30,"y":0,"z":16},{"x":30,"y":-1,"z":16},{"x":31,"y":7,"z":16},{"x":31,"y":6,"z":16},{"x":31,"y":5,"z":16},{"x":31,"y":4,"z":16},{"x":31,"y":3,"z":16},{"x":31,"y":2,"z":16},{"x":31,"y":1,"z":16},{"x":31,"y":0,"z":16},{"x":31,"y":-1,"z":16},{"x":32,"y":7,"z":16},{"x":32,"y":6,"z":16},{"x":32,"y":5,"z":16},{"x":32,"y":4,"z":16},{"x":32,"y":3,"z":16},{"x":32,"y":2,"z":16},{"x":32,"y":1,"z":16},{"x":32,"y":0,"z":16},{"x":32,"y":-1,"z":16},{"x":33,"y":7,"z":16},{"x":33,"y":6,"z":16},{"x":33,"y":5,"z":16},{"x":33,"y":4,"z":16},{"x":33,"y":3,"z":16},{"x":33,"y":2,"z":16},{"x":33,"y":1,"z":16},{"x":33,"y":0,"z":16},{"x":33,"y":-1,"z":16},{"x":34,"y":7,"z":16},{"x":34,"y":6,"z":16},{"x":34,"y":5,"z":16},{"x":34,"y":4,"z":16},{"x":34,"y":3,"z":16},{"x":34,"y":2,"z":16},{"x":34,"y":1,"z":16},{"x":34,"y":0,"z":16},{"x":34,"y":-1,"z":16}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":44,"y":-2,"z":3},{"x":45,"y":-2,"z":3},{"x":43,"y":-2,"z":4},{"x":44,"y":-2,"z":4},{"x":45,"y":-2,"z":4},{"x":43,"y":-2,"z":5},{"x":44,"y":-2,"z":5},{"x":45,"y":-2,"z":5},{"x":46,"y":-2,"z":5},{"x":43,"y":-2,"z":6},{"x":44,"y":-2,"z":6},{"x":45,"y":-2,"z":6},{"x":46,"y":-2,"z":6},{"x":43,"y":-2,"z":7},{"x":44,"y":-2,"z":7},{"x":45,"y":-2,"z":7},{"x":46,"y":-2,"z":7},{"x":43,"y":-2,"z":8},{"x":44,"y":-2,"z":8},{"x":45,"y":-2,"z":8},{"x":43,"y":-2,"z":9},{"x":44,"y":-2,"z":9},{"x":44,"y":-2,"z":10}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":32,"y":0,"z":10},"secretType":"CHEST","preRequisite":["door-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":31,"y":2,"z":58},{"x":31,"y":1,"z":58},{"x":31,"y":0,"z":58},{"x":31,"y":-1,"z":58},{"x":32,"y":3,"z":58},{"x":32,"y":2,"z":58},{"x":32,"y":1,"z":58},{"x":32,"y":0,"z":58},{"x":32,"y":-1,"z":58},{"x":33,"y":3,"z":58},{"x":33,"y":2,"z":58},{"x":33,"y":1,"z":58},{"x":33,"y":0,"z":58},{"x":33,"y":-1,"z":58}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":44,"y":13,"z":3},{"x":44,"y":12,"z":3},{"x":45,"y":13,"z":3},{"x":45,"y":12,"z":3},{"x":46,"y":13,"z":3},{"x":46,"y":12,"z":3},{"x":47,"y":13,"z":3},{"x":47,"y":12,"z":3},{"x":44,"y":13,"z":4},{"x":44,"y":12,"z":4},{"x":45,"y":13,"z":4},{"x":45,"y":12,"z":4},{"x":46,"y":13,"z":4},{"x":46,"y":12,"z":4},{"x":47,"y":13,"z":4},{"x":47,"y":12,"z":4},{"x":44,"y":13,"z":5},{"x":44,"y":12,"z":5},{"x":45,"y":13,"z":5},{"x":45,"y":12,"z":5},{"x":46,"y":13,"z":5},{"x":46,"y":12,"z":5},{"x":47,"y":13,"z":5},{"x":47,"y":12,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":36,"y":13,"z":3},{"x":36,"y":12,"z":3},{"x":37,"y":13,"z":3},{"x":37,"y":12,"z":3},{"x":38,"y":13,"z":3},{"x":38,"y":12,"z":3},{"x":39,"y":13,"z":3},{"x":39,"y":12,"z":3},{"x":36,"y":13,"z":4},{"x":36,"y":12,"z":4},{"x":37,"y":13,"z":4},{"x":37,"y":12,"z":4},{"x":38,"y":13,"z":4},{"x":38,"y":12,"z":4},{"x":39,"y":13,"z":4},{"x":39,"y":12,"z":4},{"x":36,"y":13,"z":5},{"x":36,"y":12,"z":5},{"x":37,"y":13,"z":5},{"x":37,"y":12,"z":5},{"x":38,"y":13,"z":5},{"x":38,"y":12,"z":5},{"x":39,"y":13,"z":5},{"x":39,"y":12,"z":5}]},"preRequisite":[""],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":36,"y":0,"z":3},{"x":36,"y":-1,"z":3},{"x":37,"y":0,"z":3},{"x":37,"y":-1,"z":3},{"x":38,"y":0,"z":3},{"x":38,"y":-1,"z":3},{"x":36,"y":0,"z":4},{"x":36,"y":-1,"z":4},{"x":37,"y":0,"z":4},{"x":37,"y":-1,"z":4},{"x":38,"y":0,"z":4},{"x":38,"y":-1,"z":4},{"x":36,"y":0,"z":5},{"x":36,"y":-1,"z":5},{"x":37,"y":0,"z":5},{"x":37,"y":-1,"z":5},{"x":38,"y":0,"z":5},{"x":38,"y":-1,"z":5},{"x":36,"y":0,"z":6},{"x":36,"y":-1,"z":6},{"x":37,"y":0,"z":6},{"x":37,"y":-1,"z":6},{"x":38,"y":0,"z":6},{"x":38,"y":-1,"z":6},{"x":36,"y":0,"z":7},{"x":36,"y":-1,"z":7},{"x":37,"y":0,"z":7},{"x":37,"y":-1,"z":7},{"x":38,"y":0,"z":7},{"x":38,"y":-1,"z":7}]},"preRequisite":["door-1:open"],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":43,"y":23,"z":54},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":26,"y":0,"z":3},{"x":26,"y":-1,"z":3},{"x":27,"y":0,"z":3},{"x":27,"y":-1,"z":3},{"x":28,"y":0,"z":3},{"x":28,"y":-1,"z":3},{"x":26,"y":0,"z":4},{"x":26,"y":-1,"z":4},{"x":27,"y":0,"z":4},{"x":27,"y":-1,"z":4},{"x":28,"y":0,"z":4},{"x":28,"y":-1,"z":4},{"x":26,"y":0,"z":5},{"x":26,"y":-1,"z":5},{"x":27,"y":0,"z":5},{"x":27,"y":-1,"z":5},{"x":28,"y":0,"z":5},{"x":28,"y":-1,"z":5},{"x":26,"y":0,"z":6},{"x":26,"y":-1,"z":6},{"x":27,"y":0,"z":6},{"x":27,"y":-1,"z":6},{"x":28,"y":0,"z":6},{"x":28,"y":-1,"z":6},{"x":26,"y":0,"z":7},{"x":26,"y":-1,"z":7},{"x":27,"y":0,"z":7},{"x":27,"y":-1,"z":7},{"x":28,"y":0,"z":7},{"x":28,"y":-1,"z":7}]},"preRequisite":["door-1:open"],"mechType":"Tomb"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/40fb4b64-18d7-4301-b899-0da7b1d466c1.json b/src/main/resources/dgroomdata/40fb4b64-18d7-4301-b899-0da7b1d466c1.json new file mode 100644 index 0000000..91d36ec --- /dev/null +++ b/src/main/resources/dgroomdata/40fb4b64-18d7-4301-b899-0da7b1d466c1.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,109,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,109,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,109,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,4,1,1,98,98,98,98,98,98,98,1,1,4,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,0,0,109,109,0,0,0,0,0,0,0,1,98,5,5,1,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,4,0,0,0,0,0,0,17,0,0,17,0,0,17,53,5,5,5,53,0,4,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,139,0,0,0,0,0,0,0,0,0,0,0,0,0,53,5,5,5,53,0,139,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,53,53,53,53,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,4,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,1,1,0,51,0,0,0,0,0,0,0,0,0,51,0,109,109,109,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,139,4,0,0,0,0,0,139,4,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,139,139,0,0,0,0,0,139,139,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"40fb4b64-18d7-4301-b899-0da7b1d466c1","name":"Perch","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":4,"z":2},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":20,"y":6,"z":21},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":20,"y":-9,"z":13},{"x":20,"y":-10,"z":13},{"x":21,"y":-9,"z":13},{"x":21,"y":-10,"z":13},{"x":22,"y":-9,"z":13},{"x":22,"y":-10,"z":13},{"x":23,"y":-9,"z":13},{"x":23,"y":-10,"z":13},{"x":20,"y":-9,"z":14},{"x":20,"y":-10,"z":14},{"x":21,"y":-9,"z":14},{"x":21,"y":-10,"z":14},{"x":22,"y":-9,"z":14},{"x":22,"y":-10,"z":14},{"x":23,"y":-9,"z":14},{"x":23,"y":-10,"z":14},{"x":20,"y":-9,"z":15},{"x":20,"y":-10,"z":15},{"x":21,"y":-9,"z":15},{"x":21,"y":-10,"z":15},{"x":22,"y":-9,"z":15},{"x":22,"y":-10,"z":15},{"x":23,"y":-9,"z":15},{"x":23,"y":-10,"z":15}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/41086d97-5e36-41a5-88ff-d3fb296791ce.json b/src/main/resources/dgroomdata/41086d97-5e36-41a5-88ff-d3fb296791ce.json new file mode 100644 index 0000000..490b89c --- /dev/null +++ b/src/main/resources/dgroomdata/41086d97-5e36-41a5-88ff-d3fb296791ce.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,109,50,0,0,0,0,0,0,50,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,35,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,67,144,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,35,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,67,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,35,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,67,144,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,163,5,67,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,17,0,0,0,0,0,109,98,98,0,0,0,0,109,98,0,0,0,98,98,0,0,0,98,0,0,0,0,0,98,50,17,0,0,0,0,17,163,5,67,109,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,159,159,159,159,159,159,159,159,98,4,4,67,67,4,4,4,4,0,0,0,0,4,4,67,67,109,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,159,159,1,1,1,67,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,109,109,0,0,0,109,109,0,0,0,0,109,1,4,0,0,0,0,67,4,4,1,98,67,0,0,0,4,67,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,1,67,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,139,50,0,0,0,58,58,5,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,126,126,109,4,4,17,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,139,0,0,0,0,58,58,164,164,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,126,163,5,4,4,67,67,4,0,0,0,67,67,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,163,163,17,0,0,0,17,0,0,0,50,17,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,98,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,109,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,109,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,159,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,98,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,134,5,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,0,0,0,0,0,98,109,109,109,98,98,98,98,0,44,43,98,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,5,17,0,0,18,0,17,134,134,50,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,159,159,1,98,0,0,0,0,0,98,1,1,1,1,1,1,1,159,159,159,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,4,67,0,0,0,67,4,48,4,44,67,4,4,4,67,67,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,109,109,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,35,35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,126,126,126,126,126,126,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,126,17,126,126,126,126,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,126,126,126,126,126,126,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,175,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,126,126,126,126,126,126,1,1,35,35,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,126,126,126,98,98,98,1,35,35,44,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,66,188,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,126,17,126,98,98,98,1,1,0,0,0,43,1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,126,126,126,98,98,98,1,1,0,0,0,44,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,126,126,126,126,1,1,1,1,0,0,0,159,1,1,1,1,1,1,1,1,1,1,35,134,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,126,126,126,126,1,1,1,1,144,0,0,35,1,1,1,1,1,1,1,1,1,1,1,188,188,188,188,188,188,0,0,0,0,0,5,0,0,188,188,188,126,5,5,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,126,17,126,126,1,1,1,1,1,0,35,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,126,1,1,1,1,1,0,35,1,1,1,1,1,1,1,1,1,1,1,1,134,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,35,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,4,4,4,4,0,0,0,4,67,4,101,101,101,4,4,67,4,4,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,66,188,0,0,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,1,18,106,0,1,1,1,1,1,1,1,1,1,1,159,35,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,159,159,159,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,1,1,1,1,1,1,1,159,0,98,98,0,0,0,0,188,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,4,98,98,0,0,0,0,0,98,98,23,98,23,109,109,98,0,0,0,0,0,0,0,175,0,0,0,0,0,0,0,35,35,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,98,1,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,67,67,98,98,0,0,0,0,0,98,98,67,67,4,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,18,1,1,1,1,4,67,67,4,1,98,0,0,0,0,0,98,1,4,67,67,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,0,0,0,0,0,98,98,109,109,109,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,18,1,1,1,109,0,0,134,1,1,0,0,0,0,0,1,1,134,134,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,109,109,0,0,0,0,0,109,109,0,164,5,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,1,1,1,109,0,0,0,17,0,0,0,0,0,0,0,17,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,164,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,66,66,66,0,0,1,159,44,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,66,66,0,1,159,0,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,171,0,66,18,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,171,1,1,1,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,18,0,1,1,1,1,1,1,1,109,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,126,126,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,50,0,126,126,5,5,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,175,0,0,0,0,0,0,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,136,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,17,5,5,134,17,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,5,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,134,0,0,0,0,0,0,50,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,5,5,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,134,0,0,0,0,0,0,109,98,98,98,0,0,0,0,0,0,0,0,0,0,66,0,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,164,5,188,0,0,0,0,0,5,135,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,109,98,98,98,106,0,0,0,0,0,0,0,0,0,66,0,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,164,5,17,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,17,0,0,0,0,0,0,0,0,1,0,0,188,188,188,188,126,5,5,5,66,66,0,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,188,1,188,188,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,109,109,109,109,109,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,134,0,0,0,0,0,0,109,98,98,1,98,98,98,109,0,0,0,0,0,0,0,159,159,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"41086d97-5e36-41a5-88ff-d3fb296791ce","name":"Rail-track","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":31,"y":2,"z":35},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":9,"y":-21,"z":61},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":57,"y":-4,"z":7},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"dummy-1":{"secretPoint":{"x":7,"y":-21,"z":11},"preRequisite":[],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":40,"y":1,"z":46},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":22,"y":-17,"z":54},{"x":22,"y":-18,"z":54},{"x":22,"y":-19,"z":54},{"x":22,"y":-20,"z":54},{"x":22,"y":-21,"z":54},{"x":22,"y":-17,"z":55},{"x":22,"y":-18,"z":55},{"x":22,"y":-19,"z":55},{"x":22,"y":-20,"z":55},{"x":22,"y":-21,"z":55},{"x":22,"y":-17,"z":56},{"x":22,"y":-18,"z":56},{"x":22,"y":-19,"z":56},{"x":22,"y":-20,"z":56},{"x":22,"y":-21,"z":56},{"x":22,"y":-17,"z":57},{"x":22,"y":-18,"z":57},{"x":22,"y":-19,"z":57},{"x":22,"y":-20,"z":57},{"x":22,"y":-21,"z":57},{"x":22,"y":-17,"z":58},{"x":22,"y":-18,"z":58},{"x":22,"y":-19,"z":58},{"x":22,"y":-20,"z":58},{"x":22,"y":-21,"z":58}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":56,"y":-17,"z":12},"secretType":"BAT","preRequisite":[]},"essences-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-21,"z":11},"secretType":"ESSENCE","preRequisite":["dummy-1:click"]},"chest-4":{"mechType":"Secret","secretPoint":{"x":31,"y":-6,"z":30},"secretType":"CHEST","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":58,"y":-2,"z":5},{"x":59,"y":-2,"z":5},{"x":56,"y":-2,"z":6},{"x":57,"y":-2,"z":6},{"x":58,"y":-2,"z":6},{"x":59,"y":-2,"z":6},{"x":56,"y":-2,"z":7},{"x":57,"y":-2,"z":7},{"x":58,"y":-2,"z":7},{"x":56,"y":-2,"z":8},{"x":57,"y":-2,"z":8},{"x":58,"y":-2,"z":8},{"x":56,"y":-2,"z":9},{"x":57,"y":-2,"z":9}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":28,"y":0,"z":30},"secretType":"ITEM_DROP","preRequisite":[]},"essence-2":{"mechType":"Secret","secretPoint":{"x":26,"y":0,"z":29},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":14,"y":-15,"z":4},{"x":14,"y":-16,"z":4},{"x":15,"y":-15,"z":4},{"x":15,"y":-16,"z":4},{"x":16,"y":-15,"z":4},{"x":16,"y":-16,"z":4},{"x":14,"y":-15,"z":5},{"x":14,"y":-16,"z":5},{"x":15,"y":-15,"z":5},{"x":15,"y":-16,"z":5},{"x":16,"y":-15,"z":5},{"x":16,"y":-16,"z":5},{"x":14,"y":-15,"z":6},{"x":14,"y":-16,"z":6},{"x":15,"y":-15,"z":6},{"x":15,"y":-16,"z":6},{"x":16,"y":-15,"z":6},{"x":16,"y":-16,"z":6},{"x":14,"y":-15,"z":7},{"x":14,"y":-16,"z":7},{"x":15,"y":-15,"z":7},{"x":15,"y":-16,"z":7},{"x":16,"y":-15,"z":7},{"x":16,"y":-16,"z":7}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":9} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/42029218-9142-4286-b184-e17b3734886f.json b/src/main/resources/dgroomdata/42029218-9142-4286-b184-e17b3734886f.json new file mode 100644 index 0000000..2c35902 --- /dev/null +++ b/src/main/resources/dgroomdata/42029218-9142-4286-b184-e17b3734886f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":7,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,4,44,0,0,0,0,0,0,0,139,139,0,0,0,0,0,98,139,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,109,98,98,109,109,0,0,0,98,0,0,0,0,0,0,98,98,98,98,98,98,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,4,98,1,1,1,1,1,1,1,159,159,159,159,1,1,4,44,0,0,0,0,0,0,0,98,139,0,0,0,0,0,139,98,139,0,0,0,0,139,98,0,0,0,0,0,98,139,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,98,98,98,1,1,1,1,1,1,1,159,159,159,159,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,98,98,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,98,98,98,1,1,1,98,98,98,1,159,159,159,159,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,98,98,98,1,1,1,98,98,98,1,159,159,159,159,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,109,109,0,0,0,0,98,98,98,98,98,98,109,109,109,98,98,98,1,1,144,0,44,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,159,159,159,159,159,159,1,1,98,98,109,0,0,0,98,98,109,109,0,0,0,0,98,98,109,109,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,139,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,98,98,98,4,98,44,98,98,4,0,0,0,0,0,0,0,0,0,0,0,109,109,109,139,98,98,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,109,0,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,98,98,98,98,98,98,4,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,98,98,98,98,98,4,1,1,98,0,0,0,0,0,0,0,0,0,0,0,109,1,1,159,1,98,0,0,0,0,139,4,98,98,0,0,0,0,0,0,0,0,0,0,0,0,139,139,4,98,98,98,4,98,98,101,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,98,98,109,109,109,98,98,98,0,98,98,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,98,98,98,98,98,98,1,1,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,98,0,0,0,0,0,4,98,98,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,98,98,98,98,98,98,98,1,1,1,98,0,0,0,98,98,98,44,44,0,44,98,1,1,1,1,98,109,109,109,109,109,98,98,98,109,44,144,0,44,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,109,98,98,98,98,98,1,1,1,98,0,0,0,98,1,159,159,159,159,159,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,159,159,159,159,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,109,98,98,98,98,109,109,98,98,98,0,0,0,98,98,98,98,109,109,109,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,44,144,0,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,109,98,109,139,139,0,0,0,0,98,98,0,0,0,0,0,0,0,0,98,98,0,109,1,1,1,1,98,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,139,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,109,33,23,33,109,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,139,98,0,109,1,1,1,1,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,109,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,139,139,98,4,98,98,98,98,98,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,159,98,98,4,159,159,159,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,154,0,44,98,98,0,0,154,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,154,0,98,109,109,109,0,154,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,98,98,0,98,109,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,1,98,98,98,159,159,159,4,98,4,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,144,0,0,0,144,0,109,1,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,98,98,0,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"42029218-9142-4286-b184-e17b3734886f","name":"Gravel","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":36,"y":-1,"z":12},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":64,"y":-1,"z":27},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":34,"y":2,"z":11},{"x":34,"y":1,"z":11},{"x":34,"y":0,"z":11},{"x":34,"y":-1,"z":11},{"x":34,"y":2,"z":12},{"x":34,"y":1,"z":12},{"x":34,"y":0,"z":12},{"x":34,"y":-1,"z":12},{"x":34,"y":2,"z":13},{"x":34,"y":1,"z":13},{"x":34,"y":0,"z":13},{"x":34,"y":-1,"z":13}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":89,"y":-1,"z":10},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":68,"y":17,"z":13},"secretType":"ITEM_DROP","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":35,"y":22,"z":14},"secretType":"BAT","preRequisite":[]},"essence-2":{"mechType":"Secret","secretPoint":{"x":67,"y":17,"z":15},"secretType":"ESSENCE","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":16,"y":0,"z":6},{"x":16,"y":-1,"z":6},{"x":17,"y":0,"z":6},{"x":17,"y":-1,"z":6},{"x":18,"y":0,"z":6},{"x":18,"y":-1,"z":6},{"x":16,"y":0,"z":7},{"x":16,"y":-1,"z":7},{"x":17,"y":0,"z":7},{"x":17,"y":-1,"z":7},{"x":18,"y":0,"z":7},{"x":18,"y":-1,"z":7},{"x":16,"y":0,"z":8},{"x":16,"y":-1,"z":8},{"x":17,"y":0,"z":8},{"x":17,"y":-1,"z":8},{"x":18,"y":0,"z":8},{"x":18,"y":-1,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":93,"y":-1,"z":4},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":39,"y":19,"z":12},{"x":39,"y":18,"z":12},{"x":40,"y":19,"z":12},{"x":40,"y":18,"z":12},{"x":41,"y":19,"z":12},{"x":41,"y":18,"z":12},{"x":42,"y":19,"z":12},{"x":42,"y":18,"z":12},{"x":39,"y":19,"z":13},{"x":39,"y":18,"z":13},{"x":40,"y":19,"z":13},{"x":40,"y":18,"z":13},{"x":41,"y":19,"z":13},{"x":41,"y":18,"z":13},{"x":42,"y":19,"z":13},{"x":42,"y":18,"z":13},{"x":39,"y":19,"z":14},{"x":39,"y":18,"z":14},{"x":40,"y":19,"z":14},{"x":40,"y":18,"z":14},{"x":41,"y":19,"z":14},{"x":41,"y":18,"z":14},{"x":42,"y":19,"z":14},{"x":42,"y":18,"z":14}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json b/src/main/resources/dgroomdata/43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json new file mode 100644 index 0000000..29c6834 --- /dev/null +++ b/src/main/resources/dgroomdata/43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":17,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,44,1,98,98,101,0,1,98,101,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,67,0,109,0,0,0,0,0,0,98,98,98,1,0,0,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,98,98,98,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,1,1,1,1,98,1,0,0,0,0,0,1,98,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,1,1,1,1,98,0,0,0,0,0,0,0,98,98,50,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,98,1,159,159,159,98,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,98,98,0,144,0,1,4,0,0,0,0,0,1,98,1,1,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,0,0,0,98,50,0,0,0,0,0,0,98,98,1,98,-1,-1,-1,-1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,109,109,139,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,98,0,0,0,0,0,0,0,139,139,0,0,0,0,50,139,139,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,98,0,0,0,0,0,0,0,98,98,44,0,0,44,109,98,98,109,44,44,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,0,0,0,0,0,50,98,98,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,139,0,0,0,0,0,0,0,139,98,0,0,0,0,0,98,139,0,0,0,0,50,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,139,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,0,0,139,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,67,67,4,4,1,1,0,0,0,0,0,98,98,67,67,4,4,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"43c74bd0-77f6-4a2b-8edb-c227a72abf0f","name":"Archway","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":29,"y":0,"z":2},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":4,"y":12,"z":11},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":19,"y":19,"z":55},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":19,"y":19,"z":17},{"x":19,"y":18,"z":17},{"x":20,"y":19,"z":17},{"x":20,"y":18,"z":17},{"x":21,"y":19,"z":17},{"x":21,"y":18,"z":17},{"x":22,"y":19,"z":17},{"x":22,"y":18,"z":17},{"x":19,"y":19,"z":18},{"x":19,"y":18,"z":18},{"x":20,"y":19,"z":18},{"x":20,"y":18,"z":18},{"x":21,"y":19,"z":18},{"x":21,"y":18,"z":18},{"x":22,"y":19,"z":18},{"x":22,"y":18,"z":18},{"x":19,"y":19,"z":19},{"x":19,"y":18,"z":19},{"x":20,"y":19,"z":19},{"x":20,"y":18,"z":19},{"x":21,"y":19,"z":19},{"x":21,"y":18,"z":19},{"x":22,"y":19,"z":19},{"x":22,"y":18,"z":19}]},"preRequisite":[],"mechType":"OnewayDoor"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":8,"y":19,"z":17},{"x":8,"y":18,"z":17},{"x":9,"y":19,"z":17},{"x":9,"y":18,"z":17},{"x":10,"y":19,"z":17},{"x":10,"y":18,"z":17},{"x":11,"y":19,"z":17},{"x":11,"y":18,"z":17},{"x":8,"y":19,"z":18},{"x":8,"y":18,"z":18},{"x":9,"y":19,"z":18},{"x":9,"y":18,"z":18},{"x":10,"y":19,"z":18},{"x":10,"y":18,"z":18},{"x":11,"y":19,"z":18},{"x":11,"y":18,"z":18},{"x":8,"y":19,"z":19},{"x":8,"y":18,"z":19},{"x":9,"y":19,"z":19},{"x":9,"y":18,"z":19},{"x":10,"y":19,"z":19},{"x":10,"y":18,"z":19},{"x":11,"y":19,"z":19},{"x":11,"y":18,"z":19}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":13,"y":14,"z":51},{"x":13,"y":13,"z":51},{"x":14,"y":14,"z":51},{"x":14,"y":13,"z":51},{"x":13,"y":14,"z":52},{"x":13,"y":13,"z":52},{"x":14,"y":14,"z":52},{"x":14,"y":13,"z":52},{"x":13,"y":14,"z":53},{"x":13,"y":13,"z":53},{"x":14,"y":14,"z":53},{"x":14,"y":13,"z":53},{"x":13,"y":14,"z":54},{"x":13,"y":13,"z":54},{"x":14,"y":14,"z":54},{"x":14,"y":13,"z":54}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":14,"z":51},{"x":8,"y":13,"z":51},{"x":9,"y":14,"z":51},{"x":9,"y":13,"z":51},{"x":8,"y":14,"z":52},{"x":8,"y":13,"z":52},{"x":9,"y":14,"z":52},{"x":9,"y":13,"z":52},{"x":8,"y":14,"z":53},{"x":8,"y":13,"z":53},{"x":9,"y":14,"z":53},{"x":9,"y":13,"z":53},{"x":8,"y":14,"z":54},{"x":8,"y":13,"z":54},{"x":9,"y":14,"z":54},{"x":9,"y":13,"z":54}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":24,"y":0,"z":12},{"x":25,"y":1,"z":12},{"x":25,"y":0,"z":12},{"x":25,"y":-1,"z":12},{"x":26,"y":2,"z":12},{"x":26,"y":1,"z":12},{"x":26,"y":0,"z":12},{"x":26,"y":-1,"z":12},{"x":27,"y":1,"z":12},{"x":27,"y":0,"z":12}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/44d9b135-d2ca-4350-969e-6e9c34af2fe6.json b/src/main/resources/dgroomdata/44d9b135-d2ca-4350-969e-6e9c34af2fe6.json new file mode 100644 index 0000000..d38915d --- /dev/null +++ b/src/main/resources/dgroomdata/44d9b135-d2ca-4350-969e-6e9c34af2fe6.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,0,0,0,159,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,1,159,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,1,159,109,109,144,0,0,0,0,109,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,109,109,126,126,0,0,0,109,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,126,126,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,109,1,98,109,109,109,109,0,0,0,0,0,0,144,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,109,98,98,98,98,98,109,0,0,0,0,0,0,0,1,1,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,109,98,98,98,98,98,109,0,0,0,0,0,50,109,109,0,0,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,98,98,98,98,109,0,0,0,0,0,0,109,109,0,144,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,109,109,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,109,109,0,0,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,159,1,1,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,0,0,109,0,0,98,98,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,44,44,98,44,44,98,98,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,44,44,98,44,44,98,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,159,1,159,159,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"44d9b135-d2ca-4350-969e-6e9c34af2fe6","name":"Cage","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":11,"y":2,"z":13},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4538898f-8e79-4d53-aae6-08e4df6abb61.json b/src/main/resources/dgroomdata/4538898f-8e79-4d53-aae6-08e4df6abb61.json new file mode 100644 index 0000000..062a086 --- /dev/null +++ b/src/main/resources/dgroomdata/4538898f-8e79-4d53-aae6-08e4df6abb61.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,159,109,109,43,43,109,0,0,85,118,0,0,0,0,0,118,0,0,0,109,98,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,109,43,109,50,0,85,0,0,0,0,0,0,0,0,0,0,109,98,0,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,43,1,1,43,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,4,159,109,85,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,85,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,164,5,5,134,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,109,0,0,164,5,134,134,0,0,0,0,0,0,136,136,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,43,109,164,164,85,0,0,0,85,0,0,0,136,136,0,0,0,17,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,109,0,0,0,0,0,53,53,5,164,5,5,5,0,0,0,0,0,0,118,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,139,0,0,0,0,0,0,0,53,5,5,5,164,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,0,0,0,0,0,5,164,164,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,85,0,0,0,85,0,0,0,0,0,0,0,0,17,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,109,109,0,0,0,109,109,0,0,0,0,0,0,0,50,109,109,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,109,0,0,0,98,98,0,0,0,0,0,0,0,0,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,0,0,0,98,98,139,139,0,0,0,0,0,0,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,159,159,1,98,67,67,4,4,4,67,67,67,98,1,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4538898f-8e79-4d53-aae6-08e4df6abb61","name":"Scaffolding","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":26,"y":12,"z":3},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":13,"y":12,"z":23},"secretType":"ITEM_DROP","preRequisite":[]}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4b5f4983-0453-4402-821c-804f092d1ecd.json b/src/main/resources/dgroomdata/4b5f4983-0453-4402-821c-804f092d1ecd.json new file mode 100644 index 0000000..7527025 --- /dev/null +++ b/src/main/resources/dgroomdata/4b5f4983-0453-4402-821c-804f092d1ecd.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,98,98,1,0,126,126,0,5,164,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,98,98,1,17,5,136,0,164,164,17,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,109,98,98,98,1,5,53,53,5,5,5,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,17,17,65,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,1,1,1,1,1,0,0,0,0,0,0,17,17,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,98,98,1,144,98,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,98,98,0,0,98,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,109,0,0,98,98,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,98,0,0,98,98,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,5,5,5,53,53,5,1,98,44,0,44,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,17,5,136,0,0,50,17,1,98,98,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,136,5,0,0,0,0,1,98,98,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,44,98,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4b5f4983-0453-4402-821c-804f092d1ecd","name":"cobble-wall-pillar","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":13,"y":-9,"z":18},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":29,"y":-10,"z":13},"secretType":"CHEST","preRequisite":["door-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":27,"y":-8,"z":12},{"x":27,"y":-9,"z":12},{"x":27,"y":-10,"z":12},{"x":27,"y":-8,"z":13},{"x":27,"y":-9,"z":13},{"x":27,"y":-10,"z":13},{"x":27,"y":-8,"z":14},{"x":27,"y":-9,"z":14},{"x":27,"y":-10,"z":14}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":21,"y":-1,"z":24},"preRequisite":[""],"triggering":"door-1"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":13,"y":-9,"z":15},{"x":13,"y":-10,"z":15},{"x":14,"y":-9,"z":15},{"x":14,"y":-10,"z":15},{"x":15,"y":-9,"z":15},{"x":15,"y":-10,"z":15},{"x":16,"y":-9,"z":15},{"x":16,"y":-10,"z":15},{"x":13,"y":-9,"z":16},{"x":13,"y":-10,"z":16},{"x":14,"y":-9,"z":16},{"x":14,"y":-10,"z":16},{"x":15,"y":-9,"z":16},{"x":15,"y":-10,"z":16},{"x":16,"y":-9,"z":16},{"x":16,"y":-10,"z":16}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4e8087d2-0c64-4558-b4ff-4be94275a320.json b/src/main/resources/dgroomdata/4e8087d2-0c64-4558-b4ff-4be94275a320.json new file mode 100644 index 0000000..90951ae --- /dev/null +++ b/src/main/resources/dgroomdata/4e8087d2-0c64-4558-b4ff-4be94275a320.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,139,139,0,0,0,139,139,0,0,0,0,0,139,139,139,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,139,139,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,-1,-1,-1,-1,1,4,4,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,162,162,162,162,1,98,4,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,50,1,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,50,1,98,1,0,0,0,0,0,159,1,1,139,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,0,0,0,0,109,1,4,0,0,0,0,0,159,1,1,1,1,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4e8087d2-0c64-4558-b4ff-4be94275a320","name":"Logs","processorId":"default","properties":{},"mechanics":{"dummy-2":{"secretPoint":{"x":10,"y":8,"z":25},"preRequisite":[],"mechType":"Dummy"},"dummy-1":{"secretPoint":{"x":2,"y":0,"z":24},"preRequisite":["door-1:open"],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":26,"y":14,"z":29},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":2,"z":20},{"x":6,"y":1,"z":20},{"x":6,"y":0,"z":20},{"x":6,"y":-1,"z":20},{"x":7,"y":2,"z":20},{"x":7,"y":1,"z":20},{"x":7,"y":0,"z":20},{"x":7,"y":-1,"z":20},{"x":8,"y":2,"z":20},{"x":8,"y":1,"z":20},{"x":8,"y":0,"z":20},{"x":8,"y":-1,"z":20},{"x":9,"y":2,"z":20},{"x":9,"y":1,"z":20},{"x":9,"y":0,"z":20},{"x":9,"y":-1,"z":20}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"chests-1":{"mechType":"Secret","secretPoint":{"x":2,"y":0,"z":25},"secretType":"CHEST","preRequisite":["dummy-1:click"]},"chests-2":{"mechType":"Secret","secretPoint":{"x":10,"y":8,"z":24},"secretType":"CHEST","preRequisite":["dummy-2:click"]}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json b/src/main/resources/dgroomdata/4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json new file mode 100644 index 0000000..2f395bf --- /dev/null +++ b/src/main/resources/dgroomdata/4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,98,98,98,0,0,0,0,0,0,0,0,50,98,98,4,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,18,4,98,98,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,67,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,18,67,4,4,4,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,50,0,0,0,0,0,0,0,0,98,98,4,67,67,67,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,18,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,4,67,67,67,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,67,67,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,18,0,0,0,0,0,0,0,0,98,98,4,1,101,101,0,101,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,50,0,0,0,0,0,0,0,0,1,98,4,18,18,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,18,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,0,18,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,98,50,0,0,0,0,0,0,0,0,0,0,0,18,67,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,18,0,98,98,98,0,0,0,0,0,0,0,0,0,98,98,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4ed557b1-553c-4ecc-b3c1-88dd9da6d33c","name":"Dome","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":8,"z":28},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":25,"y":5,"z":22},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":26,"y":11,"z":21},{"x":26,"y":10,"z":21},{"x":26,"y":9,"z":21},{"x":26,"y":8,"z":21},{"x":26,"y":7,"z":21},{"x":27,"y":11,"z":21},{"x":27,"y":10,"z":21},{"x":27,"y":9,"z":21},{"x":27,"y":8,"z":21},{"x":27,"y":7,"z":21},{"x":28,"y":11,"z":21},{"x":28,"y":10,"z":21},{"x":28,"y":9,"z":21},{"x":28,"y":8,"z":21},{"x":28,"y":7,"z":21}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":26,"y":3,"z":26},"secretType":"BAT","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":3,"y":0,"z":4},{"x":3,"y":-1,"z":4},{"x":4,"y":0,"z":4},{"x":4,"y":-1,"z":4},{"x":5,"y":0,"z":4},{"x":5,"y":-1,"z":4},{"x":3,"y":0,"z":5},{"x":3,"y":-1,"z":5},{"x":4,"y":0,"z":5},{"x":4,"y":-1,"z":5},{"x":5,"y":0,"z":5},{"x":5,"y":-1,"z":5},{"x":3,"y":0,"z":6},{"x":3,"y":-1,"z":6},{"x":4,"y":0,"z":6},{"x":4,"y":-1,"z":6},{"x":5,"y":0,"z":6},{"x":5,"y":-1,"z":6},{"x":3,"y":0,"z":7},{"x":3,"y":-1,"z":7},{"x":4,"y":0,"z":7},{"x":4,"y":-1,"z":7},{"x":5,"y":0,"z":7},{"x":5,"y":-1,"z":7}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":0,"z":25},{"x":3,"y":-1,"z":25},{"x":4,"y":0,"z":25},{"x":4,"y":-1,"z":25},{"x":5,"y":0,"z":25},{"x":5,"y":-1,"z":25},{"x":3,"y":0,"z":26},{"x":3,"y":-1,"z":26},{"x":4,"y":0,"z":26},{"x":4,"y":-1,"z":26},{"x":5,"y":0,"z":26},{"x":5,"y":-1,"z":26},{"x":3,"y":0,"z":27},{"x":3,"y":-1,"z":27},{"x":4,"y":0,"z":27},{"x":4,"y":-1,"z":27},{"x":5,"y":0,"z":27},{"x":5,"y":-1,"z":27},{"x":3,"y":0,"z":28},{"x":3,"y":-1,"z":28},{"x":4,"y":0,"z":28},{"x":4,"y":-1,"z":28},{"x":5,"y":0,"z":28},{"x":5,"y":-1,"z":28}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json b/src/main/resources/dgroomdata/4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json new file mode 100644 index 0000000..1520ae5 --- /dev/null +++ b/src/main/resources/dgroomdata/4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,1,1,4,67,50,0,0,0,0,109,109,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,0,0,0,0,0,0,4,67,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,67,4,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,-1,-1,-1,0,0,0,1,1,4,67,0,0,0,0,0,98,98,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,67,67,67,67,4,67,67,1,1,1,4,33,33,23,33,33,98,159,44,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,4,67,67,67,4,4,4,4,4,4,1,1,1,1,98,159,44,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,144,0,0,44,98,50,0,0,0,0,5,5,4,4,1,1,1,1,98,159,44,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,5,5,4,1,1,1,1,1,98,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,109,144,0,0,67,1,1,1,1,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,159,159,159,159,1,1,1,1,1,-1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,109,144,0,44,4,1,1,1,1,1,1,98,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,4,4,67,67,1,-1,-1,-1,-1],[-1,-1,-1,-1,50,17,0,0,0,17,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,0,0,0,4,67,67,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,98,1,4,109,109,109,109,109,4,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,4,1,98,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,4,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,109,109,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4f8be93c-f3e7-47ca-9e0d-87261f5fc386","name":"Slabs","processorId":"default","properties":{},"mechanics":{"dummy-1":{"secretPoint":{"x":24,"y":15,"z":4},"preRequisite":[],"mechType":"Dummy"},"chests-1":{"mechType":"Secret","secretPoint":{"x":23,"y":15,"z":4},"secretType":"CHEST","preRequisite":["dummy-1:click"]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":8,"y":8,"z":6},{"x":8,"y":7,"z":6},{"x":9,"y":8,"z":6},{"x":9,"y":7,"z":6},{"x":10,"y":8,"z":6},{"x":10,"y":7,"z":6},{"x":11,"y":8,"z":6},{"x":11,"y":7,"z":6},{"x":8,"y":8,"z":7},{"x":8,"y":7,"z":7},{"x":9,"y":8,"z":7},{"x":9,"y":7,"z":7},{"x":10,"y":8,"z":7},{"x":10,"y":7,"z":7},{"x":11,"y":8,"z":7},{"x":11,"y":7,"z":7}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":0,"z":6},{"x":8,"y":-1,"z":6},{"x":9,"y":0,"z":6},{"x":9,"y":-1,"z":6},{"x":10,"y":0,"z":6},{"x":10,"y":-1,"z":6},{"x":8,"y":0,"z":7},{"x":8,"y":-1,"z":7},{"x":9,"y":0,"z":7},{"x":9,"y":-1,"z":7},{"x":10,"y":0,"z":7},{"x":10,"y":-1,"z":7},{"x":8,"y":0,"z":8},{"x":8,"y":-1,"z":8},{"x":9,"y":0,"z":8},{"x":9,"y":-1,"z":8},{"x":10,"y":0,"z":8},{"x":10,"y":-1,"z":8},{"x":8,"y":0,"z":9},{"x":8,"y":-1,"z":9},{"x":9,"y":0,"z":9},{"x":9,"y":-1,"z":9},{"x":10,"y":0,"z":9},{"x":10,"y":-1,"z":9}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/4ffce449-eab8-470b-bc8c-d30507248fc2.json b/src/main/resources/dgroomdata/4ffce449-eab8-470b-bc8c-d30507248fc2.json new file mode 100644 index 0000000..985f979 --- /dev/null +++ b/src/main/resources/dgroomdata/4ffce449-eab8-470b-bc8c-d30507248fc2.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":273,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,35,109,0,0,0,0,0,0,0,0,0,109,35,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,35,109,0,0,0,0,0,0,0,0,0,109,35,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,35,35,35,109,0,0,0,0,0,0,0,0,0,109,35,35,35,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,35,35,35,109,0,0,0,0,0,0,0,0,0,109,35,35,35,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,35,109,0,0,0,0,0,0,0,0,0,109,35,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,35,109,0,0,0,0,0,0,0,0,0,109,35,35,35,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,109,109,109,109,67,44,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,1,1,1,4,4,67,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,1,1,1,4,4,4,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,109,109,98,98,98,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,44,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,44,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,109,109,109,98,0,0,0,0,0,0,0,109,134,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,139,0,0,0,0,0,0,0,0,0,134,0,0,0,0,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,17,0,0,0,17,0,0,0,0,0,0,0,0,0,0,17,134,0,0,0,17,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,17,0,126,126,17,0,0,0,0,0,0,0,0,0,0,17,0,0,0,17,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,144,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,144,0,0,44,1,0,0,0,0,0,0,0,1,109,0,0,0,44,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,0,0,144,44,1,0,0,0,0,0,0,0,1,101,101,101,101,101,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,159,159,159,144,0,0,0,0,0,0,0,-1,0,0,50,0,0,69,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,50,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,-1,0,0,0,188,0,69,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,98,98,109,109,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,98,98,98,98,98,98,109,98,0,0,0,0,0,0,0,1,109,109,98,98,98,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,109,109,109,0,0,0,0,0,0,0,0,0,109,109,109,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"4ffce449-eab8-470b-bc8c-d30507248fc2","name":"Red-Blue","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":5,"y":20,"z":40},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":26,"y":0,"z":58},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":26,"y":-1,"z":55},"preRequisite":[""],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":20,"y":3,"z":57},{"x":20,"y":2,"z":57},{"x":20,"y":1,"z":57},{"x":20,"y":0,"z":57},{"x":20,"y":-1,"z":57},{"x":20,"y":3,"z":58},{"x":20,"y":2,"z":58},{"x":20,"y":1,"z":58},{"x":20,"y":0,"z":58},{"x":20,"y":-1,"z":58},{"x":20,"y":3,"z":59},{"x":20,"y":2,"z":59},{"x":20,"y":1,"z":59},{"x":20,"y":0,"z":59},{"x":20,"y":-1,"z":59},{"x":20,"y":3,"z":60},{"x":20,"y":2,"z":60},{"x":20,"y":1,"z":60},{"x":20,"y":0,"z":60},{"x":20,"y":-1,"z":60}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":9,"y":16,"z":61},"secretType":"ITEM_DROP","preRequisite":[]},"essence-1":{"mechType":"Secret","secretPoint":{"x":16,"y":13,"z":80},"secretType":"ESSENCE","preRequisite":[]},"prince-1":{"secretPoint":{"offsetPointList":[{"x":23,"y":14,"z":57},{"x":23,"y":13,"z":57},{"x":24,"y":14,"z":57},{"x":24,"y":13,"z":57},{"x":25,"y":14,"z":57},{"x":25,"y":13,"z":57},{"x":23,"y":14,"z":58},{"x":23,"y":13,"z":58},{"x":24,"y":14,"z":58},{"x":24,"y":13,"z":58},{"x":25,"y":14,"z":58},{"x":25,"y":13,"z":58},{"x":23,"y":14,"z":59},{"x":23,"y":13,"z":59},{"x":24,"y":14,"z":59},{"x":24,"y":13,"z":59},{"x":25,"y":14,"z":59},{"x":25,"y":13,"z":59},{"x":23,"y":14,"z":60},{"x":23,"y":13,"z":60},{"x":24,"y":14,"z":60},{"x":24,"y":13,"z":60},{"x":25,"y":14,"z":60},{"x":25,"y":13,"z":60}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/5000be9d-3081-4a5e-8563-dd826705663a.json b/src/main/resources/dgroomdata/5000be9d-3081-4a5e-8563-dd826705663a.json new file mode 100644 index 0000000..2e9868f --- /dev/null +++ b/src/main/resources/dgroomdata/5000be9d-3081-4a5e-8563-dd826705663a.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,109,0,0,0,0,0,109,4,4,4,4,4,4,4,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,109,0,0,0,0,0,109,1,4,4,4,4,4,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,109,1,1,4,4,4,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,98,98,0,0,0,98,98,1,1,1,1,4,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,98,0,0,0,98,1,1,1,1,1,4,4,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,98,98,0,0,0,98,98,98,98,98,1,4,4,4,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,1,0,1,1,0,0,0,1,1,1,1,98,1,4,4,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,1,1,0,0,0,1,1,1,1,98,1,4,4,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,1,1,0,0,0,1,1,159,1,98,1,4,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,7,98,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,0,98,0,0,98,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,1,-1,-1,-1],[-1,-1,-1,0,0,0,50,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,4,4,4,98,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,98,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,4,4,4,98,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,98,1,-1,-1,-1],[-1,-1,-1,0,0,0,50,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,4,4,4,98,1,-1,-1,-1],[-1,-1,-1,0,98,0,0,98,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,1,-1,-1,-1],[-1,-1,-1,98,98,109,109,98,98,98,98,98,0,0,0,0,0,0,0,0,7,7,1,98,1,0,0,1,98,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,1,1,0,0,0,1,1,1,0,-1,0,0,0,0,98,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,1,1,0,0,0,1,1,1,0,-1,0,0,0,0,109,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,1,1,-1,-1,-1,1,1,1,0,-1,0,0,0,0,109,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,98,98,42,42,42,1,98,98,98,98,1,0,0,1,98,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,98,98,98,98,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,1,0,0,0,0,0,1,98,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,18,0,0,0,0,0,18,98,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"5000be9d-3081-4a5e-8563-dd826705663a","name":"puzzle-tictactoe","processorId":"puzzle_tictactoe_solver","properties":{"board":{"offsetPointList":[{"x":16,"y":2,"z":23},{"x":16,"y":1,"z":23},{"x":16,"y":0,"z":23},{"x":17,"y":2,"z":23},{"x":17,"y":1,"z":23},{"x":17,"y":0,"z":23},{"x":18,"y":2,"z":23},{"x":18,"y":1,"z":23},{"x":18,"y":0,"z":23}]}},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":26,"y":-1,"z":22},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":26,"y":3,"z":18},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":23,"y":1,"z":21},{"x":23,"y":0,"z":21},{"x":23,"y":1,"z":22},{"x":23,"y":0,"z":22},{"x":23,"y":1,"z":23},{"x":23,"y":0,"z":23}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json b/src/main/resources/dgroomdata/54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json new file mode 100644 index 0000000..22552a7 --- /dev/null +++ b/src/main/resources/dgroomdata/54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,139,139,0,0,0,0,0,0,0,0,0,139,139,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,0,139,139,0,0,0,139,139,139,0,0,0,139,139,0,98,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,139,0,0,0,0,0,0,0,139,1,139,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,139,139,0,0,0,0,0,0,0,0,0,139,139,139,0,0,0,0,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,139,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,139,139,0,0,0,0,0,139,139,0,0,-1,0,0,139,139,0,0,0,0,0,139,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,44,44,44,98,98,98,0,-1,-1,-1,0,98,98,98,44,44,44,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,44,44,44,98,1,98,0,-1,-1,-1,0,98,1,1,159,159,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,98,98,1,98,1,-1,-1,-1,1,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,4,4,1,1,4,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"54008e69-d31e-4ed2-9ad0-870a3ad5ee1a","name":"Banners","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":2,"z":28},"secretType":"CHEST","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-1,"z":19},{"x":16,"y":0,"z":19},{"x":16,"y":-1,"z":19},{"x":17,"y":-1,"z":19},{"x":15,"y":0,"z":20},{"x":15,"y":-1,"z":20},{"x":16,"y":0,"z":20},{"x":16,"y":-1,"z":20},{"x":17,"y":0,"z":20},{"x":17,"y":-1,"z":20},{"x":15,"y":0,"z":21},{"x":15,"y":-1,"z":21},{"x":16,"y":0,"z":21},{"x":16,"y":-1,"z":21},{"x":17,"y":0,"z":21},{"x":17,"y":-1,"z":21},{"x":15,"y":0,"z":22},{"x":15,"y":-1,"z":22},{"x":16,"y":0,"z":22},{"x":16,"y":-1,"z":22},{"x":17,"y":0,"z":22},{"x":17,"y":-1,"z":22}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/54aaf168-7039-48dc-99a3-8d1f02d79097.json b/src/main/resources/dgroomdata/54aaf168-7039-48dc-99a3-8d1f02d79097.json new file mode 100644 index 0000000..f9bee1e --- /dev/null +++ b/src/main/resources/dgroomdata/54aaf168-7039-48dc-99a3-8d1f02d79097.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,98,98,109,109,98,98,98,98,4,98,98,98,98,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,139,98,5,5,98,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,5,5,5,98,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,5,5,5,98,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,134,134,5,4,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,134,134,0,0,0,0,0,0,0,139,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,134,134,0,0,0,0,0,0,0,0,4,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,134,134,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,164,164,5,164,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,109,67,109,109,109,109,0,0,0,0,0,164,5,164,164,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,1,98,44,44,44,44,98,0,0,0,0,0,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,44,44,98,98,98,0,0,0,0,0,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,1,98,98,109,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,1,98,98,1,109,0,0,0,0,0,0,0,144,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,1,1,1,109,0,0,0,0,0,0,0,0,51,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,98,1,1,0,0,0,0,0,0,0,0,144,51,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,98,98,1,98,109,0,0,0,0,0,0,0,144,51,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,98,1,98,109,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"54aaf168-7039-48dc-99a3-8d1f02d79097","name":"basement","processorId":"default","properties":{},"mechanics":{"essence-1":{"mechType":"Secret","secretPoint":{"x":6,"y":-4,"z":26},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/5aef2a82-42a3-495a-9e72-63a9b611e1cb.json b/src/main/resources/dgroomdata/5aef2a82-42a3-495a-9e72-63a9b611e1cb.json new file mode 100644 index 0000000..75760ac --- /dev/null +++ b/src/main/resources/dgroomdata/5aef2a82-42a3-495a-9e72-63a9b611e1cb.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,18,0,0,0,0,0,159,1,0,0,0,0,0,0,7,1,1,98,1,98,98,1,1,1,1,1,98,139,0,0,18,0,0,0,0,0,0,139,139,0,50,0,0,0,0,0,0,0,139,139,18,0,0,0,18,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,1,1,1,0,0,0,0,0,7,1,1,98,98,1,1,1,1,1,1,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,1,1,1,188,0,0,0,0,7,1,1,98,3,1,1,1,1,1,4,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,134,0,0,0,159,1,1,1,1,0,0,126,126,7,1,1,98,3,3,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,159,1,1,1,1,1,126,126,126,3,1,1,1,98,3,3,1,1,1,1,1,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,3,3,3,3,3,3,3,3,1,98,3,3,1,4,4,1,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,1,1,1,1,3,3,3,3,3,3,3,3,98,98,98,98,1,1,1,1,1,1,139,188,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,139,98,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,1,1,1,3,3,3,3,3,3,3,3,98,98,98,98,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,1,1,1,3,3,3,3,3,3,3,3,98,98,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,1,3,3,3,3,3,3,3,3,98,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,17,0,159,3,3,3,3,3,3,3,98,1,1,1,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,7,3,3,3,3,3,3,3,3,1,98,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,7,3,3,3,3,3,3,3,3,1,1,1,0,0,0,0,0,1,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,35,1,3,3,3,3,3,3,3,3,1,98,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,35,1,1,3,3,3,3,3,3,3,98,98,1,1,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,50,0,0,0,0,0,0,35,1,1,3,3,3,3,3,3,3,98,98,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,35,1,3,3,3,3,3,3,3,98,1,1,1,1,1,1,1,1,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,35,3,1,3,3,3,3,3,98,98,98,98,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,1,98,98,98,98,1,1,1,1,1,98,139,188,18,0,0,0,0,0,0,0,98,139,18,0,0,0,0,0,0,0,0,139,98,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,159,159,159,159,0,0,0,0,126,3,3,3,3,1,1,98,98,3,3,1,4,4,1,1,67,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,1,1,1,159,0,0,0,0,0,126,126,3,3,1,1,98,3,3,3,3,1,1,4,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,0,0,0,0,0,126,126,3,3,1,98,3,3,3,3,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,126,126,3,1,98,3,1,3,1,1,1,1,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,126,126,35,98,98,3,3,1,1,1,4,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,159,0,50,0,0,0,0,0,7,1,98,1,1,98,3,1,1,4,3,98,139,0,50,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,50,139,98,18,0,0,18,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"5aef2a82-42a3-495a-9e72-63a9b611e1cb","name":"Balcony","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":21,"y":-28,"z":29},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-1,"z":16},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":14,"y":-19,"z":9},"secretType":"ITEM_DROP","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-10,"z":26},"secretType":"BAT","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":2,"z":14},{"x":26,"y":2,"z":14},{"x":27,"y":2,"z":14},{"x":28,"y":2,"z":14},{"x":25,"y":2,"z":15},{"x":26,"y":2,"z":15},{"x":27,"y":2,"z":15},{"x":28,"y":2,"z":15},{"x":25,"y":2,"z":16},{"x":26,"y":2,"z":16},{"x":27,"y":2,"z":16},{"x":28,"y":2,"z":16},{"x":29,"y":2,"z":16},{"x":25,"y":2,"z":17},{"x":26,"y":2,"z":17},{"x":27,"y":2,"z":17},{"x":28,"y":2,"z":17},{"x":29,"y":2,"z":17},{"x":25,"y":2,"z":18},{"x":26,"y":2,"z":18},{"x":27,"y":2,"z":18},{"x":28,"y":2,"z":18}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json b/src/main/resources/dgroomdata/5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json new file mode 100644 index 0000000..9d5167d --- /dev/null +++ b/src/main/resources/dgroomdata/5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":50,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,7,1,98,0,103,103,103,103,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,35,1,98,103,0,103,103,103,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,35,50,0,0,0,0,0,0,0,0,0,0,35,1,98,0,0,0,103,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,35,98,0,0,144,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,98,98,98,7,0,0,0,0,0,0,0,0,0,50,159,98,139,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,159,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,1,1,1,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,35,35,35,0,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,98,0,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,50,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,139,0,126,126,188,0,0,0,0,0,0,0,0,0,0,0,14,1,1,1,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,14,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,139,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,188,0,0,0,0,0,0,0,1,1,1,1,1,1,23,33,23,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,35,0,188,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,50,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,7,0,0,65,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,7,188,65,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,35,50,0,0,0,139,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,50,188,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,159,7,7,7,35,1,1,1,1,1,188,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,139,98,0,0,0,0,0,0,0,50,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,188,35,35,1,98,98,98,7,7,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,0,0,0,0,0,0,35,1,98,1,98,98,1,1,98,159,159,35,0,0,0,0,0,0,0,0,0,0,0,35,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,0,0,0,0,0,7,1,1,1,1,1,1,1,1,98,98,1,1,98,109,144,0,44,109,98,50,0,159,159,1,98,139,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,139,0,0,0,0,0,0,7,7,7,1,1,1,1,1,98,98,98,1,4,159,159,159,159,159,4,35,7,4,4,1,1,159,35,35,0,0,0,0,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,44,139,98,44,44,44,98,98,0,0,0,0,0,0,0,44,4,1,1,1,1,98,98,98,98,4,159,159,159,159,159,4,98,98,98,98,98,1,1,7,7,0,0,0,0,0,0,0,0,98,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,139,1,0,0,0,98,139,0,0,0,0,0,0,0,0,44,4,159,1,4,4,4,4,4,4,4,4,4,4,4,4,98,98,98,98,98,98,1,7,7,0,0,0,0,0,0,0,0,0,0,0,0,139,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,159,1,4,43,43,43,162,109,162,0,0,0,162,4,98,98,98,1,98,1,1,7,139,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,35,159,1,1,43,43,43,43,44,0,0,0,0,0,0,4,98,98,98,1,1,1,1,7,0,0,0,0,0,0,98,139,0,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,43,43,43,43,44,0,0,0,0,0,0,4,98,98,98,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,43,43,43,43,44,0,0,0,0,0,0,4,98,98,98,1,1,4,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,98,162,162,162,162,162,109,162,144,0,0,162,98,1,1,1,1,1,67,44,0,0,0,0,0,0,0,0,0,0,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4,4,4,4,162,162,162,4,4,4,4,4,4,4,98,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,98,98,4,4,4,4,4,4,4,4,4,98,98,98,98,98,98,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,7,144,0,0,0,0,0,0,1,1,1,1,1,98,98,4,4,4,4,4,4,4,4,4,98,98,98,98,98,98,98,98,98,1,1,7,0,0,0,0,0,0,0,0,0,0,0,98,109,1,1,1,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,35,35,35,0,0,0,0,1,1,1,1,1,98,98,4,1,1,4,4,4,4,4,4,98,98,98,98,98,98,98,98,98,98,1,7,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,159,50,0,0,0,0,0,0,1,1,98,98,1,1,1,1,1,1,1,1,4,98,98,159,159,159,98,159,159,159,98,1,7,139,0,0,0,0,0,0,0,0,50,7,1,1,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,1,98,4,1,1,1,1,1,4,4,4,98,98,144,0,0,98,0,0,0,98,1,1,98,0,0,98,0,0,109,0,0,98,1,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,0,1,98,1,1,1,4,1,4,4,1,1,98,98,0,0,0,98,0,0,0,98,98,98,98,0,0,98,0,0,98,0,0,98,1,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,0,1,98,0,1,44,44,44,4,1,1,50,98,139,0,0,0,139,0,0,0,139,98,98,0,0,0,0,0,0,0,0,0,1,1,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,50,0,1,98,0,1,139,0,44,1,1,0,0,0,0,0,0,0,0,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,98,98,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,0,0,0,0,0,0,0,0,0,0,7,1,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"5b6968ce-4a5b-4a48-8cb3-423ff9a7788d","name":"Melon","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":36,"y":-1,"z":48},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":54,"y":10,"z":30},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":59,"y":-1,"z":4},"secretType":"CHEST","preRequisite":[]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":10,"y":14,"z":57},{"x":10,"y":13,"z":57},{"x":11,"y":14,"z":57},{"x":11,"y":13,"z":57},{"x":12,"y":14,"z":57},{"x":12,"y":13,"z":57},{"x":13,"y":14,"z":57},{"x":13,"y":13,"z":57},{"x":14,"y":14,"z":57},{"x":14,"y":13,"z":57},{"x":10,"y":14,"z":58},{"x":10,"y":13,"z":58},{"x":11,"y":14,"z":58},{"x":11,"y":13,"z":58},{"x":12,"y":14,"z":58},{"x":12,"y":13,"z":58},{"x":13,"y":14,"z":58},{"x":13,"y":13,"z":58},{"x":14,"y":14,"z":58},{"x":14,"y":13,"z":58},{"x":10,"y":14,"z":59},{"x":10,"y":13,"z":59},{"x":11,"y":14,"z":59},{"x":11,"y":13,"z":59},{"x":12,"y":14,"z":59},{"x":12,"y":13,"z":59},{"x":13,"y":14,"z":59},{"x":13,"y":13,"z":59},{"x":14,"y":14,"z":59},{"x":14,"y":13,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"bat-1":{"mechType":"Secret","secretPoint":{"x":28,"y":6,"z":56},"secretType":"BAT","preRequisite":["superboom-1:open"]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":17,"y":13,"z":54},{"x":17,"y":12,"z":54},{"x":18,"y":13,"z":54},{"x":18,"y":12,"z":54},{"x":19,"y":13,"z":54},{"x":19,"y":12,"z":54},{"x":17,"y":13,"z":55},{"x":17,"y":12,"z":55},{"x":18,"y":13,"z":55},{"x":18,"y":12,"z":55},{"x":19,"y":13,"z":55},{"x":19,"y":12,"z":55}]},"preRequisite":[],"mechType":"Tomb"},"chest-6":{"mechType":"Secret","secretPoint":{"x":57,"y":15,"z":22},"secretType":"CHEST","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":17,"y":13,"z":61},{"x":17,"y":12,"z":61},{"x":18,"y":13,"z":61},{"x":18,"y":12,"z":61},{"x":19,"y":13,"z":61},{"x":19,"y":12,"z":61},{"x":17,"y":13,"z":62},{"x":17,"y":12,"z":62},{"x":18,"y":13,"z":62},{"x":18,"y":12,"z":62},{"x":19,"y":13,"z":62},{"x":19,"y":12,"z":62}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":37,"y":10,"z":27},{"x":37,"y":9,"z":27},{"x":37,"y":8,"z":27},{"x":38,"y":10,"z":27},{"x":38,"y":9,"z":27},{"x":38,"y":8,"z":27},{"x":39,"y":10,"z":27},{"x":39,"y":9,"z":27},{"x":39,"y":8,"z":27},{"x":37,"y":10,"z":28},{"x":37,"y":9,"z":28},{"x":37,"y":8,"z":28},{"x":38,"y":10,"z":28},{"x":38,"y":9,"z":28},{"x":38,"y":8,"z":28},{"x":39,"y":10,"z":28},{"x":39,"y":9,"z":28},{"x":39,"y":8,"z":28},{"x":37,"y":10,"z":29},{"x":37,"y":9,"z":29},{"x":37,"y":8,"z":29},{"x":38,"y":10,"z":29},{"x":38,"y":9,"z":29},{"x":38,"y":8,"z":29},{"x":39,"y":10,"z":29},{"x":39,"y":9,"z":29},{"x":39,"y":8,"z":29},{"x":37,"y":10,"z":30},{"x":37,"y":9,"z":30},{"x":37,"y":8,"z":30},{"x":38,"y":10,"z":30},{"x":38,"y":9,"z":30},{"x":38,"y":8,"z":30},{"x":39,"y":10,"z":30},{"x":39,"y":9,"z":30},{"x":39,"y":8,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"chest-4":{"mechType":"Secret","secretPoint":{"x":2,"y":9,"z":37},"secretType":"CHEST","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":42,"y":2,"z":59},{"x":42,"y":1,"z":59},{"x":42,"y":0,"z":59},{"x":42,"y":4,"z":60},{"x":42,"y":3,"z":60},{"x":42,"y":2,"z":60},{"x":42,"y":1,"z":60},{"x":42,"y":0,"z":60},{"x":42,"y":-1,"z":60},{"x":42,"y":3,"z":61},{"x":42,"y":0,"z":61},{"x":42,"y":-1,"z":61}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":5,"y":12,"z":58},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":7} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/63634341-8ef3-4197-aafa-17f5875dd307.json b/src/main/resources/dgroomdata/63634341-8ef3-4197-aafa-17f5875dd307.json new file mode 100644 index 0000000..026742b --- /dev/null +++ b/src/main/resources/dgroomdata/63634341-8ef3-4197-aafa-17f5875dd307.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,98,98,5,5,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,98,98,1,0,0,0,0,0,1,98,98,5,136,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,1,1,1,98,98,0,0,0,0,0,0,50,98,98,1,1,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,101,101,98,1,98,98,0,0,0,0,0,0,0,98,98,1,1,1,98,1,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,98,1,98,0,0,0,0,0,0,1,98,98,1,1,1,98,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,98,98,1,1,1,98,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,98,98,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,98,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,0,98,98,1,98,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,50,98,98,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,134,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,98,98,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,50,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,0,171,171,171,0,0,0,0,0,0,0,0,5,5,98,98,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,43,43,0,0,171,0,0,0,0,0,0,0,0,136,5,0,101,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,43,43,0,0,171,0,0,0,0,0,0,0,0,0,0,101,5,134,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,43,0,0,0,0,0,0,0,0,0,0,0,0,98,98,5,5,0,0,136,5,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"63634341-8ef3-4197-aafa-17f5875dd307","name":"Blackflag","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":3,"y":10,"z":6},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":10,"z":28},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":9,"y":-10,"z":3},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-8,"z":20},{"x":15,"y":-9,"z":20},{"x":16,"y":-8,"z":20},{"x":16,"y":-9,"z":20},{"x":17,"y":-8,"z":20},{"x":17,"y":-9,"z":20},{"x":15,"y":-8,"z":21},{"x":15,"y":-9,"z":21},{"x":16,"y":-8,"z":21},{"x":16,"y":-9,"z":21},{"x":17,"y":-8,"z":21},{"x":17,"y":-9,"z":21},{"x":15,"y":-8,"z":22},{"x":15,"y":-9,"z":22},{"x":16,"y":-8,"z":22},{"x":16,"y":-9,"z":22},{"x":17,"y":-8,"z":22},{"x":17,"y":-9,"z":22},{"x":15,"y":-8,"z":23},{"x":15,"y":-9,"z":23},{"x":16,"y":-8,"z":23},{"x":16,"y":-9,"z":23},{"x":17,"y":-8,"z":23},{"x":17,"y":-9,"z":23},{"x":15,"y":-8,"z":24},{"x":15,"y":-9,"z":24},{"x":16,"y":-8,"z":24},{"x":16,"y":-9,"z":24},{"x":17,"y":-8,"z":24},{"x":17,"y":-9,"z":24}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/6367a338-dd48-4c30-9e03-7ff6b5c7a936.json b/src/main/resources/dgroomdata/6367a338-dd48-4c30-9e03-7ff6b5c7a936.json new file mode 100644 index 0000000..8921912 --- /dev/null +++ b/src/main/resources/dgroomdata/6367a338-dd48-4c30-9e03-7ff6b5c7a936.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,98,98,1,98,-1,98,98,98,98,-1,0,0,0,0,0,0,0,-1,98,98,98,98,-1,1,98,98,98,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,50,0,0,0,0,0,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,139,0,0,0,0,0,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,139,139,0,0,0,139,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,101,101,101,101,101,49,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,0,0,0,0,0,49,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,0,0,0,0,0,49,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"6367a338-dd48-4c30-9e03-7ff6b5c7a936","name":"puzzle-bombdefuse","processorId":"puzzle_bombdefuse","properties":{"R2":{"offsetPointList":[{"x":3,"y":-2,"z":9},{"x":4,"y":-2,"z":9},{"x":5,"y":-2,"z":9},{"x":6,"y":-2,"z":9},{"x":7,"y":-2,"z":9},{"x":8,"y":-2,"z":9},{"x":9,"y":-2,"z":9},{"x":10,"y":-2,"z":9},{"x":11,"y":-2,"z":9},{"x":3,"y":-2,"z":10},{"x":4,"y":-2,"z":10},{"x":5,"y":-2,"z":10},{"x":6,"y":-2,"z":10},{"x":7,"y":-2,"z":10},{"x":8,"y":-2,"z":10},{"x":9,"y":-2,"z":10},{"x":10,"y":-2,"z":10},{"x":11,"y":-2,"z":10},{"x":3,"y":-2,"z":11},{"x":4,"y":-2,"z":11},{"x":5,"y":-2,"z":11},{"x":6,"y":-2,"z":11},{"x":7,"y":-2,"z":11},{"x":8,"y":-2,"z":11},{"x":9,"y":-2,"z":11},{"x":10,"y":-2,"z":11},{"x":11,"y":-2,"z":11},{"x":3,"y":-2,"z":12},{"x":4,"y":-2,"z":12},{"x":5,"y":-2,"z":12},{"x":6,"y":-2,"z":12},{"x":7,"y":-2,"z":12},{"x":8,"y":-2,"z":12},{"x":9,"y":-2,"z":12},{"x":10,"y":-2,"z":12},{"x":11,"y":-2,"z":12},{"x":3,"y":-2,"z":13},{"x":4,"y":-2,"z":13},{"x":5,"y":-2,"z":13},{"x":6,"y":-2,"z":13},{"x":7,"y":-2,"z":13},{"x":8,"y":-2,"z":13},{"x":9,"y":-2,"z":13},{"x":10,"y":-2,"z":13},{"x":11,"y":-2,"z":13},{"x":3,"y":-2,"z":14},{"x":4,"y":-2,"z":14},{"x":5,"y":-2,"z":14},{"x":6,"y":-2,"z":14},{"x":7,"y":-2,"z":14},{"x":8,"y":-2,"z":14},{"x":9,"y":-2,"z":14},{"x":10,"y":-2,"z":14},{"x":11,"y":-2,"z":14}]},"R3":{"offsetPointList":[{"x":3,"y":-2,"z":16},{"x":4,"y":-2,"z":16},{"x":5,"y":-2,"z":16},{"x":6,"y":-2,"z":16},{"x":7,"y":-2,"z":16},{"x":8,"y":-2,"z":16},{"x":9,"y":-2,"z":16},{"x":10,"y":-2,"z":16},{"x":11,"y":-2,"z":16},{"x":3,"y":-2,"z":17},{"x":4,"y":-2,"z":17},{"x":5,"y":-2,"z":17},{"x":6,"y":-2,"z":17},{"x":7,"y":-2,"z":17},{"x":8,"y":-2,"z":17},{"x":9,"y":-2,"z":17},{"x":10,"y":-2,"z":17},{"x":11,"y":-2,"z":17},{"x":3,"y":-2,"z":18},{"x":4,"y":-2,"z":18},{"x":5,"y":-2,"z":18},{"x":6,"y":-2,"z":18},{"x":7,"y":-2,"z":18},{"x":8,"y":-2,"z":18},{"x":9,"y":-2,"z":18},{"x":10,"y":-2,"z":18},{"x":11,"y":-2,"z":18},{"x":3,"y":-2,"z":19},{"x":4,"y":-2,"z":19},{"x":5,"y":-2,"z":19},{"x":6,"y":-2,"z":19},{"x":7,"y":-2,"z":19},{"x":8,"y":-2,"z":19},{"x":9,"y":-2,"z":19},{"x":10,"y":-2,"z":19},{"x":11,"y":-2,"z":19},{"x":3,"y":-2,"z":20},{"x":4,"y":-2,"z":20},{"x":5,"y":-2,"z":20},{"x":6,"y":-2,"z":20},{"x":7,"y":-2,"z":20},{"x":8,"y":-2,"z":20},{"x":9,"y":-2,"z":20},{"x":10,"y":-2,"z":20},{"x":11,"y":-2,"z":20},{"x":3,"y":-2,"z":21},{"x":4,"y":-2,"z":21},{"x":5,"y":-2,"z":21},{"x":6,"y":-2,"z":21},{"x":7,"y":-2,"z":21},{"x":8,"y":-2,"z":21},{"x":9,"y":-2,"z":21},{"x":10,"y":-2,"z":21},{"x":11,"y":-2,"z":21}]},"R4":{"offsetPointList":[{"x":3,"y":-2,"z":23},{"x":4,"y":-2,"z":23},{"x":5,"y":-2,"z":23},{"x":6,"y":-2,"z":23},{"x":7,"y":-2,"z":23},{"x":8,"y":-2,"z":23},{"x":9,"y":-2,"z":23},{"x":10,"y":-2,"z":23},{"x":11,"y":-2,"z":23},{"x":3,"y":-2,"z":24},{"x":4,"y":-2,"z":24},{"x":5,"y":-2,"z":24},{"x":6,"y":-2,"z":24},{"x":7,"y":-2,"z":24},{"x":8,"y":-2,"z":24},{"x":9,"y":-2,"z":24},{"x":10,"y":-2,"z":24},{"x":11,"y":-2,"z":24},{"x":3,"y":-2,"z":25},{"x":4,"y":-2,"z":25},{"x":5,"y":-2,"z":25},{"x":6,"y":-2,"z":25},{"x":7,"y":-2,"z":25},{"x":8,"y":-2,"z":25},{"x":9,"y":-2,"z":25},{"x":10,"y":-2,"z":25},{"x":11,"y":-2,"z":25},{"x":3,"y":-2,"z":26},{"x":4,"y":-2,"z":26},{"x":5,"y":-2,"z":26},{"x":6,"y":-2,"z":26},{"x":7,"y":-2,"z":26},{"x":8,"y":-2,"z":26},{"x":9,"y":-2,"z":26},{"x":10,"y":-2,"z":26},{"x":11,"y":-2,"z":26},{"x":3,"y":-2,"z":27},{"x":4,"y":-2,"z":27},{"x":5,"y":-2,"z":27},{"x":6,"y":-2,"z":27},{"x":7,"y":-2,"z":27},{"x":8,"y":-2,"z":27},{"x":9,"y":-2,"z":27},{"x":10,"y":-2,"z":27},{"x":11,"y":-2,"z":27},{"x":3,"y":-2,"z":28},{"x":4,"y":-2,"z":28},{"x":5,"y":-2,"z":28},{"x":6,"y":-2,"z":28},{"x":7,"y":-2,"z":28},{"x":8,"y":-2,"z":28},{"x":9,"y":-2,"z":28},{"x":10,"y":-2,"z":28},{"x":11,"y":-2,"z":28}]},"Warning":{"x":16,"y":2,"z":7},"L1":{"offsetPointList":[{"x":21,"y":-2,"z":2},{"x":22,"y":-2,"z":2},{"x":23,"y":-2,"z":2},{"x":24,"y":-2,"z":2},{"x":25,"y":-2,"z":2},{"x":26,"y":-2,"z":2},{"x":27,"y":-2,"z":2},{"x":28,"y":-2,"z":2},{"x":29,"y":-2,"z":2},{"x":21,"y":-2,"z":3},{"x":22,"y":-2,"z":3},{"x":23,"y":-2,"z":3},{"x":24,"y":-2,"z":3},{"x":25,"y":-2,"z":3},{"x":26,"y":-2,"z":3},{"x":27,"y":-2,"z":3},{"x":28,"y":-2,"z":3},{"x":29,"y":-2,"z":3},{"x":21,"y":-2,"z":4},{"x":22,"y":-2,"z":4},{"x":23,"y":-2,"z":4},{"x":24,"y":-2,"z":4},{"x":25,"y":-2,"z":4},{"x":26,"y":-2,"z":4},{"x":27,"y":-2,"z":4},{"x":28,"y":-2,"z":4},{"x":29,"y":-2,"z":4},{"x":21,"y":-2,"z":5},{"x":22,"y":-2,"z":5},{"x":23,"y":-2,"z":5},{"x":24,"y":-2,"z":5},{"x":25,"y":-2,"z":5},{"x":26,"y":-2,"z":5},{"x":27,"y":-2,"z":5},{"x":28,"y":-2,"z":5},{"x":29,"y":-2,"z":5},{"x":21,"y":-2,"z":6},{"x":22,"y":-2,"z":6},{"x":23,"y":-2,"z":6},{"x":24,"y":-2,"z":6},{"x":25,"y":-2,"z":6},{"x":26,"y":-2,"z":6},{"x":27,"y":-2,"z":6},{"x":28,"y":-2,"z":6},{"x":29,"y":-2,"z":6},{"x":21,"y":-2,"z":7},{"x":22,"y":-2,"z":7},{"x":23,"y":-2,"z":7},{"x":24,"y":-2,"z":7},{"x":25,"y":-2,"z":7},{"x":26,"y":-2,"z":7},{"x":27,"y":-2,"z":7},{"x":28,"y":-2,"z":7},{"x":29,"y":-2,"z":7}]},"L2":{"offsetPointList":[{"x":21,"y":-2,"z":9},{"x":22,"y":-2,"z":9},{"x":23,"y":-2,"z":9},{"x":24,"y":-2,"z":9},{"x":25,"y":-2,"z":9},{"x":26,"y":-2,"z":9},{"x":27,"y":-2,"z":9},{"x":28,"y":-2,"z":9},{"x":29,"y":-2,"z":9},{"x":21,"y":-2,"z":10},{"x":22,"y":-2,"z":10},{"x":23,"y":-2,"z":10},{"x":24,"y":-2,"z":10},{"x":25,"y":-2,"z":10},{"x":26,"y":-2,"z":10},{"x":27,"y":-2,"z":10},{"x":28,"y":-2,"z":10},{"x":29,"y":-2,"z":10},{"x":21,"y":-2,"z":11},{"x":22,"y":-2,"z":11},{"x":23,"y":-2,"z":11},{"x":24,"y":-2,"z":11},{"x":25,"y":-2,"z":11},{"x":26,"y":-2,"z":11},{"x":27,"y":-2,"z":11},{"x":28,"y":-2,"z":11},{"x":29,"y":-2,"z":11},{"x":21,"y":-2,"z":12},{"x":22,"y":-2,"z":12},{"x":23,"y":-2,"z":12},{"x":24,"y":-2,"z":12},{"x":25,"y":-2,"z":12},{"x":26,"y":-2,"z":12},{"x":27,"y":-2,"z":12},{"x":28,"y":-2,"z":12},{"x":29,"y":-2,"z":12},{"x":21,"y":-2,"z":13},{"x":22,"y":-2,"z":13},{"x":23,"y":-2,"z":13},{"x":24,"y":-2,"z":13},{"x":25,"y":-2,"z":13},{"x":26,"y":-2,"z":13},{"x":27,"y":-2,"z":13},{"x":28,"y":-2,"z":13},{"x":29,"y":-2,"z":13},{"x":21,"y":-2,"z":14},{"x":22,"y":-2,"z":14},{"x":23,"y":-2,"z":14},{"x":24,"y":-2,"z":14},{"x":25,"y":-2,"z":14},{"x":26,"y":-2,"z":14},{"x":27,"y":-2,"z":14},{"x":28,"y":-2,"z":14},{"x":29,"y":-2,"z":14}]},"L3":{"offsetPointList":[{"x":21,"y":-2,"z":16},{"x":22,"y":-2,"z":16},{"x":23,"y":-2,"z":16},{"x":24,"y":-2,"z":16},{"x":25,"y":-2,"z":16},{"x":26,"y":-2,"z":16},{"x":27,"y":-2,"z":16},{"x":28,"y":-2,"z":16},{"x":29,"y":-2,"z":16},{"x":21,"y":-2,"z":17},{"x":22,"y":-2,"z":17},{"x":23,"y":-2,"z":17},{"x":24,"y":-2,"z":17},{"x":25,"y":-2,"z":17},{"x":26,"y":-2,"z":17},{"x":27,"y":-2,"z":17},{"x":28,"y":-2,"z":17},{"x":29,"y":-2,"z":17},{"x":21,"y":-2,"z":18},{"x":22,"y":-2,"z":18},{"x":23,"y":-2,"z":18},{"x":24,"y":-2,"z":18},{"x":25,"y":-2,"z":18},{"x":26,"y":-2,"z":18},{"x":27,"y":-2,"z":18},{"x":28,"y":-2,"z":18},{"x":29,"y":-2,"z":18},{"x":21,"y":-2,"z":19},{"x":22,"y":-2,"z":19},{"x":23,"y":-2,"z":19},{"x":24,"y":-2,"z":19},{"x":25,"y":-2,"z":19},{"x":26,"y":-2,"z":19},{"x":27,"y":-2,"z":19},{"x":28,"y":-2,"z":19},{"x":29,"y":-2,"z":19},{"x":21,"y":-2,"z":20},{"x":22,"y":-2,"z":20},{"x":23,"y":-2,"z":20},{"x":24,"y":-2,"z":20},{"x":25,"y":-2,"z":20},{"x":26,"y":-2,"z":20},{"x":27,"y":-2,"z":20},{"x":28,"y":-2,"z":20},{"x":29,"y":-2,"z":20},{"x":21,"y":-2,"z":21},{"x":22,"y":-2,"z":21},{"x":23,"y":-2,"z":21},{"x":24,"y":-2,"z":21},{"x":25,"y":-2,"z":21},{"x":26,"y":-2,"z":21},{"x":27,"y":-2,"z":21},{"x":28,"y":-2,"z":21},{"x":29,"y":-2,"z":21}]},"L4":{"offsetPointList":[{"x":21,"y":-2,"z":23},{"x":22,"y":-2,"z":23},{"x":23,"y":-2,"z":23},{"x":24,"y":-2,"z":23},{"x":25,"y":-2,"z":23},{"x":26,"y":-2,"z":23},{"x":27,"y":-2,"z":23},{"x":28,"y":-2,"z":23},{"x":29,"y":-2,"z":23},{"x":21,"y":-2,"z":24},{"x":22,"y":-2,"z":24},{"x":23,"y":-2,"z":24},{"x":24,"y":-2,"z":24},{"x":25,"y":-2,"z":24},{"x":26,"y":-2,"z":24},{"x":27,"y":-2,"z":24},{"x":28,"y":-2,"z":24},{"x":29,"y":-2,"z":24},{"x":21,"y":-2,"z":25},{"x":22,"y":-2,"z":25},{"x":23,"y":-2,"z":25},{"x":24,"y":-2,"z":25},{"x":25,"y":-2,"z":25},{"x":26,"y":-2,"z":25},{"x":27,"y":-2,"z":25},{"x":28,"y":-2,"z":25},{"x":29,"y":-2,"z":25},{"x":21,"y":-2,"z":26},{"x":22,"y":-2,"z":26},{"x":23,"y":-2,"z":26},{"x":24,"y":-2,"z":26},{"x":25,"y":-2,"z":26},{"x":26,"y":-2,"z":26},{"x":27,"y":-2,"z":26},{"x":28,"y":-2,"z":26},{"x":29,"y":-2,"z":26},{"x":21,"y":-2,"z":27},{"x":22,"y":-2,"z":27},{"x":23,"y":-2,"z":27},{"x":24,"y":-2,"z":27},{"x":25,"y":-2,"z":27},{"x":26,"y":-2,"z":27},{"x":27,"y":-2,"z":27},{"x":28,"y":-2,"z":27},{"x":29,"y":-2,"z":27},{"x":21,"y":-2,"z":28},{"x":22,"y":-2,"z":28},{"x":23,"y":-2,"z":28},{"x":24,"y":-2,"z":28},{"x":25,"y":-2,"z":28},{"x":26,"y":-2,"z":28},{"x":27,"y":-2,"z":28},{"x":28,"y":-2,"z":28},{"x":29,"y":-2,"z":28}]},"Door":{"offsetPointList":[{"x":20,"y":-1,"z":5},{"x":25,"y":-1,"z":8},{"x":25,"y":-1,"z":15},{"x":25,"y":-1,"z":22},{"x":25,"y":-1,"z":29}]},"R1":{"offsetPointList":[{"x":3,"y":-2,"z":2},{"x":4,"y":-2,"z":2},{"x":5,"y":-2,"z":2},{"x":6,"y":-2,"z":2},{"x":7,"y":-2,"z":2},{"x":8,"y":-2,"z":2},{"x":9,"y":-2,"z":2},{"x":10,"y":-2,"z":2},{"x":11,"y":-2,"z":2},{"x":3,"y":-2,"z":3},{"x":4,"y":-2,"z":3},{"x":5,"y":-2,"z":3},{"x":6,"y":-2,"z":3},{"x":7,"y":-2,"z":3},{"x":8,"y":-2,"z":3},{"x":9,"y":-2,"z":3},{"x":10,"y":-2,"z":3},{"x":11,"y":-2,"z":3},{"x":3,"y":-2,"z":4},{"x":4,"y":-2,"z":4},{"x":5,"y":-2,"z":4},{"x":6,"y":-2,"z":4},{"x":7,"y":-2,"z":4},{"x":8,"y":-2,"z":4},{"x":9,"y":-2,"z":4},{"x":10,"y":-2,"z":4},{"x":11,"y":-2,"z":4},{"x":3,"y":-2,"z":5},{"x":4,"y":-2,"z":5},{"x":5,"y":-2,"z":5},{"x":6,"y":-2,"z":5},{"x":7,"y":-2,"z":5},{"x":8,"y":-2,"z":5},{"x":9,"y":-2,"z":5},{"x":10,"y":-2,"z":5},{"x":11,"y":-2,"z":5},{"x":3,"y":-2,"z":6},{"x":4,"y":-2,"z":6},{"x":5,"y":-2,"z":6},{"x":6,"y":-2,"z":6},{"x":7,"y":-2,"z":6},{"x":8,"y":-2,"z":6},{"x":9,"y":-2,"z":6},{"x":10,"y":-2,"z":6},{"x":11,"y":-2,"z":6},{"x":3,"y":-2,"z":7},{"x":4,"y":-2,"z":7},{"x":5,"y":-2,"z":7},{"x":6,"y":-2,"z":7},{"x":7,"y":-2,"z":7},{"x":8,"y":-2,"z":7},{"x":9,"y":-2,"z":7},{"x":10,"y":-2,"z":7},{"x":11,"y":-2,"z":7}]}},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/65d8264d-f47c-4306-b89f-46e28b117511.json b/src/main/resources/dgroomdata/65d8264d-f47c-4306-b89f-46e28b117511.json new file mode 100644 index 0000000..c3a7c26 --- /dev/null +++ b/src/main/resources/dgroomdata/65d8264d-f47c-4306-b89f-46e28b117511.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,-1,-1,-1,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,-1,-1,-1,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,139,139,98,109,109,109,98,98,109,109,98,98,98,98,1,98,4,0,-1,-1,-1,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,139,139,98,109,0,0,0,0,0,0,0,0,0,0,0,98,4,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,0,0,0,98,98,0,0,98,98,0,0,0,98,98,0,0,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,0,0,98,98,0,0,0,98,98,0,0,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,109,1,0,0,0,0,0,0,0,0,0,0,0,98,109,109,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,50,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,50,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,1,0,0,0,98,98,0,0,0,98,98,0,0,0,0,50,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,0,0,98,98,0,0,0,98,98,0,0,109,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,98,98,0,0,0,98,98,0,0,109,98,0,0,98,0,101,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"65d8264d-f47c-4306-b89f-46e28b117511","name":"Drop","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":6,"y":-11,"z":16},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":26,"y":7,"z":3},"secretType":"CHEST","preRequisite":[]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":15,"y":8,"z":2},{"x":15,"y":7,"z":2},{"x":16,"y":8,"z":2},{"x":16,"y":7,"z":2},{"x":17,"y":8,"z":2},{"x":17,"y":7,"z":2},{"x":15,"y":8,"z":3},{"x":15,"y":7,"z":3},{"x":16,"y":8,"z":3},{"x":16,"y":7,"z":3},{"x":17,"y":8,"z":3},{"x":17,"y":7,"z":3},{"x":15,"y":8,"z":4},{"x":15,"y":7,"z":4},{"x":16,"y":8,"z":4},{"x":16,"y":7,"z":4},{"x":17,"y":8,"z":4},{"x":17,"y":7,"z":4},{"x":15,"y":8,"z":5},{"x":15,"y":7,"z":5},{"x":16,"y":8,"z":5},{"x":16,"y":7,"z":5},{"x":17,"y":8,"z":5},{"x":17,"y":7,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":2,"y":8,"z":24},{"x":2,"y":7,"z":24},{"x":3,"y":8,"z":24},{"x":3,"y":7,"z":24},{"x":4,"y":8,"z":24},{"x":4,"y":7,"z":24},{"x":2,"y":8,"z":25},{"x":2,"y":7,"z":25},{"x":3,"y":8,"z":25},{"x":3,"y":7,"z":25},{"x":4,"y":8,"z":25},{"x":4,"y":7,"z":25},{"x":2,"y":8,"z":26},{"x":2,"y":7,"z":26},{"x":3,"y":8,"z":26},{"x":3,"y":7,"z":26},{"x":4,"y":8,"z":26},{"x":4,"y":7,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":25,"y":8,"z":27},{"x":25,"y":7,"z":27},{"x":26,"y":8,"z":27},{"x":26,"y":7,"z":27},{"x":27,"y":8,"z":27},{"x":27,"y":7,"z":27},{"x":25,"y":8,"z":28},{"x":25,"y":7,"z":28},{"x":26,"y":8,"z":28},{"x":26,"y":7,"z":28},{"x":27,"y":8,"z":28},{"x":27,"y":7,"z":28},{"x":25,"y":8,"z":29},{"x":25,"y":7,"z":29},{"x":26,"y":8,"z":29},{"x":26,"y":7,"z":29},{"x":27,"y":8,"z":29},{"x":27,"y":7,"z":29},{"x":25,"y":8,"z":30},{"x":25,"y":7,"z":30},{"x":26,"y":8,"z":30},{"x":26,"y":7,"z":30},{"x":27,"y":8,"z":30},{"x":27,"y":7,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":28,"y":8,"z":6},{"x":28,"y":7,"z":6},{"x":29,"y":8,"z":6},{"x":29,"y":7,"z":6},{"x":28,"y":8,"z":7},{"x":28,"y":7,"z":7},{"x":29,"y":8,"z":7},{"x":29,"y":7,"z":7},{"x":28,"y":8,"z":8},{"x":28,"y":7,"z":8},{"x":29,"y":8,"z":8},{"x":29,"y":7,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":23,"y":8,"z":6},{"x":23,"y":7,"z":6},{"x":24,"y":8,"z":6},{"x":24,"y":7,"z":6},{"x":23,"y":8,"z":7},{"x":23,"y":7,"z":7},{"x":24,"y":8,"z":7},{"x":24,"y":7,"z":7},{"x":23,"y":8,"z":8},{"x":23,"y":7,"z":8},{"x":24,"y":8,"z":8},{"x":24,"y":7,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":25,"y":0,"z":3},{"x":25,"y":-1,"z":3},{"x":26,"y":0,"z":3},{"x":26,"y":-1,"z":3},{"x":27,"y":0,"z":3},{"x":27,"y":-1,"z":3},{"x":25,"y":0,"z":4},{"x":25,"y":-1,"z":4},{"x":26,"y":0,"z":4},{"x":26,"y":-1,"z":4},{"x":27,"y":0,"z":4},{"x":27,"y":-1,"z":4},{"x":25,"y":0,"z":5},{"x":25,"y":-1,"z":5},{"x":26,"y":0,"z":5},{"x":26,"y":-1,"z":5},{"x":27,"y":0,"z":5},{"x":27,"y":-1,"z":5},{"x":25,"y":0,"z":6},{"x":25,"y":-1,"z":6},{"x":26,"y":0,"z":6},{"x":26,"y":-1,"z":6},{"x":27,"y":0,"z":6},{"x":27,"y":-1,"z":6}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":10,"y":-7,"z":15},{"x":10,"y":-8,"z":15},{"x":10,"y":-9,"z":15},{"x":10,"y":-10,"z":15},{"x":10,"y":-11,"z":15},{"x":10,"y":-7,"z":16},{"x":10,"y":-8,"z":16},{"x":10,"y":-9,"z":16},{"x":10,"y":-10,"z":16},{"x":10,"y":-11,"z":16},{"x":10,"y":-8,"z":17},{"x":10,"y":-9,"z":17},{"x":10,"y":-10,"z":17},{"x":10,"y":-11,"z":17}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json b/src/main/resources/dgroomdata/6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json new file mode 100644 index 0000000..31c304b --- /dev/null +++ b/src/main/resources/dgroomdata/6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json @@ -0,0 +1,1380 @@ +{ + "isUserMade": false, + "shape": 3, + "color": 63, + "uuid": "6b0dfb3e-c86c-41d1-8526-a172027dbb8d", + "name": "grass-ruin", + "processorId": "default", + "properties": {}, + "mechanics": { + "chest-2": { + "mechType": "Secret", + "secretPoint": { + "x": 4, + "y": -15, + "z": 15 + }, + "secretType": "CHEST", + "preRequisite": [ + "door-2:open" + ] + }, + "door-3": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": -12, + "z": 6 + }, + { + "x": 27, + "y": -13, + "z": 6 + }, + { + "x": 27, + "y": -14, + "z": 6 + }, + { + "x": 27, + "y": -15, + "z": 6 + }, + { + "x": 27, + "y": -16, + "z": 6 + }, + { + "x": 27, + "y": -17, + "z": 6 + }, + { + "x": 27, + "y": -18, + "z": 6 + }, + { + "x": 27, + "y": -12, + "z": 7 + }, + { + "x": 27, + "y": -13, + "z": 7 + }, + { + "x": 27, + "y": -14, + "z": 7 + }, + { + "x": 27, + "y": -15, + "z": 7 + }, + { + "x": 27, + "y": -16, + "z": 7 + }, + { + "x": 27, + "y": -17, + "z": 7 + }, + { + "x": 27, + "y": -18, + "z": 7 + }, + { + "x": 27, + "y": -12, + "z": 8 + }, + { + "x": 27, + "y": -13, + "z": 8 + }, + { + "x": 27, + "y": -14, + "z": 8 + }, + { + "x": 27, + "y": -15, + "z": 8 + }, + { + "x": 27, + "y": -16, + "z": 8 + }, + { + "x": 27, + "y": -17, + "z": 8 + }, + { + "x": 27, + "y": -18, + "z": 8 + }, + { + "x": 27, + "y": -12, + "z": 9 + }, + { + "x": 27, + "y": -13, + "z": 9 + }, + { + "x": 27, + "y": -14, + "z": 9 + }, + { + "x": 27, + "y": -15, + "z": 9 + }, + { + "x": 27, + "y": -16, + "z": 9 + }, + { + "x": 27, + "y": -17, + "z": 9 + }, + { + "x": 27, + "y": -18, + "z": 9 + }, + { + "x": 27, + "y": -12, + "z": 10 + }, + { + "x": 27, + "y": -13, + "z": 10 + }, + { + "x": 27, + "y": -14, + "z": 10 + }, + { + "x": 27, + "y": -15, + "z": 10 + }, + { + "x": 27, + "y": -16, + "z": 10 + }, + { + "x": 27, + "y": -17, + "z": 10 + }, + { + "x": 27, + "y": -18, + "z": 10 + } + ] + }, + "preRequisite": [ + "lever-2:triggered" + ], + "mechType": "OnewayDoor" + }, + "chest-1": { + "mechType": "Secret", + "secretPoint": { + "x": 12, + "y": 37, + "z": 11 + }, + "secretType": "CHEST", + "preRequisite": [] + }, + "lever-1": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 32, + "y": 12, + "z": 29 + }, + "preRequisite": [], + "triggering": "door-1" + }, + "door-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 29, + "y": 1, + "z": 18 + }, + { + "x": 29, + "y": 0, + "z": 18 + }, + { + "x": 29, + "y": -1, + "z": 18 + }, + { + "x": 29, + "y": -2, + "z": 18 + }, + { + "x": 29, + "y": -3, + "z": 18 + }, + { + "x": 29, + "y": -4, + "z": 18 + }, + { + "x": 29, + "y": -5, + "z": 18 + }, + { + "x": 29, + "y": -6, + "z": 18 + }, + { + "x": 29, + "y": -7, + "z": 18 + }, + { + "x": 30, + "y": 1, + "z": 18 + }, + { + "x": 30, + "y": 0, + "z": 18 + }, + { + "x": 30, + "y": -1, + "z": 18 + }, + { + "x": 30, + "y": -2, + "z": 18 + }, + { + "x": 30, + "y": -3, + "z": 18 + }, + { + "x": 30, + "y": -4, + "z": 18 + }, + { + "x": 30, + "y": -5, + "z": 18 + }, + { + "x": 30, + "y": -6, + "z": 18 + }, + { + "x": 30, + "y": -7, + "z": 18 + }, + { + "x": 31, + "y": 1, + "z": 18 + }, + { + "x": 31, + "y": 0, + "z": 18 + }, + { + "x": 31, + "y": -1, + "z": 18 + }, + { + "x": 31, + "y": -2, + "z": 18 + }, + { + "x": 31, + "y": -3, + "z": 18 + }, + { + "x": 31, + "y": -4, + "z": 18 + }, + { + "x": 31, + "y": -5, + "z": 18 + }, + { + "x": 31, + "y": -6, + "z": 18 + }, + { + "x": 31, + "y": -7, + "z": 18 + }, + { + "x": 32, + "y": 1, + "z": 18 + }, + { + "x": 32, + "y": 0, + "z": 18 + }, + { + "x": 32, + "y": -1, + "z": 18 + }, + { + "x": 32, + "y": -2, + "z": 18 + }, + { + "x": 32, + "y": -3, + "z": 18 + }, + { + "x": 32, + "y": -4, + "z": 18 + }, + { + "x": 32, + "y": -5, + "z": 18 + }, + { + "x": 32, + "y": -6, + "z": 18 + }, + { + "x": 32, + "y": -7, + "z": 18 + }, + { + "x": 33, + "y": 1, + "z": 18 + }, + { + "x": 33, + "y": 0, + "z": 18 + }, + { + "x": 33, + "y": -1, + "z": 18 + }, + { + "x": 33, + "y": -2, + "z": 18 + }, + { + "x": 33, + "y": -3, + "z": 18 + }, + { + "x": 33, + "y": -4, + "z": 18 + }, + { + "x": 33, + "y": -5, + "z": 18 + }, + { + "x": 33, + "y": -6, + "z": 18 + }, + { + "x": 33, + "y": -7, + "z": 18 + }, + { + "x": 34, + "y": 1, + "z": 18 + }, + { + "x": 34, + "y": 0, + "z": 18 + }, + { + "x": 34, + "y": -1, + "z": 18 + }, + { + "x": 34, + "y": -2, + "z": 18 + }, + { + "x": 34, + "y": -3, + "z": 18 + }, + { + "x": 34, + "y": -4, + "z": 18 + }, + { + "x": 34, + "y": -5, + "z": 18 + }, + { + "x": 34, + "y": -6, + "z": 18 + }, + { + "x": 34, + "y": -7, + "z": 18 + }, + { + "x": 35, + "y": 1, + "z": 18 + }, + { + "x": 35, + "y": 0, + "z": 18 + }, + { + "x": 35, + "y": -1, + "z": 18 + }, + { + "x": 35, + "y": -2, + "z": 18 + }, + { + "x": 35, + "y": -3, + "z": 18 + }, + { + "x": 35, + "y": -4, + "z": 18 + }, + { + "x": 35, + "y": -5, + "z": 18 + }, + { + "x": 35, + "y": -6, + "z": 18 + }, + { + "x": 35, + "y": -7, + "z": 18 + } + ] + }, + "preRequisite": [ + "lever-1:triggered" + ], + "mechType": "OnewayDoor" + }, + "lever-2": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 32, + "y": -17, + "z": 25 + }, + "preRequisite": [ + "door-1:open" + ], + "triggering": "door-2" + }, + "door-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 27, + "y": -12, + "z": 20 + }, + { + "x": 27, + "y": -13, + "z": 20 + }, + { + "x": 27, + "y": -14, + "z": 20 + }, + { + "x": 27, + "y": -15, + "z": 20 + }, + { + "x": 27, + "y": -16, + "z": 20 + }, + { + "x": 27, + "y": -17, + "z": 20 + }, + { + "x": 27, + "y": -18, + "z": 20 + }, + { + "x": 27, + "y": -12, + "z": 21 + }, + { + "x": 27, + "y": -13, + "z": 21 + }, + { + "x": 27, + "y": -14, + "z": 21 + }, + { + "x": 27, + "y": -15, + "z": 21 + }, + { + "x": 27, + "y": -16, + "z": 21 + }, + { + "x": 27, + "y": -17, + "z": 21 + }, + { + "x": 27, + "y": -18, + "z": 21 + }, + { + "x": 27, + "y": -12, + "z": 22 + }, + { + "x": 27, + "y": -13, + "z": 22 + }, + { + "x": 27, + "y": -14, + "z": 22 + }, + { + "x": 27, + "y": -15, + "z": 22 + }, + { + "x": 27, + "y": -16, + "z": 22 + }, + { + "x": 27, + "y": -17, + "z": 22 + }, + { + "x": 27, + "y": -18, + "z": 22 + }, + { + "x": 27, + "y": -12, + "z": 23 + }, + { + "x": 27, + "y": -13, + "z": 23 + }, + { + "x": 27, + "y": -14, + "z": 23 + }, + { + "x": 27, + "y": -15, + "z": 23 + }, + { + "x": 27, + "y": -16, + "z": 23 + }, + { + "x": 27, + "y": -17, + "z": 23 + }, + { + "x": 27, + "y": -18, + "z": 23 + }, + { + "x": 27, + "y": -12, + "z": 24 + }, + { + "x": 27, + "y": -13, + "z": 24 + }, + { + "x": 27, + "y": -14, + "z": 24 + }, + { + "x": 27, + "y": -15, + "z": 24 + }, + { + "x": 27, + "y": -16, + "z": 24 + }, + { + "x": 27, + "y": -17, + "z": 24 + }, + { + "x": 27, + "y": -18, + "z": 24 + } + ] + }, + "preRequisite": [ + "lever-2:triggered" + ], + "mechType": "OnewayDoor" + }, + "superboom-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 47, + "y": 10, + "z": 24 + }, + { + "x": 47, + "y": 13, + "z": 25 + }, + { + "x": 47, + "y": 12, + "z": 25 + }, + { + "x": 47, + "y": 11, + "z": 25 + }, + { + "x": 47, + "y": 10, + "z": 25 + }, + { + "x": 47, + "y": 13, + "z": 26 + }, + { + "x": 47, + "y": 12, + "z": 26 + }, + { + "x": 47, + "y": 11, + "z": 26 + }, + { + "x": 47, + "y": 10, + "z": 26 + }, + { + "x": 47, + "y": 12, + "z": 27 + }, + { + "x": 47, + "y": 10, + "z": 27 + } + ] + }, + "preRequisite": [], + "mechType": "BreakableWall" + }, + "crypt-3": { + "secretPoint": { + "offsetPointList": [ + { + "x": 58, + "y": 21, + "z": 7 + }, + { + "x": 58, + "y": 20, + "z": 7 + }, + { + "x": 59, + "y": 21, + "z": 7 + }, + { + "x": 59, + "y": 20, + "z": 7 + }, + { + "x": 60, + "y": 21, + "z": 7 + }, + { + "x": 60, + "y": 20, + "z": 7 + }, + { + "x": 61, + "y": 21, + "z": 7 + }, + { + "x": 61, + "y": 20, + "z": 7 + }, + { + "x": 58, + "y": 21, + "z": 8 + }, + { + "x": 58, + "y": 20, + "z": 8 + }, + { + "x": 59, + "y": 21, + "z": 8 + }, + { + "x": 59, + "y": 20, + "z": 8 + }, + { + "x": 60, + "y": 21, + "z": 8 + }, + { + "x": 60, + "y": 20, + "z": 8 + }, + { + "x": 61, + "y": 21, + "z": 8 + }, + { + "x": 61, + "y": 20, + "z": 8 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "crypt-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 58, + "y": 21, + "z": 23 + }, + { + "x": 58, + "y": 20, + "z": 23 + }, + { + "x": 59, + "y": 21, + "z": 23 + }, + { + "x": 59, + "y": 20, + "z": 23 + }, + { + "x": 60, + "y": 21, + "z": 23 + }, + { + "x": 60, + "y": 20, + "z": 23 + }, + { + "x": 61, + "y": 21, + "z": 23 + }, + { + "x": 61, + "y": 20, + "z": 23 + }, + { + "x": 58, + "y": 21, + "z": 24 + }, + { + "x": 58, + "y": 20, + "z": 24 + }, + { + "x": 59, + "y": 21, + "z": 24 + }, + { + "x": 59, + "y": 20, + "z": 24 + }, + { + "x": 60, + "y": 21, + "z": 24 + }, + { + "x": 60, + "y": 20, + "z": 24 + }, + { + "x": 61, + "y": 21, + "z": 24 + }, + { + "x": 61, + "y": 20, + "z": 24 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "essence-1": { + "mechType": "Secret", + "secretPoint": { + "x": 49, + "y": 11, + "z": 25 + }, + "secretType": "ESSENCE", + "preRequisite": [ + "superboom-1:open" + ] + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 53, + "y": -17, + "z": 4 + }, + { + "x": 53, + "y": -18, + "z": 4 + }, + { + "x": 54, + "y": -17, + "z": 4 + }, + { + "x": 54, + "y": -18, + "z": 4 + }, + { + "x": 55, + "y": -17, + "z": 4 + }, + { + "x": 55, + "y": -18, + "z": 4 + }, + { + "x": 53, + "y": -17, + "z": 5 + }, + { + "x": 53, + "y": -18, + "z": 5 + }, + { + "x": 54, + "y": -17, + "z": 5 + }, + { + "x": 54, + "y": -18, + "z": 5 + }, + { + "x": 55, + "y": -17, + "z": 5 + }, + { + "x": 55, + "y": -18, + "z": 5 + }, + { + "x": 53, + "y": -17, + "z": 6 + }, + { + "x": 53, + "y": -18, + "z": 6 + }, + { + "x": 54, + "y": -17, + "z": 6 + }, + { + "x": 54, + "y": -18, + "z": 6 + }, + { + "x": 55, + "y": -17, + "z": 6 + }, + { + "x": 55, + "y": -18, + "z": 6 + }, + { + "x": 53, + "y": -17, + "z": 7 + }, + { + "x": 53, + "y": -18, + "z": 7 + }, + { + "x": 54, + "y": -17, + "z": 7 + }, + { + "x": 54, + "y": -18, + "z": 7 + }, + { + "x": 55, + "y": -17, + "z": 7 + }, + { + "x": 55, + "y": -18, + "z": 7 + } + ] + }, + "preRequisite": [ + "door-1:open" + ], + "mechType": "Tomb" + }, + "prince-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 58, + "y": 25, + "z": 14 + }, + { + "x": 58, + "y": 24, + "z": 14 + }, + { + "x": 58, + "y": 23, + "z": 14 + }, + { + "x": 59, + "y": 25, + "z": 14 + }, + { + "x": 59, + "y": 24, + "z": 14 + }, + { + "x": 59, + "y": 23, + "z": 14 + }, + { + "x": 60, + "y": 25, + "z": 14 + }, + { + "x": 60, + "y": 24, + "z": 14 + }, + { + "x": 60, + "y": 23, + "z": 14 + }, + { + "x": 61, + "y": 25, + "z": 14 + }, + { + "x": 61, + "y": 24, + "z": 14 + }, + { + "x": 61, + "y": 23, + "z": 14 + }, + { + "x": 58, + "y": 25, + "z": 15 + }, + { + "x": 58, + "y": 24, + "z": 15 + }, + { + "x": 58, + "y": 23, + "z": 15 + }, + { + "x": 59, + "y": 25, + "z": 15 + }, + { + "x": 59, + "y": 24, + "z": 15 + }, + { + "x": 59, + "y": 23, + "z": 15 + }, + { + "x": 60, + "y": 25, + "z": 15 + }, + { + "x": 60, + "y": 24, + "z": 15 + }, + { + "x": 60, + "y": 23, + "z": 15 + }, + { + "x": 61, + "y": 25, + "z": 15 + }, + { + "x": 61, + "y": 24, + "z": 15 + }, + { + "x": 61, + "y": 23, + "z": 15 + }, + { + "x": 58, + "y": 25, + "z": 16 + }, + { + "x": 58, + "y": 24, + "z": 16 + }, + { + "x": 58, + "y": 23, + "z": 16 + }, + { + "x": 59, + "y": 25, + "z": 16 + }, + { + "x": 59, + "y": 24, + "z": 16 + }, + { + "x": 59, + "y": 23, + "z": 16 + }, + { + "x": 60, + "y": 25, + "z": 16 + }, + { + "x": 60, + "y": 24, + "z": 16 + }, + { + "x": 60, + "y": 23, + "z": 16 + }, + { + "x": 61, + "y": 25, + "z": 16 + }, + { + "x": 61, + "y": 24, + "z": 16 + }, + { + "x": 61, + "y": 23, + "z": 16 + }, + { + "x": 58, + "y": 25, + "z": 17 + }, + { + "x": 58, + "y": 24, + "z": 17 + }, + { + "x": 58, + "y": 23, + "z": 17 + }, + { + "x": 59, + "y": 25, + "z": 17 + }, + { + "x": 59, + "y": 24, + "z": 17 + }, + { + "x": 59, + "y": 23, + "z": 17 + }, + { + "x": 60, + "y": 25, + "z": 17 + }, + { + "x": 60, + "y": 24, + "z": 17 + }, + { + "x": 60, + "y": 23, + "z": 17 + }, + { + "x": 61, + "y": 25, + "z": 17 + }, + { + "x": 61, + "y": 24, + "z": 17 + }, + { + "x": 61, + "y": 23, + "z": 17 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + } + }, + "totalSecrets": 3 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/6b7256ae-8673-4c2f-825f-6cd727801ea9.json b/src/main/resources/dgroomdata/6b7256ae-8673-4c2f-825f-6cd727801ea9.json new file mode 100644 index 0000000..a115b18 --- /dev/null +++ b/src/main/resources/dgroomdata/6b7256ae-8673-4c2f-825f-6cd727801ea9.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,43,44,98,109,0,0,0,0,0,0,98,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,67,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,67,0,0,0,0,162,0,109,109,109,0,139,139,0,0,0,0,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,98,98,98,98,98,0,98,98,98,0,139,139,0,0,0,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,109,109,109,0,98,98,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,109,0,0,0,109,98,1,1,1,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,98,0,144,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,0,0,0,126,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,139,0,0,0,134,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,139,0,0,0,5,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,67,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,0,0,5,126,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,139,0,5,134,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,35,98,98,98,98,98,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,139,98,98,98,50,0,126,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,3,7,1,98,0,0,0,0,0,0,0,0,0,67,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,0,0,3,109,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,0,0,0,98,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,0,0,31,109,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"6b7256ae-8673-4c2f-825f-6cd727801ea9","name":"Painting","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":23,"y":-1,"z":7},"secretType":"ITEM_DROP","preRequisite":[]},"essence-1":{"mechType":"Secret","secretPoint":{"x":22,"y":10,"z":25},"secretType":"ESSENCE","preRequisite":[]},"journal-1":{"secretPoint":{"x":8,"y":0,"z":7},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json b/src/main/resources/dgroomdata/6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json new file mode 100644 index 0000000..3c354d9 --- /dev/null +++ b/src/main/resources/dgroomdata/6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":15,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,159,144,0,0,0,0,0,0,0,0,0,0,5,5,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,98,98,109,109,98,1,98,98,98,98,109,0,0,0,0,0,0,0,159,1,1,98,1,1,35,0,0,0,0,0,35,35,1,1,1,1,1,159,0,0,0,159,1,1,1,1,1,1,1,7,0,0,0,159,1,1,35,35,0,0,0,0,159,1,1,1,1,1,35,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,159,0,0,0,0,0,0,0,0,0,0,0,5,53,0,0,0,85,0,85,0,0,0,0,0,85,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,159,1,1,1,98,1,35,0,0,0,0,0,0,35,1,1,1,1,1,159,0,0,0,0,35,35,35,1,1,35,7,0,0,0,0,0,35,35,0,0,0,0,0,0,0,159,1,1,1,35,35,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,159,159,98,98,1,35,0,0,0,0,0,0,35,35,1,1,159,159,159,0,188,0,0,188,0,0,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,159,35,35,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,17,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,159,98,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,35,50,0,0,0,0,0,0,0,50,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,44,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,159,0,0,0,0,0,0,0,0,0,0,188,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,85,0,0,0,0,0,85,0,85,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,44,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,0,0,-1,-1,0,0,98,98,144,0,0,0,50,1,139,98,98,98,0,0,0,0,0,98,98,98,109,109,98,109,0,0,0,0,0,159,98,98,1,1,1,7,7,0,0,0,0,0,0,0,0,0,0,0,188,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,17,50,0,0,0,0,0,0,0,0,5,136,136,136,17,0,0,0,17,0,0,0,17,0,0,0,17,139,98,0,0,-1,-1,0,0,1,98,0,0,0,0,0,98,98,109,98,98,0,0,0,0,0,98,98,159,159,159,98,109,0,0,0,0,0,159,98,98,1,1,1,1,7,1,0,0,0,0,188,0,0,0,188,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,188,0,0,0,0,188,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,159,159,98,98,98,0,0,0,0,0,0,0,0,136,136,136,5,85,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,31,0,98,98,98,98,0,50,0,0,0,0,0,159,1,1,1,1,1,1,35,0,0,0,0,0,65,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,145,0,1,109,109,0,0,0,0,0,0,0,0,50,0,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,0,98,98,98,98,35,0,0,0,0,0,0,0,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,159,98,98,1,35,0,0,0,0,0,0,1,1,1,1,1,35,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,1,1,159,0,0,0,0,0,0,159,159,1,35,35,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,188,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,1,1,159,0,0,0,0,0,0,0,159,35,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,145,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,0,98,98,98,98,159,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,159,159,98,98,109,0,0,0,0,0,0,0,0,0,0,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,31,0,98,98,98,98,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,50,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,139,0,0,0,0,0,139,98,109,98,98,0,0,0,0,0,98,98,159,159,159,98,98,0,0,0,0,0,1,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,98,98,98,109,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,144,0,0,0,0,0,0,0,0,0,0,159,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,98,98,98,0,0,0,0,0,98,98,109,109,109,98,98,0,0,0,0,0,98,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,44,0,0,0,0,0,0,0,0,0,145,159,144,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,98,1,1,159,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,98,50,0,0,0,0,0,0,0,0,0,159,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,1,98,1,159,0,0,0,0,0,1,1,0,0,0,0,0,0,0,188,183,188,0,0,0,126,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,159,98,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,1,1,0,0,0,126,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,159,98,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,35,35,159,98,98,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,1,1,1,1,1,0,0,0,0,0,0,0,17,0,0,0,17,0,0,0,0,0,0,0,0,98,0,0,0,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,109,0,0,0,0,0,0,0,0,0,145,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,159,98,0,0,0,31,0,0,0,0,0,0,0,0,0,0,35,35,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,169,1,1,0,188,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,98,0,0,0,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,98,98,109,0,0,0,0,0,0,0,0,0,0,159,98,98,50,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,98,0,0,0,0,0,1,98,98,98,1,1,98,98,98,1,98,98,109,0,0,0,0,35,1,1,1,1,1,98,98,139,0,0,0,0,0,0,17,0,0,0,0,109,109,0,0,0,1,1,155,155,155,1,1,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,139,1,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"6dcddc04-c094-4b9b-8c05-b101e8f3dd27","name":"Quartz-Knight","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":19,"y":20,"z":25},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":22,"y":19,"z":25},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":7,"y":-7,"z":28},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-10,"z":17},"secretType":"BAT","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":118,"y":20,"z":3},{"x":118,"y":19,"z":3},{"x":118,"y":18,"z":3},{"x":118,"y":17,"z":3},{"x":118,"y":20,"z":4},{"x":118,"y":19,"z":4},{"x":118,"y":18,"z":4},{"x":118,"y":17,"z":4},{"x":118,"y":18,"z":5}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":112,"y":18,"z":3},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":68,"y":14,"z":6},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":96,"y":9,"z":28},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":122,"y":0,"z":25},{"x":122,"y":-1,"z":25},{"x":123,"y":0,"z":25},{"x":123,"y":-1,"z":25},{"x":124,"y":0,"z":25},{"x":124,"y":-1,"z":25},{"x":125,"y":0,"z":25},{"x":125,"y":-1,"z":25},{"x":122,"y":0,"z":26},{"x":122,"y":-1,"z":26},{"x":123,"y":0,"z":26},{"x":123,"y":-1,"z":26},{"x":124,"y":0,"z":26},{"x":124,"y":-1,"z":26},{"x":125,"y":0,"z":26},{"x":125,"y":-1,"z":26},{"x":122,"y":0,"z":27},{"x":122,"y":-1,"z":27},{"x":123,"y":0,"z":27},{"x":123,"y":-1,"z":27},{"x":124,"y":0,"z":27},{"x":124,"y":-1,"z":27},{"x":125,"y":0,"z":27},{"x":125,"y":-1,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":42,"y":21,"z":23},{"x":42,"y":20,"z":23},{"x":43,"y":21,"z":23},{"x":43,"y":20,"z":23},{"x":44,"y":21,"z":23},{"x":44,"y":20,"z":23},{"x":42,"y":21,"z":24},{"x":42,"y":20,"z":24},{"x":43,"y":21,"z":24},{"x":43,"y":20,"z":24},{"x":44,"y":21,"z":24},{"x":44,"y":20,"z":24},{"x":42,"y":21,"z":25},{"x":42,"y":20,"z":25},{"x":43,"y":21,"z":25},{"x":43,"y":20,"z":25},{"x":44,"y":21,"z":25},{"x":44,"y":20,"z":25},{"x":42,"y":21,"z":26},{"x":42,"y":20,"z":26},{"x":43,"y":21,"z":26},{"x":43,"y":20,"z":26},{"x":44,"y":21,"z":26},{"x":44,"y":20,"z":26},{"x":42,"y":21,"z":27},{"x":42,"y":20,"z":27},{"x":43,"y":21,"z":27},{"x":43,"y":20,"z":27},{"x":44,"y":21,"z":27},{"x":44,"y":20,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":27,"y":0,"z":23},{"x":27,"y":-1,"z":23},{"x":28,"y":0,"z":23},{"x":28,"y":-1,"z":23},{"x":27,"y":0,"z":24},{"x":27,"y":-1,"z":24},{"x":28,"y":0,"z":24},{"x":28,"y":-1,"z":24},{"x":27,"y":0,"z":25},{"x":27,"y":-1,"z":25},{"x":28,"y":0,"z":25},{"x":28,"y":-1,"z":25},{"x":27,"y":0,"z":26},{"x":27,"y":-1,"z":26},{"x":28,"y":0,"z":26},{"x":28,"y":-1,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":32,"y":0,"z":23},{"x":32,"y":-1,"z":23},{"x":33,"y":0,"z":23},{"x":33,"y":-1,"z":23},{"x":32,"y":0,"z":24},{"x":32,"y":-1,"z":24},{"x":33,"y":0,"z":24},{"x":33,"y":-1,"z":24},{"x":32,"y":0,"z":25},{"x":32,"y":-1,"z":25},{"x":33,"y":0,"z":25},{"x":33,"y":-1,"z":25},{"x":32,"y":0,"z":26},{"x":32,"y":-1,"z":26},{"x":33,"y":0,"z":26},{"x":33,"y":-1,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":40,"y":0,"z":7},{"x":40,"y":-1,"z":7},{"x":41,"y":0,"z":7},{"x":41,"y":-1,"z":7},{"x":40,"y":0,"z":8},{"x":40,"y":-1,"z":8},{"x":41,"y":0,"z":8},{"x":41,"y":-1,"z":8},{"x":40,"y":0,"z":9},{"x":40,"y":-1,"z":9},{"x":41,"y":0,"z":9},{"x":41,"y":-1,"z":9},{"x":40,"y":0,"z":10},{"x":40,"y":-1,"z":10},{"x":41,"y":0,"z":10},{"x":41,"y":-1,"z":10},{"x":40,"y":0,"z":11},{"x":40,"y":-1,"z":11},{"x":41,"y":0,"z":11},{"x":41,"y":-1,"z":11}]},"preRequisite":[],"mechType":"Tomb"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":42,"y":22,"z":3},{"x":42,"y":21,"z":3},{"x":42,"y":20,"z":3},{"x":43,"y":22,"z":3},{"x":43,"y":21,"z":3},{"x":43,"y":20,"z":3},{"x":44,"y":22,"z":3},{"x":44,"y":21,"z":3},{"x":44,"y":20,"z":3},{"x":42,"y":22,"z":4},{"x":42,"y":21,"z":4},{"x":42,"y":20,"z":4},{"x":43,"y":22,"z":4},{"x":43,"y":21,"z":4},{"x":43,"y":20,"z":4},{"x":44,"y":22,"z":4},{"x":44,"y":21,"z":4},{"x":44,"y":20,"z":4},{"x":42,"y":22,"z":5},{"x":42,"y":21,"z":5},{"x":42,"y":20,"z":5},{"x":43,"y":22,"z":5},{"x":43,"y":21,"z":5},{"x":43,"y":20,"z":5},{"x":44,"y":22,"z":5},{"x":44,"y":21,"z":5},{"x":44,"y":20,"z":5},{"x":42,"y":22,"z":6},{"x":42,"y":21,"z":6},{"x":42,"y":20,"z":6},{"x":43,"y":22,"z":6},{"x":43,"y":21,"z":6},{"x":43,"y":20,"z":6},{"x":44,"y":22,"z":6},{"x":44,"y":21,"z":6},{"x":44,"y":20,"z":6}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":7} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/6fac9602-c596-458f-9750-9b331e2cb845.json b/src/main/resources/dgroomdata/6fac9602-c596-458f-9750-9b331e2cb845.json new file mode 100644 index 0000000..9b3adfc --- /dev/null +++ b/src/main/resources/dgroomdata/6fac9602-c596-458f-9750-9b331e2cb845.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,50,0,0,0,0,126,126,109,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,44,98,98,0,0,0,0,126,126,109,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,109,144,0,0,0,0,0,109,98,109,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,139,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,0,144,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,0,0,0,0,109,144,0,0,109,0,0,139,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,144,109,0,0,0,0,0,0,0,0,0,139,98,109,109,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,101,0,0,0,0,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,50,0,0,0,0,0,0,0,0,0,101,0,0,0,0,109,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,101,0,0,0,0,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,109,109,98,109,0,0,0,0,0,0,0,0,0,101,0,0,0,0,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,139,0,0,101,0,0,0,0,0,0,0,0,50,98,98,109,109,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,0,0,0,101,0,0,0,98,98,0,44,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,44,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,44,0,0,0,101,0,0,0,0,0,0,0,0,144,109,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,0,50,0,101,0,0,0,0,0,0,0,0,0,101,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,109,0,0,0,0,0,0,0,0,0,101,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,50,0,0,0,0,0,0,0,0,101,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,109,109,98,109,0,0,0,0,0,144,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,126,126,0,50,0,0,0,0,0,0,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,126,126,0,0,0,0,0,0,144,0,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,109,109,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"6fac9602-c596-458f-9750-9b331e2cb845","name":"Hall","processorId":"default","properties":{},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/70a1451a-5430-40bd-b20b-13245aac910a.json b/src/main/resources/dgroomdata/70a1451a-5430-40bd-b20b-13245aac910a.json new file mode 100644 index 0000000..110bf70 --- /dev/null +++ b/src/main/resources/dgroomdata/70a1451a-5430-40bd-b20b-13245aac910a.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":19,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,1,139,98,0,0,0,0,0,0,0,139,98,98,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,109,109,0,0,0,0,0,109,109,4,98,0,0,98,50,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,98,0,0,0,0,0,0,0,0,0,0,0,98,4,18,18,0,0,0,0,0,44,4,1,1,1,1,1,1,101,144,0,1,4,4,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,98,0,0,0,0,0,0,0,0,0,0,0,109,4,0,0,0,0,0,0,0,44,1,1,1,1,1,1,1,0,0,0,1,4,67,0,0,0,0,0,0,0,0,-1,98,0,0,-1,-1,-1,-1,0,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,98,0,0,0,0,0,0,0,0,0,0,0,109,4,0,0,0,0,0,0,0,44,1,1,1,1,1,1,1,0,0,0,1,4,4,0,0,0,0,0,0,0,0,-1,98,0,0,-1,-1,-1,-1,98,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,98,0,0,17,0,0,0,0,0,0,0,0,98,4,0,0,0,0,0,0,0,44,1,1,1,1,1,1,1,0,0,0,1,4,4,18,0,0,0,0,0,0,0,-1,98,0,0,-1,-1,-1,-1,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,4,50,0,0,0,0,0,0,44,1,44,0,0,0,0,0,0,0,0,1,4,4,18,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,1,98,0,0,0,0,0,0,0,98,139,98,4,4,0,101,101,4,4,4,4,101,101,101,4,4,4,4,101,101,101,4,4,4,109,109,0,0,0,0,0,109,109,4,98,0,0,98,50,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,98,98,4,4,0,0,0,4,4,4,4,0,0,0,4,4,4,4,0,0,0,4,4,4,109,109,0,0,0,0,0,109,109,4,4,4,67,67,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,109,109,0,0,0,0,0,109,109,0,0,0,0,50,109,109,0,0,0,0,0,109,109,50,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,139,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,1,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,1,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,50,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,50,109,109,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,109,109,98,98,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,4,4,4,4,4,67,67,4,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,4,4,4,4,4,4,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,4,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,4,4,109,109,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,109,109,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,1,4,4,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,4,4,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,4,4,109,109,0,0,0,0,98,139,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,67,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,67,67,67,4,4,4,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,67,67,4,4,4,4,4,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,140,0,0,0,109,109,17,0,0,0,0,0,0,0,50,109,109,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,17,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,50,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,17,109,109,50,0,0,0,0,0,0,0,17,109,109,0,0,0,0,0,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,109,109,0,0,0,0,0,109,109,4,4,4,4,67,67,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,109,109,0,0,0,0,0,109,109,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,67,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,67,0,0,0,0,0,0,0,0,0,67,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,67,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,4,4,109,109,0,0,0,0,0,109,109,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"70a1451a-5430-40bd-b20b-13245aac910a","name":"Market","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":15,"y":-9,"z":33},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":15,"y":9,"z":47},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":7,"y":16,"z":17},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":16,"y":-7,"z":9},"secretType":"BAT","preRequisite":["superboom-1:open"]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":15,"y":0,"z":46},{"x":15,"y":-1,"z":46},{"x":16,"y":0,"z":46},{"x":16,"y":-1,"z":46},{"x":17,"y":0,"z":46},{"x":17,"y":-1,"z":46},{"x":15,"y":0,"z":47},{"x":15,"y":-1,"z":47},{"x":16,"y":0,"z":47},{"x":16,"y":-1,"z":47},{"x":17,"y":0,"z":47},{"x":17,"y":-1,"z":47},{"x":15,"y":0,"z":48},{"x":15,"y":-1,"z":48},{"x":16,"y":0,"z":48},{"x":16,"y":-1,"z":48},{"x":17,"y":0,"z":48},{"x":17,"y":-1,"z":48},{"x":15,"y":0,"z":49},{"x":15,"y":-1,"z":49},{"x":16,"y":0,"z":49},{"x":16,"y":-1,"z":49},{"x":17,"y":0,"z":49},{"x":17,"y":-1,"z":49},{"x":15,"y":0,"z":50},{"x":15,"y":-1,"z":50},{"x":16,"y":0,"z":50},{"x":16,"y":-1,"z":50},{"x":17,"y":0,"z":50},{"x":17,"y":-1,"z":50}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":3,"y":0,"z":24},{"x":3,"y":-1,"z":24},{"x":4,"y":0,"z":24},{"x":4,"y":-1,"z":24},{"x":5,"y":0,"z":24},{"x":5,"y":-1,"z":24},{"x":6,"y":0,"z":24},{"x":6,"y":-1,"z":24},{"x":3,"y":0,"z":25},{"x":3,"y":-1,"z":25},{"x":4,"y":0,"z":25},{"x":4,"y":-1,"z":25},{"x":5,"y":0,"z":25},{"x":5,"y":-1,"z":25},{"x":6,"y":0,"z":25},{"x":6,"y":-1,"z":25},{"x":3,"y":0,"z":26},{"x":3,"y":-1,"z":26},{"x":4,"y":0,"z":26},{"x":4,"y":-1,"z":26},{"x":5,"y":0,"z":26},{"x":5,"y":-1,"z":26},{"x":6,"y":0,"z":26},{"x":6,"y":-1,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":19,"y":-11,"z":8},"secretType":"ESSENCE","preRequisite":["superboom-1:open"]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":0,"z":38},{"x":3,"y":-1,"z":38},{"x":4,"y":0,"z":38},{"x":4,"y":-1,"z":38},{"x":5,"y":0,"z":38},{"x":5,"y":-1,"z":38},{"x":6,"y":0,"z":38},{"x":6,"y":-1,"z":38},{"x":3,"y":0,"z":39},{"x":3,"y":-1,"z":39},{"x":4,"y":0,"z":39},{"x":4,"y":-1,"z":39},{"x":5,"y":0,"z":39},{"x":5,"y":-1,"z":39},{"x":6,"y":0,"z":39},{"x":6,"y":-1,"z":39},{"x":3,"y":0,"z":40},{"x":3,"y":-1,"z":40},{"x":4,"y":0,"z":40},{"x":4,"y":-1,"z":40},{"x":5,"y":0,"z":40},{"x":5,"y":-1,"z":40},{"x":6,"y":0,"z":40},{"x":6,"y":-1,"z":40}]},"preRequisite":[],"mechType":"Tomb"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":52,"y":2,"z":6},{"x":52,"y":1,"z":6},{"x":52,"y":0,"z":6},{"x":52,"y":-1,"z":6},{"x":52,"y":3,"z":7},{"x":52,"y":2,"z":7},{"x":52,"y":1,"z":7},{"x":52,"y":0,"z":7},{"x":52,"y":-1,"z":7},{"x":52,"y":2,"z":8},{"x":52,"y":1,"z":8},{"x":52,"y":0,"z":8},{"x":52,"y":-1,"z":8}]},"preRequisite":[],"mechType":"BreakableWall"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":56,"y":0,"z":6},{"x":56,"y":-1,"z":6},{"x":57,"y":0,"z":6},{"x":57,"y":-1,"z":6},{"x":58,"y":0,"z":6},{"x":58,"y":-1,"z":6},{"x":59,"y":0,"z":6},{"x":59,"y":-1,"z":6},{"x":56,"y":0,"z":7},{"x":56,"y":-1,"z":7},{"x":57,"y":0,"z":7},{"x":57,"y":-1,"z":7},{"x":58,"y":0,"z":7},{"x":58,"y":-1,"z":7},{"x":59,"y":0,"z":7},{"x":59,"y":-1,"z":7},{"x":56,"y":0,"z":8},{"x":56,"y":-1,"z":8},{"x":57,"y":0,"z":8},{"x":57,"y":-1,"z":8},{"x":58,"y":0,"z":8},{"x":58,"y":-1,"z":8},{"x":59,"y":0,"z":8},{"x":59,"y":-1,"z":8}]},"preRequisite":["superboom-2:open"],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":10,"y":-3,"z":5},{"x":11,"y":-3,"z":5},{"x":12,"y":-3,"z":5},{"x":10,"y":-3,"z":6},{"x":11,"y":-3,"z":6},{"x":12,"y":-3,"z":6},{"x":10,"y":-3,"z":7},{"x":11,"y":-3,"z":7},{"x":12,"y":-3,"z":7},{"x":10,"y":-3,"z":8},{"x":11,"y":-3,"z":8},{"x":10,"y":-3,"z":9},{"x":11,"y":-3,"z":9}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/7a594650-2a42-46e5-81a6-9b7d198e9c1c.json b/src/main/resources/dgroomdata/7a594650-2a42-46e5-81a6-9b7d198e9c1c.json new file mode 100644 index 0000000..abbaf93 --- /dev/null +++ b/src/main/resources/dgroomdata/7a594650-2a42-46e5-81a6-9b7d198e9c1c.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,3,3,1,1,1,1,35,0,0,0,0,0,7,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,3,3,1,1,35,35,0,0,0,0,0,0,35,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,50,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,3,3,1,7,18,18,0,0,0,0,0,0,0,35,35,35,1,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,3,3,3,3,3,3,1,1,7,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,7,18,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,7,50,0,0,0,0,0,0,0,0,0,0,126,126,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,35,18,0,0,0,0,0,0,0,0,159,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,126,126,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,35,98,139,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,35,188,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,35,35,0,98,98,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,1,1,1,3,3,3,3,1,1,1,1,1,35,126,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,3,3,126,0,0,0,0,0,0,0,0,0,0,0,35,35,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,1,0,0,0,0,0,0,0,0,0,0,0,0,0,50,35,35,35,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,126,126,0,0,0,0,0,0,0,0,0,0,0,35,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,126,126,1,159,159,159,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,126,1,1,1,159,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,1,1,1,1,159,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,3,3,1,1,1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,159,159,159,0,0,0,0,0,35,1,1,1,1,1,98,98,98,98,1,1,1,1,1,1,98,1,98,98,98,98,98,98,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,159,159,159,159,0,0,0,0,0,159,1,1,1,1,1,98,98,98,98,1,1,1,1,1,1,1,98,98,98,98,98,98,98,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,159,159,159,159,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,159,159,159,0,0,0,0,0,18,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,159,188,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,98,0,0,0,0,0,0,98,98,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,139,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,98,98,0,0,0,31,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,139,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,31,0,0,0,0,0,188,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,35,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,3,44,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,3,0,0,0,0,31,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,98,0,0,0,0,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,0,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,188,0,0,0,0,0,31,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,159,159,159,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,18,0,0,0,0,0,0,0,18,35,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,1,1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,35,35,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,35,1,1,1,1,1,1,1,98,98,98,0,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,35,35,1,1,1,1,7,1,1,1,1,1,1,3,3,3,1,3,3,1,1,1,1,35,35,7,35,7,35,1,98,18,98,98,98,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,7,7,1,1,1,1,1,1,3,3,3,3,3,1,1,3,3,3,3,7,7,7,0,0,98,98,18,0,98,1,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,188,0,35,35,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,98,98,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,44,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,35,35,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,35,35,35,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,18,109,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,50,0,0,0,0,0,0,7,1,1,1,1,1,1,3,3,3,3,3,3,1,3,3,1,3,3,3,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,7,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,98,98,0,18,1,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"7a594650-2a42-46e5-81a6-9b7d198e9c1c","name":"super-tall","processorId":"default","properties":{},"mechanics":{"door-3":{"secretPoint":{"offsetPointList":[{"x":30,"y":55,"z":20},{"x":30,"y":54,"z":20},{"x":30,"y":53,"z":20},{"x":30,"y":52,"z":20},{"x":30,"y":51,"z":20},{"x":30,"y":50,"z":20},{"x":30,"y":49,"z":20},{"x":30,"y":48,"z":20},{"x":30,"y":47,"z":20},{"x":31,"y":55,"z":20},{"x":31,"y":54,"z":20},{"x":31,"y":53,"z":20},{"x":31,"y":52,"z":20},{"x":31,"y":51,"z":20},{"x":31,"y":50,"z":20},{"x":31,"y":49,"z":20},{"x":31,"y":48,"z":20},{"x":31,"y":47,"z":20},{"x":32,"y":55,"z":20},{"x":32,"y":54,"z":20},{"x":32,"y":53,"z":20},{"x":32,"y":52,"z":20},{"x":32,"y":51,"z":20},{"x":32,"y":50,"z":20},{"x":32,"y":49,"z":20},{"x":32,"y":48,"z":20},{"x":32,"y":47,"z":20},{"x":33,"y":55,"z":20},{"x":33,"y":54,"z":20},{"x":33,"y":53,"z":20},{"x":33,"y":52,"z":20},{"x":33,"y":51,"z":20},{"x":33,"y":50,"z":20},{"x":33,"y":49,"z":20},{"x":33,"y":48,"z":20},{"x":33,"y":47,"z":20},{"x":34,"y":55,"z":20},{"x":34,"y":54,"z":20},{"x":34,"y":53,"z":20},{"x":34,"y":52,"z":20},{"x":34,"y":51,"z":20},{"x":34,"y":50,"z":20},{"x":34,"y":49,"z":20},{"x":34,"y":48,"z":20},{"x":34,"y":47,"z":20}]},"preRequisite":["lever-3:triggered"],"mechType":"OnewayDoor"},"door-4":{"secretPoint":{"offsetPointList":[{"x":52,"y":69,"z":55},{"x":53,"y":69,"z":55},{"x":54,"y":69,"z":55},{"x":52,"y":69,"z":56},{"x":53,"y":69,"z":56},{"x":54,"y":69,"z":56},{"x":52,"y":69,"z":57},{"x":53,"y":69,"z":57},{"x":54,"y":69,"z":57}]},"preRequisite":["lever-4:triggered"],"mechType":"OnewayDoor"},"dummy-2":{"secretPoint":{"x":27,"y":72,"z":52},"preRequisite":["door-3:open"],"mechType":"Dummy"},"dummy-1":{"secretPoint":{"x":32,"y":72,"z":57},"preRequisite":["dummy-2:click"],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":51,"y":7,"z":47},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":44,"y":11,"z":30},{"x":44,"y":10,"z":30},{"x":44,"y":9,"z":30},{"x":44,"y":8,"z":30},{"x":44,"y":7,"z":30},{"x":44,"y":6,"z":30},{"x":44,"y":5,"z":30},{"x":44,"y":4,"z":30},{"x":44,"y":3,"z":30},{"x":44,"y":11,"z":31},{"x":44,"y":10,"z":31},{"x":44,"y":9,"z":31},{"x":44,"y":8,"z":31},{"x":44,"y":7,"z":31},{"x":44,"y":6,"z":31},{"x":44,"y":5,"z":31},{"x":44,"y":4,"z":31},{"x":44,"y":3,"z":31},{"x":44,"y":11,"z":32},{"x":44,"y":10,"z":32},{"x":44,"y":9,"z":32},{"x":44,"y":8,"z":32},{"x":44,"y":7,"z":32},{"x":44,"y":6,"z":32},{"x":44,"y":5,"z":32},{"x":44,"y":4,"z":32},{"x":44,"y":3,"z":32},{"x":44,"y":11,"z":33},{"x":44,"y":10,"z":33},{"x":44,"y":9,"z":33},{"x":44,"y":8,"z":33},{"x":44,"y":7,"z":33},{"x":44,"y":6,"z":33},{"x":44,"y":5,"z":33},{"x":44,"y":4,"z":33},{"x":44,"y":3,"z":33},{"x":44,"y":11,"z":34},{"x":44,"y":10,"z":34},{"x":44,"y":9,"z":34},{"x":44,"y":8,"z":34},{"x":44,"y":7,"z":34},{"x":44,"y":6,"z":34},{"x":44,"y":5,"z":34},{"x":44,"y":4,"z":34},{"x":44,"y":3,"z":34}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":10,"y":28,"z":25},"preRequisite":["door-1:open"],"triggering":"door-2"},"door-2":{"secretPoint":{"offsetPointList":[{"x":44,"y":33,"z":30},{"x":44,"y":32,"z":30},{"x":44,"y":31,"z":30},{"x":44,"y":30,"z":30},{"x":44,"y":29,"z":30},{"x":44,"y":28,"z":30},{"x":44,"y":27,"z":30},{"x":44,"y":26,"z":30},{"x":44,"y":25,"z":30},{"x":44,"y":33,"z":31},{"x":44,"y":32,"z":31},{"x":44,"y":31,"z":31},{"x":44,"y":30,"z":31},{"x":44,"y":29,"z":31},{"x":44,"y":28,"z":31},{"x":44,"y":27,"z":31},{"x":44,"y":26,"z":31},{"x":44,"y":25,"z":31},{"x":44,"y":33,"z":32},{"x":44,"y":32,"z":32},{"x":44,"y":31,"z":32},{"x":44,"y":30,"z":32},{"x":44,"y":29,"z":32},{"x":44,"y":28,"z":32},{"x":44,"y":27,"z":32},{"x":44,"y":26,"z":32},{"x":44,"y":25,"z":32},{"x":44,"y":33,"z":33},{"x":44,"y":32,"z":33},{"x":44,"y":31,"z":33},{"x":44,"y":30,"z":33},{"x":44,"y":29,"z":33},{"x":44,"y":28,"z":33},{"x":44,"y":27,"z":33},{"x":44,"y":26,"z":33},{"x":44,"y":25,"z":33},{"x":44,"y":33,"z":34},{"x":44,"y":32,"z":34},{"x":44,"y":31,"z":34},{"x":44,"y":30,"z":34},{"x":44,"y":29,"z":34},{"x":44,"y":28,"z":34},{"x":44,"y":27,"z":34},{"x":44,"y":26,"z":34},{"x":44,"y":25,"z":34}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"bat-2":{"mechType":"Secret","secretPoint":{"x":54,"y":42,"z":9},"secretType":"BAT","preRequisite":["door-2:open"]},"chests":{"mechType":"Secret","secretPoint":{"x":37,"y":72,"z":52},"secretType":"CHEST","preRequisite":["dummy-1:click"]},"bat-1":{"mechType":"Secret","secretPoint":{"x":4,"y":1,"z":2},"secretType":"BAT","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":9,"y":31,"z":7},{"x":9,"y":30,"z":7},{"x":9,"y":29,"z":7},{"x":9,"y":28,"z":7},{"x":9,"y":31,"z":8},{"x":9,"y":30,"z":8},{"x":9,"y":29,"z":8},{"x":9,"y":28,"z":8}]},"preRequisite":["door-2:open"],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":33,"y":32,"z":54},"secretType":"ITEM_DROP","preRequisite":["door-1:open"]},"lever-3":{"mechType":"OnewayLever","leverPoint":{"x":13,"y":61,"z":8},"preRequisite":["door-2:open"],"triggering":"door-3"},"lever-4":{"mechType":"OnewayLever","leverPoint":{"x":54,"y":72,"z":52},"preRequisite":["door-3:open"],"triggering":"door-4"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":31,"y":4,"z":22},{"x":31,"y":3,"z":22},{"x":32,"y":4,"z":22},{"x":32,"y":3,"z":22},{"x":33,"y":4,"z":22},{"x":33,"y":3,"z":22},{"x":31,"y":4,"z":23},{"x":31,"y":3,"z":23},{"x":32,"y":4,"z":23},{"x":32,"y":3,"z":23},{"x":33,"y":4,"z":23},{"x":33,"y":3,"z":23},{"x":31,"y":4,"z":24},{"x":31,"y":3,"z":24},{"x":32,"y":4,"z":24},{"x":32,"y":3,"z":24},{"x":33,"y":4,"z":24},{"x":33,"y":3,"z":24},{"x":31,"y":4,"z":25},{"x":31,"y":3,"z":25},{"x":32,"y":4,"z":25},{"x":32,"y":3,"z":25},{"x":33,"y":4,"z":25},{"x":33,"y":3,"z":25}]},"preRequisite":["door-1:open"],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":31,"y":4,"z":39},{"x":31,"y":3,"z":39},{"x":32,"y":4,"z":39},{"x":32,"y":3,"z":39},{"x":33,"y":4,"z":39},{"x":33,"y":3,"z":39},{"x":31,"y":4,"z":40},{"x":31,"y":3,"z":40},{"x":32,"y":4,"z":40},{"x":32,"y":3,"z":40},{"x":33,"y":4,"z":40},{"x":33,"y":3,"z":40},{"x":31,"y":4,"z":41},{"x":31,"y":3,"z":41},{"x":32,"y":4,"z":41},{"x":32,"y":3,"z":41},{"x":33,"y":4,"z":41},{"x":33,"y":3,"z":41},{"x":31,"y":4,"z":42},{"x":31,"y":3,"z":42},{"x":32,"y":4,"z":42},{"x":32,"y":3,"z":42},{"x":33,"y":4,"z":42},{"x":33,"y":3,"z":42}]},"preRequisite":["door-1:open"],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":23,"y":48,"z":8},{"x":23,"y":47,"z":8},{"x":24,"y":48,"z":8},{"x":24,"y":47,"z":8},{"x":25,"y":48,"z":8},{"x":25,"y":47,"z":8},{"x":23,"y":48,"z":9},{"x":23,"y":47,"z":9},{"x":24,"y":48,"z":9},{"x":24,"y":47,"z":9},{"x":25,"y":48,"z":9},{"x":25,"y":47,"z":9}]},"preRequisite":["door-2:open"],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":23,"y":48,"z":14},{"x":23,"y":47,"z":14},{"x":24,"y":48,"z":14},{"x":24,"y":47,"z":14},{"x":25,"y":48,"z":14},{"x":25,"y":47,"z":14},{"x":23,"y":48,"z":15},{"x":23,"y":47,"z":15},{"x":24,"y":48,"z":15},{"x":24,"y":47,"z":15},{"x":25,"y":48,"z":15},{"x":25,"y":47,"z":15}]},"preRequisite":["door-2:open"],"mechType":"Tomb"},"prince-2":{"secretPoint":{"offsetPointList":[{"x":4,"y":29,"z":11},{"x":4,"y":28,"z":11},{"x":5,"y":29,"z":11},{"x":5,"y":28,"z":11},{"x":6,"y":29,"z":11},{"x":6,"y":28,"z":11},{"x":4,"y":29,"z":12},{"x":4,"y":28,"z":12},{"x":5,"y":29,"z":12},{"x":5,"y":28,"z":12},{"x":6,"y":29,"z":12},{"x":6,"y":28,"z":12},{"x":4,"y":29,"z":13},{"x":4,"y":28,"z":13},{"x":5,"y":29,"z":13},{"x":5,"y":28,"z":13},{"x":6,"y":29,"z":13},{"x":6,"y":28,"z":13},{"x":4,"y":29,"z":14},{"x":4,"y":28,"z":14},{"x":5,"y":29,"z":14},{"x":5,"y":28,"z":14},{"x":6,"y":29,"z":14},{"x":6,"y":28,"z":14}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":48,"y":72,"z":44},{"x":48,"y":71,"z":44},{"x":49,"y":72,"z":44},{"x":49,"y":71,"z":44},{"x":50,"y":72,"z":44},{"x":50,"y":71,"z":44},{"x":51,"y":72,"z":44},{"x":51,"y":71,"z":44},{"x":52,"y":72,"z":44},{"x":52,"y":71,"z":44},{"x":53,"y":72,"z":44},{"x":53,"y":71,"z":44},{"x":48,"y":72,"z":45},{"x":48,"y":71,"z":45},{"x":49,"y":72,"z":45},{"x":49,"y":71,"z":45},{"x":50,"y":72,"z":45},{"x":50,"y":71,"z":45},{"x":51,"y":72,"z":45},{"x":51,"y":71,"z":45},{"x":52,"y":72,"z":45},{"x":52,"y":71,"z":45},{"x":53,"y":72,"z":45},{"x":53,"y":71,"z":45},{"x":48,"y":72,"z":46},{"x":48,"y":71,"z":46},{"x":49,"y":72,"z":46},{"x":49,"y":71,"z":46},{"x":50,"y":72,"z":46},{"x":50,"y":71,"z":46},{"x":51,"y":72,"z":46},{"x":51,"y":71,"z":46},{"x":52,"y":72,"z":46},{"x":52,"y":71,"z":46},{"x":53,"y":72,"z":46},{"x":53,"y":71,"z":46},{"x":48,"y":72,"z":47},{"x":48,"y":71,"z":47},{"x":49,"y":72,"z":47},{"x":49,"y":71,"z":47},{"x":50,"y":72,"z":47},{"x":50,"y":71,"z":47},{"x":51,"y":72,"z":47},{"x":51,"y":71,"z":47},{"x":52,"y":72,"z":47},{"x":52,"y":71,"z":47},{"x":53,"y":72,"z":47},{"x":53,"y":71,"z":47},{"x":48,"y":72,"z":48},{"x":48,"y":71,"z":48},{"x":49,"y":72,"z":48},{"x":49,"y":71,"z":48},{"x":50,"y":72,"z":48},{"x":50,"y":71,"z":48},{"x":51,"y":72,"z":48},{"x":51,"y":71,"z":48},{"x":52,"y":72,"z":48},{"x":52,"y":71,"z":48},{"x":53,"y":72,"z":48},{"x":53,"y":71,"z":48}]},"preRequisite":["door-3:open"],"mechType":"Tomb"},"fairysoul-8":{"secretPoint":{"x":44,"y":49,"z":43},"preRequisite":["door-2:open"],"mechType":"Fairysoul"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/7d975e04-15c8-40cb-8c12-d664edc1b0d7.json b/src/main/resources/dgroomdata/7d975e04-15c8-40cb-8c12-d664edc1b0d7.json new file mode 100644 index 0000000..5673f88 --- /dev/null +++ b/src/main/resources/dgroomdata/7d975e04-15c8-40cb-8c12-d664edc1b0d7.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,50,0,0,0,0,0,50,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,50,0,0,0,0,0,50,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,0,0,0,0,0,5,5,98,98,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,139,139,0,0,0,0,0,0,5,5,18,139,139,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,139,139,0,0,0,0,0,0,0,0,0,139,139,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,50,0,0,0,0,0,0,0,0,0,0,0,50,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,23,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,69,-1,-1,-1,-1,0,0,0,50,0,0,0,0,0,0,0,-1,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,23,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,50,0,0,0,0,0,0,0,0,0,0,0,50,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,139,139,0,0,0,0,0,0,0,0,0,139,139,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,139,139,18,18,0,0,0,0,0,0,0,139,139,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,98,0,0,0,0,0,0,0,98,98,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,5,5,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,5,5,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,50,0,0,0,0,0,50,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"7d975e04-15c8-40cb-8c12-d664edc1b0d7","name":"Arrow-trap","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":-1,"z":15},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":8,"y":0,"z":16},"preRequisite":["crypt-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":24,"y":3,"z":14},{"x":24,"y":2,"z":14},{"x":24,"y":1,"z":14},{"x":24,"y":0,"z":14},{"x":24,"y":-1,"z":14},{"x":24,"y":3,"z":15},{"x":24,"y":2,"z":15},{"x":24,"y":1,"z":15},{"x":24,"y":0,"z":15},{"x":24,"y":-1,"z":15},{"x":24,"y":3,"z":16},{"x":24,"y":2,"z":16},{"x":24,"y":1,"z":16},{"x":24,"y":0,"z":16},{"x":24,"y":-1,"z":16},{"x":24,"y":3,"z":17},{"x":24,"y":2,"z":17},{"x":24,"y":1,"z":17},{"x":24,"y":0,"z":17},{"x":24,"y":-1,"z":17},{"x":24,"y":3,"z":18},{"x":24,"y":2,"z":18},{"x":24,"y":1,"z":18},{"x":24,"y":0,"z":18},{"x":24,"y":-1,"z":18}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":9,"y":0,"z":15},{"x":9,"y":-1,"z":15},{"x":10,"y":0,"z":15},{"x":10,"y":-1,"z":15},{"x":11,"y":0,"z":15},{"x":11,"y":-1,"z":15},{"x":12,"y":0,"z":15},{"x":12,"y":-1,"z":15},{"x":9,"y":0,"z":16},{"x":9,"y":-1,"z":16},{"x":10,"y":0,"z":16},{"x":10,"y":-1,"z":16},{"x":11,"y":0,"z":16},{"x":11,"y":-1,"z":16},{"x":12,"y":0,"z":16},{"x":12,"y":-1,"z":16},{"x":9,"y":0,"z":17},{"x":9,"y":-1,"z":17},{"x":10,"y":0,"z":17},{"x":10,"y":-1,"z":17},{"x":11,"y":0,"z":17},{"x":11,"y":-1,"z":17},{"x":12,"y":0,"z":17},{"x":12,"y":-1,"z":17}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/7dd6596f-c647-4144-9eec-fb4690e12251.json b/src/main/resources/dgroomdata/7dd6596f-c647-4144-9eec-fb4690e12251.json new file mode 100644 index 0000000..0114055 --- /dev/null +++ b/src/main/resources/dgroomdata/7dd6596f-c647-4144-9eec-fb4690e12251.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,0,0,0,0,0,98,98,49,0,0,0,0,0,49,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,18,0,0,0,0,0,139,139,0,0,0,0,0,0,0,49,1,98,109,109,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,101,101,101,101,98,98,98,98,-1,-1,-1,-1,-1,98,98,98,0,161,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,161,98,98,144,0,0,0,0,0,144,98,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,139,98,98,139,0,0,0,0,50,139,1,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,3,109,109,109,109,1,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,98,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,159,159,159,159,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,1,109,0,0,161,0,0,0,0,98,98,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"7dd6596f-c647-4144-9eec-fb4690e12251","name":"end","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":-1,"z":7},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":8,"y":14,"z":6},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":14,"y":6,"z":11},{"x":14,"y":5,"z":11},{"x":14,"y":4,"z":11},{"x":14,"y":3,"z":11},{"x":14,"y":2,"z":11},{"x":14,"y":1,"z":11},{"x":14,"y":0,"z":11},{"x":14,"y":-1,"z":11},{"x":15,"y":6,"z":11},{"x":15,"y":5,"z":11},{"x":15,"y":4,"z":11},{"x":15,"y":3,"z":11},{"x":15,"y":2,"z":11},{"x":15,"y":1,"z":11},{"x":15,"y":0,"z":11},{"x":15,"y":-1,"z":11},{"x":16,"y":6,"z":11},{"x":16,"y":5,"z":11},{"x":16,"y":4,"z":11},{"x":16,"y":3,"z":11},{"x":16,"y":2,"z":11},{"x":16,"y":1,"z":11},{"x":16,"y":0,"z":11},{"x":16,"y":-1,"z":11},{"x":17,"y":6,"z":11},{"x":17,"y":5,"z":11},{"x":17,"y":4,"z":11},{"x":17,"y":3,"z":11},{"x":17,"y":2,"z":11},{"x":17,"y":1,"z":11},{"x":17,"y":0,"z":11},{"x":17,"y":-1,"z":11},{"x":18,"y":6,"z":11},{"x":18,"y":5,"z":11},{"x":18,"y":4,"z":11},{"x":18,"y":3,"z":11},{"x":18,"y":2,"z":11},{"x":18,"y":1,"z":11},{"x":18,"y":0,"z":11},{"x":18,"y":-1,"z":11}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"door-2":{"secretPoint":{"offsetPointList":[{"x":6,"y":10,"z":6},{"x":7,"y":10,"z":6},{"x":8,"y":10,"z":6},{"x":9,"y":10,"z":6},{"x":10,"y":10,"z":6},{"x":6,"y":10,"z":7},{"x":7,"y":10,"z":7},{"x":8,"y":10,"z":7},{"x":9,"y":10,"z":7},{"x":10,"y":10,"z":7},{"x":6,"y":10,"z":8},{"x":7,"y":10,"z":8},{"x":8,"y":10,"z":8},{"x":9,"y":10,"z":8},{"x":10,"y":10,"z":8},{"x":6,"y":10,"z":9},{"x":7,"y":10,"z":9},{"x":8,"y":10,"z":9},{"x":9,"y":10,"z":9},{"x":10,"y":10,"z":9},{"x":6,"y":10,"z":10},{"x":7,"y":10,"z":10},{"x":8,"y":10,"z":10},{"x":9,"y":10,"z":10},{"x":10,"y":10,"z":10}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"essence-1":{"mechType":"Secret","secretPoint":{"x":7,"y":-7,"z":3},"secretType":"ESSENCE","preRequisite":["superboom-1:open:::::::"]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":-8,"z":3},{"x":15,"y":-9,"z":3},{"x":16,"y":-8,"z":3},{"x":16,"y":-9,"z":3},{"x":17,"y":-8,"z":3},{"x":17,"y":-9,"z":3},{"x":15,"y":-8,"z":4},{"x":15,"y":-9,"z":4},{"x":16,"y":-8,"z":4},{"x":16,"y":-9,"z":4},{"x":17,"y":-8,"z":4},{"x":17,"y":-9,"z":4},{"x":15,"y":-8,"z":5},{"x":15,"y":-9,"z":5},{"x":16,"y":-8,"z":5},{"x":16,"y":-9,"z":5},{"x":17,"y":-8,"z":5},{"x":17,"y":-9,"z":5},{"x":15,"y":-8,"z":6},{"x":15,"y":-9,"z":6},{"x":16,"y":-8,"z":6},{"x":16,"y":-9,"z":6},{"x":17,"y":-8,"z":6},{"x":17,"y":-9,"z":6}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":-6,"z":19},{"x":6,"y":-7,"z":19},{"x":7,"y":-5,"z":19},{"x":7,"y":-6,"z":19},{"x":7,"y":-7,"z":19},{"x":8,"y":-5,"z":19},{"x":8,"y":-6,"z":19},{"x":8,"y":-7,"z":19}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/8116e928-56f1-4e0b-933a-f86b841938c8.json b/src/main/resources/dgroomdata/8116e928-56f1-4e0b-933a-f86b841938c8.json new file mode 100644 index 0000000..9b0b1be --- /dev/null +++ b/src/main/resources/dgroomdata/8116e928-56f1-4e0b-933a-f86b841938c8.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":35,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,139,50,0,0,0,0,109,109,4,109,109,0,0,0,0,0,0,0,109,109,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,163,5,0,0,0,0,0,0,0,144,67,144,0,0,0,0,0,0,0,0,0,139,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,163,5,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,5,134,134,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,5,5,134,0,0,0,0,0,0,0,0,0,67,144,0,0,0,0,0,0,0,0,0,0,144,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,50,134,134,5,0,0,0,0,0,0,0,0,144,67,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,50,0,67,0,5,136,0,0,0,0,0,0,0,0,109,1,159,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,109,0,0,0,0,1,1,0,0,0,0,0,109,109,1,109,136,136,0,0,0,0,0,0,0,0,109,109,109,144,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,1,0,109,0,0,0,0,139,1,0,0,0,0,0,109,1,1,109,0,5,164,0,0,0,0,0,0,0,139,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,106,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,139,0,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,109,109,0,0,0,0,0,0,109,109,144,0,0,1,144,0,0,1,144,0,144,1,1,144,0,0,144,98,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,98,98,144,0,0,0,144,0,98,159,159,159,159,159,159,159,159,159,159,159,159,1,1,159,159,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,18,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,98,98,159,159,159,159,159,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,101,0,0,0,109,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,0,1,0,0,109,101,0,0,0,109,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,109,101,0,0,0,109,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,35,1,1,1,109,101,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,98,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,159,18,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,98,109,109,109,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,67,1,18,109,109,109,18,1,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,18,18,0,0,0,0,18,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,67,18,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,18,109,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,98,109,18,0,0,0,0,18,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,67,18,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,4,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,67,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,4,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,67,0,0,0,0,0,0,0,67,1,1,1,159,159,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,98,0,0,0,0,0,0,0,98,13,1,4,0,0,0,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,98,0,0,0,0,0,0,0,98,98,98,109,109,109,109,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,50,0,0,0,0,0,0,0,50,1,1,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,98,109,109,109,98,1,1,0,0,0,0,0,0,0,0,0,1,1,98,109,109,109,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,159,159,159,0,109,0,0,0,0,0,0,0,0,0,0,0,109,0,159,159,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,159,0,109,0,0,0,0,0,0,0,0,0,0,0,109,0,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,159,0,109,0,0,0,0,0,0,0,0,0,0,0,109,0,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,50,0,0,0,0,0,50,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"8116e928-56f1-4e0b-933a-f86b841938c8","name":"Spider","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":41,"y":-42,"z":23},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":53,"y":13,"z":7},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":35,"y":-20,"z":59},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":43,"y":16,"z":29},{"x":43,"y":15,"z":29},{"x":43,"y":14,"z":29},{"x":43,"y":13,"z":29},{"x":43,"y":16,"z":30},{"x":43,"y":15,"z":30},{"x":43,"y":14,"z":30},{"x":43,"y":13,"z":30},{"x":43,"y":16,"z":31},{"x":43,"y":15,"z":31},{"x":43,"y":14,"z":31},{"x":43,"y":13,"z":31},{"x":43,"y":16,"z":32},{"x":43,"y":15,"z":32},{"x":43,"y":14,"z":32},{"x":43,"y":13,"z":32},{"x":43,"y":16,"z":33},{"x":43,"y":15,"z":33},{"x":43,"y":14,"z":33},{"x":43,"y":13,"z":33}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":36,"y":23,"z":31},"preRequisite":[],"triggering":"door-1"},"bat-1":{"mechType":"Secret","secretPoint":{"x":9,"y":16,"z":27},"secretType":"BAT","preRequisite":[""]},"chest-6":{"mechType":"Secret","secretPoint":{"x":36,"y":14,"z":31},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-4":{"mechType":"Secret","secretPoint":{"x":14,"y":14,"z":27},"secretType":"CHEST","preRequisite":[""]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":36,"y":16,"z":7},{"x":36,"y":15,"z":7},{"x":36,"y":14,"z":7},{"x":36,"y":13,"z":7},{"x":36,"y":16,"z":8},{"x":36,"y":15,"z":8},{"x":36,"y":14,"z":8},{"x":36,"y":13,"z":8},{"x":36,"y":16,"z":9},{"x":36,"y":15,"z":9},{"x":36,"y":14,"z":9},{"x":36,"y":13,"z":9}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":48,"y":22,"z":32},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":37,"y":21,"z":24},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":37,"y":22,"z":29},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":40,"y":14,"z":12},{"x":40,"y":13,"z":12},{"x":41,"y":14,"z":12},{"x":41,"y":13,"z":12},{"x":42,"y":14,"z":12},{"x":42,"y":13,"z":12},{"x":40,"y":14,"z":13},{"x":40,"y":13,"z":13},{"x":41,"y":14,"z":13},{"x":41,"y":13,"z":13},{"x":42,"y":14,"z":13},{"x":42,"y":13,"z":13},{"x":40,"y":14,"z":14},{"x":40,"y":13,"z":14},{"x":41,"y":14,"z":14},{"x":41,"y":13,"z":14},{"x":42,"y":14,"z":14},{"x":42,"y":13,"z":14}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":47,"y":14,"z":12},{"x":47,"y":13,"z":12},{"x":48,"y":14,"z":12},{"x":48,"y":13,"z":12},{"x":49,"y":14,"z":12},{"x":49,"y":13,"z":12},{"x":47,"y":14,"z":13},{"x":47,"y":13,"z":13},{"x":48,"y":14,"z":13},{"x":48,"y":13,"z":13},{"x":49,"y":14,"z":13},{"x":49,"y":13,"z":13},{"x":47,"y":14,"z":14},{"x":47,"y":13,"z":14},{"x":48,"y":14,"z":14},{"x":48,"y":13,"z":14},{"x":49,"y":14,"z":14},{"x":49,"y":13,"z":14}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":38,"y":4,"z":32},{"x":38,"y":3,"z":32},{"x":39,"y":4,"z":32},{"x":39,"y":3,"z":32},{"x":40,"y":4,"z":32},{"x":40,"y":3,"z":32},{"x":38,"y":4,"z":33},{"x":38,"y":3,"z":33},{"x":39,"y":4,"z":33},{"x":39,"y":3,"z":33},{"x":40,"y":4,"z":33},{"x":40,"y":3,"z":33},{"x":38,"y":4,"z":34},{"x":38,"y":3,"z":34},{"x":39,"y":4,"z":34},{"x":39,"y":3,"z":34},{"x":40,"y":4,"z":34},{"x":40,"y":3,"z":34},{"x":38,"y":4,"z":35},{"x":38,"y":3,"z":35},{"x":39,"y":4,"z":35},{"x":39,"y":3,"z":35},{"x":40,"y":4,"z":35},{"x":40,"y":3,"z":35},{"x":38,"y":4,"z":36},{"x":38,"y":3,"z":36},{"x":39,"y":4,"z":36},{"x":39,"y":3,"z":36},{"x":40,"y":4,"z":36},{"x":40,"y":3,"z":36}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":9} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/81cf3e0b-70c5-4803-9169-7e7864b096ce.json b/src/main/resources/dgroomdata/81cf3e0b-70c5-4803-9169-7e7864b096ce.json new file mode 100644 index 0000000..cc29dd3 --- /dev/null +++ b/src/main/resources/dgroomdata/81cf3e0b-70c5-4803-9169-7e7864b096ce.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":62,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,-1,0,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,139,0,0,0,0,0,0,0,0,0,0,0,139,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,139,0,0,0,0,0,0,0,0,0,0,0,139,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,1,98,0,0,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,98,98,0,0,0,0,0,0,0,0,0,109,98,98,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,139,0,0,0,0,0,0,0,0,0,0,0,139,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,23,0,0,0,0,0,0,0,0,0,0,0,0,0,23,98,35,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,139,0,0,0,0,0,0,0,0,0,0,0,139,98,98,35,35,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,98,98,0,0,0,0,0,0,0,0,0,35,35,49,35,35,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,35,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"81cf3e0b-70c5-4803-9169-7e7864b096ce","name":"Trap-hard","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":8,"y":20,"z":14},"secretType":"CHEST","preRequisite":["door-2:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":27,"y":1,"z":22},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":5,"y":13,"z":27},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":22,"y":3,"z":3},{"x":22,"y":2,"z":3},{"x":22,"y":1,"z":3},{"x":22,"y":0,"z":3},{"x":22,"y":-1,"z":3},{"x":22,"y":3,"z":4},{"x":22,"y":2,"z":4},{"x":22,"y":1,"z":4},{"x":22,"y":0,"z":4},{"x":22,"y":-1,"z":4},{"x":22,"y":3,"z":5},{"x":22,"y":2,"z":5},{"x":22,"y":1,"z":5},{"x":22,"y":0,"z":5},{"x":22,"y":-1,"z":5},{"x":22,"y":3,"z":6},{"x":22,"y":2,"z":6},{"x":22,"y":1,"z":6},{"x":22,"y":0,"z":6},{"x":22,"y":-1,"z":6}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":27,"y":20,"z":23},"preRequisite":["door-2:open"],"triggering":"door-1"},"door-2":{"secretPoint":{"offsetPointList":[{"x":26,"y":15,"z":14},{"x":26,"y":14,"z":14},{"x":26,"y":13,"z":14},{"x":26,"y":12,"z":14},{"x":26,"y":11,"z":14},{"x":27,"y":15,"z":14},{"x":27,"y":14,"z":14},{"x":27,"y":13,"z":14},{"x":27,"y":12,"z":14},{"x":27,"y":11,"z":14},{"x":28,"y":15,"z":14},{"x":28,"y":14,"z":14},{"x":28,"y":13,"z":14},{"x":28,"y":12,"z":14},{"x":28,"y":11,"z":14},{"x":29,"y":15,"z":14},{"x":29,"y":14,"z":14},{"x":29,"y":13,"z":14},{"x":29,"y":12,"z":14},{"x":29,"y":11,"z":14}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":3,"y":13,"z":28},"preRequisite":[],"triggering":"door-2"},"bat-1":{"mechType":"Secret","secretPoint":{"x":9,"y":19,"z":23},"secretType":"BAT","preRequisite":["door-2:open"]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":21,"y":0,"z":26},{"x":21,"y":-1,"z":26},{"x":22,"y":0,"z":26},{"x":22,"y":-1,"z":26},{"x":23,"y":0,"z":26},{"x":23,"y":-1,"z":26},{"x":24,"y":0,"z":26},{"x":24,"y":-1,"z":26},{"x":21,"y":0,"z":27},{"x":21,"y":-1,"z":27},{"x":22,"y":0,"z":27},{"x":22,"y":-1,"z":27},{"x":23,"y":0,"z":27},{"x":23,"y":-1,"z":27},{"x":24,"y":0,"z":27},{"x":24,"y":-1,"z":27},{"x":21,"y":0,"z":28},{"x":21,"y":-1,"z":28},{"x":22,"y":0,"z":28},{"x":22,"y":-1,"z":28},{"x":23,"y":0,"z":28},{"x":23,"y":-1,"z":28},{"x":24,"y":0,"z":28},{"x":24,"y":-1,"z":28}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":0,"z":26},{"x":8,"y":-1,"z":26},{"x":9,"y":0,"z":26},{"x":9,"y":-1,"z":26},{"x":10,"y":0,"z":26},{"x":10,"y":-1,"z":26},{"x":11,"y":0,"z":26},{"x":11,"y":-1,"z":26},{"x":8,"y":0,"z":27},{"x":8,"y":-1,"z":27},{"x":9,"y":0,"z":27},{"x":9,"y":-1,"z":27},{"x":10,"y":0,"z":27},{"x":10,"y":-1,"z":27},{"x":11,"y":0,"z":27},{"x":11,"y":-1,"z":27},{"x":8,"y":0,"z":28},{"x":8,"y":-1,"z":28},{"x":9,"y":0,"z":28},{"x":9,"y":-1,"z":28},{"x":10,"y":0,"z":28},{"x":10,"y":-1,"z":28},{"x":11,"y":0,"z":28},{"x":11,"y":-1,"z":28}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json b/src/main/resources/dgroomdata/83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json new file mode 100644 index 0000000..6f621e7 --- /dev/null +++ b/src/main/resources/dgroomdata/83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,98,1,1,1,0,0,0,0,4,101,4,0,0,0,0,0,0,0,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,98,1,1,1,0,0,0,0,101,0,101,0,0,0,0,0,0,0,1,1,188,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,1,1,0,0,0,0,101,0,101,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,101,0,101,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,101,0,101,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,4,101,4,0,0,0,0,1,82,1,1,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,82,82,98,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,188,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,164,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,1,50,5,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"83e1ab6b-ad44-469e-a6bf-71c6bebcab4b","name":"Sand-Dragon","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":16,"z":5},"secretType":"CHEST","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":0,"z":2},{"x":15,"y":-1,"z":2},{"x":16,"y":0,"z":2},{"x":16,"y":-1,"z":2},{"x":17,"y":0,"z":2},{"x":17,"y":-1,"z":2},{"x":15,"y":0,"z":3},{"x":15,"y":-1,"z":3},{"x":16,"y":0,"z":3},{"x":16,"y":-1,"z":3},{"x":17,"y":0,"z":3},{"x":17,"y":-1,"z":3},{"x":15,"y":0,"z":4},{"x":15,"y":-1,"z":4},{"x":16,"y":0,"z":4},{"x":16,"y":-1,"z":4},{"x":17,"y":0,"z":4},{"x":17,"y":-1,"z":4},{"x":15,"y":0,"z":5},{"x":15,"y":-1,"z":5},{"x":16,"y":0,"z":5},{"x":16,"y":-1,"z":5},{"x":17,"y":0,"z":5},{"x":17,"y":-1,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"journal-1":{"secretPoint":{"x":7,"y":-2,"z":23},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/845aec22-bc9e-4d50-b8de-db67188232e9.json b/src/main/resources/dgroomdata/845aec22-bc9e-4d50-b8de-db67188232e9.json new file mode 100644 index 0000000..15cc0bf --- /dev/null +++ b/src/main/resources/dgroomdata/845aec22-bc9e-4d50-b8de-db67188232e9.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"845aec22-bc9e-4d50-b8de-db67188232e9","name":"Temple","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":15,"y":-16,"z":16},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":11,"y":8,"z":3},"secretType":"ITEM_DROP","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-7,"z":6},"secretType":"BAT","preRequisite":[]}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/86a3b53b-6ede-43bd-8988-135001149d4b.json b/src/main/resources/dgroomdata/86a3b53b-6ede-43bd-8988-135001149d4b.json new file mode 100644 index 0000000..387d38c --- /dev/null +++ b/src/main/resources/dgroomdata/86a3b53b-6ede-43bd-8988-135001149d4b.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,140,50,134,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,-1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,-1,4,98,109,0,0,0,0,1,1,98,0,0,0,0,109,1,109,0,0,144,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,17,4,98,109,0,0,0,0,109,159,44,0,0,0,0,109,109,50,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,-1,0,0,0,0,0,0,0,159,144,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,-1,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,-1,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,134,17,-1,0,0,0,0,0,0,144,159,144,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,47,47,47,4,4,98,109,0,0,0,0,44,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,98,109,0,0,0,0,44,159,44,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,67,67,4,0,0,0,0,0,0,1,98,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,67,67,4,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,109,109,0,0,0,0,0,109,109,0,0,0,0,109,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,98,98,0,0,0,0,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,4,4,101,101,101,4,1,1,67,0,39,67,1,1,67,101,101,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,4,1,1,159,7,0,0,159,1,67,0,0,0,67,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,67,1,1,1,1,1,159,1,1,4,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,4,0,0,0,67,1,1,1,1,1,1,1,1,67,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1,67,67,67,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"86a3b53b-6ede-43bd-8988-135001149d4b","name":"Mushroom","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":15,"y":10,"z":14},"secretType":"CHEST","preRequisite":["mushroom:click"]},"Winona":{"secretPoint":{"x":5,"y":-1,"z":6},"preRequisite":["superboom-1:open"],"mechType":"Npc"},"mushroom":{"secretPoint":{"x":13,"y":-1,"z":8},"preRequisite":[],"mechType":"Dummy"},"journal-1":{"secretPoint":{"x":21,"y":10,"z":17},"preRequisite":["mushroom:click"],"mechType":"Journal"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":2,"z":11},{"x":8,"y":1,"z":11},{"x":8,"y":0,"z":11},{"x":8,"y":3,"z":12},{"x":8,"y":2,"z":12},{"x":8,"y":1,"z":12},{"x":8,"y":0,"z":12},{"x":8,"y":-1,"z":12},{"x":8,"y":4,"z":13},{"x":8,"y":3,"z":13},{"x":8,"y":2,"z":13},{"x":8,"y":1,"z":13},{"x":8,"y":0,"z":13},{"x":8,"y":-1,"z":13},{"x":8,"y":4,"z":14},{"x":8,"y":3,"z":14},{"x":8,"y":0,"z":14}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json b/src/main/resources/dgroomdata/8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json new file mode 100644 index 0000000..821704f --- /dev/null +++ b/src/main/resources/dgroomdata/8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,109,85,0,0,85,0,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,85,0,0,85,0,109,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,89,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,65,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,85,0,0,85,0,0,0,0,4,0,0,0,67,4,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,98,98,4,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,98,98,4,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,144,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,171,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,67,0,0,0,0,0,0,0,171,171,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,171,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,50,0,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,98,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"8b4ec0bf-b783-4e66-b5fa-89493ac6efa1","name":"Mural","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":13,"z":8},"secretType":"CHEST","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":19,"y":10,"z":15},{"x":19,"y":9,"z":15},{"x":19,"y":8,"z":15},{"x":19,"y":7,"z":15},{"x":19,"y":11,"z":16},{"x":19,"y":10,"z":16},{"x":19,"y":9,"z":16},{"x":19,"y":8,"z":16},{"x":19,"y":7,"z":16},{"x":19,"y":9,"z":17},{"x":19,"y":8,"z":17},{"x":19,"y":7,"z":17}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/8c184746-6857-480a-958e-f22e09bb1295.json b/src/main/resources/dgroomdata/8c184746-6857-480a-958e-f22e09bb1295.json new file mode 100644 index 0000000..cb21b73 --- /dev/null +++ b/src/main/resources/dgroomdata/8c184746-6857-480a-958e-f22e09bb1295.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":49,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,159,98,98,0,98,0,0,0,0,0,98,0,98,1,98,1,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,139,159,144,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,139,159,44,0,0,0,0,0,0,0,0,0,0,134,98,98,1,98,98,98,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,159,44,0,0,0,0,0,0,0,0,0,0,134,1,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,144,159,44,0,0,0,0,0,0,0,0,0,0,134,98,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,1,98,98,98,0,0,0,0,0,0,0,0,0,134,98,98,98,98,98,1,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,-1,-1,-1,98,98,98,98,98,1,0,0,0,1,98,98,98,98,98,98,98,98,98,1,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,98,98,1,98,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,139,98,134,85,17,0,0,0,0,0,17,169,1,98,98,98,159,159,159,159,159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,1,1,98,98,144,0,139,144,144,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,164,5,5,98,1,139,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,5,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,0,0,0,0,109,0,0,0,0,0,0,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,98,0,0,0,0,0,0,98,98,50,0,0,0,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,134,134,134,134,98,0,0,0,18,98,98,98,98,98,0,0,0,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,98,98,98,98,98,0,0,0,0,1,98,98,98,98,0,101,101,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,98,98,98,98,98,98,0,0,0,18,98,1,98,98,98,0,0,0,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,-1,98,0,0,0,98,44,44,0,144,1,1,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,-1,98,0,0,0,98,159,159,159,159,98,98,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,-1,98,0,0,0,98,159,159,159,159,98,1,98,98,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,98,98,98,98,98,159,159,98,98,98,98,98,0,0,0,144,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,98,98,98,1,98,98,98,98,98,1,98,98,98,1,98,98,98,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,1,98,98,98,98,98,98,1,98,98,98,98,98,98,1,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,33,1,98,98,98,98,98,98,98,98,1,1,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,23,1,98,98,98,98,1,98,98,98,98,98,98,1,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,33,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,98,1,98,98,98,98,98,1,98,98,98,98,98,1,98,98,98,98,98,98,1,98,98,98,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,98,98,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,1,98,159,159,159,98,159,159,159,98,159,159,159,98,159,159,159,1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,0,0,0,0,0,98,139,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,0,0,0,1,5,5,0,1,0,0,0,1,0,0,0,1,98,98,98,98,1,98,98,98,98,98,98,98,98,98,98,98,98,109,139,0,0,0,0,0,0,0,0,0,0,0,0,0,144,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,53,5,0,0,0,0,0,0,0,17,0,50,98,98,98,98,98,98,98,98,1,98,98,1,98,1,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,98,98,98,98,98,98,98,98,98,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,109,109,109,98,1,98,98,98,98,1,1,98,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,98,98,98,98,98,98,1,98,1,98,98,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,4,4,4,67,67,98,109,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,5,5,0,0,0,0,0,0,0,0,0,0,1,136,5,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,144,0,144,0,144,98,1,98,139,0,0,0,0,139,139,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,5,53,0,0,0,0,0,0,0,0,0,0,0,5,136,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,0,0,0,0,0,0,139,109,98,98,144,144,0,1,98,139,0,0,0,0,0,0,139,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,188,0,17,0,0,0,0,0,0,0,139,98,4,4,4,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,98,159,144,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,1,159,144,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,98,159,139,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,139,98,4,4,4,98,98,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,98,98,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,0,0,0,0,0,0,0,109,98,98,0,0,0,98,98,98,0,0,0,0,0,0,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,31,0,0,98,98,98,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,0,0,0,0,0,0,0,98,109,0,0,0,0,0,109,109,101,101,0,0,0,101,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,5,5,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,53,5,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,144,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,159,0,0,136,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,159,0,0,136,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,31,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,98,98,98,98,0,0,5,5,0,0,0,0,17,85,85,17,0,0,0,0,50,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,5,163,0,0,0,0,85,98,98,0,0,0,0,0,139,98,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,136,5,0,0,0,0,98,0,0,0,0,0,0,0,0,136,5,0,0,0,0,0,0,0,0,98,98,98,98,98,188,0,0,0,0,0,85,98,98,0,0,0,0,0,98,98,0,0,0,0,0,144,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"8c184746-6857-480a-958e-f22e09bb1295","name":"layers","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":55,"y":8,"z":57},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":14,"y":-1,"z":27},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":48,"y":-1,"z":48},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":9,"y":21,"z":33},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":46,"y":2,"z":47},{"x":46,"y":1,"z":47},{"x":46,"y":0,"z":47},{"x":46,"y":-1,"z":47},{"x":46,"y":2,"z":48},{"x":46,"y":1,"z":48},{"x":46,"y":0,"z":48},{"x":46,"y":-1,"z":48},{"x":46,"y":2,"z":49},{"x":46,"y":1,"z":49},{"x":46,"y":0,"z":49},{"x":46,"y":-1,"z":49}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"door-2":{"secretPoint":{"offsetPointList":[{"x":5,"y":3,"z":10},{"x":5,"y":2,"z":10},{"x":5,"y":1,"z":10},{"x":5,"y":0,"z":10},{"x":5,"y":-1,"z":10},{"x":6,"y":3,"z":10},{"x":6,"y":2,"z":10},{"x":6,"y":1,"z":10},{"x":6,"y":0,"z":10},{"x":6,"y":-1,"z":10},{"x":7,"y":3,"z":10},{"x":7,"y":2,"z":10},{"x":7,"y":1,"z":10},{"x":7,"y":0,"z":10},{"x":7,"y":-1,"z":10}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":6,"y":6,"z":3},"preRequisite":["crypt-1:open"],"triggering":"door-2"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":10,"y":0,"z":26},{"x":10,"y":-1,"z":26},{"x":10,"y":1,"z":27},{"x":10,"y":0,"z":27},{"x":10,"y":-1,"z":27},{"x":10,"y":1,"z":28},{"x":10,"y":0,"z":28},{"x":10,"y":-1,"z":28}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":6,"y":-1,"z":3},"secretType":"CHEST","preRequisite":["door-2:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":47,"y":12,"z":43},{"x":47,"y":11,"z":43},{"x":47,"y":10,"z":43},{"x":47,"y":9,"z":43},{"x":48,"y":12,"z":43},{"x":48,"y":11,"z":43},{"x":48,"y":10,"z":43},{"x":48,"y":9,"z":43},{"x":48,"y":8,"z":43},{"x":49,"y":11,"z":43},{"x":49,"y":10,"z":43},{"x":49,"y":9,"z":43},{"x":49,"y":8,"z":43}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-3":{"mechType":"Secret","secretPoint":{"x":48,"y":9,"z":35},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"itemdrop-4":{"mechType":"Secret","secretPoint":{"x":8,"y":26,"z":57},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":36,"y":-11,"z":53},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":26,"y":0,"z":29},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":38,"y":20,"z":55},{"x":38,"y":19,"z":55},{"x":39,"y":20,"z":55},{"x":39,"y":19,"z":55},{"x":38,"y":20,"z":56},{"x":38,"y":19,"z":56},{"x":39,"y":20,"z":56},{"x":39,"y":19,"z":56},{"x":38,"y":20,"z":57},{"x":38,"y":19,"z":57},{"x":39,"y":20,"z":57},{"x":39,"y":19,"z":57},{"x":38,"y":20,"z":58},{"x":38,"y":19,"z":58},{"x":39,"y":20,"z":58},{"x":39,"y":19,"z":58},{"x":38,"y":20,"z":59},{"x":38,"y":19,"z":59},{"x":39,"y":20,"z":59},{"x":39,"y":19,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":57,"y":20,"z":55},{"x":57,"y":19,"z":55},{"x":58,"y":20,"z":55},{"x":58,"y":19,"z":55},{"x":57,"y":20,"z":56},{"x":57,"y":19,"z":56},{"x":58,"y":20,"z":56},{"x":58,"y":19,"z":56},{"x":57,"y":20,"z":57},{"x":57,"y":19,"z":57},{"x":58,"y":20,"z":57},{"x":58,"y":19,"z":57},{"x":57,"y":20,"z":58},{"x":57,"y":19,"z":58},{"x":58,"y":20,"z":58},{"x":58,"y":19,"z":58},{"x":57,"y":20,"z":59},{"x":57,"y":19,"z":59},{"x":58,"y":20,"z":59},{"x":58,"y":19,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":8,"z":3},{"x":5,"y":7,"z":3},{"x":6,"y":8,"z":3},{"x":6,"y":7,"z":3},{"x":7,"y":8,"z":3},{"x":7,"y":7,"z":3},{"x":5,"y":8,"z":4},{"x":5,"y":7,"z":4},{"x":6,"y":8,"z":4},{"x":6,"y":7,"z":4},{"x":7,"y":8,"z":4},{"x":7,"y":7,"z":4},{"x":5,"y":8,"z":5},{"x":5,"y":7,"z":5},{"x":6,"y":8,"z":5},{"x":6,"y":7,"z":5},{"x":7,"y":8,"z":5},{"x":7,"y":7,"z":5},{"x":5,"y":8,"z":6},{"x":5,"y":7,"z":6},{"x":6,"y":8,"z":6},{"x":6,"y":7,"z":6},{"x":7,"y":8,"z":6},{"x":7,"y":7,"z":6}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":8} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json b/src/main/resources/dgroomdata/8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json new file mode 100644 index 0000000..193b799 --- /dev/null +++ b/src/main/resources/dgroomdata/8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json @@ -0,0 +1,393 @@ +{ + "isUserMade": false, + "shape": 1, + "color": 62, + "uuid": "8e6409d8-ea3f-4348-ae30-f8f1e15d05b9", + "name": "Trap-very-hard2", + "processorId": "default", + "properties": {}, + "mechanics": { + "chest-2": { + "mechType": "Secret", + "secretPoint": { + "x": 15, + "y": 20, + "z": 5 + }, + "secretType": "CHEST", + "preRequisite": [ + "door-2:open" + ] + }, + "chest-1": { + "mechType": "Secret", + "secretPoint": { + "x": 13, + "y": -3, + "z": 26 + }, + "secretType": "CHEST", + "preRequisite": [] + }, + "door-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 24, + "y": 10, + "z": 4 + }, + { + "x": 24, + "y": 9, + "z": 4 + }, + { + "x": 24, + "y": 8, + "z": 4 + }, + { + "x": 24, + "y": 7, + "z": 4 + }, + { + "x": 24, + "y": 6, + "z": 4 + }, + { + "x": 24, + "y": 5, + "z": 4 + }, + { + "x": 24, + "y": 10, + "z": 5 + }, + { + "x": 24, + "y": 9, + "z": 5 + }, + { + "x": 24, + "y": 8, + "z": 5 + }, + { + "x": 24, + "y": 7, + "z": 5 + }, + { + "x": 24, + "y": 6, + "z": 5 + }, + { + "x": 24, + "y": 5, + "z": 5 + }, + { + "x": 24, + "y": 10, + "z": 6 + }, + { + "x": 24, + "y": 9, + "z": 6 + }, + { + "x": 24, + "y": 8, + "z": 6 + }, + { + "x": 24, + "y": 7, + "z": 6 + }, + { + "x": 24, + "y": 6, + "z": 6 + }, + { + "x": 24, + "y": 5, + "z": 6 + } + ] + }, + "preRequisite": [ + "lever-1:triggered" + ], + "mechType": "OnewayDoor" + }, + "lever-1": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 21, + "y": -4, + "z": 9 + }, + "preRequisite": [ + "crypt-1:open" + ], + "triggering": "door-1" + }, + "lever-2": { + "mechType": "OnewayLever", + "leverPoint": { + "x": 19, + "y": 11, + "z": 30 + }, + "preRequisite": [ + "superboom-1:open" + ], + "triggering": "door-2" + }, + "door-2": { + "secretPoint": { + "offsetPointList": [ + { + "x": 22, + "y": 22, + "z": 4 + }, + { + "x": 22, + "y": 21, + "z": 4 + }, + { + "x": 22, + "y": 20, + "z": 4 + }, + { + "x": 22, + "y": 19, + "z": 4 + }, + { + "x": 22, + "y": 22, + "z": 5 + }, + { + "x": 22, + "y": 21, + "z": 5 + }, + { + "x": 22, + "y": 20, + "z": 5 + }, + { + "x": 22, + "y": 19, + "z": 5 + } + ] + }, + "preRequisite": [ + "lever-2:triggered" + ], + "mechType": "OnewayDoor" + }, + "bat-1": { + "mechType": "Secret", + "secretPoint": { + "x": 22, + "y": 22, + "z": 10 + }, + "secretType": "BAT", + "preRequisite": [ + "superboom-1:open" + ] + }, + "crypt-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 20, + "y": -4, + "z": 7 + }, + { + "x": 20, + "y": -5, + "z": 7 + }, + { + "x": 21, + "y": -4, + "z": 7 + }, + { + "x": 21, + "y": -5, + "z": 7 + }, + { + "x": 22, + "y": -4, + "z": 7 + }, + { + "x": 22, + "y": -5, + "z": 7 + }, + { + "x": 20, + "y": -4, + "z": 8 + }, + { + "x": 20, + "y": -5, + "z": 8 + }, + { + "x": 21, + "y": -4, + "z": 8 + }, + { + "x": 21, + "y": -5, + "z": 8 + }, + { + "x": 22, + "y": -4, + "z": 8 + }, + { + "x": 22, + "y": -5, + "z": 8 + } + ] + }, + "preRequisite": [], + "mechType": "Tomb" + }, + "superboom-1": { + "secretPoint": { + "offsetPointList": [ + { + "x": 3, + "y": 16, + "z": 22 + }, + { + "x": 3, + "y": 15, + "z": 22 + }, + { + "x": 3, + "y": 14, + "z": 22 + }, + { + "x": 3, + "y": 13, + "z": 22 + }, + { + "x": 3, + "y": 12, + "z": 22 + }, + { + "x": 3, + "y": 11, + "z": 22 + }, + { + "x": 4, + "y": 17, + "z": 22 + }, + { + "x": 4, + "y": 16, + "z": 22 + }, + { + "x": 4, + "y": 15, + "z": 22 + }, + { + "x": 4, + "y": 14, + "z": 22 + }, + { + "x": 4, + "y": 13, + "z": 22 + }, + { + "x": 4, + "y": 12, + "z": 22 + }, + { + "x": 4, + "y": 11, + "z": 22 + }, + { + "x": 5, + "y": 16, + "z": 22 + }, + { + "x": 5, + "y": 15, + "z": 22 + }, + { + "x": 5, + "y": 14, + "z": 22 + }, + { + "x": 5, + "y": 13, + "z": 22 + }, + { + "x": 5, + "y": 12, + "z": 22 + }, + { + "x": 5, + "y": 11, + "z": 22 + } + ] + }, + "preRequisite": [ + "door-1:open" + ], + "mechType": "BreakableWall" + } + }, + "totalSecrets": 3 +} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/8f317c52-6550-42dd-829b-2a477389fe89.json b/src/main/resources/dgroomdata/8f317c52-6550-42dd-829b-2a477389fe89.json new file mode 100644 index 0000000..2a78256 --- /dev/null +++ b/src/main/resources/dgroomdata/8f317c52-6550-42dd-829b-2a477389fe89.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,98,109,0,0,0,0,0,109,98,139,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,126,136,5,0,0,0,0,109,98,0,0,0,0,0,109,98,98,98,159,159,159,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,98,98,98,98,109,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,17,0,0,17,98,109,0,0,0,0,0,109,98,98,98,44,44,44,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,144,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,98,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,98,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,98,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,98,98,98,109,0,0,0,0,0,50,139,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,50,109,98,0,0,0,0,0,50,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,98,98,98,159,98,98,109,0,0,0,0,109,98,1,98,98,101,144,0,0,101,101,98,1,0,0,0,98,98,101,144,0,0,144,101,98,98,98,98,98,0,0,0,0,98,98,98,98,44,44,44,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,44,4,1,4,44,4,98,109,0,0,0,0,98,98,98,98,159,159,159,159,159,159,159,98,98,0,0,0,98,98,159,159,159,159,159,159,159,159,98,98,1,0,0,0,0,109,98,98,98,159,159,159,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,139,0,0,98,0,0,0,98,98,0,0,0,0,144,159,98,98,0,41,41,98,98,98,98,0,0,0,0,0,0,0,98,1,1,98,0,0,0,144,98,98,98,0,0,0,0,109,109,109,98,0,144,0,0,144,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,17,50,0,0,0,0,0,159,98,147,0,0,147,0,1,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,5,-1,0,0,0,0,0,0,0,0,0,-1,5,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,0,-1,0,0,0,0,5,-1,0,0,0,0,0,0,0,0,0,-1,5,0,0,0,0,0,147,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,144,0,0,0,0,0,5,-1,0,0,0,0,0,0,0,0,0,-1,5,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,147,0,0,1,98,98,0,0,0,0,0,0,0,98,1,1,0,0,0,0,0,41,98,109,0,0,0,0,144,139,0,17,85,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,109,0,0,0,0,144,159,98,1,41,0,0,98,98,98,98,0,0,0,147,0,0,0,98,98,1,98,144,0,41,41,98,98,98,0,0,0,0,98,98,98,98,98,98,188,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,101,101,101,101,101,101,101,98,98,0,0,0,0,109,98,98,98,159,159,159,98,98,1,98,98,98,98,98,98,1,98,98,98,98,98,98,98,98,98,98,98,98,0,0,0,0,98,98,98,98,98,159,159,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,98,98,0,0,0,0,109,98,98,98,98,98,98,159,159,159,159,98,98,98,98,98,98,98,159,159,159,159,98,98,98,98,98,98,98,0,0,0,0,98,98,98,98,98,98,159,159,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,-1,0,0,0,0,0,139,98,98,0,0,0,1,0,0,0,0,1,0,0,0,0,50,1,0,0,0,144,1,0,0,0,98,98,0,0,0,0,0,0,109,98,98,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,109,109,109,109,98,109,0,0,0,0,0,98,98,139,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,98,109,0,0,0,0,109,98,0,0,0,0,0,109,1,98,1,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,98,1,98,0,0,0,0,0,109,98,44,43,44,44,98,109,0,0,0,0,0,0,0,0,0,0,0,98,98,50,0,44,44,98,98,0,0,0,0,0,1,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"8f317c52-6550-42dd-829b-2a477389fe89","name":"Pressure-plates","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":24,"y":-11,"z":8},"secretType":"CHEST","preRequisite":[]},"door-3":{"secretPoint":{"offsetPointList":[{"x":54,"y":27,"z":15},{"x":54,"y":26,"z":15},{"x":54,"y":25,"z":15},{"x":54,"y":24,"z":15},{"x":54,"y":23,"z":15},{"x":54,"y":27,"z":16},{"x":54,"y":26,"z":16},{"x":54,"y":25,"z":16},{"x":54,"y":24,"z":16},{"x":54,"y":23,"z":16},{"x":54,"y":27,"z":17},{"x":54,"y":26,"z":17},{"x":54,"y":25,"z":17},{"x":54,"y":24,"z":17},{"x":54,"y":23,"z":17}]},"preRequisite":["lever-3:triggered"],"mechType":"OnewayDoor"},"chest-3":{"mechType":"Secret","secretPoint":{"x":60,"y":24,"z":16},"secretType":"CHEST","preRequisite":["door-3:open"]},"door-4":{"secretPoint":{"offsetPointList":[{"x":12,"y":5,"z":22},{"x":12,"y":4,"z":22},{"x":12,"y":3,"z":22},{"x":12,"y":2,"z":22},{"x":12,"y":1,"z":22},{"x":12,"y":0,"z":22},{"x":12,"y":5,"z":23},{"x":12,"y":4,"z":23},{"x":12,"y":3,"z":23},{"x":12,"y":2,"z":23},{"x":12,"y":1,"z":23},{"x":12,"y":0,"z":23},{"x":12,"y":5,"z":24},{"x":12,"y":4,"z":24},{"x":12,"y":3,"z":24},{"x":12,"y":2,"z":24},{"x":12,"y":1,"z":24},{"x":12,"y":0,"z":24},{"x":12,"y":5,"z":25},{"x":12,"y":4,"z":25},{"x":12,"y":3,"z":25},{"x":12,"y":2,"z":25},{"x":12,"y":1,"z":25},{"x":12,"y":0,"z":25},{"x":12,"y":5,"z":26},{"x":12,"y":4,"z":26},{"x":12,"y":3,"z":26},{"x":12,"y":2,"z":26},{"x":12,"y":1,"z":26},{"x":12,"y":0,"z":26}]},"preRequisite":["lever-4:triggered"],"mechType":"OnewayDoor"},"pressure-plate-2":{"mechType":"PressurePlate","platePoint":{"x":44,"y":0,"z":16},"preRequisite":["door-1:open"],"triggering":"door-2"},"pressure-plate-1":{"mechType":"PressurePlate","platePoint":{"x":32,"y":0,"z":19},"preRequisite":[],"triggering":"door-1"},"chest-1":{"mechType":"Secret","secretPoint":{"x":21,"y":0,"z":16},"secretType":"CHEST","preRequisite":["door-2:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":37,"y":2,"z":15},{"x":37,"y":1,"z":15},{"x":37,"y":0,"z":15},{"x":37,"y":-1,"z":15},{"x":37,"y":2,"z":16},{"x":37,"y":1,"z":16},{"x":37,"y":0,"z":16},{"x":37,"y":-1,"z":16},{"x":37,"y":2,"z":17},{"x":37,"y":1,"z":17},{"x":37,"y":0,"z":17},{"x":37,"y":-1,"z":17}]},"closePreRequisite":["pressure-plate-1:untriggered"],"openPreRequisite":["pressure-plate-1:triggered"],"mechType":"Door"},"door-2":{"secretPoint":{"offsetPointList":[{"x":27,"y":2,"z":15},{"x":27,"y":1,"z":15},{"x":27,"y":0,"z":15},{"x":27,"y":-1,"z":15},{"x":27,"y":2,"z":16},{"x":27,"y":1,"z":16},{"x":27,"y":0,"z":16},{"x":27,"y":-1,"z":16},{"x":27,"y":2,"z":17},{"x":27,"y":1,"z":17},{"x":27,"y":0,"z":17},{"x":27,"y":-1,"z":17}]},"closePreRequisite":["pressure-plate-2:untriggered"],"openPreRequisite":["pressure-plate-2:triggered"],"mechType":"Door"},"superboom-3":{"secretPoint":{"offsetPointList":[{"x":52,"y":27,"z":7},{"x":52,"y":26,"z":7},{"x":52,"y":25,"z":7},{"x":52,"y":24,"z":7},{"x":52,"y":23,"z":7},{"x":52,"y":27,"z":8},{"x":52,"y":26,"z":8},{"x":52,"y":25,"z":8},{"x":52,"y":24,"z":8},{"x":52,"y":23,"z":8},{"x":52,"y":27,"z":9},{"x":52,"y":26,"z":9},{"x":52,"y":25,"z":9},{"x":52,"y":24,"z":9},{"x":52,"y":23,"z":9}]},"preRequisite":[],"mechType":"BreakableWall"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":52,"y":3,"z":7},{"x":52,"y":2,"z":7},{"x":52,"y":1,"z":7},{"x":52,"y":0,"z":7},{"x":52,"y":-1,"z":7},{"x":52,"y":3,"z":8},{"x":52,"y":2,"z":8},{"x":52,"y":1,"z":8},{"x":52,"y":0,"z":8},{"x":52,"y":-1,"z":8},{"x":52,"y":2,"z":9},{"x":52,"y":1,"z":9},{"x":52,"y":0,"z":9},{"x":52,"y":-1,"z":9}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":61,"y":24,"z":8},"secretType":"CHEST","preRequisite":["superboom-3:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":10,"z":23},{"x":7,"y":10,"z":23},{"x":8,"y":10,"z":23},{"x":6,"y":10,"z":24},{"x":7,"y":10,"z":24},{"x":8,"y":10,"z":24},{"x":6,"y":10,"z":25},{"x":7,"y":10,"z":25},{"x":8,"y":10,"z":25}]},"preRequisite":[],"mechType":"BreakableWall"},"lever-3":{"mechType":"OnewayLever","leverPoint":{"x":22,"y":13,"z":16},"preRequisite":[],"triggering":"door-3"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":6,"y":0,"z":26},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":10,"y":-11,"z":7},{"x":10,"y":-12,"z":7},{"x":11,"y":-11,"z":7},{"x":11,"y":-12,"z":7},{"x":12,"y":-11,"z":7},{"x":12,"y":-12,"z":7},{"x":13,"y":-11,"z":7},{"x":13,"y":-12,"z":7},{"x":14,"y":-11,"z":7},{"x":14,"y":-12,"z":7},{"x":10,"y":-11,"z":8},{"x":10,"y":-12,"z":8},{"x":11,"y":-11,"z":8},{"x":11,"y":-12,"z":8},{"x":12,"y":-11,"z":8},{"x":12,"y":-12,"z":8},{"x":13,"y":-11,"z":8},{"x":13,"y":-12,"z":8},{"x":14,"y":-11,"z":8},{"x":14,"y":-12,"z":8},{"x":10,"y":-11,"z":9},{"x":10,"y":-12,"z":9},{"x":11,"y":-11,"z":9},{"x":11,"y":-12,"z":9},{"x":12,"y":-11,"z":9},{"x":12,"y":-12,"z":9},{"x":13,"y":-11,"z":9},{"x":13,"y":-12,"z":9},{"x":14,"y":-11,"z":9},{"x":14,"y":-12,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"lever-4":{"mechType":"OnewayLever","leverPoint":{"x":6,"y":1,"z":26},"preRequisite":["superboom-1:open"],"triggering":"door-4"},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":59,"y":-1,"z":8},"secretType":"ITEM_DROP","preRequisite":["superboom-2:open"]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":10,"y":-11,"z":15},{"x":10,"y":-12,"z":15},{"x":11,"y":-11,"z":15},{"x":11,"y":-12,"z":15},{"x":12,"y":-11,"z":15},{"x":12,"y":-12,"z":15},{"x":13,"y":-11,"z":15},{"x":13,"y":-12,"z":15},{"x":14,"y":-11,"z":15},{"x":14,"y":-12,"z":15},{"x":10,"y":-11,"z":16},{"x":10,"y":-12,"z":16},{"x":11,"y":-11,"z":16},{"x":11,"y":-12,"z":16},{"x":12,"y":-11,"z":16},{"x":12,"y":-12,"z":16},{"x":13,"y":-11,"z":16},{"x":13,"y":-12,"z":16},{"x":14,"y":-11,"z":16},{"x":14,"y":-12,"z":16},{"x":10,"y":-11,"z":17},{"x":10,"y":-12,"z":17},{"x":11,"y":-11,"z":17},{"x":11,"y":-12,"z":17},{"x":12,"y":-11,"z":17},{"x":12,"y":-12,"z":17},{"x":13,"y":-11,"z":17},{"x":13,"y":-12,"z":17},{"x":14,"y":-11,"z":17},{"x":14,"y":-12,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":29,"y":0,"z":4},{"x":29,"y":-1,"z":4},{"x":30,"y":0,"z":4},{"x":30,"y":-1,"z":4},{"x":31,"y":0,"z":4},{"x":31,"y":-1,"z":4},{"x":32,"y":0,"z":4},{"x":32,"y":-1,"z":4},{"x":33,"y":0,"z":4},{"x":33,"y":-1,"z":4},{"x":34,"y":0,"z":4},{"x":34,"y":-1,"z":4},{"x":29,"y":0,"z":5},{"x":29,"y":-1,"z":5},{"x":30,"y":0,"z":5},{"x":30,"y":-1,"z":5},{"x":31,"y":0,"z":5},{"x":31,"y":-1,"z":5},{"x":32,"y":0,"z":5},{"x":32,"y":-1,"z":5},{"x":33,"y":0,"z":5},{"x":33,"y":-1,"z":5},{"x":34,"y":0,"z":5},{"x":34,"y":-1,"z":5},{"x":29,"y":0,"z":6},{"x":29,"y":-1,"z":6},{"x":30,"y":0,"z":6},{"x":30,"y":-1,"z":6},{"x":31,"y":0,"z":6},{"x":31,"y":-1,"z":6},{"x":32,"y":0,"z":6},{"x":32,"y":-1,"z":6},{"x":33,"y":0,"z":6},{"x":33,"y":-1,"z":6},{"x":34,"y":0,"z":6},{"x":34,"y":-1,"z":6}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":30,"y":12,"z":15},{"x":30,"y":11,"z":15},{"x":31,"y":12,"z":15},{"x":31,"y":11,"z":15},{"x":32,"y":12,"z":15},{"x":32,"y":11,"z":15},{"x":33,"y":12,"z":15},{"x":33,"y":11,"z":15},{"x":34,"y":12,"z":15},{"x":34,"y":11,"z":15},{"x":30,"y":12,"z":16},{"x":30,"y":11,"z":16},{"x":31,"y":12,"z":16},{"x":31,"y":11,"z":16},{"x":32,"y":12,"z":16},{"x":32,"y":11,"z":16},{"x":33,"y":12,"z":16},{"x":33,"y":11,"z":16},{"x":34,"y":12,"z":16},{"x":34,"y":11,"z":16},{"x":30,"y":12,"z":17},{"x":30,"y":11,"z":17},{"x":31,"y":12,"z":17},{"x":31,"y":11,"z":17},{"x":32,"y":12,"z":17},{"x":32,"y":11,"z":17},{"x":33,"y":12,"z":17},{"x":33,"y":11,"z":17},{"x":34,"y":12,"z":17},{"x":34,"y":11,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":40,"y":12,"z":15},{"x":40,"y":11,"z":15},{"x":41,"y":12,"z":15},{"x":41,"y":11,"z":15},{"x":42,"y":12,"z":15},{"x":42,"y":11,"z":15},{"x":43,"y":12,"z":15},{"x":43,"y":11,"z":15},{"x":44,"y":12,"z":15},{"x":44,"y":11,"z":15},{"x":40,"y":12,"z":16},{"x":40,"y":11,"z":16},{"x":41,"y":12,"z":16},{"x":41,"y":11,"z":16},{"x":42,"y":12,"z":16},{"x":42,"y":11,"z":16},{"x":43,"y":12,"z":16},{"x":43,"y":11,"z":16},{"x":44,"y":12,"z":16},{"x":44,"y":11,"z":16},{"x":40,"y":12,"z":17},{"x":40,"y":11,"z":17},{"x":41,"y":12,"z":17},{"x":41,"y":11,"z":17},{"x":42,"y":12,"z":17},{"x":42,"y":11,"z":17},{"x":43,"y":12,"z":17},{"x":43,"y":11,"z":17},{"x":44,"y":12,"z":17},{"x":44,"y":11,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":4,"y":25,"z":5},{"x":4,"y":24,"z":5},{"x":5,"y":25,"z":5},{"x":5,"y":24,"z":5},{"x":6,"y":25,"z":5},{"x":6,"y":24,"z":5},{"x":4,"y":25,"z":6},{"x":4,"y":24,"z":6},{"x":5,"y":25,"z":6},{"x":5,"y":24,"z":6},{"x":6,"y":25,"z":6},{"x":6,"y":24,"z":6},{"x":4,"y":25,"z":7},{"x":4,"y":24,"z":7},{"x":5,"y":25,"z":7},{"x":5,"y":24,"z":7},{"x":6,"y":25,"z":7},{"x":6,"y":24,"z":7},{"x":4,"y":25,"z":8},{"x":4,"y":24,"z":8},{"x":5,"y":25,"z":8},{"x":5,"y":24,"z":8},{"x":6,"y":25,"z":8},{"x":6,"y":24,"z":8}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9087fdc7-43e2-4736-b53b-33477ac65351.json b/src/main/resources/dgroomdata/9087fdc7-43e2-4736-b53b-33477ac65351.json new file mode 100644 index 0000000..9d606b4 --- /dev/null +++ b/src/main/resources/dgroomdata/9087fdc7-43e2-4736-b53b-33477ac65351.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,169,67,0,0,0,0,0,43,43,171,-1,-1,171,-1,-1,171,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,48,48,0,0,0,0,0,43,43,171,0,0,171,0,0,171,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,169,67,0,0,0,0,0,43,43,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,169,67,0,0,0,0,0,0,0,0,0,0,43,43,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,43,43,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,98,98,43,43,101,101,0,43,43,0,0,0,43,43,101,0,101,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,5,5,169,43,43,0,0,0,44,0,0,0,0,44,43,0,171,171,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,5,5,5,164,0,0,0,0,0,0,0,0,0,0,0,0,171,171,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,43,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,126,0,0,0,101,0,0,0,0,0,5,164,164,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,134,0,171,0,101,0,0,0,0,0,5,5,1,44,144,44,44,44,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,126,171,0,0,0,0,0,0,0,0,164,5,1,159,159,159,159,159,44,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,171,171,171,0,43,44,0,0,0,0,0,0,1,44,44,0,44,159,44,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,43,0,0,0,0,0,0,0,0,0,0,44,159,44,50,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,171,171,0,0,0,0,0,0,0,0,0,1,1,1,43,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,5,164,164,0,0,0,0,0,0,0,0,98,98,43,43,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,5,5,5,109,0,0,0,0,0,0,188,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,43,134,134,109,0,0,0,0,0,50,43,43,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,171,0,43,43,0,0,0,0,0,0,0,0,0,43,43,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,126,0,0,171,101,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,126,0,0,171,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,126,0,171,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9087fdc7-43e2-4736-b53b-33477ac65351","name":"Blue-skulls","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":28,"y":7,"z":3},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":28,"y":1,"z":25},{"x":28,"y":0,"z":25},{"x":29,"y":1,"z":25},{"x":29,"y":0,"z":25},{"x":30,"y":1,"z":25},{"x":30,"y":0,"z":25},{"x":28,"y":1,"z":26},{"x":28,"y":0,"z":26},{"x":29,"y":1,"z":26},{"x":29,"y":0,"z":26},{"x":30,"y":1,"z":26},{"x":30,"y":0,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":28,"y":1,"z":2},{"x":28,"y":0,"z":2},{"x":29,"y":1,"z":2},{"x":29,"y":0,"z":2},{"x":28,"y":1,"z":3},{"x":28,"y":0,"z":3},{"x":29,"y":1,"z":3},{"x":29,"y":0,"z":3},{"x":28,"y":1,"z":4},{"x":28,"y":0,"z":4},{"x":29,"y":1,"z":4},{"x":29,"y":0,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":25,"y":1,"z":2},{"x":25,"y":0,"z":2},{"x":26,"y":1,"z":2},{"x":26,"y":0,"z":2},{"x":25,"y":1,"z":3},{"x":25,"y":0,"z":3},{"x":26,"y":1,"z":3},{"x":26,"y":0,"z":3},{"x":25,"y":1,"z":4},{"x":25,"y":0,"z":4},{"x":26,"y":1,"z":4},{"x":26,"y":0,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":22,"y":1,"z":2},{"x":22,"y":0,"z":2},{"x":23,"y":1,"z":2},{"x":23,"y":0,"z":2},{"x":22,"y":1,"z":3},{"x":22,"y":0,"z":3},{"x":23,"y":1,"z":3},{"x":23,"y":0,"z":3},{"x":22,"y":1,"z":4},{"x":22,"y":0,"z":4},{"x":23,"y":1,"z":4},{"x":23,"y":0,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"journal-1":{"secretPoint":{"x":22,"y":7,"z":5},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/91068a01-bd3e-402c-99aa-e148f9f04c41.json b/src/main/resources/dgroomdata/91068a01-bd3e-402c-99aa-e148f9f04c41.json new file mode 100644 index 0000000..ba22daa --- /dev/null +++ b/src/main/resources/dgroomdata/91068a01-bd3e-402c-99aa-e148f9f04c41.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,50,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,109,0,0,0,0,0,0,0,126,126,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,67,0,0,67,67,0,0,67,67,17,0,0,17,126,0,0,0,0,134,17,98,164,164,0,0,0,0,188,0,134,5,0,0,0,0,0,0,0,0,0,0,50,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,4,4,101,101,4,4,101,101,4,4,98,0,0,0,0,0,0,0,0,0,50,98,5,5,5,134,0,0,0,188,134,5,1,4,4,101,0,4,4,101,101,4,4,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,1,109,109,109,109,109,109,109,109,109,109,1,109,109,109,109,109,109,109,109,109,109,1,109,109,109,109,109,109,109,109,109,109,1,109,109,109,109,109,109,109,109,109,109,1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,1,109,109,109,109,109,109,109,109,109,109,1,109,109,109,109,109,109,109,109,109,109,1,109,109,109,109,109,109,109,109,109,109,1,0,0,0,0,0,0,0,0,109,109,1,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,109,109,109,4,4,98,98,4,101,101,4,4,101,101,4,4,1,183,0,183,50,0,0,0,0,0,0,98,98,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,67,67,4,4,4,98,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,126,126,0,0,0,50,188,5,169,98,188,183,188,0,17,0,0,0,144,17,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,44,4,98,98,109,0,0,98,44,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,0,0,98,101,101,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,51,51,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,188,0,188,0,0,164,164,0,0,50,98,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,188,159,109,0,0,0,159,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"91068a01-bd3e-402c-99aa-e148f9f04c41","name":"Purple-flags","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":40,"y":-21,"z":30},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":60,"y":-21,"z":25},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":33,"y":-3,"z":8},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":36,"y":-15,"z":30},"preRequisite":["superboom-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":51,"y":-17,"z":25},{"x":51,"y":-18,"z":25},{"x":51,"y":-19,"z":25},{"x":51,"y":-20,"z":25},{"x":51,"y":-21,"z":25},{"x":51,"y":-17,"z":26},{"x":51,"y":-18,"z":26},{"x":51,"y":-19,"z":26},{"x":51,"y":-20,"z":26},{"x":51,"y":-21,"z":26},{"x":51,"y":-17,"z":27},{"x":51,"y":-18,"z":27},{"x":51,"y":-19,"z":27},{"x":51,"y":-20,"z":27},{"x":51,"y":-21,"z":27}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":21,"y":-20,"z":25},{"x":21,"y":-21,"z":25},{"x":21,"y":-18,"z":26},{"x":21,"y":-19,"z":26},{"x":21,"y":-20,"z":26},{"x":21,"y":-21,"z":26},{"x":21,"y":-19,"z":27},{"x":21,"y":-20,"z":27},{"x":21,"y":-21,"z":27}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-7":{"secretPoint":{"offsetPointList":[{"x":42,"y":-20,"z":2},{"x":42,"y":-21,"z":2},{"x":43,"y":-20,"z":2},{"x":43,"y":-21,"z":2},{"x":44,"y":-20,"z":2},{"x":44,"y":-21,"z":2},{"x":42,"y":-20,"z":3},{"x":42,"y":-21,"z":3},{"x":43,"y":-20,"z":3},{"x":43,"y":-21,"z":3},{"x":44,"y":-20,"z":3},{"x":44,"y":-21,"z":3},{"x":42,"y":-20,"z":4},{"x":42,"y":-21,"z":4},{"x":43,"y":-20,"z":4},{"x":43,"y":-21,"z":4},{"x":44,"y":-20,"z":4},{"x":44,"y":-21,"z":4},{"x":42,"y":-20,"z":5},{"x":42,"y":-21,"z":5},{"x":43,"y":-20,"z":5},{"x":43,"y":-21,"z":5},{"x":44,"y":-20,"z":5},{"x":44,"y":-21,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":21,"y":-11,"z":7},{"x":21,"y":-12,"z":7},{"x":22,"y":-11,"z":7},{"x":22,"y":-12,"z":7},{"x":23,"y":-11,"z":7},{"x":23,"y":-12,"z":7},{"x":21,"y":-11,"z":8},{"x":21,"y":-12,"z":8},{"x":22,"y":-11,"z":8},{"x":22,"y":-12,"z":8},{"x":23,"y":-11,"z":8},{"x":23,"y":-12,"z":8},{"x":21,"y":-11,"z":9},{"x":21,"y":-12,"z":9},{"x":22,"y":-11,"z":9},{"x":22,"y":-12,"z":9},{"x":23,"y":-11,"z":9},{"x":23,"y":-12,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-21,"z":27},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":17,"y":-11,"z":2},{"x":17,"y":-12,"z":2},{"x":18,"y":-11,"z":2},{"x":18,"y":-12,"z":2},{"x":19,"y":-11,"z":2},{"x":19,"y":-12,"z":2},{"x":17,"y":-11,"z":3},{"x":17,"y":-12,"z":3},{"x":18,"y":-11,"z":3},{"x":18,"y":-12,"z":3},{"x":19,"y":-11,"z":3},{"x":19,"y":-12,"z":3},{"x":17,"y":-11,"z":4},{"x":17,"y":-12,"z":4},{"x":18,"y":-11,"z":4},{"x":18,"y":-12,"z":4},{"x":19,"y":-11,"z":4},{"x":19,"y":-12,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":25,"y":-11,"z":28},{"x":25,"y":-12,"z":28},{"x":26,"y":-11,"z":28},{"x":26,"y":-12,"z":28},{"x":27,"y":-11,"z":28},{"x":27,"y":-12,"z":28},{"x":25,"y":-11,"z":29},{"x":25,"y":-12,"z":29},{"x":26,"y":-11,"z":29},{"x":26,"y":-12,"z":29},{"x":27,"y":-11,"z":29},{"x":27,"y":-12,"z":29},{"x":25,"y":-11,"z":30},{"x":25,"y":-12,"z":30},{"x":26,"y":-11,"z":30},{"x":26,"y":-12,"z":30},{"x":27,"y":-11,"z":30},{"x":27,"y":-12,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":40,"y":1,"z":2},{"x":40,"y":0,"z":2},{"x":41,"y":1,"z":2},{"x":41,"y":0,"z":2},{"x":40,"y":1,"z":3},{"x":40,"y":0,"z":3},{"x":41,"y":1,"z":3},{"x":41,"y":0,"z":3},{"x":40,"y":1,"z":4},{"x":40,"y":0,"z":4},{"x":41,"y":1,"z":4},{"x":41,"y":0,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":34,"y":1,"z":2},{"x":34,"y":0,"z":2},{"x":35,"y":1,"z":2},{"x":35,"y":0,"z":2},{"x":34,"y":1,"z":3},{"x":34,"y":0,"z":3},{"x":35,"y":1,"z":3},{"x":35,"y":0,"z":3},{"x":34,"y":1,"z":4},{"x":34,"y":0,"z":4},{"x":35,"y":1,"z":4},{"x":35,"y":0,"z":4}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":2,"y":2,"z":26},{"x":2,"y":1,"z":26},{"x":3,"y":2,"z":26},{"x":3,"y":1,"z":26},{"x":4,"y":2,"z":26},{"x":4,"y":1,"z":26},{"x":2,"y":2,"z":27},{"x":2,"y":1,"z":27},{"x":3,"y":2,"z":27},{"x":3,"y":1,"z":27},{"x":4,"y":2,"z":27},{"x":4,"y":1,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":7,"y":-13,"z":29},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9139cb1c-b6f3-4bac-92de-909b1eb73449.json b/src/main/resources/dgroomdata/9139cb1c-b6f3-4bac-92de-909b1eb73449.json new file mode 100644 index 0000000..d44ceed --- /dev/null +++ b/src/main/resources/dgroomdata/9139cb1c-b6f3-4bac-92de-909b1eb73449.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,18,18,0,171,171,171,0,0,0,0,7,1,1,171,7,7,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,1,1,171,18,0,0,0,0,0,171,171,171,0,0,159,35,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9139cb1c-b6f3-4bac-92de-909b1eb73449","name":"puzzle-water","processorId":"puzzle_water_solver","properties":{"doors":{"offsetPointList":[{"x":16,"y":-13,"z":15},{"x":17,"y":-13,"z":15},{"x":18,"y":-13,"z":15},{"x":19,"y":-13,"z":15},{"x":20,"y":-13,"z":15}]},"levers":{"offsetPointList":[{"x":11,"y":-9,"z":11},{"x":16,"y":-9,"z":11},{"x":21,"y":-9,"z":11},{"x":21,"y":-9,"z":21},{"x":16,"y":-9,"z":21},{"x":11,"y":-9,"z":21}]},"back":{"offsetPointList":[{"x":28,"y":12,"z":7},{"x":28,"y":11,"z":7},{"x":28,"y":10,"z":7},{"x":28,"y":9,"z":7},{"x":28,"y":8,"z":7},{"x":28,"y":7,"z":7},{"x":28,"y":6,"z":7},{"x":28,"y":5,"z":7},{"x":28,"y":4,"z":7},{"x":28,"y":3,"z":7},{"x":28,"y":2,"z":7},{"x":28,"y":1,"z":7},{"x":28,"y":0,"z":7},{"x":28,"y":-1,"z":7},{"x":28,"y":-2,"z":7},{"x":28,"y":-3,"z":7},{"x":28,"y":-4,"z":7},{"x":28,"y":-5,"z":7},{"x":28,"y":-6,"z":7},{"x":28,"y":-7,"z":7},{"x":28,"y":-8,"z":7},{"x":28,"y":-9,"z":7},{"x":28,"y":-10,"z":7},{"x":28,"y":-11,"z":7},{"x":28,"y":-12,"z":7},{"x":28,"y":12,"z":8},{"x":28,"y":11,"z":8},{"x":28,"y":10,"z":8},{"x":28,"y":9,"z":8},{"x":28,"y":8,"z":8},{"x":28,"y":7,"z":8},{"x":28,"y":6,"z":8},{"x":28,"y":5,"z":8},{"x":28,"y":4,"z":8},{"x":28,"y":3,"z":8},{"x":28,"y":2,"z":8},{"x":28,"y":1,"z":8},{"x":28,"y":0,"z":8},{"x":28,"y":-1,"z":8},{"x":28,"y":-2,"z":8},{"x":28,"y":-3,"z":8},{"x":28,"y":-4,"z":8},{"x":28,"y":-5,"z":8},{"x":28,"y":-6,"z":8},{"x":28,"y":-7,"z":8},{"x":28,"y":-8,"z":8},{"x":28,"y":-9,"z":8},{"x":28,"y":-10,"z":8},{"x":28,"y":-11,"z":8},{"x":28,"y":-12,"z":8},{"x":28,"y":12,"z":9},{"x":28,"y":11,"z":9},{"x":28,"y":10,"z":9},{"x":28,"y":9,"z":9},{"x":28,"y":8,"z":9},{"x":28,"y":7,"z":9},{"x":28,"y":6,"z":9},{"x":28,"y":5,"z":9},{"x":28,"y":4,"z":9},{"x":28,"y":3,"z":9},{"x":28,"y":2,"z":9},{"x":28,"y":1,"z":9},{"x":28,"y":0,"z":9},{"x":28,"y":-1,"z":9},{"x":28,"y":-2,"z":9},{"x":28,"y":-3,"z":9},{"x":28,"y":-4,"z":9},{"x":28,"y":-5,"z":9},{"x":28,"y":-6,"z":9},{"x":28,"y":-7,"z":9},{"x":28,"y":-8,"z":9},{"x":28,"y":-9,"z":9},{"x":28,"y":-10,"z":9},{"x":28,"y":-11,"z":9},{"x":28,"y":-12,"z":9},{"x":28,"y":12,"z":10},{"x":28,"y":11,"z":10},{"x":28,"y":10,"z":10},{"x":28,"y":9,"z":10},{"x":28,"y":8,"z":10},{"x":28,"y":7,"z":10},{"x":28,"y":6,"z":10},{"x":28,"y":5,"z":10},{"x":28,"y":4,"z":10},{"x":28,"y":3,"z":10},{"x":28,"y":2,"z":10},{"x":28,"y":1,"z":10},{"x":28,"y":0,"z":10},{"x":28,"y":-1,"z":10},{"x":28,"y":-2,"z":10},{"x":28,"y":-3,"z":10},{"x":28,"y":-4,"z":10},{"x":28,"y":-5,"z":10},{"x":28,"y":-6,"z":10},{"x":28,"y":-7,"z":10},{"x":28,"y":-8,"z":10},{"x":28,"y":-9,"z":10},{"x":28,"y":-10,"z":10},{"x":28,"y":-11,"z":10},{"x":28,"y":-12,"z":10},{"x":28,"y":12,"z":11},{"x":28,"y":11,"z":11},{"x":28,"y":10,"z":11},{"x":28,"y":9,"z":11},{"x":28,"y":8,"z":11},{"x":28,"y":7,"z":11},{"x":28,"y":6,"z":11},{"x":28,"y":5,"z":11},{"x":28,"y":4,"z":11},{"x":28,"y":3,"z":11},{"x":28,"y":2,"z":11},{"x":28,"y":1,"z":11},{"x":28,"y":0,"z":11},{"x":28,"y":-1,"z":11},{"x":28,"y":-2,"z":11},{"x":28,"y":-3,"z":11},{"x":28,"y":-4,"z":11},{"x":28,"y":-5,"z":11},{"x":28,"y":-6,"z":11},{"x":28,"y":-7,"z":11},{"x":28,"y":-8,"z":11},{"x":28,"y":-9,"z":11},{"x":28,"y":-10,"z":11},{"x":28,"y":-11,"z":11},{"x":28,"y":-12,"z":11},{"x":28,"y":12,"z":12},{"x":28,"y":11,"z":12},{"x":28,"y":10,"z":12},{"x":28,"y":9,"z":12},{"x":28,"y":8,"z":12},{"x":28,"y":7,"z":12},{"x":28,"y":6,"z":12},{"x":28,"y":5,"z":12},{"x":28,"y":4,"z":12},{"x":28,"y":3,"z":12},{"x":28,"y":2,"z":12},{"x":28,"y":1,"z":12},{"x":28,"y":0,"z":12},{"x":28,"y":-1,"z":12},{"x":28,"y":-2,"z":12},{"x":28,"y":-3,"z":12},{"x":28,"y":-4,"z":12},{"x":28,"y":-5,"z":12},{"x":28,"y":-6,"z":12},{"x":28,"y":-7,"z":12},{"x":28,"y":-8,"z":12},{"x":28,"y":-9,"z":12},{"x":28,"y":-10,"z":12},{"x":28,"y":-11,"z":12},{"x":28,"y":-12,"z":12},{"x":28,"y":12,"z":13},{"x":28,"y":11,"z":13},{"x":28,"y":10,"z":13},{"x":28,"y":9,"z":13},{"x":28,"y":8,"z":13},{"x":28,"y":7,"z":13},{"x":28,"y":6,"z":13},{"x":28,"y":5,"z":13},{"x":28,"y":4,"z":13},{"x":28,"y":3,"z":13},{"x":28,"y":2,"z":13},{"x":28,"y":1,"z":13},{"x":28,"y":0,"z":13},{"x":28,"y":-1,"z":13},{"x":28,"y":-2,"z":13},{"x":28,"y":-3,"z":13},{"x":28,"y":-4,"z":13},{"x":28,"y":-5,"z":13},{"x":28,"y":-6,"z":13},{"x":28,"y":-7,"z":13},{"x":28,"y":-8,"z":13},{"x":28,"y":-9,"z":13},{"x":28,"y":-10,"z":13},{"x":28,"y":-11,"z":13},{"x":28,"y":-12,"z":13},{"x":28,"y":12,"z":14},{"x":28,"y":11,"z":14},{"x":28,"y":10,"z":14},{"x":28,"y":9,"z":14},{"x":28,"y":8,"z":14},{"x":28,"y":7,"z":14},{"x":28,"y":6,"z":14},{"x":28,"y":5,"z":14},{"x":28,"y":4,"z":14},{"x":28,"y":3,"z":14},{"x":28,"y":2,"z":14},{"x":28,"y":1,"z":14},{"x":28,"y":0,"z":14},{"x":28,"y":-1,"z":14},{"x":28,"y":-2,"z":14},{"x":28,"y":-3,"z":14},{"x":28,"y":-4,"z":14},{"x":28,"y":-5,"z":14},{"x":28,"y":-6,"z":14},{"x":28,"y":-7,"z":14},{"x":28,"y":-8,"z":14},{"x":28,"y":-9,"z":14},{"x":28,"y":-10,"z":14},{"x":28,"y":-11,"z":14},{"x":28,"y":-12,"z":14},{"x":28,"y":12,"z":15},{"x":28,"y":11,"z":15},{"x":28,"y":10,"z":15},{"x":28,"y":9,"z":15},{"x":28,"y":8,"z":15},{"x":28,"y":7,"z":15},{"x":28,"y":6,"z":15},{"x":28,"y":5,"z":15},{"x":28,"y":4,"z":15},{"x":28,"y":3,"z":15},{"x":28,"y":2,"z":15},{"x":28,"y":1,"z":15},{"x":28,"y":0,"z":15},{"x":28,"y":-1,"z":15},{"x":28,"y":-2,"z":15},{"x":28,"y":-3,"z":15},{"x":28,"y":-4,"z":15},{"x":28,"y":-5,"z":15},{"x":28,"y":-6,"z":15},{"x":28,"y":-7,"z":15},{"x":28,"y":-8,"z":15},{"x":28,"y":-9,"z":15},{"x":28,"y":-10,"z":15},{"x":28,"y":-11,"z":15},{"x":28,"y":-12,"z":15},{"x":28,"y":12,"z":16},{"x":28,"y":11,"z":16},{"x":28,"y":10,"z":16},{"x":28,"y":9,"z":16},{"x":28,"y":8,"z":16},{"x":28,"y":7,"z":16},{"x":28,"y":6,"z":16},{"x":28,"y":5,"z":16},{"x":28,"y":4,"z":16},{"x":28,"y":3,"z":16},{"x":28,"y":2,"z":16},{"x":28,"y":1,"z":16},{"x":28,"y":0,"z":16},{"x":28,"y":-1,"z":16},{"x":28,"y":-2,"z":16},{"x":28,"y":-3,"z":16},{"x":28,"y":-4,"z":16},{"x":28,"y":-5,"z":16},{"x":28,"y":-6,"z":16},{"x":28,"y":-7,"z":16},{"x":28,"y":-8,"z":16},{"x":28,"y":-9,"z":16},{"x":28,"y":-10,"z":16},{"x":28,"y":-11,"z":16},{"x":28,"y":-12,"z":16},{"x":28,"y":12,"z":17},{"x":28,"y":11,"z":17},{"x":28,"y":10,"z":17},{"x":28,"y":9,"z":17},{"x":28,"y":8,"z":17},{"x":28,"y":7,"z":17},{"x":28,"y":6,"z":17},{"x":28,"y":5,"z":17},{"x":28,"y":4,"z":17},{"x":28,"y":3,"z":17},{"x":28,"y":2,"z":17},{"x":28,"y":1,"z":17},{"x":28,"y":0,"z":17},{"x":28,"y":-1,"z":17},{"x":28,"y":-2,"z":17},{"x":28,"y":-3,"z":17},{"x":28,"y":-4,"z":17},{"x":28,"y":-5,"z":17},{"x":28,"y":-6,"z":17},{"x":28,"y":-7,"z":17},{"x":28,"y":-8,"z":17},{"x":28,"y":-9,"z":17},{"x":28,"y":-10,"z":17},{"x":28,"y":-11,"z":17},{"x":28,"y":-12,"z":17},{"x":28,"y":12,"z":18},{"x":28,"y":11,"z":18},{"x":28,"y":10,"z":18},{"x":28,"y":9,"z":18},{"x":28,"y":8,"z":18},{"x":28,"y":7,"z":18},{"x":28,"y":6,"z":18},{"x":28,"y":5,"z":18},{"x":28,"y":4,"z":18},{"x":28,"y":3,"z":18},{"x":28,"y":2,"z":18},{"x":28,"y":1,"z":18},{"x":28,"y":0,"z":18},{"x":28,"y":-1,"z":18},{"x":28,"y":-2,"z":18},{"x":28,"y":-3,"z":18},{"x":28,"y":-4,"z":18},{"x":28,"y":-5,"z":18},{"x":28,"y":-6,"z":18},{"x":28,"y":-7,"z":18},{"x":28,"y":-8,"z":18},{"x":28,"y":-9,"z":18},{"x":28,"y":-10,"z":18},{"x":28,"y":-11,"z":18},{"x":28,"y":-12,"z":18},{"x":28,"y":12,"z":19},{"x":28,"y":11,"z":19},{"x":28,"y":10,"z":19},{"x":28,"y":9,"z":19},{"x":28,"y":8,"z":19},{"x":28,"y":7,"z":19},{"x":28,"y":6,"z":19},{"x":28,"y":5,"z":19},{"x":28,"y":4,"z":19},{"x":28,"y":3,"z":19},{"x":28,"y":2,"z":19},{"x":28,"y":1,"z":19},{"x":28,"y":0,"z":19},{"x":28,"y":-1,"z":19},{"x":28,"y":-2,"z":19},{"x":28,"y":-3,"z":19},{"x":28,"y":-4,"z":19},{"x":28,"y":-5,"z":19},{"x":28,"y":-6,"z":19},{"x":28,"y":-7,"z":19},{"x":28,"y":-8,"z":19},{"x":28,"y":-9,"z":19},{"x":28,"y":-10,"z":19},{"x":28,"y":-11,"z":19},{"x":28,"y":-12,"z":19},{"x":28,"y":12,"z":20},{"x":28,"y":11,"z":20},{"x":28,"y":10,"z":20},{"x":28,"y":9,"z":20},{"x":28,"y":8,"z":20},{"x":28,"y":7,"z":20},{"x":28,"y":6,"z":20},{"x":28,"y":5,"z":20},{"x":28,"y":4,"z":20},{"x":28,"y":3,"z":20},{"x":28,"y":2,"z":20},{"x":28,"y":1,"z":20},{"x":28,"y":0,"z":20},{"x":28,"y":-1,"z":20},{"x":28,"y":-2,"z":20},{"x":28,"y":-3,"z":20},{"x":28,"y":-4,"z":20},{"x":28,"y":-5,"z":20},{"x":28,"y":-6,"z":20},{"x":28,"y":-7,"z":20},{"x":28,"y":-8,"z":20},{"x":28,"y":-9,"z":20},{"x":28,"y":-10,"z":20},{"x":28,"y":-11,"z":20},{"x":28,"y":-12,"z":20},{"x":28,"y":12,"z":21},{"x":28,"y":11,"z":21},{"x":28,"y":10,"z":21},{"x":28,"y":9,"z":21},{"x":28,"y":8,"z":21},{"x":28,"y":7,"z":21},{"x":28,"y":6,"z":21},{"x":28,"y":5,"z":21},{"x":28,"y":4,"z":21},{"x":28,"y":3,"z":21},{"x":28,"y":2,"z":21},{"x":28,"y":1,"z":21},{"x":28,"y":0,"z":21},{"x":28,"y":-1,"z":21},{"x":28,"y":-2,"z":21},{"x":28,"y":-3,"z":21},{"x":28,"y":-4,"z":21},{"x":28,"y":-5,"z":21},{"x":28,"y":-6,"z":21},{"x":28,"y":-7,"z":21},{"x":28,"y":-8,"z":21},{"x":28,"y":-9,"z":21},{"x":28,"y":-10,"z":21},{"x":28,"y":-11,"z":21},{"x":28,"y":-12,"z":21},{"x":28,"y":12,"z":22},{"x":28,"y":11,"z":22},{"x":28,"y":10,"z":22},{"x":28,"y":9,"z":22},{"x":28,"y":8,"z":22},{"x":28,"y":7,"z":22},{"x":28,"y":6,"z":22},{"x":28,"y":5,"z":22},{"x":28,"y":4,"z":22},{"x":28,"y":3,"z":22},{"x":28,"y":2,"z":22},{"x":28,"y":1,"z":22},{"x":28,"y":0,"z":22},{"x":28,"y":-1,"z":22},{"x":28,"y":-2,"z":22},{"x":28,"y":-3,"z":22},{"x":28,"y":-4,"z":22},{"x":28,"y":-5,"z":22},{"x":28,"y":-6,"z":22},{"x":28,"y":-7,"z":22},{"x":28,"y":-8,"z":22},{"x":28,"y":-9,"z":22},{"x":28,"y":-10,"z":22},{"x":28,"y":-11,"z":22},{"x":28,"y":-12,"z":22},{"x":28,"y":12,"z":23},{"x":28,"y":11,"z":23},{"x":28,"y":10,"z":23},{"x":28,"y":9,"z":23},{"x":28,"y":8,"z":23},{"x":28,"y":7,"z":23},{"x":28,"y":6,"z":23},{"x":28,"y":5,"z":23},{"x":28,"y":4,"z":23},{"x":28,"y":3,"z":23},{"x":28,"y":2,"z":23},{"x":28,"y":1,"z":23},{"x":28,"y":0,"z":23},{"x":28,"y":-1,"z":23},{"x":28,"y":-2,"z":23},{"x":28,"y":-3,"z":23},{"x":28,"y":-4,"z":23},{"x":28,"y":-5,"z":23},{"x":28,"y":-6,"z":23},{"x":28,"y":-7,"z":23},{"x":28,"y":-8,"z":23},{"x":28,"y":-9,"z":23},{"x":28,"y":-10,"z":23},{"x":28,"y":-11,"z":23},{"x":28,"y":-12,"z":23},{"x":28,"y":12,"z":24},{"x":28,"y":11,"z":24},{"x":28,"y":10,"z":24},{"x":28,"y":9,"z":24},{"x":28,"y":8,"z":24},{"x":28,"y":7,"z":24},{"x":28,"y":6,"z":24},{"x":28,"y":5,"z":24},{"x":28,"y":4,"z":24},{"x":28,"y":3,"z":24},{"x":28,"y":2,"z":24},{"x":28,"y":1,"z":24},{"x":28,"y":0,"z":24},{"x":28,"y":-1,"z":24},{"x":28,"y":-2,"z":24},{"x":28,"y":-3,"z":24},{"x":28,"y":-4,"z":24},{"x":28,"y":-5,"z":24},{"x":28,"y":-6,"z":24},{"x":28,"y":-7,"z":24},{"x":28,"y":-8,"z":24},{"x":28,"y":-9,"z":24},{"x":28,"y":-10,"z":24},{"x":28,"y":-11,"z":24},{"x":28,"y":-12,"z":24},{"x":28,"y":12,"z":25},{"x":28,"y":11,"z":25},{"x":28,"y":10,"z":25},{"x":28,"y":9,"z":25},{"x":28,"y":8,"z":25},{"x":28,"y":7,"z":25},{"x":28,"y":6,"z":25},{"x":28,"y":5,"z":25},{"x":28,"y":4,"z":25},{"x":28,"y":3,"z":25},{"x":28,"y":2,"z":25},{"x":28,"y":1,"z":25},{"x":28,"y":0,"z":25},{"x":28,"y":-1,"z":25},{"x":28,"y":-2,"z":25},{"x":28,"y":-3,"z":25},{"x":28,"y":-4,"z":25},{"x":28,"y":-5,"z":25},{"x":28,"y":-6,"z":25},{"x":28,"y":-7,"z":25},{"x":28,"y":-8,"z":25},{"x":28,"y":-9,"z":25},{"x":28,"y":-10,"z":25},{"x":28,"y":-11,"z":25},{"x":28,"y":-12,"z":25}]},"water-lever":{"x":6,"y":-10,"z":16},"front":{"offsetPointList":[{"x":27,"y":12,"z":7},{"x":27,"y":11,"z":7},{"x":27,"y":10,"z":7},{"x":27,"y":9,"z":7},{"x":27,"y":8,"z":7},{"x":27,"y":7,"z":7},{"x":27,"y":6,"z":7},{"x":27,"y":5,"z":7},{"x":27,"y":4,"z":7},{"x":27,"y":3,"z":7},{"x":27,"y":2,"z":7},{"x":27,"y":1,"z":7},{"x":27,"y":0,"z":7},{"x":27,"y":-1,"z":7},{"x":27,"y":-2,"z":7},{"x":27,"y":-3,"z":7},{"x":27,"y":-4,"z":7},{"x":27,"y":-5,"z":7},{"x":27,"y":-6,"z":7},{"x":27,"y":-7,"z":7},{"x":27,"y":-8,"z":7},{"x":27,"y":-9,"z":7},{"x":27,"y":-10,"z":7},{"x":27,"y":-11,"z":7},{"x":27,"y":-12,"z":7},{"x":27,"y":12,"z":8},{"x":27,"y":11,"z":8},{"x":27,"y":10,"z":8},{"x":27,"y":9,"z":8},{"x":27,"y":8,"z":8},{"x":27,"y":7,"z":8},{"x":27,"y":6,"z":8},{"x":27,"y":5,"z":8},{"x":27,"y":4,"z":8},{"x":27,"y":3,"z":8},{"x":27,"y":2,"z":8},{"x":27,"y":1,"z":8},{"x":27,"y":0,"z":8},{"x":27,"y":-1,"z":8},{"x":27,"y":-2,"z":8},{"x":27,"y":-3,"z":8},{"x":27,"y":-4,"z":8},{"x":27,"y":-5,"z":8},{"x":27,"y":-6,"z":8},{"x":27,"y":-7,"z":8},{"x":27,"y":-8,"z":8},{"x":27,"y":-9,"z":8},{"x":27,"y":-10,"z":8},{"x":27,"y":-11,"z":8},{"x":27,"y":-12,"z":8},{"x":27,"y":12,"z":9},{"x":27,"y":11,"z":9},{"x":27,"y":10,"z":9},{"x":27,"y":9,"z":9},{"x":27,"y":8,"z":9},{"x":27,"y":7,"z":9},{"x":27,"y":6,"z":9},{"x":27,"y":5,"z":9},{"x":27,"y":4,"z":9},{"x":27,"y":3,"z":9},{"x":27,"y":2,"z":9},{"x":27,"y":1,"z":9},{"x":27,"y":0,"z":9},{"x":27,"y":-1,"z":9},{"x":27,"y":-2,"z":9},{"x":27,"y":-3,"z":9},{"x":27,"y":-4,"z":9},{"x":27,"y":-5,"z":9},{"x":27,"y":-6,"z":9},{"x":27,"y":-7,"z":9},{"x":27,"y":-8,"z":9},{"x":27,"y":-9,"z":9},{"x":27,"y":-10,"z":9},{"x":27,"y":-11,"z":9},{"x":27,"y":-12,"z":9},{"x":27,"y":12,"z":10},{"x":27,"y":11,"z":10},{"x":27,"y":10,"z":10},{"x":27,"y":9,"z":10},{"x":27,"y":8,"z":10},{"x":27,"y":7,"z":10},{"x":27,"y":6,"z":10},{"x":27,"y":5,"z":10},{"x":27,"y":4,"z":10},{"x":27,"y":3,"z":10},{"x":27,"y":2,"z":10},{"x":27,"y":1,"z":10},{"x":27,"y":0,"z":10},{"x":27,"y":-1,"z":10},{"x":27,"y":-2,"z":10},{"x":27,"y":-3,"z":10},{"x":27,"y":-4,"z":10},{"x":27,"y":-5,"z":10},{"x":27,"y":-6,"z":10},{"x":27,"y":-7,"z":10},{"x":27,"y":-8,"z":10},{"x":27,"y":-9,"z":10},{"x":27,"y":-10,"z":10},{"x":27,"y":-11,"z":10},{"x":27,"y":-12,"z":10},{"x":27,"y":12,"z":11},{"x":27,"y":11,"z":11},{"x":27,"y":10,"z":11},{"x":27,"y":9,"z":11},{"x":27,"y":8,"z":11},{"x":27,"y":7,"z":11},{"x":27,"y":6,"z":11},{"x":27,"y":5,"z":11},{"x":27,"y":4,"z":11},{"x":27,"y":3,"z":11},{"x":27,"y":2,"z":11},{"x":27,"y":1,"z":11},{"x":27,"y":0,"z":11},{"x":27,"y":-1,"z":11},{"x":27,"y":-2,"z":11},{"x":27,"y":-3,"z":11},{"x":27,"y":-4,"z":11},{"x":27,"y":-5,"z":11},{"x":27,"y":-6,"z":11},{"x":27,"y":-7,"z":11},{"x":27,"y":-8,"z":11},{"x":27,"y":-9,"z":11},{"x":27,"y":-10,"z":11},{"x":27,"y":-11,"z":11},{"x":27,"y":-12,"z":11},{"x":27,"y":12,"z":12},{"x":27,"y":11,"z":12},{"x":27,"y":10,"z":12},{"x":27,"y":9,"z":12},{"x":27,"y":8,"z":12},{"x":27,"y":7,"z":12},{"x":27,"y":6,"z":12},{"x":27,"y":5,"z":12},{"x":27,"y":4,"z":12},{"x":27,"y":3,"z":12},{"x":27,"y":2,"z":12},{"x":27,"y":1,"z":12},{"x":27,"y":0,"z":12},{"x":27,"y":-1,"z":12},{"x":27,"y":-2,"z":12},{"x":27,"y":-3,"z":12},{"x":27,"y":-4,"z":12},{"x":27,"y":-5,"z":12},{"x":27,"y":-6,"z":12},{"x":27,"y":-7,"z":12},{"x":27,"y":-8,"z":12},{"x":27,"y":-9,"z":12},{"x":27,"y":-10,"z":12},{"x":27,"y":-11,"z":12},{"x":27,"y":-12,"z":12},{"x":27,"y":12,"z":13},{"x":27,"y":11,"z":13},{"x":27,"y":10,"z":13},{"x":27,"y":9,"z":13},{"x":27,"y":8,"z":13},{"x":27,"y":7,"z":13},{"x":27,"y":6,"z":13},{"x":27,"y":5,"z":13},{"x":27,"y":4,"z":13},{"x":27,"y":3,"z":13},{"x":27,"y":2,"z":13},{"x":27,"y":1,"z":13},{"x":27,"y":0,"z":13},{"x":27,"y":-1,"z":13},{"x":27,"y":-2,"z":13},{"x":27,"y":-3,"z":13},{"x":27,"y":-4,"z":13},{"x":27,"y":-5,"z":13},{"x":27,"y":-6,"z":13},{"x":27,"y":-7,"z":13},{"x":27,"y":-8,"z":13},{"x":27,"y":-9,"z":13},{"x":27,"y":-10,"z":13},{"x":27,"y":-11,"z":13},{"x":27,"y":-12,"z":13},{"x":27,"y":12,"z":14},{"x":27,"y":11,"z":14},{"x":27,"y":10,"z":14},{"x":27,"y":9,"z":14},{"x":27,"y":8,"z":14},{"x":27,"y":7,"z":14},{"x":27,"y":6,"z":14},{"x":27,"y":5,"z":14},{"x":27,"y":4,"z":14},{"x":27,"y":3,"z":14},{"x":27,"y":2,"z":14},{"x":27,"y":1,"z":14},{"x":27,"y":0,"z":14},{"x":27,"y":-1,"z":14},{"x":27,"y":-2,"z":14},{"x":27,"y":-3,"z":14},{"x":27,"y":-4,"z":14},{"x":27,"y":-5,"z":14},{"x":27,"y":-6,"z":14},{"x":27,"y":-7,"z":14},{"x":27,"y":-8,"z":14},{"x":27,"y":-9,"z":14},{"x":27,"y":-10,"z":14},{"x":27,"y":-11,"z":14},{"x":27,"y":-12,"z":14},{"x":27,"y":12,"z":15},{"x":27,"y":11,"z":15},{"x":27,"y":10,"z":15},{"x":27,"y":9,"z":15},{"x":27,"y":8,"z":15},{"x":27,"y":7,"z":15},{"x":27,"y":6,"z":15},{"x":27,"y":5,"z":15},{"x":27,"y":4,"z":15},{"x":27,"y":3,"z":15},{"x":27,"y":2,"z":15},{"x":27,"y":1,"z":15},{"x":27,"y":0,"z":15},{"x":27,"y":-1,"z":15},{"x":27,"y":-2,"z":15},{"x":27,"y":-3,"z":15},{"x":27,"y":-4,"z":15},{"x":27,"y":-5,"z":15},{"x":27,"y":-6,"z":15},{"x":27,"y":-7,"z":15},{"x":27,"y":-8,"z":15},{"x":27,"y":-9,"z":15},{"x":27,"y":-10,"z":15},{"x":27,"y":-11,"z":15},{"x":27,"y":-12,"z":15},{"x":27,"y":12,"z":16},{"x":27,"y":11,"z":16},{"x":27,"y":10,"z":16},{"x":27,"y":9,"z":16},{"x":27,"y":8,"z":16},{"x":27,"y":7,"z":16},{"x":27,"y":6,"z":16},{"x":27,"y":5,"z":16},{"x":27,"y":4,"z":16},{"x":27,"y":3,"z":16},{"x":27,"y":2,"z":16},{"x":27,"y":1,"z":16},{"x":27,"y":0,"z":16},{"x":27,"y":-1,"z":16},{"x":27,"y":-2,"z":16},{"x":27,"y":-3,"z":16},{"x":27,"y":-4,"z":16},{"x":27,"y":-5,"z":16},{"x":27,"y":-6,"z":16},{"x":27,"y":-7,"z":16},{"x":27,"y":-8,"z":16},{"x":27,"y":-9,"z":16},{"x":27,"y":-10,"z":16},{"x":27,"y":-11,"z":16},{"x":27,"y":-12,"z":16},{"x":27,"y":12,"z":17},{"x":27,"y":11,"z":17},{"x":27,"y":10,"z":17},{"x":27,"y":9,"z":17},{"x":27,"y":8,"z":17},{"x":27,"y":7,"z":17},{"x":27,"y":6,"z":17},{"x":27,"y":5,"z":17},{"x":27,"y":4,"z":17},{"x":27,"y":3,"z":17},{"x":27,"y":2,"z":17},{"x":27,"y":1,"z":17},{"x":27,"y":0,"z":17},{"x":27,"y":-1,"z":17},{"x":27,"y":-2,"z":17},{"x":27,"y":-3,"z":17},{"x":27,"y":-4,"z":17},{"x":27,"y":-5,"z":17},{"x":27,"y":-6,"z":17},{"x":27,"y":-7,"z":17},{"x":27,"y":-8,"z":17},{"x":27,"y":-9,"z":17},{"x":27,"y":-10,"z":17},{"x":27,"y":-11,"z":17},{"x":27,"y":-12,"z":17},{"x":27,"y":12,"z":18},{"x":27,"y":11,"z":18},{"x":27,"y":10,"z":18},{"x":27,"y":9,"z":18},{"x":27,"y":8,"z":18},{"x":27,"y":7,"z":18},{"x":27,"y":6,"z":18},{"x":27,"y":5,"z":18},{"x":27,"y":4,"z":18},{"x":27,"y":3,"z":18},{"x":27,"y":2,"z":18},{"x":27,"y":1,"z":18},{"x":27,"y":0,"z":18},{"x":27,"y":-1,"z":18},{"x":27,"y":-2,"z":18},{"x":27,"y":-3,"z":18},{"x":27,"y":-4,"z":18},{"x":27,"y":-5,"z":18},{"x":27,"y":-6,"z":18},{"x":27,"y":-7,"z":18},{"x":27,"y":-8,"z":18},{"x":27,"y":-9,"z":18},{"x":27,"y":-10,"z":18},{"x":27,"y":-11,"z":18},{"x":27,"y":-12,"z":18},{"x":27,"y":12,"z":19},{"x":27,"y":11,"z":19},{"x":27,"y":10,"z":19},{"x":27,"y":9,"z":19},{"x":27,"y":8,"z":19},{"x":27,"y":7,"z":19},{"x":27,"y":6,"z":19},{"x":27,"y":5,"z":19},{"x":27,"y":4,"z":19},{"x":27,"y":3,"z":19},{"x":27,"y":2,"z":19},{"x":27,"y":1,"z":19},{"x":27,"y":0,"z":19},{"x":27,"y":-1,"z":19},{"x":27,"y":-2,"z":19},{"x":27,"y":-3,"z":19},{"x":27,"y":-4,"z":19},{"x":27,"y":-5,"z":19},{"x":27,"y":-6,"z":19},{"x":27,"y":-7,"z":19},{"x":27,"y":-8,"z":19},{"x":27,"y":-9,"z":19},{"x":27,"y":-10,"z":19},{"x":27,"y":-11,"z":19},{"x":27,"y":-12,"z":19},{"x":27,"y":12,"z":20},{"x":27,"y":11,"z":20},{"x":27,"y":10,"z":20},{"x":27,"y":9,"z":20},{"x":27,"y":8,"z":20},{"x":27,"y":7,"z":20},{"x":27,"y":6,"z":20},{"x":27,"y":5,"z":20},{"x":27,"y":4,"z":20},{"x":27,"y":3,"z":20},{"x":27,"y":2,"z":20},{"x":27,"y":1,"z":20},{"x":27,"y":0,"z":20},{"x":27,"y":-1,"z":20},{"x":27,"y":-2,"z":20},{"x":27,"y":-3,"z":20},{"x":27,"y":-4,"z":20},{"x":27,"y":-5,"z":20},{"x":27,"y":-6,"z":20},{"x":27,"y":-7,"z":20},{"x":27,"y":-8,"z":20},{"x":27,"y":-9,"z":20},{"x":27,"y":-10,"z":20},{"x":27,"y":-11,"z":20},{"x":27,"y":-12,"z":20},{"x":27,"y":12,"z":21},{"x":27,"y":11,"z":21},{"x":27,"y":10,"z":21},{"x":27,"y":9,"z":21},{"x":27,"y":8,"z":21},{"x":27,"y":7,"z":21},{"x":27,"y":6,"z":21},{"x":27,"y":5,"z":21},{"x":27,"y":4,"z":21},{"x":27,"y":3,"z":21},{"x":27,"y":2,"z":21},{"x":27,"y":1,"z":21},{"x":27,"y":0,"z":21},{"x":27,"y":-1,"z":21},{"x":27,"y":-2,"z":21},{"x":27,"y":-3,"z":21},{"x":27,"y":-4,"z":21},{"x":27,"y":-5,"z":21},{"x":27,"y":-6,"z":21},{"x":27,"y":-7,"z":21},{"x":27,"y":-8,"z":21},{"x":27,"y":-9,"z":21},{"x":27,"y":-10,"z":21},{"x":27,"y":-11,"z":21},{"x":27,"y":-12,"z":21},{"x":27,"y":12,"z":22},{"x":27,"y":11,"z":22},{"x":27,"y":10,"z":22},{"x":27,"y":9,"z":22},{"x":27,"y":8,"z":22},{"x":27,"y":7,"z":22},{"x":27,"y":6,"z":22},{"x":27,"y":5,"z":22},{"x":27,"y":4,"z":22},{"x":27,"y":3,"z":22},{"x":27,"y":2,"z":22},{"x":27,"y":1,"z":22},{"x":27,"y":0,"z":22},{"x":27,"y":-1,"z":22},{"x":27,"y":-2,"z":22},{"x":27,"y":-3,"z":22},{"x":27,"y":-4,"z":22},{"x":27,"y":-5,"z":22},{"x":27,"y":-6,"z":22},{"x":27,"y":-7,"z":22},{"x":27,"y":-8,"z":22},{"x":27,"y":-9,"z":22},{"x":27,"y":-10,"z":22},{"x":27,"y":-11,"z":22},{"x":27,"y":-12,"z":22},{"x":27,"y":12,"z":23},{"x":27,"y":11,"z":23},{"x":27,"y":10,"z":23},{"x":27,"y":9,"z":23},{"x":27,"y":8,"z":23},{"x":27,"y":7,"z":23},{"x":27,"y":6,"z":23},{"x":27,"y":5,"z":23},{"x":27,"y":4,"z":23},{"x":27,"y":3,"z":23},{"x":27,"y":2,"z":23},{"x":27,"y":1,"z":23},{"x":27,"y":0,"z":23},{"x":27,"y":-1,"z":23},{"x":27,"y":-2,"z":23},{"x":27,"y":-3,"z":23},{"x":27,"y":-4,"z":23},{"x":27,"y":-5,"z":23},{"x":27,"y":-6,"z":23},{"x":27,"y":-7,"z":23},{"x":27,"y":-8,"z":23},{"x":27,"y":-9,"z":23},{"x":27,"y":-10,"z":23},{"x":27,"y":-11,"z":23},{"x":27,"y":-12,"z":23},{"x":27,"y":12,"z":24},{"x":27,"y":11,"z":24},{"x":27,"y":10,"z":24},{"x":27,"y":9,"z":24},{"x":27,"y":8,"z":24},{"x":27,"y":7,"z":24},{"x":27,"y":6,"z":24},{"x":27,"y":5,"z":24},{"x":27,"y":4,"z":24},{"x":27,"y":3,"z":24},{"x":27,"y":2,"z":24},{"x":27,"y":1,"z":24},{"x":27,"y":0,"z":24},{"x":27,"y":-1,"z":24},{"x":27,"y":-2,"z":24},{"x":27,"y":-3,"z":24},{"x":27,"y":-4,"z":24},{"x":27,"y":-5,"z":24},{"x":27,"y":-6,"z":24},{"x":27,"y":-7,"z":24},{"x":27,"y":-8,"z":24},{"x":27,"y":-9,"z":24},{"x":27,"y":-10,"z":24},{"x":27,"y":-11,"z":24},{"x":27,"y":-12,"z":24},{"x":27,"y":12,"z":25},{"x":27,"y":11,"z":25},{"x":27,"y":10,"z":25},{"x":27,"y":9,"z":25},{"x":27,"y":8,"z":25},{"x":27,"y":7,"z":25},{"x":27,"y":6,"z":25},{"x":27,"y":5,"z":25},{"x":27,"y":4,"z":25},{"x":27,"y":3,"z":25},{"x":27,"y":2,"z":25},{"x":27,"y":1,"z":25},{"x":27,"y":0,"z":25},{"x":27,"y":-1,"z":25},{"x":27,"y":-2,"z":25},{"x":27,"y":-3,"z":25},{"x":27,"y":-4,"z":25},{"x":27,"y":-5,"z":25},{"x":27,"y":-6,"z":25},{"x":27,"y":-7,"z":25},{"x":27,"y":-8,"z":25},{"x":27,"y":-9,"z":25},{"x":27,"y":-10,"z":25},{"x":27,"y":-11,"z":25},{"x":27,"y":-12,"z":25}]}},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/95c57abe-34d4-443c-baac-11d43cbc821f.json b/src/main/resources/dgroomdata/95c57abe-34d4-443c-baac-11d43cbc821f.json new file mode 100644 index 0000000..4cde284 --- /dev/null +++ b/src/main/resources/dgroomdata/95c57abe-34d4-443c-baac-11d43cbc821f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,4,109,0,0,0,0,0,0,0,4,98,98,98,4,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,4,98,98,98,98,98,0,0,0,0,0,134,17,98,98,98,98,98,4,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,98,98,98,98,98,98,98,50,0,0,0,0,0,50,98,98,98,98,4,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,109,0,0,0,109,98,98,98,98,98,4,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,4,98,98,98,98,98,98,0,0,0,109,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,4,98,98,4,0,0,0,0,0,0,0,144,159,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,4,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,159,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,159,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,98,98,98,98,98,98,0,0,0,0,0,0,0,98,0,144,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,50,109,98,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,50,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,98,159,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,101,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,50,109,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,50,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,109,98,98,98,0,0,144,98,0,0,0,0,0,0,0,98,98,98,98,98,98,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,44,98,98,159,159,159,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,4,98,159,159,159,144,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,144,98,98,159,159,159,0,0,0,0,0,0,0,0,98,98,1,101,101,101,101,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,4,0,0,0,109,109,98,98,50,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,101,0,0,98,98,98,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,4,50,0,0,0,0,0,0,-1,98,0,0,0,0,0,-1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,4,98,98,98,0,0,0,0,0,0,0,-1,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,50,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"95c57abe-34d4-443c-baac-11d43cbc821f","name":"Multicolored","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":0,"z":26},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":20,"y":1,"z":26},{"x":20,"y":0,"z":26},{"x":20,"y":-1,"z":26},{"x":20,"y":1,"z":27},{"x":20,"y":0,"z":27},{"x":20,"y":-1,"z":27}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9650cb39-5f22-45f4-86cd-5d197a4266e5.json b/src/main/resources/dgroomdata/9650cb39-5f22-45f4-86cd-5d197a4266e5.json new file mode 100644 index 0000000..f94cd14 --- /dev/null +++ b/src/main/resources/dgroomdata/9650cb39-5f22-45f4-86cd-5d197a4266e5.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,159,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,159,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,101,159,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,159,98,98,5,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,98,98,98,1,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,1,98,1,0,0,0,0,0,1,18,18,0,0,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,-1,-1,1,98,98,98,109,98,98,98,101,101,101,98,1,98,98,109,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,18,1,18,0,5,5,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,18,18,0,134,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,5,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,5,136,0,0,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,109,98,44,98,98,101,101,101,98,98,98,109,98,1,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,98,98,98,98,1,0,0,0,0,0,1,98,1,18,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,134,5,98,18,18,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,134,98,18,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,17,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,136,5,0,0,0,0,0,0,0,0,98,4,4,44,0,0,0,44,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,5,5,1,0,0,0,0,0,0,0,98,1,98,0,0,0,0,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9650cb39-5f22-45f4-86cd-5d197a4266e5","name":"Overgrown","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":7,"y":9,"z":16},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":28,"y":11,"z":16},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":4,"y":12,"z":21},{"x":4,"y":11,"z":21},{"x":4,"y":10,"z":21},{"x":4,"y":9,"z":21},{"x":5,"y":12,"z":21},{"x":5,"y":11,"z":21},{"x":5,"y":10,"z":21},{"x":5,"y":9,"z":21},{"x":6,"y":12,"z":21},{"x":6,"y":11,"z":21},{"x":6,"y":10,"z":21},{"x":6,"y":9,"z":21},{"x":7,"y":12,"z":21},{"x":7,"y":11,"z":21},{"x":7,"y":10,"z":21},{"x":7,"y":9,"z":21}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":5,"y":-1,"z":4},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"essence-1":{"mechType":"Secret","secretPoint":{"x":6,"y":17,"z":20},"secretType":"ESSENCE","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":1,"z":11},{"x":5,"y":0,"z":11},{"x":5,"y":-1,"z":11},{"x":6,"y":1,"z":11},{"x":6,"y":0,"z":11},{"x":6,"y":-1,"z":11}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9890fbac-d382-4525-ab88-fe1ebc118702.json b/src/main/resources/dgroomdata/9890fbac-d382-4525-ab88-fe1ebc118702.json new file mode 100644 index 0000000..5acc137 --- /dev/null +++ b/src/main/resources/dgroomdata/9890fbac-d382-4525-ab88-fe1ebc118702.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,139,98,159,109,50,0,0,0,0,0,0,109,0,0,98,98,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,144,159,109,0,0,0,0,0,0,0,98,0,0,98,139,0,0,98,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,98,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,159,98,139,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,139,98,159,98,98,0,0,0,0,0,98,109,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,139,98,159,144,0,0,0,0,0,0,0,98,0,0,0,0,0,0,139,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,17,17,17,0,1,159,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,18,98,0,0,50,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,139,159,144,0,0,0,0,0,0,0,98,98,98,98,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,139,98,139,0,0,0,0,0,0,98,98,98,109,0,0,0,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,159,98,98,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,144,159,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,144,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,159,101,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,164,5,139,98,98,98,0,0,0,0,0,0,139,139,139,0,0,0,0,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,164,5,139,98,98,139,0,0,0,0,0,0,109,98,98,98,109,109,98,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,98,109,0,0,0,0,0,0,0,109,0,0,0,0,98,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,98,109,0,0,0,0,0,0,67,98,0,0,0,0,109,0,0,69,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,109,98,98,98,0,0,0,0,0,0,67,98,0,101,0,101,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,101,101,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,98,0,0,0,0,50,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,50,109,101,101,101,109,0,0,0,0,0,0,67,98,17,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9890fbac-d382-4525-ab88-fe1ebc118702","name":"Knight","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":6,"y":-1,"z":2},"secretType":"CHEST","preRequisite":["dummy-1:click"]},"dummy-1":{"secretPoint":{"x":7,"y":-1,"z":2},"preRequisite":["door-1:open"],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":28,"y":0,"z":22},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":2,"z":11},{"x":5,"y":1,"z":11},{"x":5,"y":0,"z":11},{"x":5,"y":-1,"z":11},{"x":6,"y":2,"z":11},{"x":6,"y":1,"z":11},{"x":6,"y":0,"z":11},{"x":6,"y":-1,"z":11},{"x":7,"y":2,"z":11},{"x":7,"y":1,"z":11},{"x":7,"y":0,"z":11},{"x":7,"y":-1,"z":11},{"x":8,"y":2,"z":11},{"x":8,"y":1,"z":11},{"x":8,"y":0,"z":11},{"x":8,"y":-1,"z":11}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":25,"y":5,"z":10},"secretType":"BAT","preRequisite":[]}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/990f6e4c-f7cf-4d27-ae91-11219b85861f.json b/src/main/resources/dgroomdata/990f6e4c-f7cf-4d27-ae91-11219b85861f.json new file mode 100644 index 0000000..44e0f94 --- /dev/null +++ b/src/main/resources/dgroomdata/990f6e4c-f7cf-4d27-ae91-11219b85861f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,109,109,109,98,98,98,98,98,98,98,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,98,1,1,43,43,1,1,43,43,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,98,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,109,109,1,98,98,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,1,79,79,79,79,79,1,1,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,1,79,79,79,79,79,1,1,0,0,0,0,0,0,0,0,109,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,79,79,79,79,79,79,1,0,0,0,0,0,0,0,0,109,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,1,79,79,79,79,79,1,1,0,0,0,0,0,0,0,0,109,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,1,79,79,79,79,79,1,1,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,98,1,-1,-1,-1],[-1,-1,-1,7,0,0,0,0,0,0,0,0,1,1,-1,-1,1,1,1,1,1,1,1,109,109,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,1,98,98,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,1,1,1,43,43,43,43,43,43,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,109,109,109,98,98,98,98,98,98,98,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"990f6e4c-f7cf-4d27-ae91-11219b85861f","name":"puzzle-icefill","processorId":"puzzle_icefill","properties":{"33-level":"4:3:0:1:3:1","55-board":{"offsetPointList":[{"x":13,"y":1,"z":14},{"x":14,"y":1,"z":14},{"x":15,"y":1,"z":14},{"x":16,"y":1,"z":14},{"x":17,"y":1,"z":14},{"x":18,"y":1,"z":14},{"x":13,"y":1,"z":15},{"x":14,"y":1,"z":15},{"x":15,"y":1,"z":15},{"x":16,"y":1,"z":15},{"x":17,"y":1,"z":15},{"x":18,"y":1,"z":15},{"x":13,"y":1,"z":16},{"x":14,"y":1,"z":16},{"x":15,"y":1,"z":16},{"x":16,"y":1,"z":16},{"x":17,"y":1,"z":16},{"x":18,"y":1,"z":16},{"x":13,"y":1,"z":17},{"x":14,"y":1,"z":17},{"x":15,"y":1,"z":17},{"x":16,"y":1,"z":17},{"x":17,"y":1,"z":17},{"x":18,"y":1,"z":17},{"x":13,"y":1,"z":18},{"x":14,"y":1,"z":18},{"x":15,"y":1,"z":18},{"x":16,"y":1,"z":18},{"x":17,"y":1,"z":18},{"x":18,"y":1,"z":18}]},"55-level":"6:5:0:2:5:2","77-board":{"offsetPointList":[{"x":20,"y":2,"z":13},{"x":21,"y":2,"z":13},{"x":22,"y":2,"z":13},{"x":23,"y":2,"z":13},{"x":24,"y":2,"z":13},{"x":25,"y":2,"z":13},{"x":26,"y":2,"z":13},{"x":27,"y":2,"z":13},{"x":20,"y":2,"z":14},{"x":21,"y":2,"z":14},{"x":22,"y":2,"z":14},{"x":23,"y":2,"z":14},{"x":24,"y":2,"z":14},{"x":25,"y":2,"z":14},{"x":26,"y":2,"z":14},{"x":27,"y":2,"z":14},{"x":20,"y":2,"z":15},{"x":21,"y":2,"z":15},{"x":22,"y":2,"z":15},{"x":23,"y":2,"z":15},{"x":24,"y":2,"z":15},{"x":25,"y":2,"z":15},{"x":26,"y":2,"z":15},{"x":27,"y":2,"z":15},{"x":20,"y":2,"z":16},{"x":21,"y":2,"z":16},{"x":22,"y":2,"z":16},{"x":23,"y":2,"z":16},{"x":24,"y":2,"z":16},{"x":25,"y":2,"z":16},{"x":26,"y":2,"z":16},{"x":27,"y":2,"z":16},{"x":20,"y":2,"z":17},{"x":21,"y":2,"z":17},{"x":22,"y":2,"z":17},{"x":23,"y":2,"z":17},{"x":24,"y":2,"z":17},{"x":25,"y":2,"z":17},{"x":26,"y":2,"z":17},{"x":27,"y":2,"z":17},{"x":20,"y":2,"z":18},{"x":21,"y":2,"z":18},{"x":22,"y":2,"z":18},{"x":23,"y":2,"z":18},{"x":24,"y":2,"z":18},{"x":25,"y":2,"z":18},{"x":26,"y":2,"z":18},{"x":27,"y":2,"z":18},{"x":20,"y":2,"z":19},{"x":21,"y":2,"z":19},{"x":22,"y":2,"z":19},{"x":23,"y":2,"z":19},{"x":24,"y":2,"z":19},{"x":25,"y":2,"z":19},{"x":26,"y":2,"z":19},{"x":27,"y":2,"z":19}]},"77-level":"8:7:0:3:7:3","33-board":{"offsetPointList":[{"x":8,"y":0,"z":15},{"x":9,"y":0,"z":15},{"x":10,"y":0,"z":15},{"x":11,"y":0,"z":15},{"x":8,"y":0,"z":16},{"x":9,"y":0,"z":16},{"x":10,"y":0,"z":16},{"x":11,"y":0,"z":16},{"x":8,"y":0,"z":17},{"x":9,"y":0,"z":17},{"x":10,"y":0,"z":17},{"x":11,"y":0,"z":17}]},"levels":"33,55,77"},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9a0e71bf-babd-421e-a785-442c13d5a8b2.json b/src/main/resources/dgroomdata/9a0e71bf-babd-421e-a785-442c13d5a8b2.json new file mode 100644 index 0000000..524d1bc --- /dev/null +++ b/src/main/resources/dgroomdata/9a0e71bf-babd-421e-a785-442c13d5a8b2.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,98,98,98,98,98,98,98,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,109,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,35,1,1,1,1,1,1,1,1,1,1,1,41,0,0,0,98,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,35,35,1,1,1,1,1,1,1,1,1,1,144,0,0,0,98,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,35,7,1,1,1,1,1,1,1,1,1,0,0,0,98,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,7,98,1,1,1,1,1,1,1,0,0,50,98,-1,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,4,109,109,53,53,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,4,109,109,53,5,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,109,98,1,1,1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,1,1,1,1,1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,109,98,1,1,1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,134,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,4,109,109,0,0,0,134,-1,-1,-1,-1],[-1,-1,-1,-1,134,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,134,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,1,1,1,1,1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9a0e71bf-babd-421e-a785-442c13d5a8b2","name":"Silvers-sword","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":19,"y":-1,"z":14},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":22,"y":1,"z":13},{"x":22,"y":0,"z":13},{"x":22,"y":1,"z":14},{"x":22,"y":0,"z":14},{"x":22,"y":-1,"z":14},{"x":22,"y":0,"z":15},{"x":22,"y":-1,"z":15},{"x":22,"y":1,"z":16},{"x":22,"y":0,"z":16},{"x":22,"y":-1,"z":16}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json b/src/main/resources/dgroomdata/9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json new file mode 100644 index 0000000..3ab526c --- /dev/null +++ b/src/main/resources/dgroomdata/9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,4,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,17,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,17,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,4,1,4,0,0,0,0,0,98,98,98,0,0,0,0,0,1,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,0,0,0,0,98,69,98,0,0,0,0,98,98,1,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,0,0,0,0,98,9,98,134,134,134,134,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,9,0,5,134,134,5,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,134,134,5,65,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,134,134,5,65,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,9,0,5,134,134,5,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,98,98,0,0,0,0,98,9,98,134,134,134,134,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,0,0,0,0,98,98,98,0,0,0,0,98,98,1,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,0,0,0,0,0,98,98,98,0,0,0,0,0,1,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9b949f89-1542-4bcf-9bf3-063ec69bc5f4","name":"Water","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":3,"y":-1,"z":6},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":16,"y":0,"z":8},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":2,"z":5},{"x":8,"y":1,"z":5},{"x":8,"y":0,"z":5},{"x":8,"y":-1,"z":5},{"x":8,"y":2,"z":6},{"x":8,"y":1,"z":6},{"x":8,"y":0,"z":6},{"x":8,"y":-1,"z":6}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":13,"y":-3,"z":6},"secretType":"BAT","preRequisite":[]}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9cd523a2-0c7f-4072-a374-9b99d59554ea.json b/src/main/resources/dgroomdata/9cd523a2-0c7f-4072-a374-9b99d59554ea.json new file mode 100644 index 0000000..6fcb7c9 --- /dev/null +++ b/src/main/resources/dgroomdata/9cd523a2-0c7f-4072-a374-9b99d59554ea.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,43,43,43,1,109,18,0,0,0,0,0,0,0,0,7,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,1,98,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,43,43,43,98,109,0,0,0,0,0,0,0,0,35,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,43,43,43,1,98,0,0,0,0,0,0,0,0,0,7,1,1,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,43,43,43,98,98,50,0,0,0,0,0,0,0,0,35,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,43,43,43,43,43,5,5,134,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,5,134,0,0,0,0,0,0,0,0,50,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,5,134,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,1,98,98,109,0,0,0,0,0,0,0,7,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,1,98,98,0,0,0,0,0,0,0,0,35,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,44,144,0,0,98,98,98,109,0,0,0,0,0,0,0,0,35,35,35,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,50,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,50,139,98,18,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,139,0,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,109,98,98,89,98,98,89,98,98,89,98,98,109,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,43,43,43,43,43,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,43,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,109,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,98,98,109,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,0,0,0,109,1,1,109,0,18,18,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,50,98,98,109,50,0,18,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,98,98,98,98,98,1,98,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,98,98,98,98,98,1,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,159,159,159,159,159,159,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,98,98,98,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,0,-1,-1,-1,0,1,1,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,109,109,0,109,98,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,1,1,0,-1,-1,-1,0,1,1,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,139,0,0,139,0,0,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,-1,-1,-1,0,0,0,98,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,109,51,0,0,0,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,-1,-1,-1,0,0,0,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,-1,-1,-1,0,0,0,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,144,0,0,-1,-1,-1,0,0,0,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,109,51,0,0,0,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,1,1,0,-1,-1,-1,0,1,1,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,139,0,0,139,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,0,-1,-1,-1,0,1,1,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,44,109,98,109,109,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,159,159,159,159,159,159,159,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,159,159,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,159,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,35,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,1,159,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,1,1,1,159,159,0,1,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,159,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,159,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,35,159,1,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,41,35,35,35,35,35,1,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,43,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,43,43,43,43,43,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,188,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,159,159,0,0,0,0,0,0,0,0,98,139,0,0,109,98,1,89,98,98,89,98,98,89,98,98,109,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,159,1,159,159,0,0,0,0,0,0,0,139,98,98,98,98,1,98,1,98,98,98,98,98,1,98,98,98,98,98,98,98,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,159,1,1,159,159,50,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,1,159,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,50,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,159,159,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,17,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,159,159,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,35,0,0,0,0,0,0,0,188,0,188,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,1,1,1,1,1,1,1,0,0,0,0,0,159,159,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,159,1,1,1,159,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,0,0,0,1,1,1,7,0,0,0,0,0,0,0,159,159,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,159,35,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,1,1,35,0,0,0,0,0,0,0,35,159,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0,159,35,41,144,0,0,0,0,0,0,18,35,35,35,35,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,35,0,0,0,0,1,35,18,106,0,0,0,0,0,0,35,159,159,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,35,0,0,17,0,0,0,0,0,0,0,0,35,1,1,1,35,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,1,35,18,0,0,0,0,0,0,0,35,159,159,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,0,0,0,0,0,0,0,0,0,35,1,1,1,159,0,134,134,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,159,159,159,1,159,35,0,0,0,0,0,0,0,0,0,35,159,159,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,159,159,0,0,0,0,0,0,0,35,159,1,1,159,159,0,134,134,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,159,1,1,1,1,159,0,0,0,0,0,0,0,159,159,159,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,159,0,0,0,0,0,0,0,35,1,1,1,1,159,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,159,159,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,159,159,0,0,0,0,0,0,18,159,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9cd523a2-0c7f-4072-a374-9b99d59554ea","name":"Atlas","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":12,"y":12,"z":32},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":37,"y":-13,"z":16},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":32,"y":8,"z":53},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":61,"y":20,"z":34},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":7,"y":13,"z":25},{"x":7,"y":12,"z":25},{"x":7,"y":11,"z":25},{"x":7,"y":10,"z":25},{"x":8,"y":13,"z":25},{"x":8,"y":12,"z":25},{"x":8,"y":11,"z":25},{"x":8,"y":10,"z":25},{"x":9,"y":13,"z":25},{"x":9,"y":12,"z":25},{"x":9,"y":11,"z":25},{"x":9,"y":10,"z":25}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":54,"y":-3,"z":32},"preRequisite":[],"triggering":"cage-1"},"bat-1":{"mechType":"Secret","secretPoint":{"x":7,"y":2,"z":58},"secretType":"BAT","preRequisite":[]},"cage-1":{"secretPoint":{"offsetPointList":[{"x":31,"y":3,"z":31},{"x":32,"y":3,"z":31},{"x":33,"y":3,"z":31},{"x":31,"y":3,"z":32},{"x":32,"y":3,"z":32},{"x":33,"y":3,"z":32},{"x":31,"y":3,"z":33},{"x":32,"y":3,"z":33},{"x":33,"y":3,"z":33}]},"preRequisite":["lever-2:open"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":56,"y":6,"z":29},"secretType":"ITEM_DROP","preRequisite":[""]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":4,"y":0,"z":21},{"x":4,"y":-1,"z":21},{"x":5,"y":0,"z":21},{"x":5,"y":-1,"z":21},{"x":6,"y":0,"z":21},{"x":6,"y":-1,"z":21},{"x":7,"y":0,"z":21},{"x":7,"y":-1,"z":21},{"x":4,"y":0,"z":22},{"x":4,"y":-1,"z":22},{"x":5,"y":0,"z":22},{"x":5,"y":-1,"z":22},{"x":6,"y":0,"z":22},{"x":6,"y":-1,"z":22},{"x":7,"y":0,"z":22},{"x":7,"y":-1,"z":22},{"x":4,"y":0,"z":23},{"x":4,"y":-1,"z":23},{"x":5,"y":0,"z":23},{"x":5,"y":-1,"z":23},{"x":6,"y":0,"z":23},{"x":6,"y":-1,"z":23},{"x":7,"y":0,"z":23},{"x":7,"y":-1,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":29,"y":9,"z":9},{"x":29,"y":8,"z":9},{"x":30,"y":9,"z":9},{"x":30,"y":8,"z":9},{"x":31,"y":9,"z":9},{"x":31,"y":8,"z":9},{"x":29,"y":9,"z":10},{"x":29,"y":8,"z":10},{"x":30,"y":9,"z":10},{"x":30,"y":8,"z":10},{"x":31,"y":9,"z":10},{"x":31,"y":8,"z":10},{"x":29,"y":9,"z":11},{"x":29,"y":8,"z":11},{"x":30,"y":9,"z":11},{"x":30,"y":8,"z":11},{"x":31,"y":9,"z":11},{"x":31,"y":8,"z":11},{"x":29,"y":9,"z":12},{"x":29,"y":8,"z":12},{"x":30,"y":9,"z":12},{"x":30,"y":8,"z":12},{"x":31,"y":9,"z":12},{"x":31,"y":8,"z":12}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":29,"y":9,"z":4},{"x":29,"y":8,"z":4},{"x":30,"y":9,"z":4},{"x":30,"y":8,"z":4},{"x":31,"y":9,"z":4},{"x":31,"y":8,"z":4},{"x":29,"y":9,"z":5},{"x":29,"y":8,"z":5},{"x":30,"y":9,"z":5},{"x":30,"y":8,"z":5},{"x":31,"y":9,"z":5},{"x":31,"y":8,"z":5},{"x":29,"y":9,"z":6},{"x":29,"y":8,"z":6},{"x":30,"y":9,"z":6},{"x":30,"y":8,"z":6},{"x":31,"y":9,"z":6},{"x":31,"y":8,"z":6},{"x":29,"y":9,"z":7},{"x":29,"y":8,"z":7},{"x":30,"y":9,"z":7},{"x":30,"y":8,"z":7},{"x":31,"y":9,"z":7},{"x":31,"y":8,"z":7}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":8,"y":1,"z":26},{"x":8,"y":0,"z":26},{"x":9,"y":1,"z":26},{"x":9,"y":0,"z":26},{"x":10,"y":1,"z":26},{"x":10,"y":0,"z":26},{"x":8,"y":1,"z":27},{"x":8,"y":0,"z":27},{"x":9,"y":1,"z":27},{"x":9,"y":0,"z":27},{"x":10,"y":1,"z":27},{"x":10,"y":0,"z":27},{"x":8,"y":1,"z":28},{"x":8,"y":0,"z":28},{"x":9,"y":1,"z":28},{"x":9,"y":0,"z":28},{"x":10,"y":1,"z":28},{"x":10,"y":0,"z":28},{"x":8,"y":1,"z":29},{"x":8,"y":0,"z":29},{"x":9,"y":1,"z":29},{"x":9,"y":0,"z":29},{"x":10,"y":1,"z":29},{"x":10,"y":0,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":39,"y":8,"z":5},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":1,"z":35},{"x":8,"y":0,"z":35},{"x":9,"y":1,"z":35},{"x":9,"y":0,"z":35},{"x":10,"y":1,"z":35},{"x":10,"y":0,"z":35},{"x":8,"y":1,"z":36},{"x":8,"y":0,"z":36},{"x":9,"y":1,"z":36},{"x":9,"y":0,"z":36},{"x":10,"y":1,"z":36},{"x":10,"y":0,"z":36},{"x":8,"y":1,"z":37},{"x":8,"y":0,"z":37},{"x":9,"y":1,"z":37},{"x":9,"y":0,"z":37},{"x":10,"y":1,"z":37},{"x":10,"y":0,"z":37},{"x":8,"y":1,"z":38},{"x":8,"y":0,"z":38},{"x":9,"y":1,"z":38},{"x":9,"y":0,"z":38},{"x":10,"y":1,"z":38},{"x":10,"y":0,"z":38}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/9fa09d68-c483-4320-872e-9e07b049ee37.json b/src/main/resources/dgroomdata/9fa09d68-c483-4320-872e-9e07b049ee37.json new file mode 100644 index 0000000..1700b33 --- /dev/null +++ b/src/main/resources/dgroomdata/9fa09d68-c483-4320-872e-9e07b049ee37.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,13,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,98,98,13,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,3,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,98,31,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,98,18,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,31,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,98,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,1,0,0,0,1,1,0,0,0,0,0,0,98,1,0,0,0,1,98,98,1,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,1,0,0,0,1,1,7,0,0,0,0,1,1,1,-1,-1,-1,1,1,1,1,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,4,4,48,48,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,13,1,1,7,1,0,0,0,1,1,0,0,0,0,109,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,7,7,7,13,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,7,7,82,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,13,7,0,82,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,13,1,1,7,0,0,0,0,1,1,0,0,0,0,0,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,0,0,0,4,1,1,1,144,0,144,1,1,1,1,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,1,1,0,0,0,0,0,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,0,0,0,5,5,0,0,0,0,0,17,17,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,0,0,0,0,5,5,0,0,0,0,0,0,144,4,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,17,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"9fa09d68-c483-4320-872e-9e07b049ee37","name":"Pillars","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":20,"y":-1,"z":7},"secretType":"CHEST","preRequisite":["door-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":19,"y":5,"z":11},{"x":19,"y":4,"z":11},{"x":19,"y":3,"z":11},{"x":19,"y":2,"z":11},{"x":19,"y":1,"z":11},{"x":19,"y":0,"z":11},{"x":19,"y":-1,"z":11},{"x":20,"y":5,"z":11},{"x":20,"y":4,"z":11},{"x":20,"y":3,"z":11},{"x":20,"y":2,"z":11},{"x":20,"y":1,"z":11},{"x":20,"y":0,"z":11},{"x":20,"y":-1,"z":11},{"x":21,"y":5,"z":11},{"x":21,"y":4,"z":11},{"x":21,"y":3,"z":11},{"x":21,"y":2,"z":11},{"x":21,"y":1,"z":11},{"x":21,"y":0,"z":11},{"x":21,"y":-1,"z":11}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":4,"y":18,"z":7},"preRequisite":[],"triggering":"door-1"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json b/src/main/resources/dgroomdata/a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json new file mode 100644 index 0000000..deb0663 --- /dev/null +++ b/src/main/resources/dgroomdata/a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,98,109,109,98,98,98,98,109,109,98,98,98,98,98,98,98,109,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,159,159,109,109,0,0,0,0,109,109,0,0,0,160,160,109,1,0,0,0,0,109,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,-1,-1,-1],[-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,1,-1,-1,-1],[-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,1,-1,-1,-1],[-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,1,-1,-1,-1],[-1,-1,-1,1,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,-1,-1,-1],[-1,-1,-1,0,0,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,51,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,1,-1,-1,-1],[-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,1,-1,-1,-1],[-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,1,-1,-1,-1],[-1,-1,-1,1,1,7,0,1,109,0,0,160,0,109,109,0,0,0,0,0,1,1,0,0,0,0,109,109,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,98,1,1,109,160,79,98,98,98,98,109,109,98,98,98,98,98,98,109,109,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,174,174,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a053f4fa-d6b2-4aef-ae3e-97c7eee0252e","name":"puzzle-silverfish","processorId":"puzzle_silverfish","properties":{"width":19,"endnodes":{"offsetPointList":[{"x":26,"y":-3,"z":15},{"x":26,"y":-3,"z":16},{"x":26,"y":-3,"z":17}]},"board":{"offsetPointList":[{"x":8,"y":-3,"z":7},{"x":9,"y":-3,"z":7},{"x":10,"y":-3,"z":7},{"x":11,"y":-3,"z":7},{"x":12,"y":-3,"z":7},{"x":13,"y":-3,"z":7},{"x":14,"y":-3,"z":7},{"x":15,"y":-3,"z":7},{"x":16,"y":-3,"z":7},{"x":17,"y":-3,"z":7},{"x":18,"y":-3,"z":7},{"x":19,"y":-3,"z":7},{"x":20,"y":-3,"z":7},{"x":21,"y":-3,"z":7},{"x":22,"y":-3,"z":7},{"x":23,"y":-3,"z":7},{"x":24,"y":-3,"z":7},{"x":25,"y":-3,"z":7},{"x":26,"y":-3,"z":7},{"x":8,"y":-3,"z":8},{"x":9,"y":-3,"z":8},{"x":10,"y":-3,"z":8},{"x":11,"y":-3,"z":8},{"x":12,"y":-3,"z":8},{"x":13,"y":-3,"z":8},{"x":14,"y":-3,"z":8},{"x":15,"y":-3,"z":8},{"x":16,"y":-3,"z":8},{"x":17,"y":-3,"z":8},{"x":18,"y":-3,"z":8},{"x":19,"y":-3,"z":8},{"x":20,"y":-3,"z":8},{"x":21,"y":-3,"z":8},{"x":22,"y":-3,"z":8},{"x":23,"y":-3,"z":8},{"x":24,"y":-3,"z":8},{"x":25,"y":-3,"z":8},{"x":26,"y":-3,"z":8},{"x":8,"y":-3,"z":9},{"x":9,"y":-3,"z":9},{"x":10,"y":-3,"z":9},{"x":11,"y":-3,"z":9},{"x":12,"y":-3,"z":9},{"x":13,"y":-3,"z":9},{"x":14,"y":-3,"z":9},{"x":15,"y":-3,"z":9},{"x":16,"y":-3,"z":9},{"x":17,"y":-3,"z":9},{"x":18,"y":-3,"z":9},{"x":19,"y":-3,"z":9},{"x":20,"y":-3,"z":9},{"x":21,"y":-3,"z":9},{"x":22,"y":-3,"z":9},{"x":23,"y":-3,"z":9},{"x":24,"y":-3,"z":9},{"x":25,"y":-3,"z":9},{"x":26,"y":-3,"z":9},{"x":8,"y":-3,"z":10},{"x":9,"y":-3,"z":10},{"x":10,"y":-3,"z":10},{"x":11,"y":-3,"z":10},{"x":12,"y":-3,"z":10},{"x":13,"y":-3,"z":10},{"x":14,"y":-3,"z":10},{"x":15,"y":-3,"z":10},{"x":16,"y":-3,"z":10},{"x":17,"y":-3,"z":10},{"x":18,"y":-3,"z":10},{"x":19,"y":-3,"z":10},{"x":20,"y":-3,"z":10},{"x":21,"y":-3,"z":10},{"x":22,"y":-3,"z":10},{"x":23,"y":-3,"z":10},{"x":24,"y":-3,"z":10},{"x":25,"y":-3,"z":10},{"x":26,"y":-3,"z":10},{"x":8,"y":-3,"z":11},{"x":9,"y":-3,"z":11},{"x":10,"y":-3,"z":11},{"x":11,"y":-3,"z":11},{"x":12,"y":-3,"z":11},{"x":13,"y":-3,"z":11},{"x":14,"y":-3,"z":11},{"x":15,"y":-3,"z":11},{"x":16,"y":-3,"z":11},{"x":17,"y":-3,"z":11},{"x":18,"y":-3,"z":11},{"x":19,"y":-3,"z":11},{"x":20,"y":-3,"z":11},{"x":21,"y":-3,"z":11},{"x":22,"y":-3,"z":11},{"x":23,"y":-3,"z":11},{"x":24,"y":-3,"z":11},{"x":25,"y":-3,"z":11},{"x":26,"y":-3,"z":11},{"x":8,"y":-3,"z":12},{"x":9,"y":-3,"z":12},{"x":10,"y":-3,"z":12},{"x":11,"y":-3,"z":12},{"x":12,"y":-3,"z":12},{"x":13,"y":-3,"z":12},{"x":14,"y":-3,"z":12},{"x":15,"y":-3,"z":12},{"x":16,"y":-3,"z":12},{"x":17,"y":-3,"z":12},{"x":18,"y":-3,"z":12},{"x":19,"y":-3,"z":12},{"x":20,"y":-3,"z":12},{"x":21,"y":-3,"z":12},{"x":22,"y":-3,"z":12},{"x":23,"y":-3,"z":12},{"x":24,"y":-3,"z":12},{"x":25,"y":-3,"z":12},{"x":26,"y":-3,"z":12},{"x":8,"y":-3,"z":13},{"x":9,"y":-3,"z":13},{"x":10,"y":-3,"z":13},{"x":11,"y":-3,"z":13},{"x":12,"y":-3,"z":13},{"x":13,"y":-3,"z":13},{"x":14,"y":-3,"z":13},{"x":15,"y":-3,"z":13},{"x":16,"y":-3,"z":13},{"x":17,"y":-3,"z":13},{"x":18,"y":-3,"z":13},{"x":19,"y":-3,"z":13},{"x":20,"y":-3,"z":13},{"x":21,"y":-3,"z":13},{"x":22,"y":-3,"z":13},{"x":23,"y":-3,"z":13},{"x":24,"y":-3,"z":13},{"x":25,"y":-3,"z":13},{"x":26,"y":-3,"z":13},{"x":8,"y":-3,"z":14},{"x":9,"y":-3,"z":14},{"x":10,"y":-3,"z":14},{"x":11,"y":-3,"z":14},{"x":12,"y":-3,"z":14},{"x":13,"y":-3,"z":14},{"x":14,"y":-3,"z":14},{"x":15,"y":-3,"z":14},{"x":16,"y":-3,"z":14},{"x":17,"y":-3,"z":14},{"x":18,"y":-3,"z":14},{"x":19,"y":-3,"z":14},{"x":20,"y":-3,"z":14},{"x":21,"y":-3,"z":14},{"x":22,"y":-3,"z":14},{"x":23,"y":-3,"z":14},{"x":24,"y":-3,"z":14},{"x":25,"y":-3,"z":14},{"x":26,"y":-3,"z":14},{"x":8,"y":-3,"z":15},{"x":9,"y":-3,"z":15},{"x":10,"y":-3,"z":15},{"x":11,"y":-3,"z":15},{"x":12,"y":-3,"z":15},{"x":13,"y":-3,"z":15},{"x":14,"y":-3,"z":15},{"x":15,"y":-3,"z":15},{"x":16,"y":-3,"z":15},{"x":17,"y":-3,"z":15},{"x":18,"y":-3,"z":15},{"x":19,"y":-3,"z":15},{"x":20,"y":-3,"z":15},{"x":21,"y":-3,"z":15},{"x":22,"y":-3,"z":15},{"x":23,"y":-3,"z":15},{"x":24,"y":-3,"z":15},{"x":25,"y":-3,"z":15},{"x":26,"y":-3,"z":15},{"x":8,"y":-3,"z":16},{"x":9,"y":-3,"z":16},{"x":10,"y":-3,"z":16},{"x":11,"y":-3,"z":16},{"x":12,"y":-3,"z":16},{"x":13,"y":-3,"z":16},{"x":14,"y":-3,"z":16},{"x":15,"y":-3,"z":16},{"x":16,"y":-3,"z":16},{"x":17,"y":-3,"z":16},{"x":18,"y":-3,"z":16},{"x":19,"y":-3,"z":16},{"x":20,"y":-3,"z":16},{"x":21,"y":-3,"z":16},{"x":22,"y":-3,"z":16},{"x":23,"y":-3,"z":16},{"x":24,"y":-3,"z":16},{"x":25,"y":-3,"z":16},{"x":26,"y":-3,"z":16},{"x":8,"y":-3,"z":17},{"x":9,"y":-3,"z":17},{"x":10,"y":-3,"z":17},{"x":11,"y":-3,"z":17},{"x":12,"y":-3,"z":17},{"x":13,"y":-3,"z":17},{"x":14,"y":-3,"z":17},{"x":15,"y":-3,"z":17},{"x":16,"y":-3,"z":17},{"x":17,"y":-3,"z":17},{"x":18,"y":-3,"z":17},{"x":19,"y":-3,"z":17},{"x":20,"y":-3,"z":17},{"x":21,"y":-3,"z":17},{"x":22,"y":-3,"z":17},{"x":23,"y":-3,"z":17},{"x":24,"y":-3,"z":17},{"x":25,"y":-3,"z":17},{"x":26,"y":-3,"z":17},{"x":8,"y":-3,"z":18},{"x":9,"y":-3,"z":18},{"x":10,"y":-3,"z":18},{"x":11,"y":-3,"z":18},{"x":12,"y":-3,"z":18},{"x":13,"y":-3,"z":18},{"x":14,"y":-3,"z":18},{"x":15,"y":-3,"z":18},{"x":16,"y":-3,"z":18},{"x":17,"y":-3,"z":18},{"x":18,"y":-3,"z":18},{"x":19,"y":-3,"z":18},{"x":20,"y":-3,"z":18},{"x":21,"y":-3,"z":18},{"x":22,"y":-3,"z":18},{"x":23,"y":-3,"z":18},{"x":24,"y":-3,"z":18},{"x":25,"y":-3,"z":18},{"x":26,"y":-3,"z":18},{"x":8,"y":-3,"z":19},{"x":9,"y":-3,"z":19},{"x":10,"y":-3,"z":19},{"x":11,"y":-3,"z":19},{"x":12,"y":-3,"z":19},{"x":13,"y":-3,"z":19},{"x":14,"y":-3,"z":19},{"x":15,"y":-3,"z":19},{"x":16,"y":-3,"z":19},{"x":17,"y":-3,"z":19},{"x":18,"y":-3,"z":19},{"x":19,"y":-3,"z":19},{"x":20,"y":-3,"z":19},{"x":21,"y":-3,"z":19},{"x":22,"y":-3,"z":19},{"x":23,"y":-3,"z":19},{"x":24,"y":-3,"z":19},{"x":25,"y":-3,"z":19},{"x":26,"y":-3,"z":19},{"x":8,"y":-3,"z":20},{"x":9,"y":-3,"z":20},{"x":10,"y":-3,"z":20},{"x":11,"y":-3,"z":20},{"x":12,"y":-3,"z":20},{"x":13,"y":-3,"z":20},{"x":14,"y":-3,"z":20},{"x":15,"y":-3,"z":20},{"x":16,"y":-3,"z":20},{"x":17,"y":-3,"z":20},{"x":18,"y":-3,"z":20},{"x":19,"y":-3,"z":20},{"x":20,"y":-3,"z":20},{"x":21,"y":-3,"z":20},{"x":22,"y":-3,"z":20},{"x":23,"y":-3,"z":20},{"x":24,"y":-3,"z":20},{"x":25,"y":-3,"z":20},{"x":26,"y":-3,"z":20},{"x":8,"y":-3,"z":21},{"x":9,"y":-3,"z":21},{"x":10,"y":-3,"z":21},{"x":11,"y":-3,"z":21},{"x":12,"y":-3,"z":21},{"x":13,"y":-3,"z":21},{"x":14,"y":-3,"z":21},{"x":15,"y":-3,"z":21},{"x":16,"y":-3,"z":21},{"x":17,"y":-3,"z":21},{"x":18,"y":-3,"z":21},{"x":19,"y":-3,"z":21},{"x":20,"y":-3,"z":21},{"x":21,"y":-3,"z":21},{"x":22,"y":-3,"z":21},{"x":23,"y":-3,"z":21},{"x":24,"y":-3,"z":21},{"x":25,"y":-3,"z":21},{"x":26,"y":-3,"z":21},{"x":8,"y":-3,"z":22},{"x":9,"y":-3,"z":22},{"x":10,"y":-3,"z":22},{"x":11,"y":-3,"z":22},{"x":12,"y":-3,"z":22},{"x":13,"y":-3,"z":22},{"x":14,"y":-3,"z":22},{"x":15,"y":-3,"z":22},{"x":16,"y":-3,"z":22},{"x":17,"y":-3,"z":22},{"x":18,"y":-3,"z":22},{"x":19,"y":-3,"z":22},{"x":20,"y":-3,"z":22},{"x":21,"y":-3,"z":22},{"x":22,"y":-3,"z":22},{"x":23,"y":-3,"z":22},{"x":24,"y":-3,"z":22},{"x":25,"y":-3,"z":22},{"x":26,"y":-3,"z":22},{"x":8,"y":-3,"z":23},{"x":9,"y":-3,"z":23},{"x":10,"y":-3,"z":23},{"x":11,"y":-3,"z":23},{"x":12,"y":-3,"z":23},{"x":13,"y":-3,"z":23},{"x":14,"y":-3,"z":23},{"x":15,"y":-3,"z":23},{"x":16,"y":-3,"z":23},{"x":17,"y":-3,"z":23},{"x":18,"y":-3,"z":23},{"x":19,"y":-3,"z":23},{"x":20,"y":-3,"z":23},{"x":21,"y":-3,"z":23},{"x":22,"y":-3,"z":23},{"x":23,"y":-3,"z":23},{"x":24,"y":-3,"z":23},{"x":25,"y":-3,"z":23},{"x":26,"y":-3,"z":23},{"x":8,"y":-3,"z":24},{"x":9,"y":-3,"z":24},{"x":10,"y":-3,"z":24},{"x":11,"y":-3,"z":24},{"x":12,"y":-3,"z":24},{"x":13,"y":-3,"z":24},{"x":14,"y":-3,"z":24},{"x":15,"y":-3,"z":24},{"x":16,"y":-3,"z":24},{"x":17,"y":-3,"z":24},{"x":18,"y":-3,"z":24},{"x":19,"y":-3,"z":24},{"x":20,"y":-3,"z":24},{"x":21,"y":-3,"z":24},{"x":22,"y":-3,"z":24},{"x":23,"y":-3,"z":24},{"x":24,"y":-3,"z":24},{"x":25,"y":-3,"z":24},{"x":26,"y":-3,"z":24},{"x":8,"y":-3,"z":25},{"x":9,"y":-3,"z":25},{"x":10,"y":-3,"z":25},{"x":11,"y":-3,"z":25},{"x":12,"y":-3,"z":25},{"x":13,"y":-3,"z":25},{"x":14,"y":-3,"z":25},{"x":15,"y":-3,"z":25},{"x":16,"y":-3,"z":25},{"x":17,"y":-3,"z":25},{"x":18,"y":-3,"z":25},{"x":19,"y":-3,"z":25},{"x":20,"y":-3,"z":25},{"x":21,"y":-3,"z":25},{"x":22,"y":-3,"z":25},{"x":23,"y":-3,"z":25},{"x":24,"y":-3,"z":25},{"x":25,"y":-3,"z":25},{"x":26,"y":-3,"z":25}]},"height":19},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a069f006-0728-4952-8d9f-1d318cee60d8.json b/src/main/resources/dgroomdata/a069f006-0728-4952-8d9f-1d318cee60d8.json new file mode 100644 index 0000000..2760d04 --- /dev/null +++ b/src/main/resources/dgroomdata/a069f006-0728-4952-8d9f-1d318cee60d8.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":7,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,109,109,109,98,98,98,98,98,0,0,0,31,0,1,5,164,0,0,0,4,169,35,18,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,1,1,1,98,1,164,0,0,0,0,0,0,0,0,0,126,126,1,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,0,0,38,38,1,0,164,5,0,0,0,136,4,44,18,18,0,0,0,0,0,0,0,0,0,0,44,44,98,1,1,1,1,1,1,1,1,1,1,159,5,164,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,31,31,4,0,0,0,0,0,0,0,136,5,98,98,44,18,0,0,0,0,0,0,0,0,0,188,0,98,98,1,1,1,1,98,1,1,1,1,159,5,5,134,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,44,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,50,17,5,5,98,1,98,0,98,159,1,1,159,5,134,134,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,98,98,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,0,98,101,188,0,44,159,1,98,1,0,0,0,0,0,0,0,0,0,0,0,0,1,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,44,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,0,0,43,159,98,1,0,0,0,0,0,0,0,0,0,0,144,18,1,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,98,98,98,1,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,77,44,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,50,0,98,159,0,0,17,0,0,0,0,0,0,0,0,17,18,18,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,98,98,98,98,98,98,98,98,4,98,98,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,44,1,0,0,134,134,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,98,98,98,98,98,98,98,0,0,0,109,109,98,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,17,126,126,17,109,109,109,17,0,0,17,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,44,44,44,4,0,0,0,0,0,0,0,0,0,4,98,98,134,134,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,0,0,98,0,0,0,0,0,0,98,50,0,1,188,188,188,1,126,126,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,17,44,0,0,98,0,0,0,0,0,0,0,0,0,109,98,1,98,4,44,0,0,0,0,0,0,0,0,4,171,188,98,98,5,17,5,0,0,0,0,0,0,0,0,0,0,0,48,48,98,98,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,98,98,0,1,98,98,0,0,0,0,0,0,0,0,109,98,98,109,0,0,0,0,0,0,0,0,0,44,171,171,144,188,0,98,169,5,0,0,0,0,0,0,0,0,0,0,109,109,18,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,1,98,98,98,98,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,44,171,0,0,0,0,17,0,4,98,0,0,0,0,0,0,0,0,0,0,109,109,0,0,98,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,4,98,4,98,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,4,0,0,0,0,0,0,0,0,0,4,98,0,0,0,0,0,0,0,0,0,0,0,0,0,109,188,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,4,98,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,4,0,0,0,0,0,0,0,0,5,17,0,4,0,0,0,0,0,0,0,0,0,0,0,0,17,98,0,50,44,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,5,0,0,0,0,0,0,0,0,164,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,98,98,98,0,0,0,109,154,98,98,98,98,109,0,0,0,0,0,0,164,164,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,0,0,0,0,44,4,98,4,98,109,109,0,0,0,0,0,0,0,0,0,0,0,188,98,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,98,44,0,0,0,0,0,0,0,0,0,17,109,98,0,0,0,98,159,1,1,1,1,109,0,0,0,0,0,0,164,5,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,5,109,0,126,17,126,126,17,0,0,0,0,0,0,0,98,98,98,98,98,98,109,0,0,109,0,0,0,0,0,0,0,0,109,1,98,5,5,0,0,0,0,0,0,0,0,0,0,0,0,98,1,109,109,109,0,0,0,0,0,0,0,0,109,98,0,0,0,98,1,1,1,1,1,109,0,0,0,0,0,144,164,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,98,98,4,98,109,109,4,4,98,98,4,98,0,0,0,109,4,98,98,98,1,98,98,109,0,98,98,98,0,0,0,0,0,0,0,109,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,101,98,98,43,43,109,0,0,0,0,0,0,0,0,109,98,0,0,0,98,1,98,98,98,98,98,0,0,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,4,0,98,17,126,17,98,126,0,0,0,0,0,0,44,4,98,98,1,98,98,98,98,98,98,98,0,0,0,0,0,0,109,98,98,109,4,0,0,0,0,0,0,0,0,0,101,101,101,0,98,43,43,109,17,0,0,0,0,0,0,0,0,0,0,0,0,164,1,1,1,1,1,1,159,159,159,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,109,109,109,98,4,0,0,0,0,0,0,0,101,101,0,0,0,0,98,1,1,98,154,0,0,0,0,0,0,0,0,0,0,0,164,5,1,1,1,1,1,1,169,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,77,98,98,4,1,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,171,0,0,101,0,0,0,0,0,98,1,1,1,98,17,0,0,0,0,0,0,0,0,0,0,0,17,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,1,4,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,171,5,5,101,101,0,0,0,0,98,1,1,1,1,1,109,109,109,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,139,0,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,171,5,98,98,0,0,0,50,98,1,1,1,1,1,1,43,43,109,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,98,98,98,1,1,98,0,188,98,1,1,1,1,1,1,1,43,43,1,1,82,0,134,134,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,7,17,5,164,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a069f006-0728-4952-8d9f-1d318cee60d8","name":"Diagonal","processorId":"default","properties":{},"mechanics":{"fairysoul-1":{"secretPoint":{"x":32,"y":-2,"z":4},"preRequisite":[],"mechType":"Fairysoul"},"chest-2":{"mechType":"Secret","secretPoint":{"x":70,"y":-10,"z":30},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":12,"y":-10,"z":10},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":91,"y":7,"z":15},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":33,"y":2,"z":6},"secretType":"BAT","preRequisite":[]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":18,"y":6,"z":21},{"x":18,"y":5,"z":21},{"x":19,"y":6,"z":21},{"x":19,"y":5,"z":21},{"x":18,"y":6,"z":22},{"x":18,"y":5,"z":22},{"x":19,"y":6,"z":22},{"x":19,"y":5,"z":22},{"x":18,"y":6,"z":23},{"x":18,"y":5,"z":23},{"x":19,"y":6,"z":23},{"x":19,"y":5,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":21,"y":6,"z":21},{"x":21,"y":5,"z":21},{"x":22,"y":6,"z":21},{"x":22,"y":5,"z":21},{"x":21,"y":6,"z":22},{"x":21,"y":5,"z":22},{"x":22,"y":6,"z":22},{"x":22,"y":5,"z":22},{"x":21,"y":6,"z":23},{"x":21,"y":5,"z":23},{"x":22,"y":6,"z":23},{"x":22,"y":5,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":83,"y":6,"z":13},{"x":83,"y":5,"z":13},{"x":84,"y":6,"z":13},{"x":84,"y":5,"z":13},{"x":85,"y":6,"z":13},{"x":85,"y":5,"z":13},{"x":86,"y":6,"z":13},{"x":86,"y":5,"z":13},{"x":83,"y":6,"z":14},{"x":83,"y":5,"z":14},{"x":84,"y":6,"z":14},{"x":84,"y":5,"z":14},{"x":85,"y":6,"z":14},{"x":85,"y":5,"z":14},{"x":86,"y":6,"z":14},{"x":86,"y":5,"z":14},{"x":83,"y":6,"z":15},{"x":83,"y":5,"z":15},{"x":84,"y":6,"z":15},{"x":84,"y":5,"z":15},{"x":85,"y":6,"z":15},{"x":85,"y":5,"z":15},{"x":86,"y":6,"z":15},{"x":86,"y":5,"z":15}]},"preRequisite":[],"mechType":"Tomb"},"journal-1":{"secretPoint":{"x":56,"y":5,"z":28},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json b/src/main/resources/dgroomdata/a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json new file mode 100644 index 0000000..17c7d67 --- /dev/null +++ b/src/main/resources/dgroomdata/a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":35,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,98,139,0,0,0,0,0,0,0,0,0,0,0,98,98,1,0,0,109,98,98,139,98,0,0,0,0,0,0,0,98,139,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,98,0,0,109,98,98,44,0,0,0,0,0,0,0,0,0,44,98,98,1,98,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,98,0,0,109,1,98,98,0,0,0,0,0,0,0,0,0,44,1,98,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,98,0,0,109,159,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,0,109,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,44,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,1,159,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,1,159,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,159,0,0,0,0,0,44,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,50,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,44,44,44,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,0,0,3,159,159,159,159,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,0,0,0,0,0,0,159,3,3,159,159,159,159,159,159,3,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,159,159,3,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,159,159,3,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65,159,159,159,159,0,0,0,0,0,0,0,0,1,98,98,1,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,159,3,3,3,0,0,0,0,0,0,0,0,0,0,1,98,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,98,1,1,159,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,159,159,0,0,0,0,139,98,0,0,0,0,0,0,159,1,1,1,1,98,1,1,159,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a0c57185-4e1a-4fdd-979d-6ed0957e78fb","name":"Lava-ravine","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":5,"y":16,"z":16},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":34,"y":18,"z":56},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":40,"y":-3,"z":6},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":55,"y":14,"z":21},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":38,"y":22,"z":53},{"x":38,"y":21,"z":53},{"x":38,"y":20,"z":53},{"x":38,"y":19,"z":53},{"x":38,"y":18,"z":53},{"x":38,"y":22,"z":54},{"x":38,"y":21,"z":54},{"x":38,"y":20,"z":54},{"x":38,"y":19,"z":54},{"x":38,"y":18,"z":54},{"x":38,"y":22,"z":55},{"x":38,"y":21,"z":55},{"x":38,"y":20,"z":55},{"x":38,"y":19,"z":55},{"x":38,"y":18,"z":55},{"x":38,"y":22,"z":56},{"x":38,"y":21,"z":56},{"x":38,"y":20,"z":56},{"x":38,"y":19,"z":56},{"x":38,"y":18,"z":56},{"x":38,"y":22,"z":57},{"x":38,"y":21,"z":57},{"x":38,"y":20,"z":57},{"x":38,"y":19,"z":57},{"x":38,"y":18,"z":57}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":48,"y":-19,"z":31},"secretType":"ITEM_DROP","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":53,"y":-6,"z":27},"secretType":"BAT","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":11,"y":17,"z":21},{"x":11,"y":16,"z":21},{"x":12,"y":17,"z":21},{"x":12,"y":16,"z":21},{"x":13,"y":17,"z":21},{"x":13,"y":16,"z":21},{"x":14,"y":17,"z":21},{"x":14,"y":16,"z":21},{"x":11,"y":17,"z":22},{"x":11,"y":16,"z":22},{"x":12,"y":17,"z":22},{"x":12,"y":16,"z":22},{"x":13,"y":17,"z":22},{"x":13,"y":16,"z":22},{"x":14,"y":17,"z":22},{"x":14,"y":16,"z":22},{"x":11,"y":17,"z":23},{"x":11,"y":16,"z":23},{"x":12,"y":17,"z":23},{"x":12,"y":16,"z":23},{"x":13,"y":17,"z":23},{"x":13,"y":16,"z":23},{"x":14,"y":17,"z":23},{"x":14,"y":16,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":17,"z":9},{"x":11,"y":16,"z":9},{"x":12,"y":17,"z":9},{"x":12,"y":16,"z":9},{"x":13,"y":17,"z":9},{"x":13,"y":16,"z":9},{"x":14,"y":17,"z":9},{"x":14,"y":16,"z":9},{"x":11,"y":17,"z":10},{"x":11,"y":16,"z":10},{"x":12,"y":17,"z":10},{"x":12,"y":16,"z":10},{"x":13,"y":17,"z":10},{"x":13,"y":16,"z":10},{"x":14,"y":17,"z":10},{"x":14,"y":16,"z":10},{"x":11,"y":17,"z":11},{"x":11,"y":16,"z":11},{"x":12,"y":17,"z":11},{"x":12,"y":16,"z":11},{"x":13,"y":17,"z":11},{"x":13,"y":16,"z":11},{"x":14,"y":17,"z":11},{"x":14,"y":16,"z":11}]},"preRequisite":[],"mechType":"Tomb"},"chest-4":{"mechType":"Secret","secretPoint":{"x":34,"y":18,"z":54},"secretType":"CHEST","preRequisite":["door-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":36,"y":0,"z":5},{"x":36,"y":-1,"z":5},{"x":36,"y":-2,"z":5},{"x":36,"y":-3,"z":5},{"x":36,"y":0,"z":6},{"x":36,"y":-1,"z":6},{"x":36,"y":-2,"z":6},{"x":36,"y":-3,"z":6},{"x":36,"y":0,"z":7},{"x":36,"y":-1,"z":7},{"x":36,"y":-2,"z":7},{"x":36,"y":-3,"z":7}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json b/src/main/resources/dgroomdata/a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json new file mode 100644 index 0000000..28d11a0 --- /dev/null +++ b/src/main/resources/dgroomdata/a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,18,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,98,109,109,109,109,109,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,2,2,3,1,98,98,98,1,1,109,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,1,98,3,3,109,98,1,1,1,1,1,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,3,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,109,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,98,1,1,1,1,3,109,109,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,98,1,1,1,1,1,3,3,109,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,1,1,1,1,1,3,3,3,3,109,18,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,18,0,0,0,0,98,98,98,1,1,1,3,3,3,3,3,98,98,50,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,4,109,109,4,98,98,18,1,1,1,109,3,1,3,3,98,98,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,2,2,2,3,1,1,1,1,1,1,1,1,109,3,98,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,18,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,162,162,0,0,0,0,0,162,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a1c8fd24-c105-49b6-ba56-51dfbb7023cb","name":"Beams","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":29,"y":11,"z":8},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":6,"y":22,"z":9},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":24,"y":22,"z":13},{"x":24,"y":21,"z":13},{"x":25,"y":22,"z":13},{"x":25,"y":21,"z":13},{"x":26,"y":22,"z":13},{"x":26,"y":21,"z":13},{"x":24,"y":22,"z":14},{"x":24,"y":21,"z":14},{"x":25,"y":22,"z":14},{"x":25,"y":21,"z":14},{"x":26,"y":22,"z":14},{"x":26,"y":21,"z":14},{"x":24,"y":22,"z":15},{"x":24,"y":21,"z":15},{"x":25,"y":22,"z":15},{"x":25,"y":21,"z":15},{"x":26,"y":22,"z":15},{"x":26,"y":21,"z":15},{"x":24,"y":22,"z":16},{"x":24,"y":21,"z":16},{"x":25,"y":22,"z":16},{"x":25,"y":21,"z":16},{"x":26,"y":22,"z":16},{"x":26,"y":21,"z":16},{"x":24,"y":22,"z":17},{"x":24,"y":21,"z":17},{"x":25,"y":22,"z":17},{"x":25,"y":21,"z":17},{"x":26,"y":22,"z":17},{"x":26,"y":21,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":2,"z":26},{"x":15,"y":1,"z":26},{"x":16,"y":2,"z":26},{"x":16,"y":1,"z":26},{"x":17,"y":2,"z":26},{"x":17,"y":1,"z":26},{"x":15,"y":2,"z":27},{"x":15,"y":1,"z":27},{"x":16,"y":2,"z":27},{"x":16,"y":1,"z":27},{"x":17,"y":2,"z":27},{"x":17,"y":1,"z":27},{"x":15,"y":2,"z":28},{"x":15,"y":1,"z":28},{"x":16,"y":2,"z":28},{"x":16,"y":1,"z":28},{"x":17,"y":2,"z":28},{"x":17,"y":1,"z":28},{"x":15,"y":2,"z":29},{"x":15,"y":1,"z":29},{"x":16,"y":2,"z":29},{"x":16,"y":1,"z":29},{"x":17,"y":2,"z":29},{"x":17,"y":1,"z":29}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json b/src/main/resources/dgroomdata/a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json new file mode 100644 index 0000000..846e96c --- /dev/null +++ b/src/main/resources/dgroomdata/a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,7,7,1,35,0,0,0,0,0,0,0,0,159,159,35,35,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,109,109,109,109,98,109,98,109,109,109,109,109,109,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,109,109,109,109,98,109,98,109,109,109,109,109,109,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,97,98,98,98,0,0,0,0,0,0,0,0,44,97,97,109,109,98,98,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,97,98,98,98,0,0,0,0,0,0,0,44,98,98,98,98,98,139,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,139,139,0,0,0,0,0,0,0,0,0,139,139,98,98,139,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,109,98,139,139,0,0,0,0,0,0,0,0,0,139,139,97,97,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,139,139,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,50,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,139,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,109,0,0,0,0,139,139,0,0,0,0,0,139,139,98,98,139,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,109,0,0,0,0,139,139,0,0,0,0,0,139,139,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,109,109,109,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,159,159,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,159,159,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,159,159,159,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,98,159,159,159,1,1,18,0,0,-1,-1,-1,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,159,159,159,159,98,98,97,50,0,-1,-1,-1,0,50,98,98,1,144,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,159,159,159,159,159,159,159,97,0,-1,-1,-1,0,98,98,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf","name":"Dip","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":15,"y":8,"z":19},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":7,"y":8,"z":3},"secretType":"CHEST","preRequisite":[]},"door-1":{"secretPoint":{"offsetPointList":[{"x":18,"y":12,"z":17},{"x":18,"y":11,"z":17},{"x":18,"y":10,"z":17},{"x":18,"y":9,"z":17},{"x":18,"y":8,"z":17},{"x":18,"y":12,"z":18},{"x":18,"y":11,"z":18},{"x":18,"y":10,"z":18},{"x":18,"y":9,"z":18},{"x":18,"y":8,"z":18}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":5,"y":9,"z":20},"preRequisite":["crypt-3:open"],"triggering":"door-1"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":18,"y":0,"z":26},{"x":18,"y":-1,"z":26},{"x":19,"y":0,"z":26},{"x":19,"y":-1,"z":26},{"x":20,"y":0,"z":26},{"x":20,"y":-1,"z":26},{"x":18,"y":0,"z":27},{"x":18,"y":-1,"z":27},{"x":19,"y":0,"z":27},{"x":19,"y":-1,"z":27},{"x":20,"y":0,"z":27},{"x":20,"y":-1,"z":27},{"x":18,"y":0,"z":28},{"x":18,"y":-1,"z":28},{"x":19,"y":0,"z":28},{"x":19,"y":-1,"z":28},{"x":20,"y":0,"z":28},{"x":20,"y":-1,"z":28},{"x":18,"y":0,"z":29},{"x":18,"y":-1,"z":29},{"x":19,"y":0,"z":29},{"x":19,"y":-1,"z":29},{"x":20,"y":0,"z":29},{"x":20,"y":-1,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":4,"y":9,"z":21},{"x":4,"y":8,"z":21},{"x":5,"y":9,"z":21},{"x":5,"y":8,"z":21},{"x":6,"y":9,"z":21},{"x":6,"y":8,"z":21},{"x":4,"y":9,"z":22},{"x":4,"y":8,"z":22},{"x":5,"y":9,"z":22},{"x":5,"y":8,"z":22},{"x":6,"y":9,"z":22},{"x":6,"y":8,"z":22},{"x":4,"y":9,"z":23},{"x":4,"y":8,"z":23},{"x":5,"y":9,"z":23},{"x":5,"y":8,"z":23},{"x":6,"y":9,"z":23},{"x":6,"y":8,"z":23},{"x":4,"y":9,"z":24},{"x":4,"y":8,"z":24},{"x":5,"y":9,"z":24},{"x":5,"y":8,"z":24},{"x":6,"y":9,"z":24},{"x":6,"y":8,"z":24}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":24,"y":9,"z":3},{"x":24,"y":8,"z":3},{"x":25,"y":9,"z":3},{"x":25,"y":8,"z":3},{"x":26,"y":9,"z":3},{"x":26,"y":8,"z":3},{"x":24,"y":9,"z":4},{"x":24,"y":8,"z":4},{"x":25,"y":9,"z":4},{"x":25,"y":8,"z":4},{"x":26,"y":9,"z":4},{"x":26,"y":8,"z":4},{"x":24,"y":9,"z":5},{"x":24,"y":8,"z":5},{"x":25,"y":9,"z":5},{"x":25,"y":8,"z":5},{"x":26,"y":9,"z":5},{"x":26,"y":8,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":18,"y":0,"z":26},{"x":18,"y":-1,"z":26},{"x":19,"y":0,"z":26},{"x":19,"y":-1,"z":26},{"x":20,"y":0,"z":26},{"x":20,"y":-1,"z":26},{"x":18,"y":0,"z":27},{"x":18,"y":-1,"z":27},{"x":19,"y":0,"z":27},{"x":19,"y":-1,"z":27},{"x":20,"y":0,"z":27},{"x":20,"y":-1,"z":27},{"x":18,"y":0,"z":28},{"x":18,"y":-1,"z":28},{"x":19,"y":0,"z":28},{"x":19,"y":-1,"z":28},{"x":20,"y":0,"z":28},{"x":20,"y":-1,"z":28},{"x":18,"y":0,"z":29},{"x":18,"y":-1,"z":29},{"x":19,"y":0,"z":29},{"x":19,"y":-1,"z":29},{"x":20,"y":0,"z":29},{"x":20,"y":-1,"z":29}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a5b419e7-49ee-4d6d-bdce-470f508b315d.json b/src/main/resources/dgroomdata/a5b419e7-49ee-4d6d-bdce-470f508b315d.json new file mode 100644 index 0000000..82180f6 --- /dev/null +++ b/src/main/resources/dgroomdata/a5b419e7-49ee-4d6d-bdce-470f508b315d.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,159,159,159,159,1,1,1,1,1,1,1,1,1,1,1,1,159,159,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,144,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,98,98,0,50,98,98,98,50,0,98,98,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,139,98,0,0,1,1,1,0,0,98,139,0,0,0,0,0,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,172,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,139,98,0,1,1,1,1,0,0,98,139,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,98,98,50,44,98,98,98,50,0,98,98,154,0,0,0,154,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,0,0,0,98,98,98,98,98,98,4,98,98,98,98,98,109,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,154,0,0,0,154,0,0,98,139,0,0,0,0,98,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,98,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,44,44,98,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,109,0,0,109,44,0,98,0,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,109,0,0,109,44,44,98,0,0,0,0,0,0,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,109,44,109,98,0,0,109,109,109,98,0,0,0,0,0,0,109,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a5b419e7-49ee-4d6d-bdce-470f508b315d","name":"Granite","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":15,"y":-9,"z":25},"secretType":"ITEM_DROP","preRequisite":[]},"essence-1":{"mechType":"Secret","secretPoint":{"x":14,"y":-9,"z":30},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json b/src/main/resources/dgroomdata/a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json new file mode 100644 index 0000000..fc01d6d --- /dev/null +++ b/src/main/resources/dgroomdata/a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,109,0,0,0,109,98,0,0,0,0,0,0,0,0,0,1,109,0,0,0,0,134,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,50,98,98,0,0,0,0,0,101,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,109,139,0,139,0,0,0,139,0,139,109,98,0,0,0,0,0,101,-1,-1,-1,-1],[-1,-1,-1,-1,98,101,0,0,109,98,1,98,1,1,98,101,0,101,1,98,98,98,98,1,98,101,101,101,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,98,98,98,98,109,109,98,0,0,0,98,98,98,98,98,98,98,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,139,0,0,0,0,0,0,0,1,1,1,50,139,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,159,35,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,50,0,0,0,0,0,0,159,1,1,35,7,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,139,98,139,0,0,0,0,1,1,1,1,1,1,7,139,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,101,98,98,98,98,109,0,0,101,1,98,1,1,1,1,1,98,98,101,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,98,98,0,0,0,98,98,1,1,1,1,1,4,98,0,0,144,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,139,0,0,0,0,0,139,1,1,1,1,1,1,4,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,50,0,1,1,1,1,4,4,4,1,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,67,4,1,1,1,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,44,4,1,1,4,4,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,7,7,67,1,4,4,4,1,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a7321dea-d35f-44f9-a5b0-0bcaf414dc12","name":"Leaves","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":11,"z":15},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"prince-1":{"secretPoint":{"offsetPointList":[{"x":8,"y":12,"z":14},{"x":8,"y":11,"z":14},{"x":9,"y":12,"z":14},{"x":9,"y":11,"z":14},{"x":10,"y":12,"z":14},{"x":10,"y":11,"z":14},{"x":8,"y":12,"z":15},{"x":8,"y":11,"z":15},{"x":9,"y":12,"z":15},{"x":9,"y":11,"z":15},{"x":10,"y":12,"z":15},{"x":10,"y":11,"z":15},{"x":8,"y":12,"z":16},{"x":8,"y":11,"z":16},{"x":9,"y":12,"z":16},{"x":9,"y":11,"z":16},{"x":10,"y":12,"z":16},{"x":10,"y":11,"z":16}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"fairysoul-7":{"secretPoint":{"x":3,"y":4,"z":3},"preRequisite":[],"mechType":"Fairysoul"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":16,"y":14,"z":14},{"x":16,"y":13,"z":14},{"x":16,"y":14,"z":15},{"x":16,"y":13,"z":15},{"x":16,"y":12,"z":15},{"x":16,"y":11,"z":15},{"x":16,"y":14,"z":16},{"x":16,"y":13,"z":16},{"x":16,"y":12,"z":16}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json b/src/main/resources/dgroomdata/a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json new file mode 100644 index 0000000..27bcb55 --- /dev/null +++ b/src/main/resources/dgroomdata/a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":35,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,109,18,0,0,0,0,0,0,98,1,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,98,98,18,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,162,162,0,0,0,162,162,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,162,162,0,0,0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,18,98,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,98,98,98,44,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,1,1,1,98,98,98,98,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,98,98,98,98,0,0,0,0,0,0,98,98,50,0,0,98,109,0,0,0,0,0,0,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,109,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,173,67,67,0,0,0,0,4,173,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,139,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,4,109,109,109,109,4,1,1,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,50,0,0,1,98,98,0,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,67,4,1,1,1,1,1,1,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,109,109,109,98,98,98,98,98,0,0,0,0,0,50,98,98,98,0,0,0,0,4,1,1,1,1,1,109,1,1,1,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,2,1,1,1,1,98,98,98,0,0,0,0,0,0,98,98,98,0,0,0,4,1,1,1,1,1,1,109,109,109,109,1,1,1,1,1,4,67,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,98,98,0,0,0,4,1,1,1,1,1,1,1,109,1,1,109,109,109,1,1,1,1,4,4,0,0,0,0,0,0,0,0,109,98,0,0,0,0,18,0,-1,-1,-1,-1],[-1,-1,-1,-1,2,2,1,1,1,1,1,98,0,0,0,0,0,0,0,0,109,109,0,0,173,1,1,1,109,1,1,1,1,109,1,1,109,109,1,1,1,1,1,1,4,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,109,109,0,173,1,1,1,109,109,109,1,1,1,109,109,109,109,1,1,1,109,109,1,1,1,1,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,2,1,2,1,2,1,1,98,0,0,0,0,0,0,0,0,1,98,0,4,1,1,1,1,109,1,1,1,1,1,1,1,1,1,1,109,109,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,2,2,2,2,2,2,1,98,98,0,0,0,0,0,0,0,98,98,98,4,1,1,1,1,1,1,1,1,109,109,109,109,109,109,1,1,1,1,1,1,1,4,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,2,3,1,2,1,1,98,0,0,0,0,0,0,0,98,1,1,4,1,1,1,109,109,109,109,1,109,0,0,0,0,109,1,109,109,109,109,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,109,109,109,1,1,109,1,1,109,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,109,1,109,1,1,109,1,1,109,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65,109,1,109,109,109,109,1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,109,1,1,109,1,1,1,1,4,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,109,109,109,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,1,1,1,1,109,1,1,1,1,67,0,0,0,0,0,0,0,0,0,0,162,162,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,1,109,109,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,1,1,109,1,1,1,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,109,1,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,4,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,4,1,4,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,4,173,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,98,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,98,0,0,0,0,139,139,0,0,0,139,18,139,0,0,0,139,139,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,98,0,0,0,0,139,139,0,0,0,139,139,139,0,0,0,139,139,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,98,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,98,0,0,0,0,1,98,98,98,0,0,0,0,0,98,98,98,98,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,98,67,67,67,67,98,98,1,98,0,0,0,0,0,98,98,98,98,67,67,67,67,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,67,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,67,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,98,98,0,0,0,0,0,0,50,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1,1,1,98,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"a7f00d0f-bbf5-4d80-8eed-f3e28477879c","name":"Withermancers","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":48,"y":34,"z":43},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":4,"y":-15,"z":18},"secretType":"CHEST","preRequisite":["prince-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":34,"y":41,"z":48},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":39,"y":-9,"z":60},"preRequisite":["superboom-1:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":37,"y":45,"z":47},{"x":37,"y":44,"z":47},{"x":37,"y":43,"z":47},{"x":37,"y":42,"z":47},{"x":37,"y":41,"z":47},{"x":37,"y":45,"z":48},{"x":37,"y":44,"z":48},{"x":37,"y":43,"z":48},{"x":37,"y":42,"z":48},{"x":37,"y":41,"z":48},{"x":37,"y":45,"z":49},{"x":37,"y":44,"z":49},{"x":37,"y":43,"z":49},{"x":37,"y":42,"z":49},{"x":37,"y":41,"z":49}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":36,"y":0,"z":57},{"x":37,"y":0,"z":57},{"x":38,"y":0,"z":57},{"x":36,"y":0,"z":58},{"x":37,"y":0,"z":58},{"x":38,"y":0,"z":58},{"x":39,"y":0,"z":58},{"x":36,"y":0,"z":59},{"x":37,"y":0,"z":59},{"x":38,"y":0,"z":59},{"x":39,"y":0,"z":59},{"x":40,"y":0,"z":59},{"x":39,"y":0,"z":60},{"x":40,"y":0,"z":60}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":46,"y":-9,"z":57},{"x":46,"y":-10,"z":57},{"x":47,"y":-9,"z":57},{"x":47,"y":-10,"z":57},{"x":48,"y":-9,"z":57},{"x":48,"y":-10,"z":57},{"x":49,"y":-9,"z":57},{"x":49,"y":-10,"z":57},{"x":46,"y":-9,"z":58},{"x":46,"y":-10,"z":58},{"x":47,"y":-9,"z":58},{"x":47,"y":-10,"z":58},{"x":48,"y":-9,"z":58},{"x":48,"y":-10,"z":58},{"x":49,"y":-9,"z":58},{"x":49,"y":-10,"z":58},{"x":46,"y":-9,"z":59},{"x":46,"y":-10,"z":59},{"x":47,"y":-9,"z":59},{"x":47,"y":-10,"z":59},{"x":48,"y":-9,"z":59},{"x":48,"y":-10,"z":59},{"x":49,"y":-9,"z":59},{"x":49,"y":-10,"z":59},{"x":46,"y":-9,"z":60},{"x":46,"y":-10,"z":60},{"x":47,"y":-9,"z":60},{"x":47,"y":-10,"z":60},{"x":48,"y":-9,"z":60},{"x":48,"y":-10,"z":60},{"x":49,"y":-9,"z":60},{"x":49,"y":-10,"z":60}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":46,"y":-9,"z":47},{"x":46,"y":-10,"z":47},{"x":47,"y":-9,"z":47},{"x":47,"y":-10,"z":47},{"x":48,"y":-9,"z":47},{"x":48,"y":-10,"z":47},{"x":49,"y":-9,"z":47},{"x":49,"y":-10,"z":47},{"x":46,"y":-9,"z":48},{"x":46,"y":-10,"z":48},{"x":47,"y":-9,"z":48},{"x":47,"y":-10,"z":48},{"x":48,"y":-9,"z":48},{"x":48,"y":-10,"z":48},{"x":49,"y":-9,"z":48},{"x":49,"y":-10,"z":48},{"x":46,"y":-9,"z":49},{"x":46,"y":-10,"z":49},{"x":47,"y":-9,"z":49},{"x":47,"y":-10,"z":49},{"x":48,"y":-9,"z":49},{"x":48,"y":-10,"z":49},{"x":49,"y":-9,"z":49},{"x":49,"y":-10,"z":49},{"x":46,"y":-9,"z":50},{"x":46,"y":-10,"z":50},{"x":47,"y":-9,"z":50},{"x":47,"y":-10,"z":50},{"x":48,"y":-9,"z":50},{"x":48,"y":-10,"z":50},{"x":49,"y":-9,"z":50},{"x":49,"y":-10,"z":50}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":56,"y":2,"z":56},{"x":56,"y":1,"z":56},{"x":57,"y":2,"z":56},{"x":57,"y":1,"z":56},{"x":58,"y":2,"z":56},{"x":58,"y":1,"z":56},{"x":59,"y":2,"z":56},{"x":59,"y":1,"z":56},{"x":56,"y":2,"z":57},{"x":56,"y":1,"z":57},{"x":57,"y":2,"z":57},{"x":57,"y":1,"z":57},{"x":58,"y":2,"z":57},{"x":58,"y":1,"z":57},{"x":59,"y":2,"z":57},{"x":59,"y":1,"z":57},{"x":56,"y":2,"z":58},{"x":56,"y":1,"z":58},{"x":57,"y":2,"z":58},{"x":57,"y":1,"z":58},{"x":58,"y":2,"z":58},{"x":58,"y":1,"z":58},{"x":59,"y":2,"z":58},{"x":59,"y":1,"z":58},{"x":56,"y":2,"z":59},{"x":56,"y":1,"z":59},{"x":57,"y":2,"z":59},{"x":57,"y":1,"z":59},{"x":58,"y":2,"z":59},{"x":58,"y":1,"z":59},{"x":59,"y":2,"z":59},{"x":59,"y":1,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":3,"y":-15,"z":24},{"x":3,"y":-16,"z":24},{"x":4,"y":-15,"z":24},{"x":4,"y":-16,"z":24},{"x":5,"y":-15,"z":24},{"x":5,"y":-16,"z":24},{"x":6,"y":-15,"z":24},{"x":6,"y":-16,"z":24},{"x":3,"y":-15,"z":25},{"x":3,"y":-16,"z":25},{"x":4,"y":-15,"z":25},{"x":4,"y":-16,"z":25},{"x":5,"y":-15,"z":25},{"x":5,"y":-16,"z":25},{"x":6,"y":-15,"z":25},{"x":6,"y":-16,"z":25},{"x":3,"y":-15,"z":26},{"x":3,"y":-16,"z":26},{"x":4,"y":-15,"z":26},{"x":4,"y":-16,"z":26},{"x":5,"y":-15,"z":26},{"x":5,"y":-16,"z":26},{"x":6,"y":-15,"z":26},{"x":6,"y":-16,"z":26}]},"preRequisite":["prince-1:open"],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":62,"y":41,"z":48},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":-15,"z":10},{"x":3,"y":-16,"z":10},{"x":4,"y":-15,"z":10},{"x":4,"y":-16,"z":10},{"x":5,"y":-15,"z":10},{"x":5,"y":-16,"z":10},{"x":6,"y":-15,"z":10},{"x":6,"y":-16,"z":10},{"x":3,"y":-15,"z":11},{"x":3,"y":-16,"z":11},{"x":4,"y":-15,"z":11},{"x":4,"y":-16,"z":11},{"x":5,"y":-15,"z":11},{"x":5,"y":-16,"z":11},{"x":6,"y":-15,"z":11},{"x":6,"y":-16,"z":11},{"x":3,"y":-15,"z":12},{"x":3,"y":-16,"z":12},{"x":4,"y":-15,"z":12},{"x":4,"y":-16,"z":12},{"x":5,"y":-15,"z":12},{"x":5,"y":-16,"z":12},{"x":6,"y":-15,"z":12},{"x":6,"y":-16,"z":12}]},"preRequisite":["prince-1:open"],"mechType":"Tomb"},"prince-1":{"secretPoint":{"offsetPointList":[{"x":33,"y":3,"z":28},{"x":33,"y":2,"z":28},{"x":33,"y":1,"z":28},{"x":34,"y":3,"z":28},{"x":34,"y":2,"z":28},{"x":34,"y":1,"z":28},{"x":35,"y":3,"z":28},{"x":35,"y":2,"z":28},{"x":35,"y":1,"z":28},{"x":36,"y":3,"z":28},{"x":36,"y":2,"z":28},{"x":36,"y":1,"z":28},{"x":33,"y":3,"z":29},{"x":33,"y":2,"z":29},{"x":33,"y":1,"z":29},{"x":34,"y":3,"z":29},{"x":34,"y":2,"z":29},{"x":34,"y":1,"z":29},{"x":35,"y":3,"z":29},{"x":35,"y":2,"z":29},{"x":35,"y":1,"z":29},{"x":36,"y":3,"z":29},{"x":36,"y":2,"z":29},{"x":36,"y":1,"z":29},{"x":33,"y":3,"z":30},{"x":33,"y":2,"z":30},{"x":33,"y":1,"z":30},{"x":34,"y":3,"z":30},{"x":34,"y":2,"z":30},{"x":34,"y":1,"z":30},{"x":35,"y":3,"z":30},{"x":35,"y":2,"z":30},{"x":35,"y":1,"z":30},{"x":36,"y":3,"z":30},{"x":36,"y":2,"z":30},{"x":36,"y":1,"z":30},{"x":33,"y":3,"z":31},{"x":33,"y":2,"z":31},{"x":33,"y":1,"z":31},{"x":34,"y":3,"z":31},{"x":34,"y":2,"z":31},{"x":34,"y":1,"z":31},{"x":35,"y":3,"z":31},{"x":35,"y":2,"z":31},{"x":35,"y":1,"z":31},{"x":36,"y":3,"z":31},{"x":36,"y":2,"z":31},{"x":36,"y":1,"z":31}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/ae5b48ac-43ec-4837-a34e-ac70cba71481.json b/src/main/resources/dgroomdata/ae5b48ac-43ec-4837-a34e-ac70cba71481.json new file mode 100644 index 0000000..3115572 --- /dev/null +++ b/src/main/resources/dgroomdata/ae5b48ac-43ec-4837-a34e-ac70cba71481.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,51,101,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,159,159,139,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,109,98,0,0,98,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,4,17,0,0,0,0,0,17,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,4,67,67,98,98,109,0,0,0,0,98,98,98,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,171,0,0,0,0,0,0,98,98,44,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,171,0,0,0,0,0,139,4,44,0,0,0,0,101,51,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,0,0,98,144,44,44,4,0,0,0,0,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,188,0,0,188,0,0,188,0,0,188,0,0,134,5,98,98,98,0,0,98,159,159,159,4,44,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,188,134,98,43,1,0,0,0,5,1,98,98,98,98,0,0,0,0,101,51,-1,-1,-1,-1],[-1,-1,-1,-1,188,0,164,169,5,5,134,0,50,0,0,0,0,134,5,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,43,43,0,0,0,0,164,5,98,98,98,109,50,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,164,164,134,5,5,188,0,0,0,0,0,134,5,5,50,0,0,0,0,0,188,0,188,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,17,98,98,1,188,0,0,0,0,134,169,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,171,171,44,98,98,98,44,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,171,171,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,188,0,188,0,0,0,0,5,5,5,5,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,98,98,5,134,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,44,98,98,98,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,5,98,98,5,5,164,164,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,164,188,0,0,188,0,0,5,5,5,5,0,0,0,188,0,0,0,171,171,0,0,0,0,0,0,171,17,98,98,1,5,169,164,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,171,171,43,43,0,0,0,0,0,0,98,98,98,98,98,98,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,84,0,0,0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,171,164,43,43,1,44,43,44,144,1,98,98,98,98,98,17,0,0,17,5,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,188,0,0,0,0,0,188,0,134,134,0,0,0,0,0,0,84,84,188,0,0,188,0,50,5,5,5,5,0,0,0,188,0,0,0,188,5,164,98,98,159,159,159,159,98,98,98,98,98,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,98,164,5,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,144,0,44,44,1,188,0,0,109,98,0,0,0,101,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,101,101,0,101,101,98,5,5,0,0,0,0,0,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,109,98,50,0,0,101,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,67,98,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,17,0,0,17,134,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,4,50,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,98,98,98,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,0,0,0,101,188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,164,164,98,1,0,0,0,171,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,67,0,0,0,0,0,4,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,5,164,0,0,0,0,0,0,0,0,0,0,0,0,0,171,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"ae5b48ac-43ec-4837-a34e-ac70cba71481","name":"Skull","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":53,"y":21,"z":8},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":3,"y":18,"z":16},"secretType":"CHEST","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":53,"y":-7,"z":20},{"x":53,"y":-8,"z":20},{"x":54,"y":-7,"z":20},{"x":54,"y":-8,"z":20},{"x":55,"y":-7,"z":20},{"x":55,"y":-8,"z":20},{"x":53,"y":-7,"z":21},{"x":53,"y":-8,"z":21},{"x":54,"y":-7,"z":21},{"x":54,"y":-8,"z":21},{"x":55,"y":-7,"z":21},{"x":55,"y":-8,"z":21},{"x":53,"y":-7,"z":22},{"x":53,"y":-8,"z":22},{"x":54,"y":-7,"z":22},{"x":54,"y":-8,"z":22},{"x":55,"y":-7,"z":22},{"x":55,"y":-8,"z":22},{"x":53,"y":-7,"z":23},{"x":53,"y":-8,"z":23},{"x":54,"y":-7,"z":23},{"x":54,"y":-8,"z":23},{"x":55,"y":-7,"z":23},{"x":55,"y":-8,"z":23}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/b2dce4ed-2bda-4303-a4d7-3ebb914db318.json b/src/main/resources/dgroomdata/b2dce4ed-2bda-4303-a4d7-3ebb914db318.json new file mode 100644 index 0000000..6eced45 --- /dev/null +++ b/src/main/resources/dgroomdata/b2dce4ed-2bda-4303-a4d7-3ebb914db318.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,17,17,17,1,1,43,43,43,43,43,43,43,43,43,43,43,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,98,98,109,109,98,98,0,109,43,43,43,43,43,43,43,43,43,43,17,109,0,98,98,98,98,98,98,-1,-1,-1],[-1,-1,-1,139,0,0,0,0,0,0,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,139,0,0,0,0,0,159,109,43,43,43,43,43,43,43,43,43,43,17,109,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,159,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,18,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,1,0,0,0,0,0,0,109,43,43,43,43,43,43,43,43,43,43,43,109,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,139,0,0,0,0,0,0,109,43,17,17,43,43,43,43,43,17,17,43,109,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,109,43,43,17,43,43,43,43,43,17,43,43,109,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,1,1,109,109,109,109,109,109,109,109,109,109,109,1,1,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,1,1,0,159,18,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,139,0,0,0,0,0,0,0,0,0,0,44,0,0,0,44,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,50,0,0,77,0,0,50,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,77,43,77,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,44,0,0,0,77,0,0,0,0,0,0,0,0,0,77,0,0,0,44,0,0,0,0,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,77,43,77,0,0,0,0,0,0,0,77,43,77,0,0,0,0,0,0,0,-1,-1,-1],[-1,-1,-1,1,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1],[-1,-1,-1,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,1,98,-1,-1,-1],[-1,-1,-1,98,1,98,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"b2dce4ed-2bda-4303-a4d7-3ebb914db318","name":"puzzle_kahoooooooot!","processorId":"puzzle_trivia","properties":{"A":{"x":11,"y":0,"z":25},"B":{"x":16,"y":0,"z":22},"C":{"x":21,"y":0,"z":25}},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/b2df250c-4af2-4201-963c-0ee1cb6bd3de.json b/src/main/resources/dgroomdata/b2df250c-4af2-4201-963c-0ee1cb6bd3de.json new file mode 100644 index 0000000..d779d72 --- /dev/null +++ b/src/main/resources/dgroomdata/b2df250c-4af2-4201-963c-0ee1cb6bd3de.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,169,4,44,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,48,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,48,67,0,0,44,98,1,1,1,1,1,1,1,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,188,98,1,1,1,1,1,1,1,1,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,139,188,98,1,1,1,1,1,1,1,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,188,0,98,98,1,1,1,1,1,1,1,98,109,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,5,5,5,5,1,1,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,5,5,0,0,1,1,1,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,7,7,7,7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,44,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,0,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,109,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,18,1,1,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,13,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,98,98,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,13,1,1,18,0,0,0,0,0,0,0,0,1,1,1,98,98,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,13,18,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,7,1,7,7,7,0,0,0,0,0,0,0,0,109,98,109,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,1,82,0,0,0,0,0,0,0,109,98,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,82,0,0,0,1,1,1,1,1,1,1,82,0,0,0,0,0,1,1,1,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,1,1,1,1,1,1,1,1,1,7,0,0,18,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,82,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"b2df250c-4af2-4201-963c-0ee1cb6bd3de","name":"lava-pool","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":4,"y":22,"z":8},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":14,"y":-7,"z":16},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":13,"y":0,"z":3},"secretType":"BAT","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":23,"z":19},{"x":6,"y":22,"z":19},{"x":6,"y":21,"z":19},{"x":6,"y":20,"z":19},{"x":7,"y":23,"z":19},{"x":7,"y":22,"z":19},{"x":7,"y":21,"z":19},{"x":7,"y":20,"z":19},{"x":8,"y":23,"z":19},{"x":8,"y":22,"z":19},{"x":8,"y":21,"z":19},{"x":8,"y":20,"z":19}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/b58cfdf5-a11d-4f28-b3c4-6576e5157374.json b/src/main/resources/dgroomdata/b58cfdf5-a11d-4f28-b3c4-6576e5157374.json new file mode 100644 index 0000000..bd19160 --- /dev/null +++ b/src/main/resources/dgroomdata/b58cfdf5-a11d-4f28-b3c4-6576e5157374.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":17,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,126,134,134,134,98,0,0,0,0,0,0,0,0,0,0,126,171,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,0,98,0,144,0,0,17,0,0,0,0,0,17,126,109,0,0,0,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,17,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,126,126,126,126,17,0,0,0,0,0,17,0,98,188,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,17,98,14,14,14,14,126,0,0,0,0,0,0,126,98,17,0,0,0,0,0,188,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,98,98,14,14,14,14,126,0,0,0,0,0,0,126,98,98,98,0,0,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,98,98,98,98,109,0,0,0,44,109,98,98,14,126,0,0,0,188,164,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,126,41,41,98,98,159,159,159,159,159,159,98,98,14,126,0,0,0,0,164,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,126,41,41,98,1,7,0,0,0,0,7,1,98,14,126,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,126,126,126,98,1,7,0,0,0,0,7,1,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,17,98,17,171,188,0,0,0,0,17,98,17,188,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,188,0,0,0,0,0,50,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,126,126,126,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,14,171,126,0,0,0,0,17,98,17,0,0,0,0,0,0,17,98,17,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,14,14,126,0,0,0,0,0,98,1,0,0,0,0,0,0,14,109,0,0,0,0,126,41,41,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,109,98,98,98,1,14,0,0,0,0,0,171,44,0,0,0,0,126,41,169,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,126,41,98,1,14,0,0,0,0,0,1,44,50,0,0,0,126,171,41,-1,-1,-1,-1],[-1,-1,-1,-1,144,0,0,0,0,0,126,17,98,17,14,0,0,0,50,0,17,98,17,0,0,0,126,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,188,0,101,0,0,0,0,0,144,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,44,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,44,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,50,0,0,0,0,0,0,1,101,0,0,0,0,0,44,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,126,126,17,98,17,0,0,0,0,0,0,17,98,17,0,0,0,0,44,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,126,14,171,98,14,0,0,0,0,0,0,1,98,50,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,188,0,0,0,0,126,1,1,98,14,0,0,0,0,0,0,1,98,98,98,0,0,109,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,126,50,0,0,0,0,1,1,98,0,0,0,0,0,0,14,1,98,0,188,0,0,0,134,14,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,0,0,0,0,17,98,17,0,0,126,126,0,0,17,98,17,0,0,0,0,134,134,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,44,0,0,0,0,0,101,0,0,0,0,0,0,0,50,101,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,44,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,144,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,0,0,0,0,0,0,101,188,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,44,0,0,126,126,17,98,17,188,0,0,0,0,0,17,98,17,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,109,0,0,126,171,14,98,0,0,0,0,0,0,1,169,98,50,0,0,0,0,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,1,1,1,98,171,0,0,0,0,0,14,1,98,0,0,0,0,0,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,0,0,98,98,1,98,1,0,0,0,0,0,14,1,98,109,0,0,98,98,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,41,134,17,0,0,0,50,17,98,17,50,0,0,0,0,0,17,98,17,0,0,98,98,50,126,-1,-1,-1,-1],[-1,-1,-1,-1,169,134,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,44,98,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,134,134,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,44,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,14,101,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,17,98,17,14,0,0,50,0,14,17,98,17,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,126,126,98,1,169,14,0,0,188,14,1,98,126,126,126,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,126,171,98,98,98,98,98,98,98,98,98,109,14,171,126,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,0,144,109,0,0,126,14,98,41,41,41,164,188,44,44,98,109,14,14,126,0,0,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,98,0,0,98,98,98,41,41,41,164,0,0,144,126,98,98,109,109,0,0,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,109,98,0,0,188,98,164,164,164,164,164,0,0,0,126,14,14,126,0,0,0,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,0,0,0,0,98,14,14,126,0,0,0,0,0,126,14,14,126,0,0,0,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,0,0,0,0,109,126,126,126,0,0,0,0,0,126,171,14,126,0,0,0,0,126,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,126,126,126,126,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,126,0,0,0,0,0,0,0,0,0,0,0,0,0,50,109,50,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,126,126,126,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,164,164,164,171,41,98,44,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"b58cfdf5-a11d-4f28-b3c4-6576e5157374","name":"Gold","processorId":"default","properties":{},"mechanics":{"secret-1":{"mechType":"Secret","secretPoint":{"x":18,"y":-1,"z":15},"secretType":"ESSENCE","preRequisite":[]},"journal-3":{"secretPoint":{"x":16,"y":-1,"z":23},"preRequisite":[],"mechType":"Journal"},"journal-2":{"secretPoint":{"x":13,"y":-1,"z":27},"preRequisite":[],"mechType":"Journal"},"journal-1":{"secretPoint":{"x":14,"y":-1,"z":37},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json b/src/main/resources/dgroomdata/b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json new file mode 100644 index 0000000..95bd698 --- /dev/null +++ b/src/main/resources/dgroomdata/b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,44,4,144,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,98,4,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,44,0,0,0,0,0,0,0,0,1,0,0,144,1,98,1,139,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,98,159,159,159,0,0,50,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,44,0,0,0,0,109,159,159,98,98,98,98,159,144,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,0,1,144,0,1,1,98,98,98,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,98,98,159,159,159,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,44,0,0,0,0,0,0,0,0,98,1,0,0,0,1,1,1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,101,101,101,1,98,98,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,1,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,159,159,159,109,0,0,0,0,0,0,0,0,0,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,159,159,1,44,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,44,44,44,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,1,98,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,44,44,44,1,139,0,0,0,139,1,139,0,0,0,139,1,159,98,44,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,159,159,159,1,98,0,0,0,98,98,109,0,0,144,109,98,1,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,159,159,159,1,1,159,159,159,159,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70","name":"Andesite","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":30,"y":-1,"z":3},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"essence-1":{"mechType":"Secret","secretPoint":{"x":25,"y":-1,"z":9},"secretType":"ESSENCE","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":28,"y":4,"z":11},{"x":28,"y":3,"z":11},{"x":28,"y":2,"z":11},{"x":28,"y":1,"z":11},{"x":28,"y":0,"z":11},{"x":29,"y":2,"z":11},{"x":29,"y":1,"z":11},{"x":29,"y":0,"z":11}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json b/src/main/resources/dgroomdata/c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json new file mode 100644 index 0000000..4e4c355 --- /dev/null +++ b/src/main/resources/dgroomdata/c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,1,1,4,98,98,139,0,0,0,0,0,139,139,0,0,0,0,0,98,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,4,4,98,1,109,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,4,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,1,4,4,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,4,4,4,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,4,1,4,1,4,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,139,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,4,1,1,4,4,98,98,139,0,0,0,0,0,0,0,0,0,0,98,0,98,139,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,4,4,1,4,4,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,98,0,0,0,67,0,0,1,0,0,4,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,1,1,4,98,139,139,0,4,0,0,4,0,0,1,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,4,4,4,1,1,98,98,139,0,1,0,0,1,0,50,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,4,4,4,1,98,98,98,98,98,98,98,98,98,1,98,98,109,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,4,4,4,4,98,1,98,98,98,98,98,98,98,98,98,98,98,98,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,4,4,1,1,98,98,98,98,98,98,98,1,98,98,98,98,98,98,67,67,67,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,1,1,1,1,1,4,1,1,4,4,1,1,1,1,1,4,1,1,1,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,1,4,4,4,4,4,1,4,1,1,1,1,1,4,4,1,1,1,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,4,1,4,1,4,1,4,1,4,4,4,4,4,4,4,4,4,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,4,1,4,1,1,4,4,1,4,4,4,4,1,4,4,1,4,4,4,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,1,1,1,1,1,1,98,98,109,109,98,109,109,98,98,1,4,4,4,1,4,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,4,1,1,1,4,67,0,0,0,0,0,0,0,67,4,4,4,1,4,1,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,67,0,0,0,0,0,0,0,67,1,4,4,4,4,4,4,4,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0","name":"Duncan","processorId":"default","properties":{},"mechanics":{"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":19,"y":19,"z":24},"secretType":"ITEM_DROP","preRequisite":[]},"Duncan":{"secretPoint":{"x":18,"y":18,"z":26},"preRequisite":[],"mechType":"Npc"},"journal-1":{"secretPoint":{"x":19,"y":19,"z":25},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/c2ea0a41-d495-437f-86cc-235a71c49f22.json b/src/main/resources/dgroomdata/c2ea0a41-d495-437f-86cc-235a71c49f22.json new file mode 100644 index 0000000..b6a231a --- /dev/null +++ b/src/main/resources/dgroomdata/c2ea0a41-d495-437f-86cc-235a71c49f22.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,144,4,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,4,4,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,50,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,144,0,0,0,0,0,0,101,0,0,0,0,4,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,101,0,0,0,0,4,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,101,0,1,101,101,1,1,0,0,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,101,0,0,0,0,4,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,7,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,101,0,0,0,0,7,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,50,0,0,0,50,1,1,0,0,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,98,4,4,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,4,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,98,109,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,159,98,98,98,0,0,0,109,98,109,159,159,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,1,0,0,0,0,0,0,0,0,0,1,159,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,98,144,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,144,98,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,1,0,0,0,0,0,0,0,0,0,1,159,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,159,98,98,0,0,0,0,0,98,98,159,159,0,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"c2ea0a41-d495-437f-86cc-235a71c49f22","name":"puzzle-riddle","processorId":"puzzle_riddle_solver","properties":{},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json b/src/main/resources/dgroomdata/c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json new file mode 100644 index 0000000..0a96c78 --- /dev/null +++ b/src/main/resources/dgroomdata/c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":15,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,98,98,98,4,109,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,98,0,0,67,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,35,0,0,0,0,0,0,50,0,159,0,0,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,98,1,98,4,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,35,0,0,0,0,0,0,67,1,67,67,1,0,0,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,1,1,98,98,98,4,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,159,1,1,1,1,35,0,0,0,0,0,0,0,67,4,67,67,4,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,4,4,4,109,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,50,0,0,139,98,0,0,0,0,50,98,98,0,0,0,0,0,139,98,50,0,0,0,0,139,98,0,0,0,0,50,139,98,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,0,0,0,50,1,139,0,0,0,0,0,1,1,0,0,0,0,0,139,98,0,0,0,0,0,0,0,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,98,0,0,109,109,0,0,0,0,0,109,109,109,0,0,0,0,0,109,98,98,98,98,98,98,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,0,0,0,0,139,139,0,0,0,0,0,139,98,0,0,0,0,0,98,98,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,67,159,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,67,67,67,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,50,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,159,159,0,0,0,0,0,0,0,1,67,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,109,98,98,98,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,159,159,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,0,0,0,98,139,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,1,159,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,162,162,162,139,0,0,0,0,0,0,0,0,0,0,0,139,162,162,162,139,0,0,0,0,0,0,0,0,0,0,0,139,162,162,162,139,0,0,0,0,0,0,0,0,0,0,0,139,162,162,162,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,44,162,162,162,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,0,0,0,98,139,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,0,0,0,0,0,0,0,44,44,139,44,44,0,0,0,0,98,139,0,0,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,109,98,98,98,98,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,159,159,159,159,0,0,0,0,0,0,0,35,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,159,0,0,0,0,0,0,35,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,159,0,0,0,0,35,159,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,159,0,0,0,0,0,159,159,159,0,50,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,109,109,0,0,0,109,109,0,0,0,0,0,109,109,109,0,0,0,0,0,109,98,98,98,98,98,98,0,0,0,0,0,139,139,0,0,0,0,0,98,139,0,0,0,0,0,98,1,0,0,0,0,0,139,98,0,0,0,0,0,139,98,0,0,0,0,0,98,139,0,0,0,0,0,139,98,0,0,0,0,0,139,1,0,0,0,0,0,139,139,35,35,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,67,4,4,4,4,4,4,109,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,50,0,0,139,139,0,0,0,0,0,1,1,0,0,0,0,0,139,1,50,0,0,0,0,98,139,0,0,0,0,0,98,139,0,0,0,0,0,98,139,0,0,0,0,0,98,139,50,0,0,0,0,98,139,0,0,0,0,0,98,1,0,0,0,0,0,98,98,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,1,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,0,0,0,0,0,0,0,35,35,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,109,0,0,0,0,0,109,4,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,4,67,0,0,98,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,159,159,0,0,0,159,1,1,159,35,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf","name":"Pit","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":21,"y":21,"z":10},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":114,"y":22,"z":29},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":8,"y":-5,"z":8},"secretType":"CHEST","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":4,"y":6,"z":28},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":46,"y":13,"z":3},{"x":46,"y":12,"z":3},{"x":47,"y":13,"z":3},{"x":47,"y":12,"z":3},{"x":48,"y":13,"z":3},{"x":48,"y":12,"z":3},{"x":49,"y":13,"z":3},{"x":49,"y":12,"z":3},{"x":50,"y":13,"z":3},{"x":50,"y":12,"z":3},{"x":46,"y":13,"z":4},{"x":46,"y":12,"z":4},{"x":47,"y":13,"z":4},{"x":47,"y":12,"z":4},{"x":48,"y":13,"z":4},{"x":48,"y":12,"z":4},{"x":49,"y":13,"z":4},{"x":49,"y":12,"z":4},{"x":50,"y":13,"z":4},{"x":50,"y":12,"z":4},{"x":46,"y":13,"z":5},{"x":46,"y":12,"z":5},{"x":47,"y":13,"z":5},{"x":47,"y":12,"z":5},{"x":48,"y":13,"z":5},{"x":48,"y":12,"z":5},{"x":49,"y":13,"z":5},{"x":49,"y":12,"z":5},{"x":50,"y":13,"z":5},{"x":50,"y":12,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"bat-1":{"mechType":"Secret","secretPoint":{"x":9,"y":8,"z":29},"secretType":"BAT","preRequisite":["superboom-1:open"]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":46,"y":13,"z":27},{"x":46,"y":12,"z":27},{"x":47,"y":13,"z":27},{"x":47,"y":12,"z":27},{"x":48,"y":13,"z":27},{"x":48,"y":12,"z":27},{"x":49,"y":13,"z":27},{"x":49,"y":12,"z":27},{"x":50,"y":13,"z":27},{"x":50,"y":12,"z":27},{"x":46,"y":13,"z":28},{"x":46,"y":12,"z":28},{"x":47,"y":13,"z":28},{"x":47,"y":12,"z":28},{"x":48,"y":13,"z":28},{"x":48,"y":12,"z":28},{"x":49,"y":13,"z":28},{"x":49,"y":12,"z":28},{"x":50,"y":13,"z":28},{"x":50,"y":12,"z":28},{"x":46,"y":13,"z":29},{"x":46,"y":12,"z":29},{"x":47,"y":13,"z":29},{"x":47,"y":12,"z":29},{"x":48,"y":13,"z":29},{"x":48,"y":12,"z":29},{"x":49,"y":13,"z":29},{"x":49,"y":12,"z":29},{"x":50,"y":13,"z":29},{"x":50,"y":12,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":78,"y":13,"z":27},{"x":78,"y":12,"z":27},{"x":79,"y":13,"z":27},{"x":79,"y":12,"z":27},{"x":80,"y":13,"z":27},{"x":80,"y":12,"z":27},{"x":81,"y":13,"z":27},{"x":81,"y":12,"z":27},{"x":82,"y":13,"z":27},{"x":82,"y":12,"z":27},{"x":78,"y":13,"z":28},{"x":78,"y":12,"z":28},{"x":79,"y":13,"z":28},{"x":79,"y":12,"z":28},{"x":80,"y":13,"z":28},{"x":80,"y":12,"z":28},{"x":81,"y":13,"z":28},{"x":81,"y":12,"z":28},{"x":82,"y":13,"z":28},{"x":82,"y":12,"z":28},{"x":78,"y":13,"z":29},{"x":78,"y":12,"z":29},{"x":79,"y":13,"z":29},{"x":79,"y":12,"z":29},{"x":80,"y":13,"z":29},{"x":80,"y":12,"z":29},{"x":81,"y":13,"z":29},{"x":81,"y":12,"z":29},{"x":82,"y":13,"z":29},{"x":82,"y":12,"z":29}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":78,"y":13,"z":3},{"x":78,"y":12,"z":3},{"x":79,"y":13,"z":3},{"x":79,"y":12,"z":3},{"x":80,"y":13,"z":3},{"x":80,"y":12,"z":3},{"x":81,"y":13,"z":3},{"x":81,"y":12,"z":3},{"x":82,"y":13,"z":3},{"x":82,"y":12,"z":3},{"x":78,"y":13,"z":4},{"x":78,"y":12,"z":4},{"x":79,"y":13,"z":4},{"x":79,"y":12,"z":4},{"x":80,"y":13,"z":4},{"x":80,"y":12,"z":4},{"x":81,"y":13,"z":4},{"x":81,"y":12,"z":4},{"x":82,"y":13,"z":4},{"x":82,"y":12,"z":4},{"x":78,"y":13,"z":5},{"x":78,"y":12,"z":5},{"x":79,"y":13,"z":5},{"x":79,"y":12,"z":5},{"x":80,"y":13,"z":5},{"x":80,"y":12,"z":5},{"x":81,"y":13,"z":5},{"x":81,"y":12,"z":5},{"x":82,"y":13,"z":5},{"x":82,"y":12,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":9,"y":10,"z":24},{"x":9,"y":9,"z":24},{"x":9,"y":8,"z":24},{"x":9,"y":7,"z":24},{"x":9,"y":6,"z":24},{"x":10,"y":10,"z":24},{"x":10,"y":9,"z":24},{"x":10,"y":8,"z":24},{"x":10,"y":7,"z":24},{"x":10,"y":6,"z":24}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json b/src/main/resources/dgroomdata/c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json new file mode 100644 index 0000000..c9761ad --- /dev/null +++ b/src/main/resources/dgroomdata/c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,58,58,0,0,50,98,98,98,0,0,0,0,0,98,98,98,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,58,58,0,0,0,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,-1,-1,-1,-1],[-1,-1,-1,-1,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,164,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,98,0,0,0,164,164,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,98,98,98,0,0,0,0,0,98,98,98,0,0,0,164,5,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"c6ebcdb2-4ea8-4387-b997-031bd56f7e3b","name":"Mirror","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-15,"z":18},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":12,"y":-13,"z":17},{"x":12,"y":-14,"z":17},{"x":12,"y":-15,"z":17},{"x":12,"y":-13,"z":18},{"x":12,"y":-14,"z":18},{"x":12,"y":-15,"z":18},{"x":12,"y":-16,"z":18},{"x":12,"y":-14,"z":19},{"x":12,"y":-15,"z":19},{"x":12,"y":-16,"z":19}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/c9078cd2-91d4-457d-ae30-3579293821da.json b/src/main/resources/dgroomdata/c9078cd2-91d4-457d-ae30-3579293821da.json new file mode 100644 index 0000000..1ff0c8b --- /dev/null +++ b/src/main/resources/dgroomdata/c9078cd2-91d4-457d-ae30-3579293821da.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,159,98,98,139,0,0,0,0,0,0,0,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,139,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,159,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,0,144,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,139,0,0,0,0,0,98,98,0,17,17,0,0,0,0,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,1,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,17,98,98,17,0,0,17,17,17,118,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,101,101,101,101,101,101,101,98,98,101,101,101,101,101,101,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,109,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,139,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,139,98,0,0,0,0,0,0,118,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,118,0,0,0,0,0,0,109,109,0,0,0,0,0,118,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,159,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,159,43,98,1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,98,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"c9078cd2-91d4-457d-ae30-3579293821da","name":"Bridges","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":4,"y":12,"z":16},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":42,"y":-18,"z":22},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":55,"y":-11,"z":29},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":10,"y":16,"z":15},{"x":10,"y":15,"z":15},{"x":10,"y":14,"z":15},{"x":10,"y":13,"z":15},{"x":10,"y":12,"z":15},{"x":10,"y":11,"z":15},{"x":10,"y":16,"z":16},{"x":10,"y":15,"z":16},{"x":10,"y":14,"z":16},{"x":10,"y":13,"z":16},{"x":10,"y":12,"z":16},{"x":10,"y":11,"z":16},{"x":10,"y":16,"z":17},{"x":10,"y":15,"z":17},{"x":10,"y":14,"z":17},{"x":10,"y":13,"z":17},{"x":10,"y":12,"z":17},{"x":10,"y":11,"z":17}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-1":{"mechType":"Secret","secretPoint":{"x":49,"y":27,"z":3},"secretType":"BAT","preRequisite":["superboom-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":48,"y":26,"z":12},{"x":48,"y":25,"z":12},{"x":48,"y":24,"z":12},{"x":48,"y":23,"z":12},{"x":49,"y":27,"z":12},{"x":49,"y":26,"z":12},{"x":49,"y":25,"z":12},{"x":49,"y":24,"z":12},{"x":49,"y":23,"z":12},{"x":50,"y":25,"z":12},{"x":50,"y":24,"z":12},{"x":50,"y":23,"z":12}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":56,"y":11,"z":18},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":48,"y":24,"z":15},{"x":48,"y":23,"z":15},{"x":49,"y":24,"z":15},{"x":49,"y":23,"z":15},{"x":50,"y":24,"z":15},{"x":50,"y":23,"z":15},{"x":48,"y":24,"z":16},{"x":48,"y":23,"z":16},{"x":49,"y":24,"z":16},{"x":49,"y":23,"z":16},{"x":50,"y":24,"z":16},{"x":50,"y":23,"z":16},{"x":48,"y":24,"z":17},{"x":48,"y":23,"z":17},{"x":49,"y":24,"z":17},{"x":49,"y":23,"z":17},{"x":50,"y":24,"z":17},{"x":50,"y":23,"z":17},{"x":48,"y":24,"z":18},{"x":48,"y":23,"z":18},{"x":49,"y":24,"z":18},{"x":49,"y":23,"z":18},{"x":50,"y":24,"z":18},{"x":50,"y":23,"z":18},{"x":48,"y":24,"z":19},{"x":48,"y":23,"z":19},{"x":49,"y":24,"z":19},{"x":49,"y":23,"z":19},{"x":50,"y":24,"z":19},{"x":50,"y":23,"z":19}]},"preRequisite":[],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":55,"y":24,"z":23},{"x":55,"y":23,"z":23},{"x":56,"y":24,"z":23},{"x":56,"y":23,"z":23},{"x":57,"y":24,"z":23},{"x":57,"y":23,"z":23},{"x":55,"y":24,"z":24},{"x":55,"y":23,"z":24},{"x":56,"y":24,"z":24},{"x":56,"y":23,"z":24},{"x":57,"y":24,"z":24},{"x":57,"y":23,"z":24},{"x":55,"y":24,"z":25},{"x":55,"y":23,"z":25},{"x":56,"y":24,"z":25},{"x":56,"y":23,"z":25},{"x":57,"y":24,"z":25},{"x":57,"y":23,"z":25},{"x":55,"y":24,"z":26},{"x":55,"y":23,"z":26},{"x":56,"y":24,"z":26},{"x":56,"y":23,"z":26},{"x":57,"y":24,"z":26},{"x":57,"y":23,"z":26},{"x":55,"y":24,"z":27},{"x":55,"y":23,"z":27},{"x":56,"y":24,"z":27},{"x":56,"y":23,"z":27},{"x":57,"y":24,"z":27},{"x":57,"y":23,"z":27}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":5,"y":12,"z":7},{"x":5,"y":11,"z":7},{"x":6,"y":12,"z":7},{"x":6,"y":11,"z":7},{"x":7,"y":12,"z":7},{"x":7,"y":11,"z":7},{"x":8,"y":12,"z":7},{"x":8,"y":11,"z":7},{"x":9,"y":12,"z":7},{"x":9,"y":11,"z":7},{"x":5,"y":12,"z":8},{"x":5,"y":11,"z":8},{"x":6,"y":12,"z":8},{"x":6,"y":11,"z":8},{"x":7,"y":12,"z":8},{"x":7,"y":11,"z":8},{"x":8,"y":12,"z":8},{"x":8,"y":11,"z":8},{"x":9,"y":12,"z":8},{"x":9,"y":11,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":5,"y":12,"z":24},{"x":5,"y":11,"z":24},{"x":6,"y":12,"z":24},{"x":6,"y":11,"z":24},{"x":7,"y":12,"z":24},{"x":7,"y":11,"z":24},{"x":8,"y":12,"z":24},{"x":8,"y":11,"z":24},{"x":9,"y":12,"z":24},{"x":9,"y":11,"z":24},{"x":5,"y":12,"z":25},{"x":5,"y":11,"z":25},{"x":6,"y":12,"z":25},{"x":6,"y":11,"z":25},{"x":7,"y":12,"z":25},{"x":7,"y":11,"z":25},{"x":8,"y":12,"z":25},{"x":8,"y":11,"z":25},{"x":9,"y":12,"z":25},{"x":9,"y":11,"z":25}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":56,"y":0,"z":5},{"x":56,"y":-1,"z":5},{"x":57,"y":0,"z":5},{"x":57,"y":-1,"z":5},{"x":56,"y":0,"z":6},{"x":56,"y":-1,"z":6},{"x":57,"y":0,"z":6},{"x":57,"y":-1,"z":6},{"x":56,"y":0,"z":7},{"x":56,"y":-1,"z":7},{"x":57,"y":0,"z":7},{"x":57,"y":-1,"z":7},{"x":56,"y":0,"z":8},{"x":56,"y":-1,"z":8},{"x":57,"y":0,"z":8},{"x":57,"y":-1,"z":8},{"x":56,"y":0,"z":9},{"x":56,"y":-1,"z":9},{"x":57,"y":0,"z":9},{"x":57,"y":-1,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"essence-2":{"mechType":"Secret","secretPoint":{"x":54,"y":-18,"z":18},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":39,"y":-6,"z":15},{"x":39,"y":-7,"z":15},{"x":40,"y":-6,"z":15},{"x":40,"y":-7,"z":15},{"x":41,"y":-6,"z":15},{"x":41,"y":-7,"z":15},{"x":42,"y":-6,"z":15},{"x":42,"y":-7,"z":15},{"x":43,"y":-6,"z":15},{"x":43,"y":-7,"z":15},{"x":39,"y":-6,"z":16},{"x":39,"y":-7,"z":16},{"x":40,"y":-6,"z":16},{"x":40,"y":-7,"z":16},{"x":41,"y":-6,"z":16},{"x":41,"y":-7,"z":16},{"x":42,"y":-6,"z":16},{"x":42,"y":-7,"z":16},{"x":43,"y":-6,"z":16},{"x":43,"y":-7,"z":16},{"x":39,"y":-6,"z":17},{"x":39,"y":-7,"z":17},{"x":40,"y":-6,"z":17},{"x":40,"y":-7,"z":17},{"x":41,"y":-6,"z":17},{"x":41,"y":-7,"z":17},{"x":42,"y":-6,"z":17},{"x":42,"y":-7,"z":17},{"x":43,"y":-6,"z":17},{"x":43,"y":-7,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":54,"y":-17,"z":14},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/cab054ed-b9ea-4f54-9d23-9864a50789f0.json b/src/main/resources/dgroomdata/cab054ed-b9ea-4f54-9d23-9864a50789f0.json new file mode 100644 index 0000000..ab45ff3 --- /dev/null +++ b/src/main/resources/dgroomdata/cab054ed-b9ea-4f54-9d23-9864a50789f0.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,98,98,98,1,1,98,98,98,1,1,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,109,109,98,98,98,98,98,109,109,98,98,98,98,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,4,0,0,0,0,0,109,98,0,0,0,109,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,67,4,4,4,67,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,67,0,98,0,67,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,188,0,0,0,188,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,98,101,0,101,98,101,0,101,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,101,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,101,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,109,109,98,109,109,98,109,109,98,109,109,98,98,98,109,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,0,0,50,0,0,0,0,0,50,0,0,98,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"cab054ed-b9ea-4f54-9d23-9864a50789f0","name":"Jumping-skulls","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":-8,"z":24},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json b/src/main/resources/dgroomdata/cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json new file mode 100644 index 0000000..9133803 --- /dev/null +++ b/src/main/resources/dgroomdata/cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,7,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,7,7,0,0,0,0,0,0,0,7,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,7,7,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,159,7,0,0,0,0,0,0,0,0,0,0,159,159,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,35,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,44,44,44,0,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,44,44,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,1,4,169,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,18,0,0,0,0,7,7,7,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,35,35,35,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"cf44c95c-950e-49e0-aa4c-82c2b18d0acc","name":"puzzle-blaze-down-to-top","processorId":"puzzle_blaze_solver","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":3,"y":48,"z":28},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/cf6d49d3-4f1e-4ec9-836e-049573793ddd.json b/src/main/resources/dgroomdata/cf6d49d3-4f1e-4ec9-836e-049573793ddd.json new file mode 100644 index 0000000..79453c0 --- /dev/null +++ b/src/main/resources/dgroomdata/cf6d49d3-4f1e-4ec9-836e-049573793ddd.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,44,1,1,1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,1,1,101,101,101,101,101,1,1,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,98,0,0,0,0,0,98,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"cf6d49d3-4f1e-4ec9-836e-049573793ddd","name":"puzzle-box","processorId":"puzzle_box","properties":{"board":{"offsetPointList":[{"x":7,"y":-5,"z":7},{"x":10,"y":-5,"z":7},{"x":13,"y":-5,"z":7},{"x":16,"y":-5,"z":7},{"x":19,"y":-5,"z":7},{"x":22,"y":-5,"z":7},{"x":25,"y":-5,"z":7},{"x":7,"y":-5,"z":10},{"x":10,"y":-5,"z":10},{"x":13,"y":-5,"z":10},{"x":16,"y":-5,"z":10},{"x":19,"y":-5,"z":10},{"x":22,"y":-5,"z":10},{"x":25,"y":-5,"z":10},{"x":7,"y":-5,"z":13},{"x":10,"y":-5,"z":13},{"x":13,"y":-5,"z":13},{"x":16,"y":-5,"z":13},{"x":19,"y":-5,"z":13},{"x":22,"y":-5,"z":13},{"x":25,"y":-5,"z":13},{"x":7,"y":-5,"z":16},{"x":10,"y":-5,"z":16},{"x":13,"y":-5,"z":16},{"x":16,"y":-5,"z":16},{"x":19,"y":-5,"z":16},{"x":22,"y":-5,"z":16},{"x":25,"y":-5,"z":16},{"x":7,"y":-5,"z":19},{"x":10,"y":-5,"z":19},{"x":13,"y":-5,"z":19},{"x":16,"y":-5,"z":19},{"x":19,"y":-5,"z":19},{"x":22,"y":-5,"z":19},{"x":25,"y":-5,"z":19},{"x":7,"y":-5,"z":22},{"x":10,"y":-5,"z":22},{"x":13,"y":-5,"z":22},{"x":16,"y":-5,"z":22},{"x":19,"y":-5,"z":22},{"x":22,"y":-5,"z":22},{"x":25,"y":-5,"z":22},{"x":7,"y":-5,"z":25},{"x":10,"y":-5,"z":25},{"x":13,"y":-5,"z":25},{"x":16,"y":-5,"z":25},{"x":19,"y":-5,"z":25},{"x":22,"y":-5,"z":25},{"x":25,"y":-5,"z":25}]}},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/d3e61abf-4198-4520-a950-a03761a0eb6f.json b/src/main/resources/dgroomdata/d3e61abf-4198-4520-a950-a03761a0eb6f.json new file mode 100644 index 0000000..0c3e557 --- /dev/null +++ b/src/main/resources/dgroomdata/d3e61abf-4198-4520-a950-a03761a0eb6f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,0,0,0,35,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,7,7,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,159,159,0,0,0,0,0,0,18,0,1,1,1,1,1,0,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,159,1,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,0,0,1,1,-1,-1,-1],[-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1],[-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,35,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,98,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,1,1,1,0,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,1,1,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,0,98,0,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,159,159,159,159,0,0,0,0,0,0,0,0,18,35,1,1,1,1,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,7,1,1,1,98,0,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,35,0,0,0,0,1,1,1,1,1,98,0,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,0,0,0,1,1,1,1,1,98,1,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"d3e61abf-4198-4520-a950-a03761a0eb6f","name":"puzzle-blaze-top-bottom","processorId":"puzzle_blaze_solver","properties":{"order":true},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-2,"z":29},"secretType":"CHEST","preRequisite":[]}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/d4a015ae-f123-4696-8fb6-719b5a21b623.json b/src/main/resources/dgroomdata/d4a015ae-f123-4696-8fb6-719b5a21b623.json new file mode 100644 index 0000000..7be8f93 --- /dev/null +++ b/src/main/resources/dgroomdata/d4a015ae-f123-4696-8fb6-719b5a21b623.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,50,0,0,0,50,0,35,1,1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,35,1,1,1,0,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,35,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,35,1,1,1,35,0,0,0,0,0,0,0,101,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,35,1,1,7,7,0,0,0,0,0,0,1,1,101,0,101,101,101,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,1,1,7,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,-1,-1,-1,1,1,1,1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,98,98,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,-1,-1,-1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,-1,-1,-1,0,1,1,1,1,5,0,0,50,1,144,0,0,98,50,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,-1,-1,-1,0,1,1,1,5,5,0,0,98,98,159,159,159,98,98,98,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,98,98,98,1,1,1,1,0,0,0,98,1,1,1,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,98,1,1,1,1,1,1,109,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,98,1,1,1,1,1,1,1,1,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"d4a015ae-f123-4696-8fb6-719b5a21b623","name":"Raccoon","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":5,"y":14,"z":23},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":4,"y":-1,"z":7},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":25,"y":7,"z":7},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":7,"y":0,"z":3},"preRequisite":["superboom-2:open"],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":6,"y":2,"z":13},{"x":6,"y":1,"z":13},{"x":6,"y":0,"z":13},{"x":6,"y":-1,"z":13},{"x":7,"y":2,"z":13},{"x":7,"y":1,"z":13},{"x":7,"y":0,"z":13},{"x":7,"y":-1,"z":13},{"x":8,"y":2,"z":13},{"x":8,"y":1,"z":13},{"x":8,"y":0,"z":13},{"x":8,"y":-1,"z":13}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":7,"y":0,"z":20},{"x":7,"y":-1,"z":20},{"x":8,"y":0,"z":20},{"x":8,"y":-1,"z":20},{"x":9,"y":0,"z":20},{"x":9,"y":-1,"z":20},{"x":7,"y":0,"z":21},{"x":7,"y":-1,"z":21},{"x":8,"y":0,"z":21},{"x":8,"y":-1,"z":21},{"x":9,"y":0,"z":21},{"x":9,"y":-1,"z":21},{"x":7,"y":0,"z":22},{"x":7,"y":-1,"z":22},{"x":8,"y":0,"z":22},{"x":8,"y":-1,"z":22},{"x":9,"y":0,"z":22},{"x":9,"y":-1,"z":22}]},"preRequisite":[],"mechType":"Tomb"},"fairysoul-5":{"secretPoint":{"x":12,"y":13,"z":23},"preRequisite":[],"mechType":"Fairysoul"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":0,"z":16},{"x":3,"y":-1,"z":16},{"x":4,"y":0,"z":16},{"x":4,"y":-1,"z":16},{"x":5,"y":0,"z":16},{"x":5,"y":-1,"z":16},{"x":3,"y":0,"z":17},{"x":3,"y":-1,"z":17},{"x":4,"y":0,"z":17},{"x":4,"y":-1,"z":17},{"x":5,"y":0,"z":17},{"x":5,"y":-1,"z":17},{"x":3,"y":0,"z":18},{"x":3,"y":-1,"z":18},{"x":4,"y":0,"z":18},{"x":4,"y":-1,"z":18},{"x":5,"y":0,"z":18},{"x":5,"y":-1,"z":18},{"x":3,"y":0,"z":16},{"x":3,"y":-1,"z":16},{"x":4,"y":0,"z":16},{"x":4,"y":-1,"z":16},{"x":5,"y":0,"z":16},{"x":5,"y":-1,"z":16},{"x":3,"y":0,"z":17},{"x":3,"y":-1,"z":17},{"x":4,"y":0,"z":17},{"x":4,"y":-1,"z":17},{"x":5,"y":0,"z":17},{"x":5,"y":-1,"z":17},{"x":3,"y":0,"z":18},{"x":3,"y":-1,"z":18},{"x":4,"y":0,"z":18},{"x":4,"y":-1,"z":18},{"x":5,"y":0,"z":18},{"x":5,"y":-1,"z":18}]},"preRequisite":[],"mechType":"Tomb"},"journal-1":{"secretPoint":{"x":26,"y":11,"z":27},"preRequisite":[],"mechType":"Journal"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":6,"y":4,"z":9},{"x":7,"y":4,"z":9},{"x":6,"y":4,"z":10},{"x":7,"y":4,"z":10},{"x":6,"y":6,"z":8},{"x":6,"y":5,"z":8},{"x":7,"y":6,"z":8},{"x":7,"y":5,"z":8}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":10,"y":-1,"z":7},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":5,"y":7,"z":16},{"x":5,"y":6,"z":16},{"x":6,"y":9,"z":16},{"x":6,"y":8,"z":16},{"x":6,"y":7,"z":16},{"x":6,"y":6,"z":16},{"x":6,"y":5,"z":16},{"x":7,"y":10,"z":16},{"x":7,"y":9,"z":16},{"x":7,"y":8,"z":16},{"x":7,"y":7,"z":16},{"x":7,"y":6,"z":16},{"x":7,"y":5,"z":16},{"x":8,"y":8,"z":16},{"x":8,"y":6,"z":16},{"x":8,"y":5,"z":16}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/d712ae5b-903a-4d80-96ee-8ee54b050ea5.json b/src/main/resources/dgroomdata/d712ae5b-903a-4d80-96ee-8ee54b050ea5.json new file mode 100644 index 0000000..892bb36 --- /dev/null +++ b/src/main/resources/dgroomdata/d712ae5b-903a-4d80-96ee-8ee54b050ea5.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,4,1,44,0,0,0,0,0,0,1,1,1,1,159,1,1,1,1,1,112,112,112,112,112,112,112,4,4,1,1,1,1,1,1,1,4,0,0,0,0,0,0,0,0,44,4,4,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,1,4,44,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,112,112,112,112,112,112,112,4,1,1,1,1,1,1,4,1,1,0,0,0,0,0,0,0,44,44,1,4,4,1,4,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,4,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,112,112,112,112,112,112,112,4,1,4,4,1,1,1,1,1,1,1,0,0,0,0,0,0,44,1,1,1,1,1,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,162,1,112,112,112,112,112,112,112,4,1,4,1,1,1,1,1,1,1,1,1,0,0,0,0,4,1,48,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,112,112,112,112,112,112,0,0,0,0,1,1,1,1,1,159,159,159,1,1,1,1,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,1,4,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,159,159,159,159,159,1,1,1,1,1,1,1,1,1,4,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,0,1,1,1,1,1,1,1,1,44,44,44,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,159,18,0,0,0,1,1,1,1,1,1,1,1,0,0,44,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,1,1,1,1,1,1,1,1,1,1,159,159,1,1,1,1,1,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,50,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,67,1,1,1,1,1,1,1,1,139,0,1,1,1,159,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,18,0,18,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,1,159,1,44,0,0,0,0,0,44,44,1,98,98,98,0,0,98,98,0,0,191,0,191,0,0,98,98,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,1,159,44,44,0,0,0,0,0,0,44,1,98,44,44,0,0,98,98,98,98,98,98,98,98,98,98,98,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,44,44,0,0,0,0,0,0,44,1,98,43,0,0,18,98,98,98,98,98,98,98,98,98,98,98,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,4,1,1,1,0,0,0,0,0,1,1,1,98,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,18,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,4,1,1,159,44,0,-1,44,1,1,1,98,0,0,0,0,98,98,0,0,191,0,191,0,0,98,44,0,0,0,0,0,0,0,0,0,0,188,0,50,1,1,1,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,4,1,1,159,1,1,159,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,1,1,1,1,1,1,1,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,0,0,0,0,4,159,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,1,1,1,1,1,1,1,1,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,139,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,159,1,1,1,1,1,1,1,4,44,44,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,4,1,4,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,1,1,1,1,4,1,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,4,1,4,4,4,112,112,112,112,112,112,112,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,4,1,1,4,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,50,1,1,1,1,1,1,4,4,4,4,4,112,112,112,112,112,112,112,1,162,0,0,0,139,1,159,1,1,1,0,0,0,0,1,1,1,1,1,4,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,112,112,112,112,112,112,112,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,44,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,139,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,112,112,112,112,112,112,112,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,44,1,1,4,4,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,4,4,1,1,1,1,1,1,1,112,112,112,112,112,112,112,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,44,4,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"d712ae5b-903a-4d80-96ee-8ee54b050ea5","name":"mages","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":17,"y":0,"z":18},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":43,"y":-8,"z":16},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":57,"y":14,"z":9},"secretType":"BAT","preRequisite":[]},"essence-1":{"mechType":"Secret","secretPoint":{"x":59,"y":12,"z":6},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":4} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json b/src/main/resources/dgroomdata/dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json new file mode 100644 index 0000000..2f3f793 --- /dev/null +++ b/src/main/resources/dgroomdata/dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":3,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,109,109,109,109,109,98,0,0,0,98,98,98,0,0,0,0,0,1,0,0,0,0,139,1,0,0,0,0,0,1,0,0,0,0,0,98,98,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,109,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,109,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,109,109,109,109,109,98,0,0,0,98,98,98,0,0,0,0,0,1,0,0,0,0,139,1,0,0,0,0,0,1,0,0,0,0,0,98,98,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,98,1,0,0,0,0,0,98,98,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"dc5d63b3-3dc4-41f1-a79c-973271ba71c2","name":"Redstone-Warrior","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":31,"y":13,"z":28},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":25,"y":-12,"z":16},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":5,"y":-8,"z":16},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":27,"y":-9,"z":15},{"x":27,"y":-10,"z":15},{"x":27,"y":-11,"z":15},{"x":27,"y":-12,"z":15},{"x":27,"y":-9,"z":16},{"x":27,"y":-10,"z":16},{"x":27,"y":-11,"z":16},{"x":27,"y":-12,"z":16},{"x":27,"y":-9,"z":17},{"x":27,"y":-10,"z":17},{"x":27,"y":-11,"z":17},{"x":27,"y":-12,"z":17}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":59,"y":8,"z":30},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":59,"y":-7,"z":15},{"x":59,"y":-8,"z":15},{"x":60,"y":-7,"z":15},{"x":60,"y":-8,"z":15},{"x":61,"y":-7,"z":15},{"x":61,"y":-8,"z":15},{"x":62,"y":-7,"z":15},{"x":62,"y":-8,"z":15},{"x":59,"y":-7,"z":16},{"x":59,"y":-8,"z":16},{"x":60,"y":-7,"z":16},{"x":60,"y":-8,"z":16},{"x":61,"y":-7,"z":16},{"x":61,"y":-8,"z":16},{"x":62,"y":-7,"z":16},{"x":62,"y":-8,"z":16},{"x":59,"y":-7,"z":17},{"x":59,"y":-8,"z":17},{"x":60,"y":-7,"z":17},{"x":60,"y":-8,"z":17},{"x":61,"y":-7,"z":17},{"x":61,"y":-8,"z":17},{"x":62,"y":-7,"z":17},{"x":62,"y":-8,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":6,"y":0,"z":7},{"x":6,"y":-1,"z":7},{"x":7,"y":0,"z":7},{"x":7,"y":-1,"z":7},{"x":8,"y":0,"z":7},{"x":8,"y":-1,"z":7},{"x":9,"y":0,"z":7},{"x":9,"y":-1,"z":7},{"x":10,"y":0,"z":7},{"x":10,"y":-1,"z":7},{"x":6,"y":0,"z":8},{"x":6,"y":-1,"z":8},{"x":7,"y":0,"z":8},{"x":7,"y":-1,"z":8},{"x":8,"y":0,"z":8},{"x":8,"y":-1,"z":8},{"x":9,"y":0,"z":8},{"x":9,"y":-1,"z":8},{"x":10,"y":0,"z":8},{"x":10,"y":-1,"z":8},{"x":6,"y":0,"z":9},{"x":6,"y":-1,"z":9},{"x":7,"y":0,"z":9},{"x":7,"y":-1,"z":9},{"x":8,"y":0,"z":9},{"x":8,"y":-1,"z":9},{"x":9,"y":0,"z":9},{"x":9,"y":-1,"z":9},{"x":10,"y":0,"z":9},{"x":10,"y":-1,"z":9}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":6,"y":0,"z":23},{"x":6,"y":-1,"z":23},{"x":7,"y":0,"z":23},{"x":7,"y":-1,"z":23},{"x":8,"y":0,"z":23},{"x":8,"y":-1,"z":23},{"x":9,"y":0,"z":23},{"x":9,"y":-1,"z":23},{"x":10,"y":0,"z":23},{"x":10,"y":-1,"z":23},{"x":6,"y":0,"z":24},{"x":6,"y":-1,"z":24},{"x":7,"y":0,"z":24},{"x":7,"y":-1,"z":24},{"x":8,"y":0,"z":24},{"x":8,"y":-1,"z":24},{"x":9,"y":0,"z":24},{"x":9,"y":-1,"z":24},{"x":10,"y":0,"z":24},{"x":10,"y":-1,"z":24},{"x":6,"y":0,"z":25},{"x":6,"y":-1,"z":25},{"x":7,"y":0,"z":25},{"x":7,"y":-1,"z":25},{"x":8,"y":0,"z":25},{"x":8,"y":-1,"z":25},{"x":9,"y":0,"z":25},{"x":9,"y":-1,"z":25},{"x":10,"y":0,"z":25},{"x":10,"y":-1,"z":25}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":15,"z":15},{"x":3,"y":14,"z":15},{"x":4,"y":15,"z":15},{"x":4,"y":14,"z":15},{"x":5,"y":15,"z":15},{"x":5,"y":14,"z":15},{"x":6,"y":15,"z":15},{"x":6,"y":14,"z":15},{"x":3,"y":15,"z":16},{"x":3,"y":14,"z":16},{"x":4,"y":15,"z":16},{"x":4,"y":14,"z":16},{"x":5,"y":15,"z":16},{"x":5,"y":14,"z":16},{"x":6,"y":15,"z":16},{"x":6,"y":14,"z":16},{"x":3,"y":15,"z":17},{"x":3,"y":14,"z":17},{"x":4,"y":15,"z":17},{"x":4,"y":14,"z":17},{"x":5,"y":15,"z":17},{"x":5,"y":14,"z":17},{"x":6,"y":15,"z":17},{"x":6,"y":14,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":58,"y":8,"z":24},{"x":58,"y":7,"z":24},{"x":59,"y":10,"z":24},{"x":59,"y":9,"z":24},{"x":59,"y":8,"z":24},{"x":59,"y":7,"z":24},{"x":60,"y":11,"z":24},{"x":60,"y":10,"z":24},{"x":60,"y":9,"z":24},{"x":60,"y":8,"z":24},{"x":60,"y":7,"z":24},{"x":61,"y":10,"z":24},{"x":61,"y":9,"z":24}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json b/src/main/resources/dgroomdata/dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json new file mode 100644 index 0000000..bfda610 --- /dev/null +++ b/src/main/resources/dgroomdata/dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,98,0,0,0,0,0,0,0,67,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,67,9,0,0,101,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,109,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,109,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,50,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,67,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,4,4,4,4,4,67,139,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,109,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,4,67,67,67,4,67,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,109,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,98,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,159,159,159,159,159,159,109,0,0,0,0,0,0,139,67,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,4,0,0,0,101,0,0,0,0,0,0,0,18,98,1,159,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,44,0,144,44,44,98,98,135,135,0,0,0,0,50,67,67,4,4,4,4,4,4,4,4,1,1,1,1,4,67,67,4,4,4,4,67,67,4,4,0,0,0,0,0,0,0,98,98,18,144,0,0,0,144,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,126,126,5,135,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,4,1,1,1,43,0,0,0,188,188,188,188,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,126,126,0,85,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,4,1,1,1,4,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,109,98,1,1,1,1,4,1,1,1,67,126,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,1,4,1,1,1,67,126,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,1,4,1,1,1,4,134,0,0,171,171,171,171,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,4,1,1,1,43,0,0,0,171,0,171,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,188,50,17,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,4,1,1,1,43,0,0,0,0,171,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,144,0,98,0,0,144,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,4,1,1,1,4,134,0,0,171,0,17,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,159,159,159,159,159,159,0,0,0,0,0,0,0,0,164,5,0,0,0,0,0,98,109,109,48,1,1,1,67,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,67,0,0,0,0,0,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,144,0,0,0,0,0,134,134,164,5,0,0,0,0,0,0,0,0,67,1,1,98,4,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,4,109,109,109,109,109,4,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,134,134,0,0,0,0,0,0,0,0,0,18,48,1,1,1,4,134,0,0,0,0,0,0,0,0,0,0,0,109,109,0,0,0,1,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,5,5,43,43,67,4,67,48,67,43,43,43,43,4,4,67,43,43,43,0,0,0,44,0,0,44,43,43,43,67,4,43,43,43,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,98,98,0,0,0,0,0,18,18,98,98,0,0,0,0,0,98,139,0,0,0,0,0,0,0,98,98,0,0,0,0,139,98,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,139,0,0,0,0,98,139,0,0,-1,-1,-1,0,0,98,98,18,-1,-1,-1,0,98,98,0,0,0,0,0,0,0,139,98,0,0,0,0,139,139,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,18,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,4,1,1,159,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,4,1,98,0,144,98,98,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,98,4,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,43,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,43,98,0,0,0,0,0,69,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,98,98,0,0,0,0,98,98,0,0,-1,-1,-1,0,0,139,98,0,0,0,0,0,98,139,0,0,-1,-1,-1,0,0,98,139,0,0,0,0,139,98,1,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,139,98,0,0,0,0,0,0,0,98,139,0,0,0,0,144,139,98,0,0,0,0,0,0,0,139,98,0,0,0,0,98,98,1,98,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,43,4,67,67,4,4,43,0,0,0,0,0,0,0,0,0,43,4,67,67,4,4,43,0,0,0,0,0,0,0,134,98,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,109,67,67,98,1,109,0,0,0,0,0,0,0,0,4,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,109,0,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,1,98,0,0,0,0,0,0,0,0,67,1,1,1,1,159,44,0,0,0,0,0,0,9,0,0,109,98,109,109,98,98,109,0,0,0,0,0,0,0,0,109,98,139,144,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,101,0,0,98,98,98,0,0,0,0,0,0,0,0,109,98,109,109,98,98,109,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,18,18,0,0,0,0,0,0,0,0,0,159,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,101,0,0,109,98,98,0,0,0,0,0,0,0,17,0,188,17,0,0,0,0,17,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,159,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,101,0,0,109,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,1,1,1,1,159,109,0,0,0,0,0,0,0,0,139,109,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,159,159,159,159,159,109,0,0,0,0,0,0,0,0,0,109,159,159,1,159,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,43,144,0,98,144,0,43,0,0,0,0,0,0,0,0,0,43,144,0,98,0,144,43,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,50,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,1,98,139,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,109,109,-1,-1,-1,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,109,109,109,98,1,98,0,0,0,0,0,0,0,0,118,43,0,0,0,0,0,43,50,0,0,0,0,0,0,50,139,43,0,0,98,0,0,43,0,0,0,0,0,0,0,0,0,109,159,159,98,98,98,1,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,1,109,109,1,1,0,0,0,0,0,0,0,0,98,98,23,159,23,33,23,1,1,109,44,144,0,144,44,109,4,4,4,4,4,4,67,67,0,0,0,0,0,0,0,0,0,109,98,1,109,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,35,35,98,98,109,109,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,159,159,159,159,159,159,159,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,35,169,35,1,35,109,0,0,0,0,0,0,0,0,0,139,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,98,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,35,169,35,98,109,0,0,0,0,0,0,0,0,0,144,159,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,35,35,1,98,109,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,1,1,1,1,1,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,109,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"dfe5d13c-3284-4ad3-aadf-9719f2c12a6e","name":"Buttons","processorId":"button_5","properties":{"buttons":{"offsetPointList":[{"x":15,"y":11,"z":54},{"x":15,"y":11,"z":52},{"x":15,"y":11,"z":50},{"x":15,"y":11,"z":48},{"x":17,"y":11,"z":54},{"x":17,"y":11,"z":52},{"x":17,"y":11,"z":50},{"x":17,"y":11,"z":48},{"x":19,"y":11,"z":54},{"x":19,"y":11,"z":52},{"x":19,"y":11,"z":50},{"x":19,"y":11,"z":48}]}},"mechanics":{"dummy-1":{"secretPoint":{"x":19,"y":10,"z":51},"preRequisite":[],"mechType":"Dummy"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":43,"y":11,"z":58},"preRequisite":["crypt-7:open"],"triggering":"door-1"},"lever-2":{"mechType":"OnewayLever","leverPoint":{"x":59,"y":0,"z":37},"preRequisite":[],"triggering":"door-2"},"crypt-20":{"secretPoint":{"offsetPointList":[{"x":39,"y":0,"z":34},{"x":39,"y":-1,"z":34},{"x":40,"y":0,"z":34},{"x":40,"y":-1,"z":34},{"x":41,"y":0,"z":34},{"x":41,"y":-1,"z":34},{"x":39,"y":0,"z":35},{"x":39,"y":-1,"z":35},{"x":40,"y":0,"z":35},{"x":40,"y":-1,"z":35},{"x":41,"y":0,"z":35},{"x":41,"y":-1,"z":35},{"x":39,"y":0,"z":36},{"x":39,"y":-1,"z":36},{"x":40,"y":0,"z":36},{"x":40,"y":-1,"z":36},{"x":41,"y":0,"z":36},{"x":41,"y":-1,"z":36},{"x":39,"y":0,"z":37},{"x":39,"y":-1,"z":37},{"x":40,"y":0,"z":37},{"x":40,"y":-1,"z":37},{"x":41,"y":0,"z":37},{"x":41,"y":-1,"z":37},{"x":39,"y":0,"z":38},{"x":39,"y":-1,"z":38},{"x":40,"y":0,"z":38},{"x":40,"y":-1,"z":38},{"x":41,"y":0,"z":38},{"x":41,"y":-1,"z":38}]},"preRequisite":[],"mechType":"Tomb"},"crypt-16":{"secretPoint":{"offsetPointList":[{"x":7,"y":11,"z":3},{"x":7,"y":10,"z":3},{"x":8,"y":11,"z":3},{"x":8,"y":10,"z":3},{"x":7,"y":11,"z":4},{"x":7,"y":10,"z":4},{"x":8,"y":11,"z":4},{"x":8,"y":10,"z":4},{"x":7,"y":11,"z":5},{"x":7,"y":10,"z":5},{"x":8,"y":11,"z":5},{"x":8,"y":10,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-17":{"secretPoint":{"offsetPointList":[{"x":23,"y":0,"z":26},{"x":23,"y":-1,"z":26},{"x":24,"y":0,"z":26},{"x":24,"y":-1,"z":26},{"x":25,"y":0,"z":26},{"x":25,"y":-1,"z":26},{"x":23,"y":0,"z":27},{"x":23,"y":-1,"z":27},{"x":24,"y":0,"z":27},{"x":24,"y":-1,"z":27},{"x":25,"y":0,"z":27},{"x":25,"y":-1,"z":27},{"x":23,"y":0,"z":28},{"x":23,"y":-1,"z":28},{"x":24,"y":0,"z":28},{"x":24,"y":-1,"z":28},{"x":25,"y":0,"z":28},{"x":25,"y":-1,"z":28},{"x":23,"y":0,"z":29},{"x":23,"y":-1,"z":29},{"x":24,"y":0,"z":29},{"x":24,"y":-1,"z":29},{"x":25,"y":0,"z":29},{"x":25,"y":-1,"z":29},{"x":23,"y":0,"z":30},{"x":23,"y":-1,"z":30},{"x":24,"y":0,"z":30},{"x":24,"y":-1,"z":30},{"x":25,"y":0,"z":30},{"x":25,"y":-1,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-18":{"secretPoint":{"offsetPointList":[{"x":23,"y":0,"z":34},{"x":23,"y":-1,"z":34},{"x":24,"y":0,"z":34},{"x":24,"y":-1,"z":34},{"x":25,"y":0,"z":34},{"x":25,"y":-1,"z":34},{"x":23,"y":0,"z":35},{"x":23,"y":-1,"z":35},{"x":24,"y":0,"z":35},{"x":24,"y":-1,"z":35},{"x":25,"y":0,"z":35},{"x":25,"y":-1,"z":35},{"x":23,"y":0,"z":36},{"x":23,"y":-1,"z":36},{"x":24,"y":0,"z":36},{"x":24,"y":-1,"z":36},{"x":25,"y":0,"z":36},{"x":25,"y":-1,"z":36},{"x":23,"y":0,"z":37},{"x":23,"y":-1,"z":37},{"x":24,"y":0,"z":37},{"x":24,"y":-1,"z":37},{"x":25,"y":0,"z":37},{"x":25,"y":-1,"z":37},{"x":23,"y":0,"z":38},{"x":23,"y":-1,"z":38},{"x":24,"y":0,"z":38},{"x":24,"y":-1,"z":38},{"x":25,"y":0,"z":38},{"x":25,"y":-1,"z":38}]},"preRequisite":[],"mechType":"Tomb"},"crypt-19":{"secretPoint":{"offsetPointList":[{"x":31,"y":0,"z":26},{"x":31,"y":-1,"z":26},{"x":32,"y":0,"z":26},{"x":32,"y":-1,"z":26},{"x":33,"y":0,"z":26},{"x":33,"y":-1,"z":26},{"x":31,"y":0,"z":27},{"x":31,"y":-1,"z":27},{"x":32,"y":0,"z":27},{"x":32,"y":-1,"z":27},{"x":33,"y":0,"z":27},{"x":33,"y":-1,"z":27},{"x":31,"y":0,"z":28},{"x":31,"y":-1,"z":28},{"x":32,"y":0,"z":28},{"x":32,"y":-1,"z":28},{"x":33,"y":0,"z":28},{"x":33,"y":-1,"z":28},{"x":31,"y":0,"z":29},{"x":31,"y":-1,"z":29},{"x":32,"y":0,"z":29},{"x":32,"y":-1,"z":29},{"x":33,"y":0,"z":29},{"x":33,"y":-1,"z":29},{"x":31,"y":0,"z":30},{"x":31,"y":-1,"z":30},{"x":32,"y":0,"z":30},{"x":32,"y":-1,"z":30},{"x":33,"y":0,"z":30},{"x":33,"y":-1,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-12":{"secretPoint":{"offsetPointList":[{"x":49,"y":11,"z":6},{"x":49,"y":10,"z":6},{"x":50,"y":11,"z":6},{"x":50,"y":10,"z":6},{"x":51,"y":11,"z":6},{"x":51,"y":10,"z":6},{"x":49,"y":11,"z":7},{"x":49,"y":10,"z":7},{"x":50,"y":11,"z":7},{"x":50,"y":10,"z":7},{"x":51,"y":11,"z":7},{"x":51,"y":10,"z":7},{"x":49,"y":11,"z":8},{"x":49,"y":10,"z":8},{"x":50,"y":11,"z":8},{"x":50,"y":10,"z":8},{"x":51,"y":11,"z":8},{"x":51,"y":10,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"crypt-13":{"secretPoint":{"offsetPointList":[{"x":41,"y":11,"z":5},{"x":41,"y":10,"z":5},{"x":42,"y":11,"z":5},{"x":42,"y":10,"z":5},{"x":43,"y":11,"z":5},{"x":43,"y":10,"z":5},{"x":41,"y":11,"z":6},{"x":41,"y":10,"z":6},{"x":42,"y":11,"z":6},{"x":42,"y":10,"z":6},{"x":43,"y":11,"z":6},{"x":43,"y":10,"z":6},{"x":41,"y":11,"z":7},{"x":41,"y":10,"z":7},{"x":42,"y":11,"z":7},{"x":42,"y":10,"z":7},{"x":43,"y":11,"z":7},{"x":43,"y":10,"z":7},{"x":41,"y":11,"z":8},{"x":41,"y":10,"z":8},{"x":42,"y":11,"z":8},{"x":42,"y":10,"z":8},{"x":43,"y":11,"z":8},{"x":43,"y":10,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"crypt-14":{"secretPoint":{"offsetPointList":[{"x":41,"y":11,"z":11},{"x":41,"y":10,"z":11},{"x":42,"y":11,"z":11},{"x":42,"y":10,"z":11},{"x":43,"y":11,"z":11},{"x":43,"y":10,"z":11},{"x":41,"y":11,"z":12},{"x":41,"y":10,"z":12},{"x":42,"y":11,"z":12},{"x":42,"y":10,"z":12},{"x":43,"y":11,"z":12},{"x":43,"y":10,"z":12},{"x":41,"y":11,"z":13},{"x":41,"y":10,"z":13},{"x":42,"y":11,"z":13},{"x":42,"y":10,"z":13},{"x":43,"y":11,"z":13},{"x":43,"y":10,"z":13},{"x":41,"y":11,"z":14},{"x":41,"y":10,"z":14},{"x":42,"y":11,"z":14},{"x":42,"y":10,"z":14},{"x":43,"y":11,"z":14},{"x":43,"y":10,"z":14}]},"preRequisite":[],"mechType":"Tomb"},"crypt-15":{"secretPoint":{"offsetPointList":[{"x":31,"y":11,"z":12},{"x":31,"y":10,"z":12},{"x":32,"y":11,"z":12},{"x":32,"y":10,"z":12},{"x":33,"y":11,"z":12},{"x":33,"y":10,"z":12},{"x":31,"y":11,"z":13},{"x":31,"y":10,"z":13},{"x":32,"y":11,"z":13},{"x":32,"y":10,"z":13},{"x":33,"y":11,"z":13},{"x":33,"y":10,"z":13},{"x":31,"y":11,"z":14},{"x":31,"y":10,"z":14},{"x":32,"y":11,"z":14},{"x":32,"y":10,"z":14},{"x":33,"y":11,"z":14},{"x":33,"y":10,"z":14},{"x":31,"y":11,"z":15},{"x":31,"y":10,"z":15},{"x":32,"y":11,"z":15},{"x":32,"y":10,"z":15},{"x":33,"y":11,"z":15},{"x":33,"y":10,"z":15}]},"preRequisite":[],"mechType":"Tomb"},"chest-2":{"mechType":"Secret","secretPoint":{"x":58,"y":-1,"z":61},"secretType":"CHEST","preRequisite":["superboom-2:open"]},"door-3":{"secretPoint":{"offsetPointList":[{"x":11,"y":14,"z":49},{"x":11,"y":13,"z":49},{"x":11,"y":12,"z":49},{"x":11,"y":11,"z":49},{"x":11,"y":10,"z":49},{"x":11,"y":14,"z":50},{"x":11,"y":13,"z":50},{"x":11,"y":12,"z":50},{"x":11,"y":11,"z":50},{"x":11,"y":10,"z":50},{"x":11,"y":14,"z":51},{"x":11,"y":13,"z":51},{"x":11,"y":12,"z":51},{"x":11,"y":11,"z":51},{"x":11,"y":10,"z":51},{"x":11,"y":14,"z":52},{"x":11,"y":13,"z":52},{"x":11,"y":12,"z":52},{"x":11,"y":11,"z":52},{"x":11,"y":10,"z":52},{"x":11,"y":14,"z":53},{"x":11,"y":13,"z":53},{"x":11,"y":12,"z":53},{"x":11,"y":11,"z":53},{"x":11,"y":10,"z":53}]},"preRequisite":["dummy-1:navigate"],"mechType":"OnewayDoor"},"chest-3":{"mechType":"Secret","secretPoint":{"x":57,"y":11,"z":3},"secretType":"CHEST","preRequisite":["door-1:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":54,"y":-15,"z":32},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":56,"y":17,"z":16},{"x":56,"y":16,"z":16},{"x":56,"y":15,"z":16},{"x":56,"y":14,"z":16},{"x":56,"y":13,"z":16},{"x":56,"y":12,"z":16},{"x":56,"y":11,"z":16},{"x":56,"y":10,"z":16},{"x":57,"y":17,"z":16},{"x":57,"y":16,"z":16},{"x":57,"y":15,"z":16},{"x":57,"y":14,"z":16},{"x":57,"y":13,"z":16},{"x":57,"y":12,"z":16},{"x":57,"y":11,"z":16},{"x":57,"y":10,"z":16},{"x":58,"y":17,"z":16},{"x":58,"y":16,"z":16},{"x":58,"y":15,"z":16},{"x":58,"y":14,"z":16},{"x":58,"y":13,"z":16},{"x":58,"y":12,"z":16},{"x":58,"y":11,"z":16},{"x":58,"y":10,"z":16}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"door-2":{"secretPoint":{"offsetPointList":[{"x":30,"y":5,"z":18},{"x":30,"y":4,"z":18},{"x":30,"y":3,"z":18},{"x":30,"y":5,"z":19},{"x":30,"y":4,"z":19},{"x":30,"y":3,"z":19},{"x":30,"y":5,"z":20},{"x":30,"y":4,"z":20},{"x":30,"y":3,"z":20}]},"preRequisite":["lever-2:triggered"],"mechType":"OnewayDoor"},"superboom-3":{"secretPoint":{"offsetPointList":[{"x":54,"y":15,"z":41},{"x":54,"y":14,"z":41},{"x":54,"y":13,"z":41},{"x":54,"y":12,"z":41},{"x":54,"y":11,"z":41},{"x":54,"y":10,"z":41},{"x":54,"y":15,"z":42},{"x":54,"y":14,"z":42},{"x":54,"y":13,"z":42},{"x":54,"y":12,"z":42},{"x":54,"y":11,"z":42},{"x":54,"y":10,"z":42},{"x":54,"y":15,"z":43},{"x":54,"y":14,"z":43},{"x":54,"y":13,"z":43},{"x":54,"y":12,"z":43},{"x":54,"y":11,"z":43},{"x":54,"y":10,"z":43}]},"preRequisite":[],"mechType":"BreakableWall"},"crypt-10":{"secretPoint":{"offsetPointList":[{"x":50,"y":11,"z":41},{"x":50,"y":10,"z":41},{"x":51,"y":11,"z":41},{"x":51,"y":10,"z":41},{"x":52,"y":11,"z":41},{"x":52,"y":10,"z":41},{"x":53,"y":11,"z":41},{"x":53,"y":10,"z":41},{"x":50,"y":11,"z":42},{"x":50,"y":10,"z":42},{"x":51,"y":11,"z":42},{"x":51,"y":10,"z":42},{"x":52,"y":11,"z":42},{"x":52,"y":10,"z":42},{"x":53,"y":11,"z":42},{"x":53,"y":10,"z":42},{"x":50,"y":11,"z":43},{"x":50,"y":10,"z":43},{"x":51,"y":11,"z":43},{"x":51,"y":10,"z":43},{"x":52,"y":11,"z":43},{"x":52,"y":10,"z":43},{"x":53,"y":11,"z":43},{"x":53,"y":10,"z":43}]},"preRequisite":[],"mechType":"Tomb"},"crypt-11":{"secretPoint":{"offsetPointList":[{"x":49,"y":11,"z":15},{"x":49,"y":10,"z":15},{"x":50,"y":11,"z":15},{"x":50,"y":10,"z":15},{"x":51,"y":11,"z":15},{"x":51,"y":10,"z":15},{"x":49,"y":11,"z":16},{"x":49,"y":10,"z":16},{"x":50,"y":11,"z":16},{"x":50,"y":10,"z":16},{"x":51,"y":11,"z":16},{"x":51,"y":10,"z":16}]},"preRequisite":[],"mechType":"Tomb"},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":56,"y":0,"z":53},{"x":56,"y":-1,"z":53},{"x":57,"y":3,"z":53},{"x":57,"y":2,"z":53},{"x":57,"y":1,"z":53},{"x":57,"y":0,"z":53},{"x":57,"y":-1,"z":53},{"x":58,"y":1,"z":53},{"x":58,"y":0,"z":53},{"x":58,"y":-1,"z":53}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-4":{"mechType":"Secret","secretPoint":{"x":32,"y":3,"z":14},"secretType":"CHEST","preRequisite":["door-2:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":16,"y":-2,"z":31},{"x":17,"y":-2,"z":31},{"x":18,"y":-2,"z":31},{"x":16,"y":-2,"z":32},{"x":17,"y":-2,"z":32},{"x":18,"y":-2,"z":32},{"x":16,"y":-2,"z":33},{"x":17,"y":-2,"z":33},{"x":18,"y":-2,"z":33}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":3,"y":11,"z":51},"secretType":"CHEST","preRequisite":["door-3:open"]},"crypt-9":{"secretPoint":{"offsetPointList":[{"x":38,"y":11,"z":52},{"x":38,"y":10,"z":52},{"x":39,"y":11,"z":52},{"x":39,"y":10,"z":52},{"x":40,"y":11,"z":52},{"x":40,"y":10,"z":52},{"x":41,"y":11,"z":52},{"x":41,"y":10,"z":52},{"x":42,"y":11,"z":52},{"x":42,"y":10,"z":52},{"x":38,"y":11,"z":53},{"x":38,"y":10,"z":53},{"x":39,"y":11,"z":53},{"x":39,"y":10,"z":53},{"x":40,"y":11,"z":53},{"x":40,"y":10,"z":53},{"x":41,"y":11,"z":53},{"x":41,"y":10,"z":53},{"x":42,"y":11,"z":53},{"x":42,"y":10,"z":53}]},"preRequisite":[],"mechType":"Tomb"},"crypt-8":{"secretPoint":{"offsetPointList":[{"x":31,"y":11,"z":50},{"x":31,"y":10,"z":50},{"x":32,"y":11,"z":50},{"x":32,"y":10,"z":50},{"x":33,"y":11,"z":50},{"x":33,"y":10,"z":50},{"x":31,"y":11,"z":51},{"x":31,"y":10,"z":51},{"x":32,"y":11,"z":51},{"x":32,"y":10,"z":51},{"x":33,"y":11,"z":51},{"x":33,"y":10,"z":51},{"x":31,"y":11,"z":52},{"x":31,"y":10,"z":52},{"x":32,"y":11,"z":52},{"x":32,"y":10,"z":52},{"x":33,"y":11,"z":52},{"x":33,"y":10,"z":52},{"x":31,"y":11,"z":53},{"x":31,"y":10,"z":53},{"x":32,"y":11,"z":53},{"x":32,"y":10,"z":53},{"x":33,"y":11,"z":53},{"x":33,"y":10,"z":53}]},"preRequisite":[],"mechType":"Tomb"},"crypt-7":{"secretPoint":{"offsetPointList":[{"x":39,"y":11,"z":57},{"x":39,"y":10,"z":57},{"x":40,"y":11,"z":57},{"x":40,"y":10,"z":57},{"x":41,"y":11,"z":57},{"x":41,"y":10,"z":57},{"x":42,"y":11,"z":57},{"x":42,"y":10,"z":57},{"x":39,"y":11,"z":58},{"x":39,"y":10,"z":58},{"x":40,"y":11,"z":58},{"x":40,"y":10,"z":58},{"x":41,"y":11,"z":58},{"x":41,"y":10,"z":58},{"x":42,"y":11,"z":58},{"x":42,"y":10,"z":58},{"x":39,"y":11,"z":59},{"x":39,"y":10,"z":59},{"x":40,"y":11,"z":59},{"x":40,"y":10,"z":59},{"x":41,"y":11,"z":59},{"x":41,"y":10,"z":59},{"x":42,"y":11,"z":59},{"x":42,"y":10,"z":59}]},"preRequisite":[],"mechType":"Tomb"},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":21,"y":-14,"z":20},{"x":21,"y":-15,"z":20},{"x":22,"y":-14,"z":20},{"x":22,"y":-15,"z":20},{"x":23,"y":-14,"z":20},{"x":23,"y":-15,"z":20},{"x":21,"y":-14,"z":21},{"x":21,"y":-15,"z":21},{"x":22,"y":-14,"z":21},{"x":22,"y":-15,"z":21},{"x":23,"y":-14,"z":21},{"x":23,"y":-15,"z":21},{"x":21,"y":-14,"z":22},{"x":21,"y":-15,"z":22},{"x":22,"y":-14,"z":22},{"x":22,"y":-15,"z":22},{"x":23,"y":-14,"z":22},{"x":23,"y":-15,"z":22},{"x":21,"y":-14,"z":23},{"x":21,"y":-15,"z":23},{"x":22,"y":-14,"z":23},{"x":22,"y":-15,"z":23},{"x":23,"y":-14,"z":23},{"x":23,"y":-15,"z":23},{"x":21,"y":-14,"z":24},{"x":21,"y":-15,"z":24},{"x":22,"y":-14,"z":24},{"x":22,"y":-15,"z":24},{"x":23,"y":-14,"z":24},{"x":23,"y":-15,"z":24}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":21,"y":-14,"z":40},{"x":21,"y":-15,"z":40},{"x":22,"y":-14,"z":40},{"x":22,"y":-15,"z":40},{"x":23,"y":-14,"z":40},{"x":23,"y":-15,"z":40},{"x":21,"y":-14,"z":41},{"x":21,"y":-15,"z":41},{"x":22,"y":-14,"z":41},{"x":22,"y":-15,"z":41},{"x":23,"y":-14,"z":41},{"x":23,"y":-15,"z":41},{"x":21,"y":-14,"z":42},{"x":21,"y":-15,"z":42},{"x":22,"y":-14,"z":42},{"x":22,"y":-15,"z":42},{"x":23,"y":-14,"z":42},{"x":23,"y":-15,"z":42},{"x":21,"y":-14,"z":43},{"x":21,"y":-15,"z":43},{"x":22,"y":-14,"z":43},{"x":22,"y":-15,"z":43},{"x":23,"y":-14,"z":43},{"x":23,"y":-15,"z":43},{"x":21,"y":-14,"z":44},{"x":21,"y":-15,"z":44},{"x":22,"y":-14,"z":44},{"x":22,"y":-15,"z":44},{"x":23,"y":-14,"z":44},{"x":23,"y":-15,"z":44}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":36,"y":-14,"z":20},{"x":36,"y":-15,"z":20},{"x":37,"y":-14,"z":20},{"x":37,"y":-15,"z":20},{"x":38,"y":-14,"z":20},{"x":38,"y":-15,"z":20},{"x":36,"y":-14,"z":21},{"x":36,"y":-15,"z":21},{"x":37,"y":-14,"z":21},{"x":37,"y":-15,"z":21},{"x":38,"y":-14,"z":21},{"x":38,"y":-15,"z":21},{"x":36,"y":-14,"z":22},{"x":36,"y":-15,"z":22},{"x":37,"y":-14,"z":22},{"x":37,"y":-15,"z":22},{"x":38,"y":-14,"z":22},{"x":38,"y":-15,"z":22},{"x":36,"y":-14,"z":23},{"x":36,"y":-15,"z":23},{"x":37,"y":-14,"z":23},{"x":37,"y":-15,"z":23},{"x":38,"y":-14,"z":23},{"x":38,"y":-15,"z":23},{"x":36,"y":-14,"z":24},{"x":36,"y":-15,"z":24},{"x":37,"y":-14,"z":24},{"x":37,"y":-15,"z":24},{"x":38,"y":-14,"z":24},{"x":38,"y":-15,"z":24}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":36,"y":-14,"z":40},{"x":36,"y":-15,"z":40},{"x":37,"y":-14,"z":40},{"x":37,"y":-15,"z":40},{"x":38,"y":-14,"z":40},{"x":38,"y":-15,"z":40},{"x":36,"y":-14,"z":41},{"x":36,"y":-15,"z":41},{"x":37,"y":-14,"z":41},{"x":37,"y":-15,"z":41},{"x":38,"y":-14,"z":41},{"x":38,"y":-15,"z":41},{"x":36,"y":-14,"z":42},{"x":36,"y":-15,"z":42},{"x":37,"y":-14,"z":42},{"x":37,"y":-15,"z":42},{"x":38,"y":-14,"z":42},{"x":38,"y":-15,"z":42},{"x":36,"y":-14,"z":43},{"x":36,"y":-15,"z":43},{"x":37,"y":-14,"z":43},{"x":37,"y":-15,"z":43},{"x":38,"y":-14,"z":43},{"x":38,"y":-15,"z":43},{"x":36,"y":-14,"z":44},{"x":36,"y":-15,"z":44},{"x":37,"y":-14,"z":44},{"x":37,"y":-15,"z":44},{"x":38,"y":-14,"z":44},{"x":38,"y":-15,"z":44}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":44,"y":-14,"z":20},{"x":44,"y":-15,"z":20},{"x":45,"y":-14,"z":20},{"x":45,"y":-15,"z":20},{"x":46,"y":-14,"z":20},{"x":46,"y":-15,"z":20},{"x":44,"y":-14,"z":21},{"x":44,"y":-15,"z":21},{"x":45,"y":-14,"z":21},{"x":45,"y":-15,"z":21},{"x":46,"y":-14,"z":21},{"x":46,"y":-15,"z":21},{"x":44,"y":-14,"z":22},{"x":44,"y":-15,"z":22},{"x":45,"y":-14,"z":22},{"x":45,"y":-15,"z":22},{"x":46,"y":-14,"z":22},{"x":46,"y":-15,"z":22},{"x":44,"y":-14,"z":23},{"x":44,"y":-15,"z":23},{"x":45,"y":-14,"z":23},{"x":45,"y":-15,"z":23},{"x":46,"y":-14,"z":23},{"x":46,"y":-15,"z":23},{"x":44,"y":-14,"z":24},{"x":44,"y":-15,"z":24},{"x":45,"y":-14,"z":24},{"x":45,"y":-15,"z":24},{"x":46,"y":-14,"z":24},{"x":46,"y":-15,"z":24}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":44,"y":-14,"z":40},{"x":44,"y":-15,"z":40},{"x":45,"y":-14,"z":40},{"x":45,"y":-15,"z":40},{"x":46,"y":-14,"z":40},{"x":46,"y":-15,"z":40},{"x":44,"y":-14,"z":41},{"x":44,"y":-15,"z":41},{"x":45,"y":-14,"z":41},{"x":45,"y":-15,"z":41},{"x":46,"y":-14,"z":41},{"x":46,"y":-15,"z":41},{"x":44,"y":-14,"z":42},{"x":44,"y":-15,"z":42},{"x":45,"y":-14,"z":42},{"x":45,"y":-15,"z":42},{"x":46,"y":-14,"z":42},{"x":46,"y":-15,"z":42},{"x":44,"y":-14,"z":43},{"x":44,"y":-15,"z":43},{"x":45,"y":-14,"z":43},{"x":45,"y":-15,"z":43},{"x":46,"y":-14,"z":43},{"x":46,"y":-15,"z":43},{"x":44,"y":-14,"z":44},{"x":44,"y":-15,"z":44},{"x":45,"y":-14,"z":44},{"x":45,"y":-15,"z":44},{"x":46,"y":-14,"z":44},{"x":46,"y":-15,"z":44}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"}},"totalSecrets":5} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e0608346-08a0-490b-a6d5-96786ebd5d96.json b/src/main/resources/dgroomdata/e0608346-08a0-490b-a6d5-96786ebd5d96.json new file mode 100644 index 0000000..016e77c --- /dev/null +++ b/src/main/resources/dgroomdata/e0608346-08a0-490b-a6d5-96786ebd5d96.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":51,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,50,0,0,0,0,0,0,0,0,0,0,109,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,35,35,35,35,0,0,0,0,0,0,7,35,1,1,1,1,1,1,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,67,0,0,0,0,0,0,0,0,0,0,0,109,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,50,35,35,35,35,159,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,67,0,0,0,0,0,0,0,0,0,0,50,109,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,67,0,0,0,0,0,0,0,0,0,109,98,98,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,67,67,4,0,0,0,0,0,0,0,0,0,0,67,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,67,4,1,1,1,1,1,1,1,98,98,1,4,1,1,1,1,98,3,3,7,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,5,53,53,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,1,98,98,1,1,4,67,1,98,98,3,3,3,7,0,31,139,35,35,35,35,7,0,17,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,134,50,0,0,0,0,0,0,0,0,0,0,0,0,0,67,4,4,1,1,1,1,1,98,98,1,44,44,44,44,44,98,98,3,3,3,7,31,1,159,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,98,98,3,3,3,3,7,1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,1,1,1,1,1,98,98,98,0,0,0,0,0,109,98,3,3,3,3,3,3,3,3,3,98,1,1,1,35,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,98,98,109,0,0,0,0,0,109,98,3,3,3,3,3,3,3,3,3,98,1,1,1,35,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,3,3,98,98,109,0,0,0,0,0,109,98,3,3,3,3,3,3,3,3,3,98,1,1,35,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,134,5,134,0,0,0,109,1,1,3,3,3,3,98,98,109,0,0,0,0,0,98,98,3,3,3,3,3,3,3,3,3,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,134,5,134,0,0,50,109,1,3,3,3,1,1,98,98,98,0,0,0,0,0,98,98,3,3,3,3,3,3,3,3,3,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,4,67,67,67,67,4,4,4,98,98,98,109,109,98,98,1,1,0,0,0,0,0,98,109,98,109,109,98,98,98,98,98,98,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,1,1,1,159,1,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,1,159,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,67,4,4,4,4,4,1,1,159,144,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,144,159,1,1,98,1,0,0,0,0,0,0,0,0,0,0,50,159,35,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,67,4,4,4,4,4,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,1,0,0,0,0,0,0,0,0,0,0,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,0,0,0,0,0,0,0,0,0,0,159,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,0,4,4,4,4,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,0,4,4,4,4,4,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,159,159,159,159,0,0,0,0,0,0,159,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,50,4,4,4,4,4,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,159,35,35,35,35,0,0,159,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,98,4,4,4,4,4,98,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,98,1,1,1,1,1,1,1,1,1,7,0,35,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,98,98,1,98,98,98,4,4,98,98,98,98,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,98,1,1,1,1,98,98,98,98,98,98,7,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,109,109,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,109,109,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,50,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,109,98,98,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,109,0,0,0,0,0,0,139,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,50,109,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,109,109,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,109,109,98,98,1,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,98,98,98,98,98,1,1,1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,1,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,1,98,98,98,98,98,1,98,98,98,98,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,67,4,1,1,98,98,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,98,35,35,35,35,159,35,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,67,1,1,4,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,35,0,0,0,0,35,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,67,4,1,4,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,35,35,1,1,1,7,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,98,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,0,0,0,18,0,0,0,0,159,159,159,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,50,159,1,98,98,159,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,0,159,1,0,0,0,0,18,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,159,1,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,1,98,0,0,0,0,0,0,0,0,1,50,0,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,159,1,98,98,1,1,159,0,0,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,159,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,1,1,1,98,1,1,1,1,159,1,0,0,139,139,0,0,0,0,0,0,0,0,0,139,139,0,0,1,159,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,98,109,109,98,98,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,98,139,98,98,98,98,109,109,98,98,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,0,0,50,1,1,1,98,98,0,0,0,0,0,98,98,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,1,1,98,0,0,0,0,0,109,109,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,98,0,0,0,0,0,109,109,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,98,50,0,0,0,0,0,0,0,0,0,0,109,1,1,98,44,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,109,109,109,109,109,98,98,98,98,0,0,0,109,98,1,98,139,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,98,139,50,0,0,0,50,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,1,98,98,98,0,144,0,109,98,109,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,7,7,0,0,0,0,0,0,0,0,0,0,0,7,35,35,35,0,7,1,1,98,1,98,159,159,159,98,98,109,1,7,50,0,0,0,0,0,0,0,0,0,0,0,0,50,7,35,35,35,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e0608346-08a0-490b-a6d5-96786ebd5d96","name":"Cathedral","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":20,"y":-10,"z":8},"secretType":"CHEST","preRequisite":["crypt-2:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":29,"y":12,"z":4},"secretType":"CHEST","preRequisite":["superboom-3:open"]},"chest-1":{"mechType":"Secret","secretPoint":{"x":39,"y":-11,"z":37},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"bat-2":{"mechType":"Secret","secretPoint":{"x":43,"y":8,"z":14},"secretType":"BAT","preRequisite":[]},"superboom-3":{"secretPoint":{"offsetPointList":[{"x":30,"y":13,"z":10},{"x":30,"y":11,"z":10},{"x":31,"y":14,"z":10},{"x":31,"y":13,"z":10},{"x":31,"y":12,"z":10},{"x":31,"y":11,"z":10},{"x":32,"y":14,"z":10},{"x":32,"y":13,"z":10},{"x":32,"y":12,"z":10},{"x":32,"y":11,"z":10},{"x":33,"y":13,"z":10},{"x":33,"y":12,"z":10}]},"preRequisite":[],"mechType":"BreakableWall"},"bat-1":{"mechType":"Secret","secretPoint":{"x":60,"y":16,"z":3},"secretType":"BAT","preRequisite":[]},"superboom-2":{"secretPoint":{"offsetPointList":[{"x":30,"y":13,"z":10},{"x":30,"y":11,"z":10},{"x":31,"y":14,"z":10},{"x":31,"y":13,"z":10},{"x":31,"y":12,"z":10},{"x":31,"y":11,"z":10},{"x":32,"y":14,"z":10},{"x":32,"y":13,"z":10},{"x":32,"y":12,"z":10},{"x":32,"y":11,"z":10},{"x":33,"y":13,"z":10},{"x":33,"y":12,"z":10}]},"preRequisite":[],"mechType":"BreakableWall"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":46,"y":-8,"z":41},{"x":46,"y":-10,"z":41},{"x":46,"y":-8,"z":42},{"x":46,"y":-9,"z":42},{"x":46,"y":-10,"z":42},{"x":46,"y":-11,"z":42},{"x":46,"y":-8,"z":43},{"x":46,"y":-9,"z":43},{"x":46,"y":-10,"z":43},{"x":46,"y":-11,"z":43},{"x":46,"y":-9,"z":44},{"x":46,"y":-10,"z":44},{"x":46,"y":-11,"z":44}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-3":{"mechType":"Secret","secretPoint":{"x":34,"y":23,"z":50},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":49,"y":-11,"z":25},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":22,"y":20,"z":44},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":4,"y":15,"z":21},{"x":4,"y":14,"z":21},{"x":5,"y":15,"z":21},{"x":5,"y":14,"z":21},{"x":6,"y":15,"z":21},{"x":6,"y":14,"z":21},{"x":7,"y":15,"z":21},{"x":7,"y":14,"z":21},{"x":8,"y":15,"z":21},{"x":8,"y":14,"z":21},{"x":4,"y":15,"z":22},{"x":4,"y":14,"z":22},{"x":5,"y":15,"z":22},{"x":5,"y":14,"z":22},{"x":6,"y":15,"z":22},{"x":6,"y":14,"z":22},{"x":7,"y":15,"z":22},{"x":7,"y":14,"z":22},{"x":8,"y":15,"z":22},{"x":8,"y":14,"z":22},{"x":4,"y":15,"z":23},{"x":4,"y":14,"z":23},{"x":5,"y":15,"z":23},{"x":5,"y":14,"z":23},{"x":6,"y":15,"z":23},{"x":6,"y":14,"z":23},{"x":7,"y":15,"z":23},{"x":7,"y":14,"z":23},{"x":8,"y":15,"z":23},{"x":8,"y":14,"z":23}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":11,"y":-10,"z":14},{"x":11,"y":-11,"z":14},{"x":12,"y":-10,"z":14},{"x":12,"y":-11,"z":14},{"x":13,"y":-10,"z":14},{"x":13,"y":-11,"z":14},{"x":14,"y":-10,"z":14},{"x":14,"y":-11,"z":14},{"x":11,"y":-10,"z":15},{"x":11,"y":-11,"z":15},{"x":12,"y":-10,"z":15},{"x":12,"y":-11,"z":15},{"x":13,"y":-10,"z":15},{"x":13,"y":-11,"z":15},{"x":14,"y":-10,"z":15},{"x":14,"y":-11,"z":15},{"x":11,"y":-10,"z":16},{"x":11,"y":-11,"z":16},{"x":12,"y":-10,"z":16},{"x":12,"y":-11,"z":16},{"x":13,"y":-10,"z":16},{"x":13,"y":-11,"z":16},{"x":14,"y":-10,"z":16},{"x":14,"y":-11,"z":16}]},"preRequisite":["crypt-2:open"],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":9,"y":0,"z":23},{"x":9,"y":-1,"z":23},{"x":10,"y":0,"z":23},{"x":10,"y":-1,"z":23},{"x":11,"y":0,"z":23},{"x":11,"y":-1,"z":23},{"x":9,"y":0,"z":24},{"x":9,"y":-1,"z":24},{"x":10,"y":0,"z":24},{"x":10,"y":-1,"z":24},{"x":11,"y":0,"z":24},{"x":11,"y":-1,"z":24},{"x":9,"y":0,"z":25},{"x":9,"y":-1,"z":25},{"x":10,"y":0,"z":25},{"x":10,"y":-1,"z":25},{"x":11,"y":0,"z":25},{"x":11,"y":-1,"z":25},{"x":9,"y":0,"z":26},{"x":9,"y":-1,"z":26},{"x":10,"y":0,"z":26},{"x":10,"y":-1,"z":26},{"x":11,"y":0,"z":26},{"x":11,"y":-1,"z":26}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":4,"y":0,"z":23},{"x":4,"y":-1,"z":23},{"x":5,"y":0,"z":23},{"x":5,"y":-1,"z":23},{"x":6,"y":0,"z":23},{"x":6,"y":-1,"z":23},{"x":4,"y":0,"z":24},{"x":4,"y":-1,"z":24},{"x":5,"y":0,"z":24},{"x":5,"y":-1,"z":24},{"x":6,"y":0,"z":24},{"x":6,"y":-1,"z":24},{"x":4,"y":0,"z":25},{"x":4,"y":-1,"z":25},{"x":5,"y":0,"z":25},{"x":5,"y":-1,"z":25},{"x":6,"y":0,"z":25},{"x":6,"y":-1,"z":25},{"x":4,"y":0,"z":26},{"x":4,"y":-1,"z":26},{"x":5,"y":0,"z":26},{"x":5,"y":-1,"z":26},{"x":6,"y":0,"z":26},{"x":6,"y":-1,"z":26}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":8} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e22c44d7-4094-4230-89ba-efa438aa3615.json b/src/main/resources/dgroomdata/e22c44d7-4094-4230-89ba-efa438aa3615.json new file mode 100644 index 0000000..0adbe3a --- /dev/null +++ b/src/main/resources/dgroomdata/e22c44d7-4094-4230-89ba-efa438aa3615.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":273,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,7,7,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,1,1,7,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,7,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,7,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,1,35,35,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,7,7,35,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,7,7,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,109,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,18,18,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,44,44,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,44,44,44,44,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,44,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,44,44,44,98,98,98,0,0,0,0,0,0,0,98,98,98,44,44,44,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,1,0,0,0,0,0,0,0,98,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,44,44,44,98,98,98,0,0,0,0,0,0,0,98,98,98,44,44,44,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,0,0,0,98,98,98,0,0,0,0,0,0,0,98,1,98,0,0,0,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,44,44,44,44,109,109,0,0,0,0,0,0,0,0,0,109,109,44,44,44,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,44,44,44,44,109,109,0,0,0,0,0,0,0,0,0,109,109,44,44,44,44,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,109,109,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,0,0,0,0,1,98,0,0,0,0,0,0,0,0,0,98,1,0,0,0,0,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e22c44d7-4094-4230-89ba-efa438aa3615","name":"catwalk","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":16,"y":-20,"z":25},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":17,"y":-7,"z":85},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-7,"z":25},"secretType":"CHEST","preRequisite":[]},"journal-1":{"secretPoint":{"x":6,"y":-15,"z":88},"preRequisite":[],"mechType":"Journal"},"chest-4":{"mechType":"Secret","secretPoint":{"x":13,"y":-21,"z":90},"secretType":"CHEST","preRequisite":[]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":-17,"z":24},{"x":11,"y":-18,"z":24},{"x":11,"y":-19,"z":24},{"x":11,"y":-20,"z":24},{"x":11,"y":-17,"z":25},{"x":11,"y":-18,"z":25},{"x":11,"y":-19,"z":25},{"x":11,"y":-20,"z":25},{"x":11,"y":-17,"z":26},{"x":11,"y":-18,"z":26},{"x":11,"y":-19,"z":26},{"x":11,"y":-20,"z":26}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":25,"y":-20,"z":81},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":26,"y":-9,"z":15},{"x":26,"y":-10,"z":15},{"x":27,"y":-9,"z":15},{"x":27,"y":-10,"z":15},{"x":28,"y":-9,"z":15},{"x":28,"y":-10,"z":15},{"x":29,"y":-9,"z":15},{"x":29,"y":-10,"z":15},{"x":26,"y":-9,"z":16},{"x":26,"y":-10,"z":16},{"x":27,"y":-9,"z":16},{"x":27,"y":-10,"z":16},{"x":28,"y":-9,"z":16},{"x":28,"y":-10,"z":16},{"x":29,"y":-9,"z":16},{"x":29,"y":-10,"z":16},{"x":26,"y":-9,"z":17},{"x":26,"y":-10,"z":17},{"x":27,"y":-9,"z":17},{"x":27,"y":-10,"z":17},{"x":28,"y":-9,"z":17},{"x":28,"y":-10,"z":17},{"x":29,"y":-9,"z":17},{"x":29,"y":-10,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":19,"y":-19,"z":90},{"x":19,"y":-20,"z":90},{"x":19,"y":-21,"z":90},{"x":20,"y":-19,"z":90},{"x":20,"y":-20,"z":90},{"x":20,"y":-21,"z":90},{"x":21,"y":-19,"z":90},{"x":21,"y":-20,"z":90},{"x":21,"y":-21,"z":90},{"x":19,"y":-19,"z":91},{"x":19,"y":-20,"z":91},{"x":19,"y":-21,"z":91},{"x":20,"y":-19,"z":91},{"x":20,"y":-20,"z":91},{"x":20,"y":-21,"z":91},{"x":21,"y":-19,"z":91},{"x":21,"y":-20,"z":91},{"x":21,"y":-21,"z":91}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":27,"y":-19,"z":90},{"x":27,"y":-20,"z":90},{"x":27,"y":-21,"z":90},{"x":28,"y":-19,"z":90},{"x":28,"y":-20,"z":90},{"x":28,"y":-21,"z":90},{"x":29,"y":-19,"z":90},{"x":29,"y":-20,"z":90},{"x":29,"y":-21,"z":90},{"x":27,"y":-19,"z":91},{"x":27,"y":-20,"z":91},{"x":27,"y":-21,"z":91},{"x":28,"y":-19,"z":91},{"x":28,"y":-20,"z":91},{"x":28,"y":-21,"z":91},{"x":29,"y":-19,"z":91},{"x":29,"y":-20,"z":91},{"x":29,"y":-21,"z":91}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":27,"y":-19,"z":83},{"x":27,"y":-20,"z":83},{"x":27,"y":-21,"z":83},{"x":28,"y":-19,"z":83},{"x":28,"y":-20,"z":83},{"x":28,"y":-21,"z":83},{"x":29,"y":-19,"z":83},{"x":29,"y":-20,"z":83},{"x":29,"y":-21,"z":83},{"x":27,"y":-19,"z":84},{"x":27,"y":-20,"z":84},{"x":27,"y":-21,"z":84},{"x":28,"y":-19,"z":84},{"x":28,"y":-20,"z":84},{"x":28,"y":-21,"z":84},{"x":29,"y":-19,"z":84},{"x":29,"y":-20,"z":84},{"x":29,"y":-21,"z":84}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":23,"y":-20,"z":81},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":19,"y":-19,"z":83},{"x":19,"y":-20,"z":83},{"x":19,"y":-21,"z":83},{"x":20,"y":-19,"z":83},{"x":20,"y":-20,"z":83},{"x":20,"y":-21,"z":83},{"x":21,"y":-19,"z":83},{"x":21,"y":-20,"z":83},{"x":21,"y":-21,"z":83},{"x":19,"y":-19,"z":84},{"x":19,"y":-20,"z":84},{"x":19,"y":-21,"z":84},{"x":20,"y":-19,"z":84},{"x":20,"y":-20,"z":84},{"x":20,"y":-21,"z":84},{"x":21,"y":-19,"z":84},{"x":21,"y":-20,"z":84},{"x":21,"y":-21,"z":84}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json b/src/main/resources/dgroomdata/e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json new file mode 100644 index 0000000..8010743 --- /dev/null +++ b/src/main/resources/dgroomdata/e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,50,0,0,0,0,0,50,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,139,0,0,0,0,0,0,0,139,18,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,98,98,0,0,0,-1,-1,-1,0,0,0,98,98,98,98,98,1,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,98,98,0,50,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,98,98,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,98,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,1,1,1,98,159,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,98,0,0,0,144,-1,-1,-1,-1],[-1,-1,-1,-1,0,1,1,1,98,98,98,98,0,0,0,-1,-1,-1,0,0,0,98,98,98,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,1,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,159,1,159,0,0,0,0,0,0,0,0,0,0,0,159,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,98,0,139,0,0,0,0,0,0,0,139,0,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,131,1,98,98,98,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,132,159,98,98,98,0,0,0,0,0,0,0,98,98,98,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,0,0,0,132,1,159,98,0,0,0,0,0,0,0,0,18,159,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,132,44,1,109,0,50,0,0,0,0,0,50,0,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,132,44,1,98,98,98,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,139,132,1,1,98,98,98,0,0,0,0,0,98,98,98,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,131,1,1,1,98,0,0,0,0,0,0,0,159,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e66fe526-22c1-45bc-b4a8-d10549d7ee3f","name":"Sarcophagus","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":27,"y":-1,"z":16},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"bat-1":{"mechType":"Secret","secretPoint":{"x":9,"y":1,"z":23},"secretType":"BAT","preRequisite":[]},"essence-1":{"mechType":"Secret","secretPoint":{"x":4,"y":-2,"z":19},"secretType":"ESSENCE","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":15,"y":0,"z":14},{"x":15,"y":-1,"z":14},{"x":16,"y":0,"z":14},{"x":16,"y":-1,"z":14},{"x":17,"y":0,"z":14},{"x":17,"y":-1,"z":14},{"x":15,"y":0,"z":15},{"x":15,"y":-1,"z":15},{"x":16,"y":0,"z":15},{"x":16,"y":-1,"z":15},{"x":17,"y":0,"z":15},{"x":17,"y":-1,"z":15},{"x":15,"y":0,"z":16},{"x":15,"y":-1,"z":16},{"x":16,"y":0,"z":16},{"x":16,"y":-1,"z":16},{"x":17,"y":0,"z":16},{"x":17,"y":-1,"z":16},{"x":15,"y":0,"z":17},{"x":15,"y":-1,"z":17},{"x":16,"y":0,"z":17},{"x":16,"y":-1,"z":17},{"x":17,"y":0,"z":17},{"x":17,"y":-1,"z":17},{"x":15,"y":0,"z":18},{"x":15,"y":-1,"z":18},{"x":16,"y":0,"z":18},{"x":16,"y":-1,"z":18},{"x":17,"y":0,"z":18},{"x":17,"y":-1,"z":18},{"x":16,"y":1,"z":14},{"x":16,"y":1,"z":15},{"x":16,"y":1,"z":16},{"x":16,"y":1,"z":17},{"x":16,"y":1,"z":18}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":23,"y":2,"z":15},{"x":23,"y":1,"z":15},{"x":23,"y":2,"z":16},{"x":23,"y":1,"z":16},{"x":23,"y":0,"z":16},{"x":23,"y":-1,"z":16},{"x":23,"y":1,"z":17},{"x":23,"y":0,"z":17},{"x":23,"y":-1,"z":17}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e6d51aea-c715-4396-986d-2e09d31993e1.json b/src/main/resources/dgroomdata/e6d51aea-c715-4396-986d-2e09d31993e1.json new file mode 100644 index 0000000..f62a99c --- /dev/null +++ b/src/main/resources/dgroomdata/e6d51aea-c715-4396-986d-2e09d31993e1.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,18,98,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,13,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,109,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,0,0,0,0,0,0,0,0,0,0,0,0,4,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,0,4,1,4,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,109,18,0,0,0,0,0,98,4,44,43,1,1,48,43,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,0,0,0,0,0,0,98,1,43,1,1,1,1,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,44,44,44,44,1,98,48,1,1,1,1,1,1,1,1,44,44,0,0,0,0,44,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,159,159,1,48,0,1,1,98,98,1,1,1,1,1,1,-1,-1,-1,1,44,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,48,0,43,98,44,0,98,1,1,4,1,1,0,0,0,43,43,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,44,98,44,139,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,4,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,98,98,98,98,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,18,18,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,0,171,171,0,4,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,109,109,109,109,4,98,44,0,0,0,0,0,44,0,1,98,98,98,0,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,1,98,0,0,0,0,0,98,98,1,1,1,0,0,0,0,0,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,0,0,0,0,1,1,48,0,0,0,0,139,1,1,1,126,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,44,1,48,0,0,0,0,0,98,1,1,126,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,109,98,0,0,0,0,0,98,0,126,126,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,44,44,44,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,0,0,0,0,0,98,1,50,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e6d51aea-c715-4396-986d-2e09d31993e1","name":"Lava-Skull","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":24,"y":-1,"z":6},"secretType":"CHEST","preRequisite":["door-1:open"]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":29,"y":15,"z":16},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":24,"y":3,"z":12},{"x":24,"y":2,"z":12},{"x":24,"y":1,"z":12},{"x":24,"y":0,"z":12},{"x":24,"y":-1,"z":12},{"x":25,"y":3,"z":12},{"x":25,"y":2,"z":12},{"x":25,"y":1,"z":12},{"x":25,"y":0,"z":12},{"x":25,"y":-1,"z":12},{"x":26,"y":3,"z":12},{"x":26,"y":2,"z":12},{"x":26,"y":1,"z":12},{"x":26,"y":0,"z":12},{"x":26,"y":-1,"z":12}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"bat-2":{"mechType":"Secret","secretPoint":{"x":24,"y":5,"z":7},"secretType":"BAT","preRequisite":["door-1:open"]},"bat-1":{"mechType":"Secret","secretPoint":{"x":3,"y":14,"z":20},"secretType":"BAT","preRequisite":[]},"journal-1":{"secretPoint":{"x":27,"y":15,"z":8},"preRequisite":[],"mechType":"Journal"}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e773dc09-f989-4d8f-8aba-43dbb71e7b62.json b/src/main/resources/dgroomdata/e773dc09-f989-4d8f-8aba-43dbb71e7b62.json new file mode 100644 index 0000000..dbd53b2 --- /dev/null +++ b/src/main/resources/dgroomdata/e773dc09-f989-4d8f-8aba-43dbb71e7b62.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,109,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,159,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,98,98,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,98,98,109,0,0,0,0,0,0,0,0,0,0,0,139,98,1,1,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,4,4,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,109,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,139,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,44,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,44,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,4,67,67,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,67,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,4,67,67,4,98,98,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,98,98,0,0,0,139,98,0,0,0,0,0,0,139,109,109,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,0,101,101,98,98,144,0,109,109,144,0,139,98,98,0,101,101,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,4,0,0,0,67,1,159,159,159,159,159,159,159,1,67,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,0,0,0,4,1,1,1,1,1,1,1,1,1,67,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,67,106,0,0,4,1,1,1,1,1,1,1,1,1,4,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,4,4,4,67,4,1,1,1,1,1,1,1,1,1,4,4,67,67,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e773dc09-f989-4d8f-8aba-43dbb71e7b62","name":"Locked-away","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":5,"y":5,"z":2},"secretType":"CHEST","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":4,"y":0,"z":4},{"x":4,"y":-1,"z":4},{"x":5,"y":0,"z":4},{"x":5,"y":-1,"z":4},{"x":6,"y":0,"z":4},{"x":6,"y":-1,"z":4},{"x":7,"y":0,"z":4},{"x":7,"y":-1,"z":4},{"x":4,"y":0,"z":5},{"x":4,"y":-1,"z":5},{"x":5,"y":0,"z":5},{"x":5,"y":-1,"z":5},{"x":6,"y":0,"z":5},{"x":6,"y":-1,"z":5},{"x":7,"y":0,"z":5},{"x":7,"y":-1,"z":5},{"x":4,"y":0,"z":6},{"x":4,"y":-1,"z":6},{"x":5,"y":0,"z":6},{"x":5,"y":-1,"z":6},{"x":6,"y":0,"z":6},{"x":6,"y":-1,"z":6},{"x":7,"y":0,"z":6},{"x":7,"y":-1,"z":6}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json b/src/main/resources/dgroomdata/e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json new file mode 100644 index 0000000..77992ff --- /dev/null +++ b/src/main/resources/dgroomdata/e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,98,159,159,159,98,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,109,109,109,98,98,98,98,98,109,144,0,0,109,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,50,0,0,0,1,159,1,98,1,139,0,0,0,139,1,109,109,98,98,98,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,98,0,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,98,0,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,109,109,98,98,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,98,0,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,139,98,139,0,0,0,0,0,0,0,0,0,98,0,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,1,159,0,50,1,98,1,139,0,0,0,139,1,98,109,109,98,98,98,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,1,1,1,98,98,98,98,98,98,0,0,0,98,98,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,98,0,0,0,0,0,0,0,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,98,98,1,0,0,0,0,0,1,98,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,4,4,0,0,0,0,0,0,0,0,0,98,109,109,98,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,51,4,-1,0,0,0,0,0,0,0,0,101,0,0,0,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,51,4,-1,0,0,0,0,0,0,0,0,101,0,0,0,109,0,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,51,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,109,0,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,51,4,-1,0,0,0,0,0,0,0,0,101,0,0,0,98,98,98,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,4,4,4,0,0,0,0,0,0,0,0,0,98,109,109,98,98,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082","name":"Prison-cell","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":11,"y":6,"z":24},"secretType":"CHEST","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":11,"y":0,"z":24},{"x":11,"y":-1,"z":24},{"x":11,"y":0,"z":25},{"x":11,"y":-1,"z":25},{"x":11,"y":0,"z":26},{"x":11,"y":-1,"z":26},{"x":11,"y":0,"z":27},{"x":11,"y":-1,"z":27}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e83ed91c-4a35-4020-985a-d0306f17117a.json b/src/main/resources/dgroomdata/e83ed91c-4a35-4020-985a-d0306f17117a.json new file mode 100644 index 0000000..426ab91 --- /dev/null +++ b/src/main/resources/dgroomdata/e83ed91c-4a35-4020-985a-d0306f17117a.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":19,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,159,159,1,1,1,1,1,1,1,1,1,4,98,98,98,98,98,98,1,98,98,98,1,98,98,98,139,0,0,0,0,0,139,139,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,50,0,0,0,0,0,0,35,35,35,35,1,35,35,7,7,4,98,98,98,98,98,98,98,1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,35,159,0,65,65,0,4,98,98,98,98,98,98,98,98,98,98,159,159,98,0,0,0,0,0,0,0,0,0,98,159,159,98,1,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,50,1,1,1,1,1,0,0,0,0,0,0,0,0,17,0,0,109,98,0,0,0,109,4,1,98,98,98,98,98,98,98,98,98,144,0,98,0,0,0,0,0,0,0,0,0,1,144,0,98,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,1,1,159,1,159,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,109,4,98,98,98,98,1,98,98,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,159,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,1,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,159,1,1,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,0,0,0,0,35,1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,17,0,0,159,1,1,1,1,1,159,0,0,0,0,0,0,0,109,98,0,0,0,109,4,4,4,4,4,139,139,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,98,144,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,159,1,1,1,159,0,0,0,0,0,0,0,109,98,0,0,0,109,4,4,4,4,4,139,139,0,0,0,0,0,0,0,139,139,98,0,0,0,98,139,139,0,0,0,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,159,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,67,67,4,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,67,67,4,4,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,109,4,4,4,4,4,1,139,0,0,0,0,0,0,0,139,139,98,0,0,0,98,98,98,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,109,4,4,4,4,4,1,1,0,0,0,0,0,0,0,139,139,0,0,0,0,0,139,139,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,98,98,98,98,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,98,98,98,98,98,1,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,98,98,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,109,109,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,98,98,0,0,0,109,4,98,98,1,1,98,98,1,98,98,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,98,98,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,98,98,0,0,0,109,4,1,98,98,1,98,98,98,98,98,98,0,0,98,0,0,0,0,0,0,0,0,0,98,0,0,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,98,98,98,98,98,98,98,98,98,98,159,159,109,0,0,0,0,0,0,0,0,0,98,159,159,1,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,1,98,98,98,98,1,1,98,1,98,98,98,109,0,0,0,0,0,0,0,0,0,1,98,98,98,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,98,98,98,98,98,98,98,98,98,98,98,98,98,139,139,0,0,0,0,0,139,98,1,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,109,109,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,67,67,4,4,4,4,4,4,4,4,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,109,98,98,109,0,0,0,0,0,109,98,98,109,4,4,4,4,4,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,0,98,139,0,0,0,0,0,0,0,139,98,0,67,4,4,44,44,44,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,0,50,0,0,0,0,0,0,0,0,0,0,0,67,4,4,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,67,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,67,0,98,98,0,0,0,0,0,0,0,139,98,0,4,4,4,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,67,0,98,139,0,0,0,0,0,0,0,1,98,0,4,4,4,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,50,0,0,4,4,67,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,17,44,0,0,118,0,0,44,17,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,50,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,139,50,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,50,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,109,109,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,98,159,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,1,159,1,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,1,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,5,159,1,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,98,98,98,50,0,0,0,0,0,0,0,0,0,0,139,98,0,35,1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e83ed91c-4a35-4020-985a-d0306f17117a","name":"Well","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":38,"y":21,"z":19},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"chest-3":{"mechType":"Secret","secretPoint":{"x":16,"y":19,"z":61},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":13,"y":18,"z":12},"secretType":"CHEST","preRequisite":[]},"dummy-1":{"secretPoint":{"x":4,"y":25,"z":3},"preRequisite":[],"mechType":"Dummy"},"essences-1":{"mechType":"Secret","secretPoint":{"x":7,"y":25,"z":8},"secretType":"ESSENCE","preRequisite":["dummy-1:click"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":30,"y":20,"z":4},{"x":30,"y":19,"z":4},{"x":30,"y":18,"z":4},{"x":30,"y":17,"z":4},{"x":30,"y":20,"z":5},{"x":30,"y":19,"z":5},{"x":30,"y":18,"z":5},{"x":30,"y":17,"z":5},{"x":30,"y":19,"z":6},{"x":30,"y":18,"z":6},{"x":30,"y":17,"z":6}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":27,"y":21,"z":59},"secretType":"ITEM_DROP","preRequisite":[]},"itemdrop-2":{"mechType":"Secret","secretPoint":{"x":46,"y":-13,"z":15},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":49,"y":9,"z":17},{"x":49,"y":8,"z":17},{"x":50,"y":9,"z":17},{"x":50,"y":8,"z":17},{"x":51,"y":9,"z":17},{"x":51,"y":8,"z":17},{"x":49,"y":9,"z":18},{"x":49,"y":8,"z":18},{"x":50,"y":9,"z":18},{"x":50,"y":8,"z":18},{"x":51,"y":9,"z":18},{"x":51,"y":8,"z":18},{"x":49,"y":9,"z":19},{"x":49,"y":8,"z":19},{"x":50,"y":9,"z":19},{"x":50,"y":8,"z":19},{"x":51,"y":9,"z":19},{"x":51,"y":8,"z":19},{"x":49,"y":9,"z":20},{"x":49,"y":8,"z":20},{"x":50,"y":9,"z":20},{"x":50,"y":8,"z":20},{"x":51,"y":9,"z":20},{"x":51,"y":8,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":42,"y":9,"z":12},{"x":42,"y":8,"z":12},{"x":43,"y":9,"z":12},{"x":43,"y":8,"z":12},{"x":44,"y":9,"z":12},{"x":44,"y":8,"z":12},{"x":42,"y":9,"z":13},{"x":42,"y":8,"z":13},{"x":43,"y":9,"z":13},{"x":43,"y":8,"z":13},{"x":44,"y":9,"z":13},{"x":44,"y":8,"z":13},{"x":42,"y":9,"z":14},{"x":42,"y":8,"z":14},{"x":43,"y":9,"z":14},{"x":43,"y":8,"z":14},{"x":44,"y":9,"z":14},{"x":44,"y":8,"z":14},{"x":42,"y":9,"z":15},{"x":42,"y":8,"z":15},{"x":43,"y":9,"z":15},{"x":43,"y":8,"z":15},{"x":44,"y":9,"z":15},{"x":44,"y":8,"z":15}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":35,"y":9,"z":17},{"x":35,"y":8,"z":17},{"x":36,"y":9,"z":17},{"x":36,"y":8,"z":17},{"x":37,"y":9,"z":17},{"x":37,"y":8,"z":17},{"x":35,"y":9,"z":18},{"x":35,"y":8,"z":18},{"x":36,"y":9,"z":18},{"x":36,"y":8,"z":18},{"x":37,"y":9,"z":18},{"x":37,"y":8,"z":18},{"x":35,"y":9,"z":19},{"x":35,"y":8,"z":19},{"x":36,"y":9,"z":19},{"x":36,"y":8,"z":19},{"x":37,"y":9,"z":19},{"x":37,"y":8,"z":19},{"x":35,"y":9,"z":20},{"x":35,"y":8,"z":20},{"x":36,"y":9,"z":20},{"x":36,"y":8,"z":20},{"x":37,"y":9,"z":20},{"x":37,"y":8,"z":20}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":3,"y":-8,"z":21},{"x":3,"y":-9,"z":21},{"x":4,"y":-8,"z":21},{"x":4,"y":-9,"z":21},{"x":5,"y":-8,"z":21},{"x":5,"y":-9,"z":21},{"x":6,"y":-8,"z":21},{"x":6,"y":-9,"z":21},{"x":3,"y":-8,"z":22},{"x":3,"y":-9,"z":22},{"x":4,"y":-8,"z":22},{"x":4,"y":-9,"z":22},{"x":5,"y":-8,"z":22},{"x":5,"y":-9,"z":22},{"x":6,"y":-8,"z":22},{"x":6,"y":-9,"z":22},{"x":3,"y":-8,"z":23},{"x":3,"y":-9,"z":23},{"x":4,"y":-8,"z":23},{"x":4,"y":-9,"z":23},{"x":5,"y":-8,"z":23},{"x":5,"y":-9,"z":23},{"x":6,"y":-8,"z":23},{"x":6,"y":-9,"z":23},{"x":3,"y":-7,"z":22},{"x":4,"y":-7,"z":22},{"x":5,"y":-7,"z":22},{"x":6,"y":-7,"z":22}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":37,"y":18,"z":13},{"x":37,"y":17,"z":13},{"x":38,"y":18,"z":13},{"x":38,"y":17,"z":13},{"x":39,"y":18,"z":13},{"x":39,"y":17,"z":13},{"x":37,"y":18,"z":14},{"x":37,"y":17,"z":14},{"x":38,"y":18,"z":14},{"x":38,"y":17,"z":14},{"x":39,"y":18,"z":14},{"x":39,"y":17,"z":14},{"x":37,"y":18,"z":15},{"x":37,"y":17,"z":15},{"x":38,"y":18,"z":15},{"x":38,"y":17,"z":15},{"x":39,"y":18,"z":15},{"x":39,"y":17,"z":15},{"x":37,"y":18,"z":16},{"x":37,"y":17,"z":16},{"x":38,"y":18,"z":16},{"x":38,"y":17,"z":16},{"x":39,"y":18,"z":16},{"x":39,"y":17,"z":16},{"x":38,"y":19,"z":13},{"x":38,"y":19,"z":14},{"x":38,"y":19,"z":15},{"x":38,"y":19,"z":16}]},"preRequisite":["superboom-1:open"],"mechType":"Tomb"}},"totalSecrets":7} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json b/src/main/resources/dgroomdata/e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json new file mode 100644 index 0000000..3824830 --- /dev/null +++ b/src/main/resources/dgroomdata/e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,139,139,1,1,1,0,0,7,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,166,159,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,65,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,7,35,35,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,35,139,139,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,35,35,35,159,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,35,35,35,35,0,139,98,0,0,0,0,0,98,98,0,0,0,159,159,159,159,159,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"e9f4f98a-0913-4542-a02d-4ed3cec6f09b","name":"Spikes","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":20,"y":21,"z":5},"secretType":"CHEST","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":25,"y":-15,"z":3},"secretType":"BAT","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":26,"y":22,"z":11},{"x":26,"y":21,"z":11},{"x":27,"y":22,"z":11},{"x":27,"y":21,"z":11},{"x":28,"y":22,"z":11},{"x":28,"y":21,"z":11},{"x":26,"y":22,"z":12},{"x":26,"y":21,"z":12},{"x":27,"y":22,"z":12},{"x":27,"y":21,"z":12},{"x":28,"y":22,"z":12},{"x":28,"y":21,"z":12},{"x":26,"y":22,"z":13},{"x":26,"y":21,"z":13},{"x":27,"y":22,"z":13},{"x":27,"y":21,"z":13},{"x":28,"y":22,"z":13},{"x":28,"y":21,"z":13}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":26,"y":22,"z":6},{"x":26,"y":21,"z":6},{"x":27,"y":22,"z":6},{"x":27,"y":21,"z":6},{"x":28,"y":22,"z":6},{"x":28,"y":21,"z":6},{"x":26,"y":22,"z":7},{"x":26,"y":21,"z":7},{"x":27,"y":22,"z":7},{"x":27,"y":21,"z":7},{"x":28,"y":22,"z":7},{"x":28,"y":21,"z":7},{"x":26,"y":22,"z":8},{"x":26,"y":21,"z":8},{"x":27,"y":22,"z":8},{"x":27,"y":21,"z":8},{"x":28,"y":22,"z":8},{"x":28,"y":21,"z":8}]},"preRequisite":[],"mechType":"Tomb"},"essence-1":{"mechType":"Secret","secretPoint":{"x":23,"y":-17,"z":2},"secretType":"ESSENCE","preRequisite":[]}},"totalSecrets":3} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/ed57833a-01ca-4487-b516-6c3690c6221c.json b/src/main/resources/dgroomdata/ed57833a-01ca-4487-b516-6c3690c6221c.json new file mode 100644 index 0000000..25546de --- /dev/null +++ b/src/main/resources/dgroomdata/ed57833a-01ca-4487-b516-6c3690c6221c.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":4369,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,7,0,9,0,0,0,0,0,0,0,0,0,0,0,159,159,159,159,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,7,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,159,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,-1,-1,-1,-1],[-1,-1,-1,-1,159,159,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,159,-1,-1,-1,-1],[-1,-1,-1,-1,159,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,159,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,35,35,1,159,159,159,159,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,159,159,159,1,1,1,1,159,159,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,159,159,1,1,1,1,1,1,1,159,159,9,9,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,159,0,0,9,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,18,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,9,9,9,0,18,0,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,159,159,159,9,9,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,159,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,1,1,1,1,1,1,1,1,1,1,159,159,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,159,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,109,98,109,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,98,98,162,0,0,139,0,0,0,0,0,0,0,139,0,0,162,1,98,98,109,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,98,50,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,44,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,44,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,139,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,109,109,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,109,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,1,0,0,0,0,0,98,98,109,0,0,0,109,98,98,0,0,0,0,0,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,67,67,67,67,67,98,1,44,0,0,0,109,1,98,67,67,67,67,67,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,1,43,44,44,1,1,1,1,4,4,1,4,4,4,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,1,1,1,1,1,1,1,4,1,4,4,1,1,1,1,1,1,1,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,98,98,44,44,44,44,44,1,98,67,67,67,67,67,98,1,44,44,44,44,44,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,18,18,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,18,18,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,139,0,0,0,0,98,139,0,0,0,0,0,0,0,0,0,0,0,139,98,0,0,0,0,139,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"ed57833a-01ca-4487-b516-6c3690c6221c","name":"waterfall","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":28,"y":8,"z":83},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":10,"y":12,"z":43},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":16,"y":11,"z":122},"secretType":"CHEST","preRequisite":[]},"bat-2":{"mechType":"Secret","secretPoint":{"x":4,"y":-24,"z":89},"secretType":"BAT","preRequisite":[]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":3,"y":-26,"z":9},"secretType":"ITEM_DROP","preRequisite":[]},"bat-1":{"mechType":"Secret","secretPoint":{"x":28,"y":-9,"z":71},"secretType":"BAT","preRequisite":[]},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":26,"y":-24,"z":108},{"x":26,"y":-25,"z":108},{"x":27,"y":-24,"z":108},{"x":27,"y":-25,"z":108},{"x":28,"y":-24,"z":108},{"x":28,"y":-25,"z":108},{"x":29,"y":-24,"z":108},{"x":29,"y":-25,"z":108},{"x":26,"y":-24,"z":109},{"x":26,"y":-25,"z":109},{"x":27,"y":-24,"z":109},{"x":27,"y":-25,"z":109},{"x":28,"y":-24,"z":109},{"x":28,"y":-25,"z":109},{"x":29,"y":-24,"z":109},{"x":29,"y":-25,"z":109},{"x":26,"y":-24,"z":110},{"x":26,"y":-25,"z":110},{"x":27,"y":-24,"z":110},{"x":27,"y":-25,"z":110},{"x":28,"y":-24,"z":110},{"x":28,"y":-25,"z":110},{"x":29,"y":-24,"z":110},{"x":29,"y":-25,"z":110}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":26,"y":-24,"z":103},{"x":26,"y":-25,"z":103},{"x":27,"y":-24,"z":103},{"x":27,"y":-25,"z":103},{"x":28,"y":-24,"z":103},{"x":28,"y":-25,"z":103},{"x":29,"y":-24,"z":103},{"x":29,"y":-25,"z":103},{"x":26,"y":-24,"z":104},{"x":26,"y":-25,"z":104},{"x":27,"y":-24,"z":104},{"x":27,"y":-25,"z":104},{"x":28,"y":-24,"z":104},{"x":28,"y":-25,"z":104},{"x":29,"y":-24,"z":104},{"x":29,"y":-25,"z":104},{"x":26,"y":-24,"z":105},{"x":26,"y":-25,"z":105},{"x":27,"y":-24,"z":105},{"x":27,"y":-25,"z":105},{"x":28,"y":-24,"z":105},{"x":28,"y":-25,"z":105},{"x":29,"y":-24,"z":105},{"x":29,"y":-25,"z":105}]},"preRequisite":[],"mechType":"Tomb"},"chest-4":{"mechType":"Secret","secretPoint":{"x":8,"y":14,"z":35},"secretType":"CHEST","preRequisite":[]},"prince-1":{"secretPoint":{"offsetPointList":[{"x":27,"y":-30,"z":105},{"x":27,"y":-31,"z":105},{"x":28,"y":-30,"z":105},{"x":28,"y":-31,"z":105},{"x":29,"y":-30,"z":105},{"x":29,"y":-31,"z":105},{"x":27,"y":-30,"z":106},{"x":27,"y":-31,"z":106},{"x":28,"y":-30,"z":106},{"x":28,"y":-31,"z":106},{"x":29,"y":-30,"z":106},{"x":29,"y":-31,"z":106},{"x":27,"y":-30,"z":107},{"x":27,"y":-31,"z":107},{"x":28,"y":-30,"z":107},{"x":28,"y":-31,"z":107},{"x":29,"y":-30,"z":107},{"x":29,"y":-31,"z":107},{"x":27,"y":-30,"z":108},{"x":27,"y":-31,"z":108},{"x":28,"y":-30,"z":108},{"x":28,"y":-31,"z":108},{"x":29,"y":-30,"z":108},{"x":29,"y":-31,"z":108}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":-23,"z":48},{"x":3,"y":-24,"z":48},{"x":3,"y":-25,"z":48},{"x":3,"y":-26,"z":48},{"x":4,"y":-23,"z":48},{"x":4,"y":-24,"z":48},{"x":4,"y":-25,"z":48},{"x":4,"y":-26,"z":48}]},"preRequisite":[],"mechType":"BreakableWall"},"chest-5":{"mechType":"Secret","secretPoint":{"x":4,"y":-26,"z":54},"secretType":"CHEST","preRequisite":["superboom-1:open:::::::::"]}},"totalSecrets":8} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/ef097340-7c03-407d-b634-7bf7af551d01.json b/src/main/resources/dgroomdata/ef097340-7c03-407d-b634-7bf7af551d01.json new file mode 100644 index 0000000..222f917 --- /dev/null +++ b/src/main/resources/dgroomdata/ef097340-7c03-407d-b634-7bf7af551d01.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,98,98,98,98,98,1,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,98,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,109,1,98,98,1,98,98,98,109,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,109,109,98,98,98,98,18,98,109,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,109,109,109,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,1,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"ef097340-7c03-407d-b634-7bf7af551d01","name":"Small-stairs","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":4,"y":12,"z":7},"secretType":"CHEST","preRequisite":["superboom-1:open"]},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":25,"y":-7,"z":3},"secretType":"ITEM_DROP","preRequisite":[]},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":27,"y":12,"z":15},{"x":27,"y":11,"z":15},{"x":28,"y":12,"z":15},{"x":28,"y":11,"z":15},{"x":29,"y":12,"z":15},{"x":29,"y":11,"z":15},{"x":27,"y":12,"z":16},{"x":27,"y":11,"z":16},{"x":28,"y":12,"z":16},{"x":28,"y":11,"z":16},{"x":29,"y":12,"z":16},{"x":29,"y":11,"z":16},{"x":27,"y":12,"z":17},{"x":27,"y":11,"z":17},{"x":28,"y":12,"z":17},{"x":28,"y":11,"z":17},{"x":29,"y":12,"z":17},{"x":29,"y":11,"z":17},{"x":27,"y":12,"z":18},{"x":27,"y":11,"z":18},{"x":28,"y":12,"z":18},{"x":28,"y":11,"z":18},{"x":29,"y":12,"z":18},{"x":29,"y":11,"z":18}]},"preRequisite":[],"mechType":"Tomb"},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":3,"y":14,"z":14},{"x":3,"y":13,"z":14},{"x":3,"y":12,"z":14},{"x":3,"y":11,"z":14},{"x":4,"y":14,"z":14},{"x":4,"y":13,"z":14},{"x":4,"y":12,"z":14},{"x":4,"y":11,"z":14},{"x":5,"y":14,"z":14},{"x":5,"y":13,"z":14},{"x":5,"y":12,"z":14},{"x":5,"y":11,"z":14}]},"preRequisite":[],"mechType":"BreakableWall"}},"totalSecrets":2} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/f8bee714-de5b-4007-a572-575fcd467c82.json b/src/main/resources/dgroomdata/f8bee714-de5b-4007-a572-575fcd467c82.json new file mode 100644 index 0000000..a7066f1 --- /dev/null +++ b/src/main/resources/dgroomdata/f8bee714-de5b-4007-a572-575fcd467c82.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,98,159,1,1,1,4,50,0,0,0,50,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,-1,-1,-1,4,1,1,4,0,0,0,0,0,4,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,-1,-1,-1,4,1,1,4,1,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,-1,-1,-1,4,1,1,1,4,-1,-1,-1,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,50,-1,-1,-1,50,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,98,98,0,0,0,0,0,98,98,1,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,98,98,98,0,0,0,0,0,1,98,98,0,0,0,0,0,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,98,50,-1,-1,-1,50,1,1,1,50,-1,-1,-1,50,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,67,-1,-1,-1,4,1,1,1,67,-1,-1,-1,67,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,-1,-1,-1,4,1,1,1,4,-1,-1,-1,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,4,4,4,4,4,-1,-1,-1,4,1,1,1,4,-1,-1,-1,4,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,159,98,159,1,1,1,1,1,159,98,159,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"f8bee714-de5b-4007-a572-575fcd467c82","name":"sanctuary","processorId":"default","properties":{},"mechanics":{"chest-1":{"mechType":"Secret","secretPoint":{"x":18,"y":-1,"z":5},"secretType":"CHEST","preRequisite":["door-1:open"]},"door-1":{"secretPoint":{"offsetPointList":[{"x":17,"y":1,"z":9},{"x":17,"y":0,"z":9},{"x":17,"y":-1,"z":9},{"x":18,"y":1,"z":9},{"x":18,"y":0,"z":9},{"x":18,"y":-1,"z":9},{"x":19,"y":1,"z":9},{"x":19,"y":0,"z":9},{"x":19,"y":-1,"z":9}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":2,"y":10,"z":14},"preRequisite":[],"triggering":"door-1"},"crypt-10":{"secretPoint":{"offsetPointList":[{"x":17,"y":0,"z":22},{"x":17,"y":-1,"z":22},{"x":18,"y":0,"z":22},{"x":18,"y":-1,"z":22},{"x":19,"y":0,"z":22},{"x":19,"y":-1,"z":22},{"x":17,"y":0,"z":23},{"x":17,"y":-1,"z":23},{"x":18,"y":0,"z":23},{"x":18,"y":-1,"z":23},{"x":19,"y":0,"z":23},{"x":19,"y":-1,"z":23},{"x":17,"y":0,"z":24},{"x":17,"y":-1,"z":24},{"x":18,"y":0,"z":24},{"x":18,"y":-1,"z":24},{"x":19,"y":0,"z":24},{"x":19,"y":-1,"z":24},{"x":17,"y":0,"z":25},{"x":17,"y":-1,"z":25},{"x":18,"y":0,"z":25},{"x":18,"y":-1,"z":25},{"x":19,"y":0,"z":25},{"x":19,"y":-1,"z":25}]},"preRequisite":[],"mechType":"Tomb"},"crypt-9":{"secretPoint":{"offsetPointList":[{"x":9,"y":0,"z":22},{"x":9,"y":-1,"z":22},{"x":10,"y":0,"z":22},{"x":10,"y":-1,"z":22},{"x":11,"y":0,"z":22},{"x":11,"y":-1,"z":22},{"x":9,"y":0,"z":23},{"x":9,"y":-1,"z":23},{"x":10,"y":0,"z":23},{"x":10,"y":-1,"z":23},{"x":11,"y":0,"z":23},{"x":11,"y":-1,"z":23},{"x":9,"y":0,"z":24},{"x":9,"y":-1,"z":24},{"x":10,"y":0,"z":24},{"x":10,"y":-1,"z":24},{"x":11,"y":0,"z":24},{"x":11,"y":-1,"z":24},{"x":9,"y":0,"z":25},{"x":9,"y":-1,"z":25},{"x":10,"y":0,"z":25},{"x":10,"y":-1,"z":25},{"x":11,"y":0,"z":25},{"x":11,"y":-1,"z":25}]},"preRequisite":[],"mechType":"Tomb"},"crypt-8":{"secretPoint":{"offsetPointList":[{"x":9,"y":0,"z":7},{"x":9,"y":-1,"z":7},{"x":10,"y":0,"z":7},{"x":10,"y":-1,"z":7},{"x":11,"y":0,"z":7},{"x":11,"y":-1,"z":7},{"x":9,"y":0,"z":8},{"x":9,"y":-1,"z":8},{"x":10,"y":0,"z":8},{"x":10,"y":-1,"z":8},{"x":11,"y":0,"z":8},{"x":11,"y":-1,"z":8},{"x":9,"y":0,"z":9},{"x":9,"y":-1,"z":9},{"x":10,"y":0,"z":9},{"x":10,"y":-1,"z":9},{"x":11,"y":0,"z":9},{"x":11,"y":-1,"z":9},{"x":9,"y":0,"z":10},{"x":9,"y":-1,"z":10},{"x":10,"y":0,"z":10},{"x":10,"y":-1,"z":10},{"x":11,"y":0,"z":10},{"x":11,"y":-1,"z":10}]},"preRequisite":[],"mechType":"Tomb"},"crypt-7":{"secretPoint":{"offsetPointList":[{"x":9,"y":6,"z":27},{"x":9,"y":5,"z":27},{"x":10,"y":6,"z":27},{"x":10,"y":5,"z":27},{"x":11,"y":6,"z":27},{"x":11,"y":5,"z":27},{"x":9,"y":6,"z":28},{"x":9,"y":5,"z":28},{"x":10,"y":6,"z":28},{"x":10,"y":5,"z":28},{"x":11,"y":6,"z":28},{"x":11,"y":5,"z":28},{"x":9,"y":6,"z":29},{"x":9,"y":5,"z":29},{"x":10,"y":6,"z":29},{"x":10,"y":5,"z":29},{"x":11,"y":6,"z":29},{"x":11,"y":5,"z":29},{"x":9,"y":6,"z":30},{"x":9,"y":5,"z":30},{"x":10,"y":6,"z":30},{"x":10,"y":5,"z":30},{"x":11,"y":6,"z":30},{"x":11,"y":5,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-6":{"secretPoint":{"offsetPointList":[{"x":17,"y":6,"z":27},{"x":17,"y":5,"z":27},{"x":18,"y":6,"z":27},{"x":18,"y":5,"z":27},{"x":19,"y":6,"z":27},{"x":19,"y":5,"z":27},{"x":17,"y":6,"z":28},{"x":17,"y":5,"z":28},{"x":18,"y":6,"z":28},{"x":18,"y":5,"z":28},{"x":19,"y":6,"z":28},{"x":19,"y":5,"z":28},{"x":17,"y":6,"z":29},{"x":17,"y":5,"z":29},{"x":18,"y":6,"z":29},{"x":18,"y":5,"z":29},{"x":19,"y":6,"z":29},{"x":19,"y":5,"z":29},{"x":17,"y":6,"z":30},{"x":17,"y":5,"z":30},{"x":18,"y":6,"z":30},{"x":18,"y":5,"z":30},{"x":19,"y":6,"z":30},{"x":19,"y":5,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-5":{"secretPoint":{"offsetPointList":[{"x":25,"y":6,"z":27},{"x":25,"y":5,"z":27},{"x":26,"y":6,"z":27},{"x":26,"y":5,"z":27},{"x":27,"y":6,"z":27},{"x":27,"y":5,"z":27},{"x":25,"y":6,"z":28},{"x":25,"y":5,"z":28},{"x":26,"y":6,"z":28},{"x":26,"y":5,"z":28},{"x":27,"y":6,"z":28},{"x":27,"y":5,"z":28},{"x":25,"y":6,"z":29},{"x":25,"y":5,"z":29},{"x":26,"y":6,"z":29},{"x":26,"y":5,"z":29},{"x":27,"y":6,"z":29},{"x":27,"y":5,"z":29},{"x":25,"y":6,"z":30},{"x":25,"y":5,"z":30},{"x":26,"y":6,"z":30},{"x":26,"y":5,"z":30},{"x":27,"y":6,"z":30},{"x":27,"y":5,"z":30}]},"preRequisite":[],"mechType":"Tomb"},"crypt-4":{"secretPoint":{"offsetPointList":[{"x":23,"y":3,"z":14},{"x":23,"y":2,"z":14},{"x":24,"y":3,"z":14},{"x":24,"y":2,"z":14},{"x":25,"y":3,"z":14},{"x":25,"y":2,"z":14},{"x":26,"y":3,"z":14},{"x":26,"y":2,"z":14},{"x":27,"y":3,"z":14},{"x":27,"y":2,"z":14},{"x":23,"y":3,"z":15},{"x":23,"y":2,"z":15},{"x":24,"y":3,"z":15},{"x":24,"y":2,"z":15},{"x":25,"y":3,"z":15},{"x":25,"y":2,"z":15},{"x":26,"y":3,"z":15},{"x":26,"y":2,"z":15},{"x":27,"y":3,"z":15},{"x":27,"y":2,"z":15},{"x":23,"y":3,"z":16},{"x":23,"y":2,"z":16},{"x":24,"y":3,"z":16},{"x":24,"y":2,"z":16},{"x":25,"y":3,"z":16},{"x":25,"y":2,"z":16},{"x":26,"y":3,"z":16},{"x":26,"y":2,"z":16},{"x":27,"y":3,"z":16},{"x":27,"y":2,"z":16},{"x":23,"y":3,"z":17},{"x":23,"y":2,"z":17},{"x":24,"y":3,"z":17},{"x":24,"y":2,"z":17},{"x":25,"y":3,"z":17},{"x":25,"y":2,"z":17},{"x":26,"y":3,"z":17},{"x":26,"y":2,"z":17},{"x":27,"y":3,"z":17},{"x":27,"y":2,"z":17},{"x":23,"y":3,"z":18},{"x":23,"y":2,"z":18},{"x":24,"y":3,"z":18},{"x":24,"y":2,"z":18},{"x":25,"y":3,"z":18},{"x":25,"y":2,"z":18},{"x":26,"y":3,"z":18},{"x":26,"y":2,"z":18},{"x":27,"y":3,"z":18},{"x":27,"y":2,"z":18}]},"preRequisite":[],"mechType":"Tomb"},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":25,"y":6,"z":2},{"x":25,"y":5,"z":2},{"x":26,"y":6,"z":2},{"x":26,"y":5,"z":2},{"x":27,"y":6,"z":2},{"x":27,"y":5,"z":2},{"x":25,"y":6,"z":3},{"x":25,"y":5,"z":3},{"x":26,"y":6,"z":3},{"x":26,"y":5,"z":3},{"x":27,"y":6,"z":3},{"x":27,"y":5,"z":3},{"x":25,"y":6,"z":4},{"x":25,"y":5,"z":4},{"x":26,"y":6,"z":4},{"x":26,"y":5,"z":4},{"x":27,"y":6,"z":4},{"x":27,"y":5,"z":4},{"x":25,"y":6,"z":5},{"x":25,"y":5,"z":5},{"x":26,"y":6,"z":5},{"x":26,"y":5,"z":5},{"x":27,"y":6,"z":5},{"x":27,"y":5,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":17,"y":6,"z":2},{"x":17,"y":5,"z":2},{"x":18,"y":6,"z":2},{"x":18,"y":5,"z":2},{"x":19,"y":6,"z":2},{"x":19,"y":5,"z":2},{"x":17,"y":6,"z":3},{"x":17,"y":5,"z":3},{"x":18,"y":6,"z":3},{"x":18,"y":5,"z":3},{"x":19,"y":6,"z":3},{"x":19,"y":5,"z":3},{"x":17,"y":6,"z":4},{"x":17,"y":5,"z":4},{"x":18,"y":6,"z":4},{"x":18,"y":5,"z":4},{"x":19,"y":6,"z":4},{"x":19,"y":5,"z":4},{"x":17,"y":6,"z":5},{"x":17,"y":5,"z":5},{"x":18,"y":6,"z":5},{"x":18,"y":5,"z":5},{"x":19,"y":6,"z":5},{"x":19,"y":5,"z":5}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":9,"y":6,"z":2},{"x":9,"y":5,"z":2},{"x":9,"y":4,"z":2},{"x":10,"y":6,"z":2},{"x":10,"y":5,"z":2},{"x":10,"y":4,"z":2},{"x":11,"y":6,"z":2},{"x":11,"y":5,"z":2},{"x":11,"y":4,"z":2},{"x":9,"y":6,"z":3},{"x":9,"y":5,"z":3},{"x":9,"y":4,"z":3},{"x":10,"y":6,"z":3},{"x":10,"y":5,"z":3},{"x":10,"y":4,"z":3},{"x":11,"y":6,"z":3},{"x":11,"y":5,"z":3},{"x":11,"y":4,"z":3},{"x":9,"y":6,"z":4},{"x":9,"y":5,"z":4},{"x":9,"y":4,"z":4},{"x":10,"y":6,"z":4},{"x":10,"y":5,"z":4},{"x":10,"y":4,"z":4},{"x":11,"y":6,"z":4},{"x":11,"y":5,"z":4},{"x":11,"y":4,"z":4},{"x":9,"y":6,"z":5},{"x":9,"y":5,"z":5},{"x":9,"y":4,"z":5},{"x":10,"y":6,"z":5},{"x":10,"y":5,"z":5},{"x":10,"y":4,"z":5},{"x":11,"y":6,"z":5},{"x":11,"y":5,"z":5},{"x":11,"y":4,"z":5}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":1} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json b/src/main/resources/dgroomdata/fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json new file mode 100644 index 0000000..140aa1e --- /dev/null +++ b/src/main/resources/dgroomdata/fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":7,"color":63,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,44,4,4,4,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,0,0,0,0,0,0,0,109,1,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,1,98,98,98,98,1,98,44,4,4,4,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,109,98,98,0,0,0,0,0,0,0,98,98,1,98,159,159,159,159,1,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,1,98,44,4,4,4,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,98,98,0,0,43,43,43,0,0,98,159,44,0,0,0,0,0,0,0,109,98,1,98,109,109,109,109,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,98,98,1,98,98,98,98,98,44,44,44,44,44,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,1,0,0,43,43,43,0,0,98,159,0,0,0,0,0,0,0,0,109,1,98,98,0,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,1,98,1,98,98,98,98,98,98,98,98,98,98,1,109,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,188,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,43,43,43,0,0,98,98,98,0,0,0,0,0,0,0,98,98,98,109,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,98,98,98,98,98,98,98,139,30,0,0,0,0,98,1,17,0,0,0,17,98,98,0,0,0,0,0,98,98,98,98,98,0,0,109,98,0,0,0,0,0,109,98,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,98,159,98,98,109,0,0,0,0,109,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,1,98,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,139,0,0,0,0,0,98,98,0,0,0,0,0,98,139,0,0,0,0,0,98,98,98,1,98,159,159,98,98,0,0,0,0,0,109,98,0,0,0,0,0,0,0,98,98,98,98,0,0,0,0,0,109,44,159,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,1,0,0,0,0,0,98,98,109,109,98,98,1,98,98,98,98,1,98,98,98,98,98,98,98,98,0,18,0,0,0,0,0,0,154,0,0,0,0,0,154,0,0,0,0,0,85,0,85,109,98,98,98,98,159,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,109,109,0,0,0,0,0,0,0,0,0,144,159,1,98,-1,-1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,50,98,98,17,0,171,171,0,17,98,1,98,1,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,159,98,0,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,65,98,109,109,98,98,1,1,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,85,0,98,98,98,98,159,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,139,0,0,0,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,1,98,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,98,98,98,98,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,69,98,98,98,98,98,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,109,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,-1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,98,98,98,98,98,98,109,44,144,0,0,109,109,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,159,159,159,159,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,98,98,0,0,0,0,0,0,98,98,1,1,98,98,98,98,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,1,98,98,98,98,98,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,0,0,0,50,109,-1,-1,-1,-1],[-1,-1,-1,-1,50,0,0,0,0,0,0,98,1,17,0,171,171,0,17,98,98,98,98,98,98,98,1,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,98,159,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,144,0,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,109,109,109,109,98,98,98,98,98,98,98,98,98,98,98,98,1,98,0,0,0,0,0,0,0,0,154,0,0,0,0,0,154,0,0,0,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,98,159,159,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,1,98,98,98,98,98,98,98,98,98,98,98,1,0,0,0,0,0,98,98,0,0,0,0,0,1,1,0,0,0,0,0,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,109,109,98,0,0,0,0,0,139,1,0,0,0,0,0,109,44,159,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,1,1,98,1,98,98,98,98,98,18,0,0,0,0,98,98,0,0,0,0,0,98,98,0,0,0,0,0,98,1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,98,98,1,139,0,0,0,0,98,98,0,0,0,0,0,109,159,98,98,1,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,98,98,98,98,98,1,1,109,0,0,0,0,0,0,109,109,0,0,0,0,0,109,109,98,98,98,98,98,1,98,1,98,98,1,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,1,98,98,1,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,98,98,98,1,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,98,98,98,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,98,98,98,98,98,98,1,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,1,98,98,98,98,98,98,98,98,98,98,98,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,1,98,98,98,98,98,1,98,-1,-1,-1,-1],[-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,98,98,98,98,98,1,98,98,98,98,98,98,98,98,1,98,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,98,98,98,98,1,98,98,98,98,98,98,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,98,98,98,98,98,1,98,98,-1,-1,-1,-1],[-1,-1,-1,-1,98,0,0,0,0,0,98,98,0,0,0,0,0,0,0,98,1,98,98,98,98,1,98,98,98,98,1,98,98,98,98,98,1,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,159,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,144,0,0,0,144,98,98,0,0,0,0,0,98,98,98,98,98,98,98,98,98,1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758","name":"Deathmite","processorId":"default","properties":{},"mechanics":{"chest-2":{"mechType":"Secret","secretPoint":{"x":68,"y":12,"z":16},"secretType":"CHEST","preRequisite":[]},"chest-3":{"mechType":"Secret","secretPoint":{"x":84,"y":22,"z":28},"secretType":"CHEST","preRequisite":[]},"chest-1":{"mechType":"Secret","secretPoint":{"x":70,"y":-10,"z":11},"secretType":"CHEST","preRequisite":[]},"lever-1":{"mechType":"OnewayLever","leverPoint":{"x":54,"y":0,"z":16},"preRequisite":[],"triggering":"door-1"},"door-1":{"secretPoint":{"offsetPointList":[{"x":28,"y":0,"z":15},{"x":28,"y":-1,"z":15},{"x":28,"y":-2,"z":15},{"x":28,"y":-3,"z":15},{"x":28,"y":-4,"z":15},{"x":28,"y":-5,"z":15},{"x":28,"y":0,"z":16},{"x":28,"y":-1,"z":16},{"x":28,"y":-2,"z":16},{"x":28,"y":-3,"z":16},{"x":28,"y":-4,"z":16},{"x":28,"y":-5,"z":16},{"x":28,"y":0,"z":17},{"x":28,"y":-1,"z":17},{"x":28,"y":-2,"z":17},{"x":28,"y":-3,"z":17},{"x":28,"y":-4,"z":17},{"x":28,"y":-5,"z":17}]},"preRequisite":["lever-1:triggered"],"mechType":"OnewayDoor"},"deathmite-1":{"secretPoint":{"offsetPointList":[{"x":14,"y":14,"z":14},{"x":15,"y":14,"z":14},{"x":14,"y":14,"z":15},{"x":15,"y":14,"z":15},{"x":14,"y":14,"z":16},{"x":15,"y":14,"z":16},{"x":14,"y":14,"z":17},{"x":15,"y":14,"z":17}]},"preRequisite":[],"mechType":"Tomb"},"bat-1":{"mechType":"Secret","secretPoint":{"x":85,"y":26,"z":26},"secretType":"BAT","preRequisite":[]},"chest-4":{"mechType":"Secret","secretPoint":{"x":13,"y":-1,"z":16},"secretType":"CHEST","preRequisite":["door-1:open"]},"superboom-1":{"secretPoint":{"offsetPointList":[{"x":89,"y":1,"z":11},{"x":89,"y":0,"z":11},{"x":89,"y":-1,"z":11},{"x":90,"y":2,"z":11},{"x":90,"y":1,"z":11},{"x":90,"y":0,"z":11},{"x":90,"y":-1,"z":11}]},"preRequisite":[],"mechType":"BreakableWall"},"itemdrop-1":{"mechType":"Secret","secretPoint":{"x":89,"y":-1,"z":7},"secretType":"ITEM_DROP","preRequisite":["superboom-1:open"]},"crypt-3":{"secretPoint":{"offsetPointList":[{"x":45,"y":17,"z":4},{"x":45,"y":16,"z":4},{"x":46,"y":17,"z":4},{"x":46,"y":16,"z":4},{"x":47,"y":17,"z":4},{"x":47,"y":16,"z":4},{"x":45,"y":17,"z":5},{"x":45,"y":16,"z":5},{"x":46,"y":17,"z":5},{"x":46,"y":16,"z":5},{"x":47,"y":17,"z":5},{"x":47,"y":16,"z":5},{"x":45,"y":17,"z":6},{"x":45,"y":16,"z":6},{"x":46,"y":17,"z":6},{"x":46,"y":16,"z":6},{"x":47,"y":17,"z":6},{"x":47,"y":16,"z":6},{"x":45,"y":17,"z":7},{"x":45,"y":16,"z":7},{"x":46,"y":17,"z":7},{"x":46,"y":16,"z":7},{"x":47,"y":17,"z":7},{"x":47,"y":16,"z":7}]},"preRequisite":[],"mechType":"Tomb"},"crypt-2":{"secretPoint":{"offsetPointList":[{"x":35,"y":17,"z":25},{"x":35,"y":16,"z":25},{"x":36,"y":17,"z":25},{"x":36,"y":16,"z":25},{"x":37,"y":17,"z":25},{"x":37,"y":16,"z":25},{"x":35,"y":17,"z":26},{"x":35,"y":16,"z":26},{"x":36,"y":17,"z":26},{"x":36,"y":16,"z":26},{"x":37,"y":17,"z":26},{"x":37,"y":16,"z":26},{"x":35,"y":17,"z":27},{"x":35,"y":16,"z":27},{"x":36,"y":17,"z":27},{"x":36,"y":16,"z":27},{"x":37,"y":17,"z":27},{"x":37,"y":16,"z":27},{"x":35,"y":17,"z":28},{"x":35,"y":16,"z":28},{"x":36,"y":17,"z":28},{"x":36,"y":16,"z":28},{"x":37,"y":17,"z":28},{"x":37,"y":16,"z":28}]},"preRequisite":[],"mechType":"Tomb"},"crypt-1":{"secretPoint":{"offsetPointList":[{"x":40,"y":17,"z":25},{"x":40,"y":16,"z":25},{"x":41,"y":17,"z":25},{"x":41,"y":16,"z":25},{"x":42,"y":17,"z":25},{"x":42,"y":16,"z":25},{"x":40,"y":17,"z":26},{"x":40,"y":16,"z":26},{"x":41,"y":17,"z":26},{"x":41,"y":16,"z":26},{"x":42,"y":17,"z":26},{"x":42,"y":16,"z":26},{"x":40,"y":17,"z":27},{"x":40,"y":16,"z":27},{"x":41,"y":17,"z":27},{"x":41,"y":16,"z":27},{"x":42,"y":17,"z":27},{"x":42,"y":16,"z":27},{"x":40,"y":17,"z":28},{"x":40,"y":16,"z":28},{"x":41,"y":17,"z":28},{"x":41,"y":16,"z":28},{"x":42,"y":17,"z":28},{"x":42,"y":16,"z":28}]},"preRequisite":[],"mechType":"Tomb"}},"totalSecrets":6} \ No newline at end of file diff --git a/src/main/resources/dgroomdata/ffd5411b-6ff4-4f60-b387-72f00510ec50.json b/src/main/resources/dgroomdata/ffd5411b-6ff4-4f60-b387-72f00510ec50.json new file mode 100644 index 0000000..22f58c9 --- /dev/null +++ b/src/main/resources/dgroomdata/ffd5411b-6ff4-4f60-b387-72f00510ec50.json @@ -0,0 +1 @@ +{"isUserMade":false,"shape":1,"color":66,"blocks":[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,1,-1,-1,-1],[-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,0,0,0,0,0,0,0,-1,0,-1,0,0,0,-1,0,-1,0,0,0,0,0,0,0,-1,1,-1,-1,-1],[-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,0,0,0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,0,0,0,0,0,-1,1,1,1,1,1,-1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,0,0,0,0,0,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,0,0,0,0,0,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]],"uuid":"ffd5411b-6ff4-4f60-b387-72f00510ec50","name":"puzzle-teleport2","processorId":"puzzle_teleport_solver","properties":{},"mechanics":{},"totalSecrets":0} \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index c8f9a6f..36b6796 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -8,7 +8,6 @@ "url": "https://discord.gg/7B5RbsArYK", "updateUrl": "", "authorList": ["_risk (aka Quantizr)"], - "credits": "Credits for inspiring pathfinder code to DungeonGuide ( https://github.com/Dungeons-Guide/Skyblock-Dungeons-Guide ) licenced under AGPL \n licence: \n GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate. Many developers of free software are heartened and\nencouraged by the resulting cooperation. However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community. It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server. Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals. This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Remote Network Interaction; Use with the GNU General Public License.\n\n Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software. This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time. Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n \n Copyright (C) \n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU Affero General Public License as published\n by the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License\n along with this program. If not, see .\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source. For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code. There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n.", "logoFile": "assets/dungeonrooms/logo.png", "screenshots": [], "dependencies": [] diff --git a/src/main/resources/roomdataindex.txt b/src/main/resources/roomdataindex.txt new file mode 100644 index 0000000..a313784 --- /dev/null +++ b/src/main/resources/roomdataindex.txt @@ -0,0 +1,118 @@ +roomdata/e773dc09-f989-4d8f-8aba-43dbb71e7b62.json +roomdata/e22c44d7-4094-4230-89ba-efa438aa3615.json +roomdata/12080b02-4ccc-49ce-9eaf-e7d8946f3984.json +roomdata/44d9b135-d2ca-4350-969e-6e9c34af2fe6.json +roomdata/b2dce4ed-2bda-4303-a4d7-3ebb914db318.json +roomdata/7d975e04-15c8-40cb-8c12-d664edc1b0d7.json +roomdata/2f7927cc-4ce0-4f02-a81a-88d5709248e8.json +roomdata/990f6e4c-f7cf-4d27-ae91-11219b85861f.json +roomdata/4f8be93c-f3e7-47ca-9e0d-87261f5fc386.json +roomdata/1ae1d65c-2c72-4ed6-afab-84d0de759e1e.json +roomdata/dc5d63b3-3dc4-41f1-a79c-973271ba71c2.json +roomdata/01949106-2ddc-4601-9b4c-e934f5d373a6.json +roomdata/4ed557b1-553c-4ecc-b3c1-88dd9da6d33c.json +roomdata/b2df250c-4af2-4201-963c-0ee1cb6bd3de.json +roomdata/c9078cd2-91d4-457d-ae30-3579293821da.json +roomdata/1df3a849-2a5b-451d-8bd7-971eb608363c.json +roomdata/e6d51aea-c715-4396-986d-2e09d31993e1.json +roomdata/e66fe526-22c1-45bc-b4a8-d10549d7ee3f.json +roomdata/9890fbac-d382-4525-ab88-fe1ebc118702.json +roomdata/4ffce449-eab8-470b-bc8c-d30507248fc2.json +roomdata/95c57abe-34d4-443c-baac-11d43cbc821f.json +roomdata/e7e0bb38-8fc3-4d7c-a0c6-1fce55ac9082.json +roomdata/23d6e1f6-efa3-476b-b452-ad5cf6a37be9.json +roomdata/9b949f89-1542-4bcf-9bf3-063ec69bc5f4.json +roomdata/0877607a-b8a2-433a-b893-f4de7c83378a.json +roomdata/54aaf168-7039-48dc-99a3-8d1f02d79097.json +roomdata/65d8264d-f47c-4306-b89f-46e28b117511.json +roomdata/067df8a7-9d28-4fdd-a538-c6d38f126cd2.json +roomdata/b58cfdf5-a11d-4f28-b3c4-6576e5157374.json +roomdata/2b5cb4ef-00a3-4aae-baec-d2094a158d60.json +roomdata/5b6968ce-4a5b-4a48-8cb3-423ff9a7788d.json +roomdata/9a0e71bf-babd-421e-a785-442c13d5a8b2.json +roomdata/ffd5411b-6ff4-4f60-b387-72f00510ec50.json +roomdata/4538898f-8e79-4d53-aae6-08e4df6abb61.json +roomdata/ae5b48ac-43ec-4837-a34e-ac70cba71481.json +roomdata/9087fdc7-43e2-4736-b53b-33477ac65351.json +roomdata/d4a015ae-f123-4696-8fb6-719b5a21b623.json +roomdata/25956a46-7094-4a9e-b5d9-c9f8291ffef4.json +roomdata/6367a338-dd48-4c30-9e03-7ff6b5c7a936.json +roomdata/5000be9d-3081-4a5e-8563-dd826705663a.json +roomdata/70a1451a-5430-40bd-b20b-13245aac910a.json +roomdata/54008e69-d31e-4ed2-9ad0-870a3ad5ee1a.json +roomdata/3acb9949-d252-4f16-9983-a1fcdc38a6cf.json +roomdata/2ccc73b5-883f-4436-9b8f-1a32123b2cb9.json +roomdata/41086d97-5e36-41a5-88ff-d3fb296791ce.json +roomdata/cab054ed-b9ea-4f54-9d23-9864a50789f0.json +roomdata/a5b419e7-49ee-4d6d-bdce-470f508b315d.json +roomdata/40fb4b64-18d7-4301-b899-0da7b1d466c1.json +roomdata/d3e61abf-4198-4520-a950-a03761a0eb6f.json +roomdata/a7321dea-d35f-44f9-a5b0-0bcaf414dc12.json +roomdata/2d9705f3-2e69-4035-905d-6b11d6ee270b.json +roomdata/09c3072e-3099-4019-a577-7ddc17a9e29d.json +roomdata/b9e8fcee-dce8-40fd-8f3a-d8cb5c3edd70.json +roomdata/6b0dfb3e-c86c-41d1-8526-a172027dbb8d.json +roomdata/83e1ab6b-ad44-469e-a6bf-71c6bebcab4b.json +roomdata/9fa09d68-c483-4320-872e-9e07b049ee37.json +roomdata/35fb741d-b0b1-471a-a5b6-8224f99a1133.json +roomdata/42029218-9142-4286-b184-e17b3734886f.json +roomdata/e83ed91c-4a35-4020-985a-d0306f17117a.json +roomdata/3406a386-c56d-47de-a0ad-aa0ab74d2abb.json +roomdata/cf6d49d3-4f1e-4ec9-836e-049573793ddd.json +roomdata/296fd7ea-4ac5-46e5-beb9-5d27019e3796.json +roomdata/91068a01-bd3e-402c-99aa-e148f9f04c41.json +roomdata/e9f4f98a-0913-4542-a02d-4ed3cec6f09b.json +roomdata/4e8087d2-0c64-4558-b4ff-4be94275a320.json +roomdata/02b94b9a-8990-446a-993a-9b59de987b16.json +roomdata/6dcddc04-c094-4b9b-8c05-b101e8f3dd27.json +roomdata/15083814-fb7b-4791-b5d7-0810dd396b01.json +roomdata/5aef2a82-42a3-495a-9e72-63a9b611e1cb.json +roomdata/43c74bd0-77f6-4a2b-8edb-c227a72abf0f.json +roomdata/ed57833a-01ca-4487-b516-6c3690c6221c.json +roomdata/81cf3e0b-70c5-4803-9169-7e7864b096ce.json +roomdata/8f317c52-6550-42dd-829b-2a477389fe89.json +roomdata/7a594650-2a42-46e5-81a6-9b7d198e9c1c.json +roomdata/250624ee-bb7a-4330-b698-a78f5e44ba99.json +roomdata/00d66020-b34e-429d-9fd3-696bc15cfce2.json +roomdata/a053f4fa-d6b2-4aef-ae3e-97c7eee0252e.json +roomdata/fd34b23c-ce7c-4df6-9f5b-0aa23ba9a758.json +roomdata/a7f00d0f-bbf5-4d80-8eed-f3e28477879c.json +roomdata/9cd523a2-0c7f-4072-a374-9b99d59554ea.json +roomdata/86a3b53b-6ede-43bd-8988-135001149d4b.json +roomdata/ef097340-7c03-407d-b634-7bf7af551d01.json +roomdata/6b7256ae-8673-4c2f-825f-6cd727801ea9.json +roomdata/1e8d4327-7465-4bff-a8c7-505528273985.json +roomdata/05ba6123-3468-4ec3-8e32-0553a8e5d3b2.json +roomdata/a069f006-0728-4952-8d9f-1d318cee60d8.json +roomdata/845aec22-bc9e-4d50-b8de-db67188232e9.json +roomdata/e0608346-08a0-490b-a6d5-96786ebd5d96.json +roomdata/8b4ec0bf-b783-4e66-b5fa-89493ac6efa1.json +roomdata/31766264-1004-492f-9d65-cb5deaff82f0.json +roomdata/8116e928-56f1-4e0b-933a-f86b841938c8.json +roomdata/c1b1eaf0-d6de-4d1f-944b-e1b3205ef7d0.json +roomdata/8c184746-6857-480a-958e-f22e09bb1295.json +roomdata/9139cb1c-b6f3-4bac-92de-909b1eb73449.json +roomdata/07ce87bb-a49a-412b-a8f7-c9dde9f884de.json +roomdata/38affd31-fc6f-44cd-a41e-ae7d0589ba0d.json +roomdata/d712ae5b-903a-4d80-96ee-8ee54b050ea5.json +roomdata/a2c5d503-55e7-4e5c-8fc0-5d37f2ac19bf.json +roomdata/4067578d-c259-4f89-8b88-a891b2decbbf.json +roomdata/f8bee714-de5b-4007-a572-575fcd467c82.json +roomdata/388e95fc-4775-4747-8473-5329fbb8e5cc.json +roomdata/340c5665-e59b-42c1-bf84-8fc03d38981f.json +roomdata/31749ba0-8b9d-4129-b3c9-ee78d9fdb9d7.json +roomdata/8e6409d8-ea3f-4348-ae30-f8f1e15d05b9.json +roomdata/7dd6596f-c647-4144-9eec-fb4690e12251.json +roomdata/c6c65c08-893a-42f7-ad9e-cecc0f0bdeaf.json +roomdata/a1c8fd24-c105-49b6-ba56-51dfbb7023cb.json +roomdata/a0c57185-4e1a-4fdd-979d-6ed0957e78fb.json +roomdata/cf44c95c-950e-49e0-aa4c-82c2b18d0acc.json +roomdata/6fac9602-c596-458f-9750-9b331e2cb845.json +roomdata/11982f7f-703e-4d98-9d27-4e07ba3fef71.json +roomdata/dfe5d13c-3284-4ad3-aadf-9719f2c12a6e.json +roomdata/63634341-8ef3-4197-aafa-17f5875dd307.json +roomdata/c6ebcdb2-4ea8-4387-b997-031bd56f7e3b.json +roomdata/c2ea0a41-d495-437f-86cc-235a71c49f22.json +roomdata/9650cb39-5f22-45f4-86cd-5d197a4266e5.json +roomdata/4b5f4983-0453-4402-821c-804f092d1ecd.json +roomdata/34639497-d991-4137-83c4-db0a25542b71.json