minecraft-mod/Essentials/src/main/kotlin/com/beemer/essentials/event/PlayerEvents.kt

72 lines
2.5 KiB
Kotlin
Raw Normal View History

package com.beemer.essentials.event
import com.beemer.essentials.config.PlayerConfig
import com.beemer.essentials.config.SpawnConfig
import com.beemer.essentials.data.Location
import com.beemer.essentials.util.ChatUtils
import com.beemer.essentials.util.DimensionUtils
import net.minecraft.server.level.ServerPlayer
import net.neoforged.bus.api.SubscribeEvent
import net.neoforged.neoforge.event.entity.player.PlayerEvent
object PlayerEvents {
@SubscribeEvent
fun onPlayerRespawn(event: PlayerEvent.PlayerRespawnEvent) {
val player = event.entity as? ServerPlayer ?: return
val target = SpawnConfig.getCustomSpawn() ?: SpawnConfig.getDefaultSpawn() ?: return
val level = DimensionUtils.getLevelById(player.server, target.dimension) ?: return
player.teleportTo(level, target.x, target.y, target.z, player.yRot, player.xRot)
}
@SubscribeEvent
fun onPlayerLoggedIn(event: PlayerEvent.PlayerLoggedInEvent) {
val player = event.entity as? ServerPlayer ?: return
val existing = PlayerConfig.getPlayer(player)
val isFirstJoin = existing == null
ChatUtils.broadcastJoin(player, isFirstJoin)
PlayerConfig.recordLogin(player)
if (isFirstJoin) {
val spawn = SpawnConfig.getCustomSpawn() ?: SpawnConfig.getDefaultSpawn() ?: return
val level = DimensionUtils.getLevelById(player.server, spawn.dimension) ?: return
player.teleportTo(level, spawn.x, spawn.y, spawn.z, player.yRot, player.xRot)
}
}
@SubscribeEvent
fun onPlayerLoggedOut(event: PlayerEvent.PlayerLoggedOutEvent) {
val player = event.entity as? ServerPlayer ?: return
ChatUtils.broadcastQuit(player)
PlayerConfig.recordLogout(player)
}
@SubscribeEvent
fun onPlayerClone(event: PlayerEvent.Clone) {
if (!event.isWasDeath) return
val oldPlayer = event.original as? ServerPlayer ?: return
val pos = oldPlayer.blockPosition()
val dimension = oldPlayer.level().dimension().location().toString()
val biome = oldPlayer.level().getBiome(pos)
.unwrapKey()
.map { it.location().toString() }
.orElse("minecraft:plains")
val lastLoc = Location(
dimension = dimension,
biome = biome,
x = pos.x.toDouble(),
y = pos.y.toDouble(),
z = pos.z.toDouble()
)
PlayerConfig.recordLastLocation(oldPlayer, lastLoc)
}
}