72 lines
2.5 KiB
Kotlin
72 lines
2.5 KiB
Kotlin
|
|
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)
|
||
|
|
}
|
||
|
|
}
|