128 lines
4.8 KiB
Kotlin
128 lines
4.8 KiB
Kotlin
|
|
|
||
|
|
package com.beemer.essentials.nickname
|
||
|
|
|
||
|
|
import com.mojang.brigadier.arguments.StringArgumentType
|
||
|
|
import net.minecraft.ChatFormatting
|
||
|
|
import net.minecraft.commands.Commands
|
||
|
|
import net.minecraft.network.chat.Component
|
||
|
|
import net.minecraft.server.level.ServerPlayer
|
||
|
|
import net.neoforged.bus.api.SubscribeEvent
|
||
|
|
import net.neoforged.neoforge.event.RegisterCommandsEvent
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 닉네임 명령어
|
||
|
|
* /닉네임 변경 <닉네임>
|
||
|
|
* /닉네임 초기화
|
||
|
|
*/
|
||
|
|
object NicknameCommand {
|
||
|
|
@SubscribeEvent
|
||
|
|
fun onRegisterCommands(event: RegisterCommandsEvent) {
|
||
|
|
// 한글 명령어
|
||
|
|
event.dispatcher.register(
|
||
|
|
Commands.literal("닉네임")
|
||
|
|
.then(
|
||
|
|
Commands.literal("변경")
|
||
|
|
.then(
|
||
|
|
Commands.argument("닉네임", StringArgumentType.greedyString())
|
||
|
|
.executes { context ->
|
||
|
|
val player = context.source.entity as? ServerPlayer
|
||
|
|
?: return@executes 0
|
||
|
|
|
||
|
|
val nickname = StringArgumentType.getString(context, "닉네임").trim()
|
||
|
|
executeSet(player, nickname)
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then(
|
||
|
|
Commands.literal("초기화")
|
||
|
|
.executes { context ->
|
||
|
|
val player = context.source.entity as? ServerPlayer
|
||
|
|
?: return@executes 0
|
||
|
|
|
||
|
|
executeReset(player)
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
// 영어 명령어
|
||
|
|
event.dispatcher.register(
|
||
|
|
Commands.literal("nickname")
|
||
|
|
.then(
|
||
|
|
Commands.literal("set")
|
||
|
|
.then(
|
||
|
|
Commands.argument("name", StringArgumentType.greedyString())
|
||
|
|
.executes { context ->
|
||
|
|
val player = context.source.entity as? ServerPlayer
|
||
|
|
?: return@executes 0
|
||
|
|
|
||
|
|
val nickname = StringArgumentType.getString(context, "name").trim()
|
||
|
|
executeSet(player, nickname)
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then(
|
||
|
|
Commands.literal("reset")
|
||
|
|
.executes { context ->
|
||
|
|
val player = context.source.entity as? ServerPlayer
|
||
|
|
?: return@executes 0
|
||
|
|
|
||
|
|
executeReset(player)
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
private fun executeSet(player: ServerPlayer, nickname: String): Int {
|
||
|
|
// 유효성 검사: 길이
|
||
|
|
if (nickname.length < 2 || nickname.length > 16) {
|
||
|
|
player.sendSystemMessage(
|
||
|
|
Component.literal("닉네임은 2~16자 사이여야 합니다.")
|
||
|
|
.withStyle { it.withColor(ChatFormatting.RED) }
|
||
|
|
)
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
// 유효성 검사: 중복
|
||
|
|
if (NicknameDataStore.isNicknameTaken(nickname, player.uuid)) {
|
||
|
|
player.sendSystemMessage(
|
||
|
|
Component.literal("이미 사용 중인 닉네임입니다.")
|
||
|
|
.withStyle { it.withColor(ChatFormatting.RED) }
|
||
|
|
)
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
// 닉네임 저장 및 적용
|
||
|
|
NicknameDataStore.setNickname(player.uuid, nickname)
|
||
|
|
NicknameManager.applyNickname(player, nickname)
|
||
|
|
|
||
|
|
player.sendSystemMessage(
|
||
|
|
Component.literal("닉네임이 ")
|
||
|
|
.withStyle { it.withColor(ChatFormatting.GOLD) }
|
||
|
|
.append(Component.literal(nickname).withStyle { it.withColor(ChatFormatting.AQUA) })
|
||
|
|
.append(Component.literal("(으)로 변경되었습니다.").withStyle { it.withColor(ChatFormatting.GOLD) })
|
||
|
|
)
|
||
|
|
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
private fun executeReset(player: ServerPlayer): Int {
|
||
|
|
if (!NicknameDataStore.hasNickname(player.uuid)) {
|
||
|
|
player.sendSystemMessage(
|
||
|
|
Component.literal("설정된 닉네임이 없습니다.")
|
||
|
|
.withStyle { it.withColor(ChatFormatting.RED) }
|
||
|
|
)
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
NicknameDataStore.removeNickname(player.uuid)
|
||
|
|
NicknameManager.removeNickname(player)
|
||
|
|
|
||
|
|
player.sendSystemMessage(
|
||
|
|
Component.literal("닉네임이 초기화되었습니다.")
|
||
|
|
.withStyle { it.withColor(ChatFormatting.GOLD) }
|
||
|
|
)
|
||
|
|
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
}
|