GhostDisplays/src/main/kotlin/net/hareworks/ghostdisplays/api/DisplayController.kt
2026-03-30 19:38:18 +09:00

43 lines
1.6 KiB
Kotlin

package net.hareworks.ghostdisplays.api
import net.hareworks.ghostdisplays.api.audience.AudienceAction
import net.hareworks.ghostdisplays.api.audience.AudiencePredicate
import net.hareworks.ghostdisplays.api.click.ClickPriority
import net.hareworks.ghostdisplays.api.click.DisplayClickHandler
import net.hareworks.ghostdisplays.api.click.HandlerRegistration
import net.hareworks.ghostdisplays.internal.fake.FakeBlockDisplay
import net.hareworks.ghostdisplays.internal.fake.FakeDisplay
import net.hareworks.ghostdisplays.internal.fake.FakeItemDisplay
import net.hareworks.ghostdisplays.internal.fake.FakeTextDisplay
import org.bukkit.Location
import org.bukkit.entity.Player
import java.util.UUID
interface DisplayController {
val entityId: Int
val displayType: DisplayType
val location: Location
fun show(player: Player)
fun hide(player: Player)
fun isViewing(playerId: UUID): Boolean
fun viewerIds(): Set<UUID>
fun updateText(mutator: (FakeTextDisplay) -> Unit)
fun updateBlock(mutator: (FakeBlockDisplay) -> Unit)
fun updateItem(mutator: (FakeItemDisplay) -> Unit)
fun updateDisplay(mutator: (FakeDisplay) -> Unit)
fun teleport(location: Location)
fun setBaseVisibility(visible: Boolean)
fun addAudience(predicate: AudiencePredicate): HandlerRegistration
fun addAudienceRule(predicate: AudiencePredicate, action: AudienceAction): HandlerRegistration
fun clearAudienceRules()
fun refreshAudience(target: Player? = null)
fun needsPeriodicUpdate(): Boolean = false
fun destroy()
fun onClick(priority: ClickPriority = ClickPriority.NORMAL, handler: DisplayClickHandler): HandlerRegistration
}