feat: 可視切り替えのtick
This commit is contained in:
parent
bc774765c5
commit
4343d01d11
|
|
@ -1 +1 @@
|
|||
Subproject commit 9af293122b860d8c65d68a2bdc02a9c2c5e206cc
|
||||
Subproject commit e0613cd05278222b0a2ac1c79a2d4ef317c9cea1
|
||||
|
|
@ -39,6 +39,10 @@ class GhostDisplaysPlugin : JavaPlugin() {
|
|||
|
||||
instance = this
|
||||
logger.info("GhostDisplays ready: ${displayRegistry.controllerCount()} controllers active.")
|
||||
|
||||
server.scheduler.runTaskTimer(this, Runnable {
|
||||
displayRegistry.tick()
|
||||
}, 10L, 10L)
|
||||
}
|
||||
|
||||
override fun onDisable() {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import org.bukkit.Bukkit
|
|||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
|
||||
|
|
@ -28,10 +27,12 @@ class EditSessionManager(
|
|||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onPlayerChat(event: AsyncPlayerChatEvent) {
|
||||
fun onPlayerChat(event: io.papermc.paper.event.player.AsyncChatEvent) {
|
||||
val displayId = sessions[event.player.uniqueId] ?: return
|
||||
event.isCancelled = true
|
||||
val message = event.message
|
||||
val serializer = net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer.plainText()
|
||||
val message = serializer.serialize(event.message())
|
||||
|
||||
if (message.equals("cancel", ignoreCase = true)) {
|
||||
sessions.remove(event.player.uniqueId)
|
||||
event.player.sendMessage("GhostDisplays: editing for '$displayId' cancelled.")
|
||||
|
|
|
|||
|
|
@ -81,4 +81,19 @@ internal class DisplayRegistry : Listener {
|
|||
if (controllers.isEmpty()) return
|
||||
controllers.forEach { it.refreshAudience(player) }
|
||||
}
|
||||
|
||||
fun tick() {
|
||||
val players = org.bukkit.Bukkit.getOnlinePlayers()
|
||||
if (players.isEmpty()) return
|
||||
val controllers = controllersSnapshot()
|
||||
if (controllers.isEmpty()) return
|
||||
|
||||
// 最適化: 動的な評価が必要なコントローラーだけ抽出できれば良いが、
|
||||
// 現状はシンプルに全走査する。
|
||||
players.forEach { player ->
|
||||
controllers.forEach { controller ->
|
||||
controller.refreshAudience(player)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user