パーミッションの退出時保存

This commit is contained in:
Keisuke Hirata 2026-04-09 23:01:43 +09:00
parent 1dfaf8494c
commit fc004bc09e

View File

@ -1,13 +1,20 @@
package net.hareworks.on_join_spawn package net.hareworks.on_join_spawn
import io.papermc.paper.event.player.AsyncPlayerSpawnLocationEvent
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority import org.bukkit.event.EventPriority
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerQuitEvent
import org.bukkit.plugin.java.JavaPlugin import org.bukkit.plugin.java.JavaPlugin
import java.io.File
import java.util.UUID
class App : JavaPlugin(), Listener { class App : JavaPlugin(), Listener {
private lateinit var ignoredDir: File
override fun onEnable() { override fun onEnable() {
ignoredDir = File(dataFolder, "ignored")
ignoredDir.mkdirs()
server.pluginManager.registerEvents(this, this) server.pluginManager.registerEvents(this, this)
logger.info("on-join-spawn plugin enabled") logger.info("on-join-spawn plugin enabled")
} }
@ -16,32 +23,36 @@ class App : JavaPlugin(), Listener {
logger.info("on-join-spawn plugin disabled") logger.info("on-join-spawn plugin disabled")
} }
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler
fun onPlayerJoin(event: PlayerJoinEvent) { fun onPlayerQuit(event: PlayerQuitEvent) {
val player = event.player val player = event.player
val file = File(ignoredDir, "${player.uniqueId}")
// Check if player has ignore permission
if (player.hasPermission("onjoinspawn.ignore")) { 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 x = spawnLocation.x
val z = spawnLocation.z val z = spawnLocation.z
if (x == x.toInt().toDouble()) { if (x == x.toInt().toDouble()) {
spawnLocation.x = x + 0.5 spawnLocation.x = x + 0.5
} }
if (z == z.toInt().toDouble()) { if (z == z.toInt().toDouble()) {
spawnLocation.z = z + 0.5 spawnLocation.z = z + 0.5
} }
// Teleport player to spawn immediately event.spawnLocation = spawnLocation
// This happens before the player is fully loaded into the world
player.teleportAsync(spawnLocation)
} }
private fun isIgnored(uuid: UUID): Boolean = File(ignoredDir, "$uuid").exists()
} }