HTTPS
https://git.nageyqma.icu/nageyqma/odin_next.git
SSH
git@git.nageyqma.icu:nageyqma/odin_next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
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
}
}