WIP: BookUI
This commit is contained in:
parent
8f6f505cb4
commit
2621d28e67
|
|
@ -221,53 +221,52 @@ class SectorListener(
|
|||
return
|
||||
}
|
||||
|
||||
// Open GUI
|
||||
val gui = org.bukkit.Bukkit.createInventory(null, 27, Component.text("Sector Manager (#${sectorId})", NamedTextColor.BLACK))
|
||||
// Create Written Book for UI
|
||||
val book = org.bukkit.inventory.ItemStack(Material.WRITTEN_BOOK)
|
||||
val meta = book.itemMeta as org.bukkit.inventory.meta.BookMeta
|
||||
|
||||
// Info Item with Ranges
|
||||
meta.title(Component.text("Sector Manager"))
|
||||
meta.author(Component.text("System"))
|
||||
|
||||
// Build Page Content
|
||||
val content = Component.text()
|
||||
.append(Component.text("Sector Core @ ${sector.x},${sector.y},${sector.z}\n\n", NamedTextColor.BLACK))
|
||||
|
||||
// Actions Row 1
|
||||
content.append(
|
||||
Component.text("[Activate]", NamedTextColor.DARK_GREEN)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector activate $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to activate sector")))
|
||||
)
|
||||
content.append(Component.text(" "))
|
||||
content.append(
|
||||
Component.text("[Destroy]\n", NamedTextColor.RED)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector cancel $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to destroy sector")))
|
||||
)
|
||||
|
||||
// Actions Row 2
|
||||
content.append(
|
||||
Component.text("[Get Tool]\n\n", NamedTextColor.DARK_AQUA)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector givetool $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to get selection tool")))
|
||||
)
|
||||
|
||||
// Ranges List
|
||||
val ranges = sectorService.getRanges(sectorId)
|
||||
val rangeLore = ranges.map { Component.text(" - [${it.id}] ${it.type}", NamedTextColor.GRAY) }
|
||||
val infoLore = mutableListOf<Component>()
|
||||
infoLore.add(Component.text("Sector ID: $sectorId", NamedTextColor.WHITE))
|
||||
infoLore.addAll(rangeLore)
|
||||
|
||||
gui.setItem(4, createGuiItem(
|
||||
Material.PAPER,
|
||||
Component.text("Sector Info", NamedTextColor.GOLD),
|
||||
infoLore,
|
||||
sectorId,
|
||||
"info"
|
||||
))
|
||||
if (ranges.isEmpty()) {
|
||||
content.append(Component.text("Parts: None", NamedTextColor.GRAY))
|
||||
} else {
|
||||
content.append(Component.text("Parts:", NamedTextColor.BLACK))
|
||||
ranges.forEach { range ->
|
||||
content.append(Component.text("\n- [${range.id}] ${range.type}", NamedTextColor.DARK_GRAY))
|
||||
}
|
||||
}
|
||||
|
||||
// Get Selection Tool
|
||||
gui.setItem(11, createGuiItem(
|
||||
Material.FLINT,
|
||||
Component.text("Get Selection Tool", NamedTextColor.AQUA),
|
||||
listOf(Component.text("Click to receive the selection tool.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"give_tool"
|
||||
))
|
||||
meta.addPages(content.build())
|
||||
book.itemMeta = meta
|
||||
|
||||
// Activate
|
||||
gui.setItem(13, createGuiItem(
|
||||
Material.LIME_CONCRETE,
|
||||
Component.text("Activate Sector", NamedTextColor.GREEN),
|
||||
listOf(Component.text("Click to activate this sector.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"activate"
|
||||
))
|
||||
|
||||
// Cancel / Destroy
|
||||
gui.setItem(15, createGuiItem(
|
||||
Material.RED_CONCRETE,
|
||||
Component.text("Cancel / Destroy", NamedTextColor.RED),
|
||||
listOf(Component.text("Click to destroy this sector.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"cancel"
|
||||
))
|
||||
|
||||
player.openInventory(gui)
|
||||
|
||||
player.openBook(book)
|
||||
event.isCancelled = true
|
||||
}
|
||||
|
||||
|
|
@ -420,47 +419,4 @@ class SectorListener(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onInventoryClick(event: org.bukkit.event.inventory.InventoryClickEvent) {
|
||||
val item = event.currentItem ?: return
|
||||
val meta = item.itemMeta ?: return
|
||||
val pluginKey = NamespacedKey(plugin, "gui_action")
|
||||
|
||||
if (!meta.persistentDataContainer.has(pluginKey, PersistentDataType.STRING)) return
|
||||
|
||||
event.isCancelled = true // Prevent taking items
|
||||
|
||||
val player = event.whoClicked as? Player ?: return
|
||||
val action = meta.persistentDataContainer.get(pluginKey, PersistentDataType.STRING)
|
||||
val sectorKey = NamespacedKey(plugin, "sector_id")
|
||||
val sectorId = meta.persistentDataContainer.get(sectorKey, PersistentDataType.INTEGER) ?: return
|
||||
|
||||
player.closeInventory()
|
||||
|
||||
when (action) {
|
||||
"give_tool" -> player.performCommand("landsector givetool $sectorId")
|
||||
"activate" -> player.performCommand("landsector activate $sectorId")
|
||||
"cancel" -> player.performCommand("landsector cancel $sectorId")
|
||||
"info" -> {
|
||||
player.playSound(player.location, Sound.UI_BUTTON_CLICK, 1f, 1f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun createGuiItem(material: Material, name: Component, lore: List<Component>, sectorId: Int, action: String): org.bukkit.inventory.ItemStack {
|
||||
val item = org.bukkit.inventory.ItemStack(material)
|
||||
val meta = item.itemMeta
|
||||
meta.displayName(name)
|
||||
meta.lore(lore)
|
||||
|
||||
val actionKey = NamespacedKey(plugin, "gui_action")
|
||||
val sectorKey = NamespacedKey(plugin, "sector_id")
|
||||
|
||||
meta.persistentDataContainer.set(actionKey, PersistentDataType.STRING, action)
|
||||
meta.persistentDataContainer.set(sectorKey, PersistentDataType.INTEGER, sectorId)
|
||||
|
||||
item.itemMeta = meta
|
||||
return item
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,53 +221,52 @@ class SectorListener(
|
|||
return
|
||||
}
|
||||
|
||||
// Open GUI
|
||||
val gui = org.bukkit.Bukkit.createInventory(null, 27, Component.text("Sector Manager (#${sectorId})", NamedTextColor.BLACK))
|
||||
// Create Written Book for UI
|
||||
val book = org.bukkit.inventory.ItemStack(Material.WRITTEN_BOOK)
|
||||
val meta = book.itemMeta as org.bukkit.inventory.meta.BookMeta
|
||||
|
||||
// Info Item with Ranges
|
||||
meta.title(Component.text("Sector Manager"))
|
||||
meta.author(Component.text("System"))
|
||||
|
||||
// Build Page Content
|
||||
val content = Component.text()
|
||||
.append(Component.text("Sector Core @ ${sector.x},${sector.y},${sector.z}\n\n", NamedTextColor.BLACK))
|
||||
|
||||
// Actions Row 1
|
||||
content.append(
|
||||
Component.text("[Activate]", NamedTextColor.DARK_GREEN)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector activate $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to activate sector")))
|
||||
)
|
||||
content.append(Component.text(" "))
|
||||
content.append(
|
||||
Component.text("[Destroy]\n", NamedTextColor.RED)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector cancel $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to destroy sector")))
|
||||
)
|
||||
|
||||
// Actions Row 2
|
||||
content.append(
|
||||
Component.text("[Get Tool]\n\n", NamedTextColor.DARK_AQUA)
|
||||
.clickEvent(ClickEvent.runCommand("/landsector givetool $sectorId"))
|
||||
.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("Click to get selection tool")))
|
||||
)
|
||||
|
||||
// Ranges List
|
||||
val ranges = sectorService.getRanges(sectorId)
|
||||
val rangeLore = ranges.map { Component.text(" - [${it.id}] ${it.type}", NamedTextColor.GRAY) }
|
||||
val infoLore = mutableListOf<Component>()
|
||||
infoLore.add(Component.text("Sector ID: $sectorId", NamedTextColor.WHITE))
|
||||
infoLore.addAll(rangeLore)
|
||||
|
||||
gui.setItem(4, createGuiItem(
|
||||
Material.PAPER,
|
||||
Component.text("Sector Info", NamedTextColor.GOLD),
|
||||
infoLore,
|
||||
sectorId,
|
||||
"info"
|
||||
))
|
||||
if (ranges.isEmpty()) {
|
||||
content.append(Component.text("Parts: None", NamedTextColor.GRAY))
|
||||
} else {
|
||||
content.append(Component.text("Parts:", NamedTextColor.BLACK))
|
||||
ranges.forEach { range ->
|
||||
content.append(Component.text("\n- [${range.id}] ${range.type}", NamedTextColor.DARK_GRAY))
|
||||
}
|
||||
}
|
||||
|
||||
// Get Selection Tool
|
||||
gui.setItem(11, createGuiItem(
|
||||
Material.FLINT,
|
||||
Component.text("Get Selection Tool", NamedTextColor.AQUA),
|
||||
listOf(Component.text("Click to receive the selection tool.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"give_tool"
|
||||
))
|
||||
meta.addPages(content.build())
|
||||
book.itemMeta = meta
|
||||
|
||||
// Activate
|
||||
gui.setItem(13, createGuiItem(
|
||||
Material.LIME_CONCRETE,
|
||||
Component.text("Activate Sector", NamedTextColor.GREEN),
|
||||
listOf(Component.text("Click to activate this sector.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"activate"
|
||||
))
|
||||
|
||||
// Cancel / Destroy
|
||||
gui.setItem(15, createGuiItem(
|
||||
Material.RED_CONCRETE,
|
||||
Component.text("Cancel / Destroy", NamedTextColor.RED),
|
||||
listOf(Component.text("Click to destroy this sector.", NamedTextColor.GRAY)),
|
||||
sectorId,
|
||||
"cancel"
|
||||
))
|
||||
|
||||
player.openInventory(gui)
|
||||
|
||||
player.openBook(book)
|
||||
event.isCancelled = true
|
||||
}
|
||||
|
||||
|
|
@ -420,47 +419,4 @@ class SectorListener(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onInventoryClick(event: org.bukkit.event.inventory.InventoryClickEvent) {
|
||||
val item = event.currentItem ?: return
|
||||
val meta = item.itemMeta ?: return
|
||||
val pluginKey = NamespacedKey(plugin, "gui_action")
|
||||
|
||||
if (!meta.persistentDataContainer.has(pluginKey, PersistentDataType.STRING)) return
|
||||
|
||||
event.isCancelled = true // Prevent taking items
|
||||
|
||||
val player = event.whoClicked as? Player ?: return
|
||||
val action = meta.persistentDataContainer.get(pluginKey, PersistentDataType.STRING)
|
||||
val sectorKey = NamespacedKey(plugin, "sector_id")
|
||||
val sectorId = meta.persistentDataContainer.get(sectorKey, PersistentDataType.INTEGER) ?: return
|
||||
|
||||
player.closeInventory()
|
||||
|
||||
when (action) {
|
||||
"give_tool" -> player.performCommand("landsector givetool $sectorId")
|
||||
"activate" -> player.performCommand("landsector activate $sectorId")
|
||||
"cancel" -> player.performCommand("landsector cancel $sectorId")
|
||||
"info" -> {
|
||||
player.playSound(player.location, Sound.UI_BUTTON_CLICK, 1f, 1f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun createGuiItem(material: Material, name: Component, lore: List<Component>, sectorId: Int, action: String): org.bukkit.inventory.ItemStack {
|
||||
val item = org.bukkit.inventory.ItemStack(material)
|
||||
val meta = item.itemMeta
|
||||
meta.displayName(name)
|
||||
meta.lore(lore)
|
||||
|
||||
val actionKey = NamespacedKey(plugin, "gui_action")
|
||||
val sectorKey = NamespacedKey(plugin, "sector_id")
|
||||
|
||||
meta.persistentDataContainer.set(actionKey, PersistentDataType.STRING, action)
|
||||
meta.persistentDataContainer.set(sectorKey, PersistentDataType.INTEGER, sectorId)
|
||||
|
||||
item.itemMeta = meta
|
||||
return item
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user