minecraft-mod/Essentials/src/main/kotlin/com/beemer/essentials/command/SpawnCommand.kt
Caadiq 2bf161bf15 refactor: SoundUtils 유틸리티로 사운드 재생 로직 중앙화
- 새 파일: SoundUtils.kt - 모든 사운드 재생 함수 통합
- 새 파일: LocationUtils.kt - 플레이어 위치 변환 유틸리티
- 10개 파일에서 중복 사운드 재생 코드 제거 (약 150줄)
- GUI: EssentialsMenuGui, CoordinateGui, TeleportGui, AntimobGui
- Command: SpawnCommand, PlayerCommand, CoordinateCommand, TeleportCommand
- Event/Util: PlayerEvents, MessageUtils
2025-12-30 19:40:36 +09:00

136 lines
8.2 KiB
Kotlin

package com.beemer.essentials.command
import com.beemer.essentials.config.PlayerConfig
import com.beemer.essentials.config.SpawnConfig
import com.beemer.essentials.data.Location
import com.beemer.essentials.util.CommandUtils
import com.beemer.essentials.util.DimensionUtils
import com.beemer.essentials.util.MessageUtils
import com.beemer.essentials.util.SoundUtils
import net.minecraft.commands.Commands
import net.neoforged.bus.api.SubscribeEvent
import net.neoforged.neoforge.event.RegisterCommandsEvent
object SpawnCommand {
@SubscribeEvent
fun onRegisterCommands(event: RegisterCommandsEvent) {
listOf("setspawn", "스폰설정").forEach { command ->
event.dispatcher.register(
Commands.literal(command).executes { context ->
val player =
CommandUtils.getPlayerOrSendFailure(context.source)
?: return@executes 0
val exactPos = player.position()
val blockPos = player.blockPosition()
val dimension =
player.level().dimension().location().toString()
val biome =
player.level()
.getBiome(blockPos)
.unwrapKey()
.map { it.location().toString() }
.orElse("minecraft:plains")
val location =
Location(
dimension = dimension,
biome = biome,
x = exactPos.x,
y = exactPos.y,
z = exactPos.z
)
SpawnConfig.setCustomSpawn(location)
MessageUtils.sendSuccess(player, "스폰 지점이 현재 위치로 설정되었습니다.")
1
}
)
}
listOf("spawn", "스폰", "넴주").forEach { command ->
event.dispatcher.register(
Commands.literal(command).executes { context ->
val player =
CommandUtils.getPlayerOrSendFailure(context.source)
?: return@executes 0
val target =
SpawnConfig.getCustomSpawn()
?: SpawnConfig.getDefaultSpawn()
target?.let { t ->
val level =
DimensionUtils.getLevelById(
player.server,
t.dimension
)
level?.let { l ->
val exactPos = player.position()
val blockPos = player.blockPosition()
val currentDimension =
player.level()
.dimension()
.location()
.toString()
val currentBiome =
player.level()
.getBiome(blockPos)
.unwrapKey()
.map {
it.location()
.toString()
}
.orElse("minecraft:plains")
val currentLocation =
Location(
dimension =
currentDimension,
biome = currentBiome,
x = exactPos.x,
y = exactPos.y,
z = exactPos.z
)
PlayerConfig.recordLastLocation(
player,
currentLocation
)
player.teleportTo(
l,
t.x,
t.y,
t.z,
player.yRot,
player.xRot
)
// 텔레포트 사운드 재생
SoundUtils.playTeleport(player)
MessageUtils.sendSuccess(
player,
"스폰으로 이동했습니다."
)
}
}
1
}
)
}
listOf("delspawn", "스폰삭제").forEach { command ->
event.dispatcher.register(
Commands.literal(command).executes { context ->
val player =
CommandUtils.getPlayerOrSendFailure(context.source)
?: return@executes 0
SpawnConfig.removeCustomSpawn()
MessageUtils.sendInfo(player, "스폰 지점이 기본 스폰 지점으로 변경되었습니다.")
1
}
)
}
}
}