package com.odtheking.odin.commands import com.github.stivais.commodore.Commodore import com.github.stivais.commodore.utils.GreedyString import com.odtheking.odin.OdinMod.mc import com.odtheking.odin.OdinMod.scope import com.odtheking.odin.clickgui.settings.impl.label import com.odtheking.odin.config.DungeonWaypointConfig import com.odtheking.odin.features.impl.dungeon.dungeonwaypoints.* import com.odtheking.odin.utils.Color import com.odtheking.odin.utils.modMessage import com.odtheking.odin.utils.network.WebUtils import com.odtheking.odin.utils.setClipboardContent import kotlinx.coroutines.launch val dungeonWaypointsCommand = Commodore("dwp", "dungeonwaypoints") { runs { mc.schedule { mc.setScreenAndShow(WaypointPackSelectorScreen(mc.gui.screen())) } } literal("fill").runs { DungeonWaypoints.filled = !DungeonWaypoints.filled modMessage("Fill status changed to: ${DungeonWaypoints.filled}") } literal("size").runs { sizeX: Double, sizeY: Double, sizeZ: Double -> fun valid(size: Double) = size in 0.1..1.0 if (!valid(sizeX) || !valid(sizeY) || !valid(sizeZ)) return@runs modMessage("§cSize must be between 0.1 and 1.0!") DungeonWaypoints.sizeX = sizeX DungeonWaypoints.sizeY = sizeY DungeonWaypoints.sizeZ = sizeZ modMessage("Size changed to: ${sizeX}, ${sizeY}, $sizeZ") } literal("resetsecrets").runs { SecretWaypoints.resetSecrets() modMessage("§aSecrets have been reset!") } literal("type").runs { type: String -> DungeonWaypoints.WaypointType.getByName(type)?.let { DungeonWaypoints.waypointType = it modMessage("Waypoint type changed to: ${it.label}") } ?: modMessage("§cInvalid waypoint type!") } literal("useblocksize").runs { DungeonWaypoints.useBlockSize = !DungeonWaypoints.useBlockSize modMessage("Use block size status changed to: ${DungeonWaypoints.useBlockSize}") } literal("depth").runs { DungeonWaypoints.depthCheck = !DungeonWaypoints.depthCheck modMessage("Next waypoint will be added with depth check: ${DungeonWaypoints.depthCheck}") } literal("color").runs { hex: String -> if (!hex.matches(Regex("[0-9A-Fa-f]{8}"))) return@runs modMessage("Color hex not properly formatted! Use format RRGGBBAA") DungeonWaypoints.color = Color(hex) modMessage("Color changed to: $hex") } literal("export").runs { scope.launch { val encoded = DungeonWaypointConfig.encodeWaypoints(DungeonWaypoints.exportEditableWaypoints()) if (encoded != null) { setClipboardContent(encoded) modMessage("Wrote waypoint config to clipboard.") } else modMessage("Failed to write waypoint config to clipboard.") } } literal("import").runs { importString: GreedyString? -> scope.launch { val input = (importString?.let { if (importString.string.startsWith("https://")) WebUtils.fetchString(importString.string).getOrNull() else importString.string } ?: mc.keyboardHandler.clipboard) val waypoints = DungeonWaypointConfig.decodeWaypoints(input.trim().trim { it == '\n' }) ?: return@launch modMessage("§cFailed to decode waypoints from clipboard. §fIs the data valid?") DungeonWaypoints.importEditableWaypoints(waypoints) modMessage("Imported waypoints from clipboard!${if (!DungeonWaypoints.enabled) "§7(Make sure to enable the DungeonWayPoints module)" else ""}") } } }