nageyqma·git
HTTPS https://git.nageyqma.icu/nageyqma/odin_next.git SSH git@git.nageyqma.icu:nageyqma/odin_next.git

HTTPS 链接可直接 git clone;推送代码请使用 SSH。

5.2 KB · 120 行raw
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
package com.odtheking.odin.commands

import com.github.stivais.commodore.Commodore
import com.github.stivais.commodore.utils.GreedyString
import com.github.stivais.commodore.utils.SyntaxException
import com.odtheking.odin.OdinMod.mc
import com.odtheking.odin.features.ModuleManager
import com.odtheking.odin.features.impl.dungeon.PositionalMessages
import com.odtheking.odin.features.impl.dungeon.PositionalMessages.posMessageStrings
import com.odtheking.odin.utils.Color
import com.odtheking.odin.utils.Colors
import com.odtheking.odin.utils.modMessage
import kotlin.math.floor

private val colorSuggestions = listOf("darkblue", "darkgreen", "darkaqua", "darkred", "darkpurple",
    "gold", "gray", "darkgray", "blue", "green", "aqua", "red",
    "lightpurple", "yellow", "white", "black")

val posMsgCommand = Commodore("posmsg") {
    literal("add") {
        literal("at").executable {
            param("x") {
                suggests { listOfNotNull(mc.player?.x?.let { floor(it).toString() }) }
            }
            param("y") {
                suggests { listOfNotNull(mc.player?.y?.let { floor(it).toString() }) }
            }
            param("z") {
                suggests { listOfNotNull(mc.player?.z?.let { floor(it).toString() }) }
            }
            param("color") {
                suggests { colorSuggestions }
            }
            param("send") {
                suggests { listOf("true", "false") }
            }

            runs { x: Double, y: Double, z: Double, delay: Int, distance: Double, color: String, dontSend: Boolean, message: GreedyString ->
                if (posMessageStrings.any { it.message == message.string }) return@runs
                val color = getColorFromString(color) ?: return@runs modMessage("Unknown color $color")
                posMessageStrings.add(PositionalMessages.PosMessage(x, y, z, null, null, null, delay, distance, color, message.string, dontSend))
                modMessage("Message \"${message}\" added at $x, $y, $z, with ${delay}t delay, triggered up to $distance blocks away.")
                ModuleManager.saveConfigurations()
            }
        }

        literal("in").executable {
            param("color") {
                suggests { colorSuggestions }
            }
            param("send") {
                suggests { listOf("true", "false") }
            }

            runs { x: Double, y: Double, z: Double, x2: Double, y2: Double, z2: Double, delay: Int, color: String, dontSend: Boolean, message: GreedyString ->
                if (posMessageStrings.any { it.message == message.string }) return@runs
                val color = getColorFromString(color) ?: return@runs modMessage("Unknown color $color")
                posMessageStrings.add(PositionalMessages.PosMessage(x, y, z, x2, y2, z2, delay, null, color, message.string, dontSend))
                modMessage("Message \"${message}\" added in $x, $y, $z, $x2, $y2, $z2, with ${delay}t delay.")
                ModuleManager.saveConfigurations()
            }
        }
    }

    literal("remove").executable {
        param("message") {
            parser { greedy: GreedyString ->
                val input = greedy.string.trim()
                val found = posMessageStrings.any { it.message.equals(input, true) }
                if (!found) throw SyntaxException("Message not found. Available messages: ${posMessageStrings.joinToString { "\"${it.message}\"" }}")
                input
            }
            suggests {
                posMessageStrings.mapNotNull { it.message }.distinct()
            }
        }

        runs { message: String ->
            val removed = posMessageStrings.filter { it.message.equals(message, true) }
            posMessageStrings.removeAll { it.message.equals(message, true) }
            modMessage("Removed ${removed.size} Positional Message(s): \"$message\"")
            ModuleManager.saveConfigurations()
        }
    }

    literal("clear").runs {
        modMessage("Cleared List")
        posMessageStrings.clear()
        ModuleManager.saveConfigurations()
    }

    literal("list").runs {
        val output = posMessageStrings.withIndex().joinToString(separator = "\n") { (index, it) ->
            "${index + 1}: ${it.x}, ${it.y}, ${it.z}, ${it.x2}, ${it.y2}, ${it.z2}, ${it.delay}, ${it.distance}, ${it.color.hex()}, send=${it.dontSend}, \"${it.message}\""
        }
        modMessage(if (posMessageStrings.isEmpty()) "Positional Message list is empty!" else "Positonal Message list:\n$output")
    }
}

fun getColorFromString(color: String): Color? {
    return when (color.uppercase()) {
        "DARKBLUE" -> Colors.MINECRAFT_DARK_BLUE
        "DARKGREEN" -> Colors.MINECRAFT_DARK_GREEN
        "DARKAQUA" -> Colors.MINECRAFT_DARK_AQUA
        "DARKRED" -> Colors.MINECRAFT_DARK_RED
        "DARKPURPLE" -> Colors.MINECRAFT_DARK_PURPLE
        "GOLD" -> Colors.MINECRAFT_GOLD
        "GRAY" -> Colors.MINECRAFT_GRAY
        "DARKGRAY" -> Colors.MINECRAFT_DARK_GRAY
        "BLUE" -> Colors.MINECRAFT_BLUE
        "GREEN" -> Colors.MINECRAFT_GREEN
        "AQUA" -> Colors.MINECRAFT_AQUA
        "RED" -> Colors.MINECRAFT_RED
        "LIGHTPURPLE" -> Colors.MINECRAFT_LIGHT_PURPLE
        "YELLOW" -> Colors.MINECRAFT_YELLOW
        "WHITE" -> Colors.WHITE
        "BLACK" -> Colors.BLACK
        else -> null
    }
}