Updated plugin.yml

This commit is contained in:
Laurin
2025-12-11 18:15:39 +01:00
committed by GitHub
parent 1d7ff8bd2f
commit 3092a19086
6 changed files with 358 additions and 0 deletions

View File

@@ -14,6 +14,9 @@ import club.mcscrims.speedhg.config.MessageConfig
import club.mcscrims.speedhg.config.PluginConfig import club.mcscrims.speedhg.config.PluginConfig
import club.mcscrims.speedhg.database.StatsRepository import club.mcscrims.speedhg.database.StatsRepository
import club.mcscrims.speedhg.game.GameManager import club.mcscrims.speedhg.game.GameManager
import club.mcscrims.speedhg.command.KitsCommand
import club.mcscrims.speedhg.kit.KitInventoryListener
import club.mcscrims.speedhg.kit.KitInventoryManager
import club.mcscrims.speedhg.kit.KitListener import club.mcscrims.speedhg.kit.KitListener
import club.mcscrims.speedhg.kit.KitManager import club.mcscrims.speedhg.kit.KitManager
import club.mcscrims.speedhg.listener.GameStateListener import club.mcscrims.speedhg.listener.GameStateListener
@@ -66,6 +69,7 @@ class SpeedHG : JavaPlugin() {
internal lateinit var abilityContext: AbilityContext internal lateinit var abilityContext: AbilityContext
internal lateinit var kitManager: KitManager internal lateinit var kitManager: KitManager
internal lateinit var kitInventoryManager: KitInventoryManager
internal lateinit var worldEditUtils: WorldEditUtils internal lateinit var worldEditUtils: WorldEditUtils
@@ -111,8 +115,11 @@ class SpeedHG : JavaPlugin() {
kitManager = KitManager( this ) kitManager = KitManager( this )
kitManager.initialize() kitManager.initialize()
kitInventoryManager = KitInventoryManager( this, kitManager )
setupLuckPerms() setupLuckPerms()
registerListener() registerListener()
registerCommands()
RecraftUtils.registerRecipes() RecraftUtils.registerRecipes()
RecraftInspector( this ).startRunnable() RecraftInspector( this ).startRunnable()
@@ -129,10 +136,16 @@ class SpeedHG : JavaPlugin() {
{ {
server.pluginManager.registerEvents(GameStateListener( this, gameManager ), this ) server.pluginManager.registerEvents(GameStateListener( this, gameManager ), this )
server.pluginManager.registerEvents(KitListener( this, kitManager ), this ) server.pluginManager.registerEvents(KitListener( this, kitManager ), this )
server.pluginManager.registerEvents(KitInventoryListener( this, kitManager, kitInventoryManager ), this )
server.pluginManager.registerEvents(AbilityHitListener( this, abilityContext ), this ) server.pluginManager.registerEvents(AbilityHitListener( this, abilityContext ), this )
LunarClientListener( this ) LunarClientListener( this )
} }
private fun registerCommands()
{
getCommand("kits")?.setExecutor(KitsCommand( this, kitInventoryManager ))
}
/* /*
* LUCKPERMS >> * LUCKPERMS >>
*/ */

View File

@@ -0,0 +1,29 @@
package club.mcscrims.speedhg.command
import club.mcscrims.speedhg.SpeedHG
import club.mcscrims.speedhg.kit.KitInventoryManager
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class KitsCommand(
private val plugin: SpeedHG,
private val kitInventoryManager: KitInventoryManager
) : CommandExecutor {
override fun onCommand(
sender: CommandSender,
command: Command,
label: String,
args: Array<out String>
): Boolean {
if (sender !is Player) {
sender.sendMessage("§cOnly players can use this command.")
return true
}
kitInventoryManager.openKitInventory(sender, 1)
return true
}
}

View File

@@ -0,0 +1,15 @@
package club.mcscrims.speedhg.kit
import org.bukkit.inventory.Inventory
import org.bukkit.inventory.InventoryHolder
class KitInventoryHolder(val page: Int) : InventoryHolder {
private lateinit var inventory: Inventory
override fun getInventory(): Inventory = inventory
fun setInventory(inventory: Inventory) {
this.inventory = inventory
}
}

View File

@@ -0,0 +1,95 @@
package club.mcscrims.speedhg.kit
import club.mcscrims.speedhg.SpeedHG
import org.bukkit.Material
import org.bukkit.Sound
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryDragEvent
class KitInventoryListener(
private val plugin: SpeedHG,
private val kitManager: KitManager,
private val kitInventoryManager: KitInventoryManager
) : Listener {
@EventHandler
fun onInventoryClick(event: InventoryClickEvent) {
val holder = event.inventory.holder
if (holder !is KitInventoryHolder) {
return
}
event.isCancelled = true
val player = event.whoClicked as? Player ?: return
val clickedItem = event.currentItem ?: return
if (clickedItem.type == Material.AIR) {
return
}
when (event.rawSlot) {
45 -> {
if (holder.page > 1) {
player.playSound(player.location, Sound.UI_BUTTON_CLICK, 1f, 1f)
kitInventoryManager.openKitInventory(player, holder.page - 1)
}
}
49 -> {
player.playSound(player.location, Sound.UI_BUTTON_CLICK, 1f, 0.8f)
player.closeInventory()
}
53 -> {
val totalKits = kitManager.getAllKits().size
val totalPages = (totalKits + 27) / 28
if (holder.page < totalPages) {
player.playSound(player.location, Sound.UI_BUTTON_CLICK, 1f, 1f)
kitInventoryManager.openKitInventory(player, holder.page + 1)
}
}
in 10..43 -> {
val allKits = kitManager.getAllKits().toList()
val startIndex = (holder.page - 1) * 28
val endIndex = (startIndex + 28).coerceAtMost(allKits.size)
val kitsOnPage = allKits.subList(startIndex, endIndex)
val kitSlots = listOf(
10, 11, 12, 13, 14, 15, 16,
19, 20, 21, 22, 23, 24, 25,
28, 29, 30, 31, 32, 33, 34,
37, 38, 39, 40, 41, 42, 43
)
val slotIndex = kitSlots.indexOf(event.rawSlot)
if (slotIndex != -1 && slotIndex < kitsOnPage.size) {
val selectedKit = kitsOnPage[slotIndex]
if (kitManager.selectKit(player, selectedKit.id)) {
player.playSound(player.location, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1f, 1.2f)
plugin.chatManager.sendMessage(
player,
"kits.selected",
"{kit}" to selectedKit.displayName.content()
)
kitInventoryManager.openKitInventory(player, holder.page)
} else {
player.playSound(player.location, Sound.ENTITY_VILLAGER_NO, 1f, 1f)
}
}
}
}
}
@EventHandler
fun onInventoryDrag(event: InventoryDragEvent) {
val holder = event.inventory.holder
if (holder is KitInventoryHolder) {
event.isCancelled = true
}
}
}

View File

@@ -0,0 +1,201 @@
package club.mcscrims.speedhg.kit
import club.mcscrims.speedhg.SpeedHG
import club.mcscrims.speedhg.SpeedHG.Companion.content
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.format.TextDecoration
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.enchantments.Enchantment
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.ItemMeta
class KitInventoryManager(
private val plugin: SpeedHG,
private val kitManager: KitManager
) {
private val kitsPerPage = 28
private val rows = 6
fun openKitInventory(player: Player, page: Int = 1) {
val allKits = kitManager.getAllKits().toList()
val totalPages = (allKits.size + kitsPerPage - 1) / kitsPerPage
val validPage = page.coerceIn(1, totalPages.coerceAtLeast(1))
val holder = KitInventoryHolder(validPage)
val title = Component.text("Kits - Page $validPage/$totalPages")
.color(NamedTextColor.DARK_PURPLE)
.decoration(TextDecoration.BOLD, true)
val inventory = Bukkit.createInventory(holder, rows * 9, title)
holder.setInventory(inventory)
fillBorder(inventory)
fillKits(inventory, allKits, validPage, player)
fillNavigationItems(inventory, validPage, totalPages)
player.openInventory(inventory)
}
private fun fillBorder(inventory: org.bukkit.inventory.Inventory) {
val borderItem = createBorderItem()
for (i in 0..8) {
inventory.setItem(i, borderItem)
}
for (i in 45..53) {
inventory.setItem(i, borderItem)
}
}
private fun fillKits(
inventory: org.bukkit.inventory.Inventory,
allKits: List<AbstractKit>,
page: Int,
player: Player
) {
val startIndex = (page - 1) * kitsPerPage
val endIndex = (startIndex + kitsPerPage).coerceAtMost(allKits.size)
val kitsOnPage = allKits.subList(startIndex, endIndex)
val selectedKit = kitManager.getSelectedKit(player)
val kitSlots = listOf(
10, 11, 12, 13, 14, 15, 16,
19, 20, 21, 22, 23, 24, 25,
28, 29, 30, 31, 32, 33, 34,
37, 38, 39, 40, 41, 42, 43
)
kitsOnPage.forEachIndexed { index, kit ->
if (index < kitSlots.size) {
val isSelected = selectedKit?.id == kit.id
val kitItem = createKitItem(kit, isSelected, player)
inventory.setItem(kitSlots[index], kitItem)
}
}
}
private fun fillNavigationItems(
inventory: org.bukkit.inventory.Inventory,
page: Int,
totalPages: Int
) {
if (page > 1) {
inventory.setItem(45, createPreviousPageItem())
}
inventory.setItem(49, createCloseItem())
if (page < totalPages) {
inventory.setItem(53, createNextPageItem())
}
}
private fun createBorderItem(): ItemStack {
val item = ItemStack(Material.GRAY_STAINED_GLASS_PANE)
val meta = item.itemMeta
meta.displayName(Component.text(" "))
item.itemMeta = meta
return item
}
private fun createKitItem(kit: AbstractKit, isSelected: Boolean, player: Player): ItemStack {
val item = ItemStack(kit.icon)
val meta = item.itemMeta
meta.displayName(kit.displayName.decoration(TextDecoration.ITALIC, false))
val lore = mutableListOf<Component>()
if (isSelected) {
lore.add(
Component.text("✔ Currently Selected")
.color(NamedTextColor.GREEN)
.decoration(TextDecoration.ITALIC, false)
)
} else {
lore.add(
Component.text("Click to select")
.color(NamedTextColor.YELLOW)
.decoration(TextDecoration.ITALIC, false)
)
}
lore.add(Component.empty())
kit.description.forEach { line ->
lore.add(
Component.text(line)
.color(NamedTextColor.GRAY)
.decoration(TextDecoration.ITALIC, false)
)
}
if (canUseKit(player, kit)) {
if (isSelected) {
meta.addEnchant(Enchantment.UNBREAKING, 1, true)
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS)
}
} else {
lore.add(Component.empty())
lore.add(
Component.text("⚠ Locked")
.color(NamedTextColor.RED)
.decoration(TextDecoration.ITALIC, false)
.decoration(TextDecoration.BOLD, true)
)
}
meta.lore(lore)
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES)
item.itemMeta = meta
return item
}
private fun createPreviousPageItem(): ItemStack {
val item = ItemStack(Material.ARROW)
val meta = item.itemMeta
meta.displayName(
Component.text("← Previous Page")
.color(NamedTextColor.YELLOW)
.decoration(TextDecoration.ITALIC, false)
)
item.itemMeta = meta
return item
}
private fun createNextPageItem(): ItemStack {
val item = ItemStack(Material.ARROW)
val meta = item.itemMeta
meta.displayName(
Component.text("Next Page →")
.color(NamedTextColor.YELLOW)
.decoration(TextDecoration.ITALIC, false)
)
item.itemMeta = meta
return item
}
private fun createCloseItem(): ItemStack {
val item = ItemStack(Material.BARRIER)
val meta = item.itemMeta
meta.displayName(
Component.text("Close")
.color(NamedTextColor.RED)
.decoration(TextDecoration.ITALIC, false)
)
item.itemMeta = meta
return item
}
private fun canUseKit(player: Player, kit: AbstractKit): Boolean {
return true
}
}

View File

@@ -2,3 +2,8 @@ name: GameModes-SpeedHG
version: '1.0.0' version: '1.0.0'
main: club.mcscrims.speedhg.SpeedHG main: club.mcscrims.speedhg.SpeedHG
api-version: '1.21' api-version: '1.21'
commands:
kits:
description: Open the kit selection menu
usage: /kits