パーミッションの退出時保存
This commit is contained in:
parent
1dfaf8494c
commit
fc004bc09e
|
|
@ -1,13 +1,20 @@
|
|||
package net.hareworks.on_join_spawn
|
||||
|
||||
import io.papermc.paper.event.player.AsyncPlayerSpawnLocationEvent
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
import java.io.File
|
||||
import java.util.UUID
|
||||
|
||||
class App : JavaPlugin(), Listener {
|
||||
private lateinit var ignoredDir: File
|
||||
|
||||
override fun onEnable() {
|
||||
ignoredDir = File(dataFolder, "ignored")
|
||||
ignoredDir.mkdirs()
|
||||
server.pluginManager.registerEvents(this, this)
|
||||
logger.info("on-join-spawn plugin enabled")
|
||||
}
|
||||
|
|
@ -16,32 +23,36 @@ class App : JavaPlugin(), Listener {
|
|||
logger.info("on-join-spawn plugin disabled")
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun onPlayerJoin(event: PlayerJoinEvent) {
|
||||
@EventHandler
|
||||
fun onPlayerQuit(event: PlayerQuitEvent) {
|
||||
val player = event.player
|
||||
|
||||
// Check if player has ignore permission
|
||||
val file = File(ignoredDir, "${player.uniqueId}")
|
||||
if (player.hasPermission("onjoinspawn.ignore")) {
|
||||
return
|
||||
file.createNewFile()
|
||||
} else {
|
||||
file.delete()
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun onPlayerSpawnLocation(event: AsyncPlayerSpawnLocationEvent) {
|
||||
val uuid = event.connection.profile.id ?: return
|
||||
if (isIgnored(uuid)) return
|
||||
|
||||
val spawnLocation = event.spawnLocation.world.spawnLocation.clone()
|
||||
|
||||
// Get the world's spawn location
|
||||
val spawnLocation = player.world.spawnLocation.clone()
|
||||
|
||||
// Add 0.5 to X and Z coordinates if they are whole numbers
|
||||
// This centers the player on the block
|
||||
val x = spawnLocation.x
|
||||
val z = spawnLocation.z
|
||||
|
||||
|
||||
if (x == x.toInt().toDouble()) {
|
||||
spawnLocation.x = x + 0.5
|
||||
}
|
||||
if (z == z.toInt().toDouble()) {
|
||||
spawnLocation.z = z + 0.5
|
||||
}
|
||||
|
||||
// Teleport player to spawn immediately
|
||||
// This happens before the player is fully loaded into the world
|
||||
player.teleportAsync(spawnLocation)
|
||||
|
||||
event.spawnLocation = spawnLocation
|
||||
}
|
||||
|
||||
private fun isIgnored(uuid: UUID): Boolean = File(ignoredDir, "$uuid").exists()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user