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
|
instance = this
|
||||||
logger.info("GhostDisplays ready: ${displayRegistry.controllerCount()} controllers active.")
|
logger.info("GhostDisplays ready: ${displayRegistry.controllerCount()} controllers active.")
|
||||||
|
|
||||||
|
server.scheduler.runTaskTimer(this, Runnable {
|
||||||
|
displayRegistry.tick()
|
||||||
|
}, 10L, 10L)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDisable() {
|
override fun onDisable() {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import org.bukkit.Bukkit
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
import org.bukkit.plugin.java.JavaPlugin
|
import org.bukkit.plugin.java.JavaPlugin
|
||||||
|
|
||||||
|
|
@ -28,10 +27,12 @@ class EditSessionManager(
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
fun onPlayerChat(event: AsyncPlayerChatEvent) {
|
fun onPlayerChat(event: io.papermc.paper.event.player.AsyncChatEvent) {
|
||||||
val displayId = sessions[event.player.uniqueId] ?: return
|
val displayId = sessions[event.player.uniqueId] ?: return
|
||||||
event.isCancelled = true
|
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)) {
|
if (message.equals("cancel", ignoreCase = true)) {
|
||||||
sessions.remove(event.player.uniqueId)
|
sessions.remove(event.player.uniqueId)
|
||||||
event.player.sendMessage("GhostDisplays: editing for '$displayId' cancelled.")
|
event.player.sendMessage("GhostDisplays: editing for '$displayId' cancelled.")
|
||||||
|
|
|
||||||
|
|
@ -81,4 +81,19 @@ internal class DisplayRegistry : Listener {
|
||||||
if (controllers.isEmpty()) return
|
if (controllers.isEmpty()) return
|
||||||
controllers.forEach { it.refreshAudience(player) }
|
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