init 13
This commit is contained in:
@@ -164,55 +164,64 @@ class MinehuntCommand(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val rule = args[1]
|
val rule = args[1]
|
||||||
when (rule) {
|
return when (rule) {
|
||||||
"hunter_respawn_cd" -> {
|
"hunter_respawn_cd" -> {
|
||||||
if (args.size == 2) {
|
getOrChangeRule(args, flag, sender, RuleKey.HUNTER_RESPAWN_CD)
|
||||||
// 获取命令详情
|
|
||||||
if (flag) {
|
|
||||||
sendRuleInfo(sender, RuleKey.HUNTER_READY_CD)
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
} else if (args.size == 3) {
|
|
||||||
if (flag) {
|
|
||||||
if (console.gameRules.setGameRuleValueSafe(RuleKey.HUNTER_READY_CD, args[2])) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (flag) {
|
|
||||||
sender.sendMessage(Component.text("参数过多"))
|
|
||||||
} else {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"hunter_ready_cd" -> {
|
"hunter_ready_cd" -> {
|
||||||
if (args.size == 2) {
|
getOrChangeRule(args, flag, sender, RuleKey.HUNTER_READY_CD)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"friendly_fire" -> {
|
"friendly_fire" -> {
|
||||||
if (args.size == 2) {
|
getOrChangeRule(args, flag, sender, RuleKey.FRIENDLY_FIRE)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
return if (flag) {
|
if (flag) {
|
||||||
sender.sendMessage(Component.text("不存在的规则项"))
|
sender.sendMessage(Component.text("不存在的规则项"))
|
||||||
null
|
null
|
||||||
} else {
|
} else {
|
||||||
if (args.size == 2) subCommand.filter { it.startsWith(args[0]) } else null
|
if (args.size == 2) rules.filter { it.startsWith(args[0]) } else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取或改变游戏规则
|
||||||
|
*/
|
||||||
|
private fun getOrChangeRule(
|
||||||
|
args: List<String>,
|
||||||
|
flag: Boolean,
|
||||||
|
sender: CommandSender,
|
||||||
|
ruleKey: RuleKey<*>
|
||||||
|
): List<String>? {
|
||||||
|
return if (args.size == 2) {
|
||||||
|
// 获取规则详情
|
||||||
|
if (flag) {
|
||||||
|
sendRuleInfo(sender, ruleKey)
|
||||||
|
}
|
||||||
|
null
|
||||||
|
} else if (args.size == 3) {
|
||||||
|
// 给规则赋值
|
||||||
|
if (flag) {
|
||||||
|
if (console.gameRules.setGameRuleValueSafe(ruleKey, args[2])) {
|
||||||
|
sender.sendMessage(Component.text("规则修改成功", NamedTextColor.GREEN))
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(Component.text("不合适的值", NamedTextColor.RED))
|
||||||
|
}
|
||||||
|
null
|
||||||
|
} else {
|
||||||
|
ruleKey.recommendedValues
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 参数过多
|
||||||
|
if (flag) {
|
||||||
|
sender.sendMessage(Component.text("参数过多"))
|
||||||
|
}
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ class GameRules internal constructor() {
|
|||||||
setRuleValue(FRIENDLY_FIRE, true)
|
setRuleValue(FRIENDLY_FIRE, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : Any> setGameRuleValueSafe(rule: RuleKey<T>, value: String): Boolean {
|
fun <T> setGameRuleValueSafe(rule: RuleKey<T>, value: String): Boolean {
|
||||||
val okValue = rule.validate(value) ?: return false
|
val okValue: T = rule.validate(value) ?: return false
|
||||||
setRuleValue(rule, okValue)
|
setRuleValue(rule, okValue)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : Any> setRuleValue(rule: RuleKey<T>, value: T) {
|
private fun <T> setRuleValue(rule: RuleKey<T>, value: T) {
|
||||||
map[rule] = value
|
map[rule] = value!!
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
|||||||
@@ -24,10 +24,15 @@ class RuleKey<T> private constructor(
|
|||||||
*/
|
*/
|
||||||
val typeInfo: String,
|
val typeInfo: String,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 命令补全时的推荐值
|
||||||
|
*/
|
||||||
|
val recommendedValues: List<String>,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对输入的String进行校验,成功则返回转换后的值,失败则返回null
|
* 对输入的String进行校验,成功则返回转换后的值,失败则返回null
|
||||||
*/
|
*/
|
||||||
val validate: (String) -> T?
|
val validate: (String) -> T?,
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
* 这里存放每一个规则的Key
|
* 这里存放每一个规则的Key
|
||||||
@@ -41,22 +46,31 @@ class RuleKey<T> private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val HUNTER_READY_CD = RuleKey("hunter_ready_cd", "猎人出生倒计时(秒)", Int::class.java, "Integer") {
|
val HUNTER_READY_CD =
|
||||||
try {
|
RuleKey("hunter_ready_cd", "猎人出生倒计时(秒)", Int::class.java, "Integer", listOf("0", "15", "30")) {
|
||||||
val i = it.toInt()
|
try {
|
||||||
if (i in 0..120) i else null
|
val i = it.toInt()
|
||||||
} catch (ex: NumberFormatException) {
|
if (i in 0..120) i else null
|
||||||
null
|
} catch (ex: NumberFormatException) {
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
val HUNTER_RESPAWN_CD =
|
||||||
val HUNTER_RESPAWN_CD = RuleKey("hunter_respawn_cd", "猎人重生倒计时(秒)", Int::class.java, "Integer") {
|
RuleKey("hunter_respawn_cd", "猎人重生倒计时(秒)", Int::class.java, "Integer", listOf("0, 15, 30")) {
|
||||||
try {
|
try {
|
||||||
val i = it.toInt()
|
val i = it.toInt()
|
||||||
if (i in 0..120) i else null
|
if (i in 0..120) i else null
|
||||||
} catch (ex: NumberFormatException) {
|
} catch (ex: NumberFormatException) {
|
||||||
null
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
val FRIENDLY_FIRE = RuleKey(
|
||||||
val FRIENDLY_FIRE = RuleKey("friendly_fire", "队友之间是否有伤害", Boolean::class.java, "Boolean", boolValidate)
|
"friendly_fire",
|
||||||
|
"队友之间是否有伤害",
|
||||||
|
Boolean::class.java,
|
||||||
|
"Boolean",
|
||||||
|
listOf("true", "false"),
|
||||||
|
boolValidate
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user