Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions src/main/kotlin/me/glaremasters/guilds/commands/gui/CommandGUI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@ import co.aikar.commands.annotation.CommandPermission
import co.aikar.commands.annotation.Conditions
import co.aikar.commands.annotation.Dependency
import co.aikar.commands.annotation.Description
import co.aikar.commands.annotation.Optional
import co.aikar.commands.annotation.Subcommand
import co.aikar.commands.annotation.Syntax
import dev.triumphteam.gui.guis.PaginatedGui
import me.glaremasters.guilds.Guilds
import me.glaremasters.guilds.exceptions.ExpectationNotMet
import me.glaremasters.guilds.exceptions.InvalidTierException
import me.glaremasters.guilds.guild.Guild
import me.glaremasters.guilds.messages.Messages
import me.glaremasters.guilds.utils.Constants
import org.bukkit.entity.Player

Expand Down Expand Up @@ -86,9 +89,16 @@ internal class CommandGUI : BaseCommand() {

@Subcommand("vault")
@Description("{@@descriptions.vault}")
@Syntax("")
@Syntax("%optional %vault-number")
@CommandPermission(Constants.BASE_PERM + "vault")
fun vault(player: Player, @Conditions("perm:perm=OPEN_VAULT") guild: Guild) {
guilds.guiHandler.vaults.get(guild, player).open(player)
fun vault(player: Player, @Conditions("perm:perm=OPEN_VAULT") guild: Guild, @Optional vaultNumber: Int?) {
if (vaultNumber == null) {
guilds.guiHandler.vaults.get(guild, player).open(player)
return
}

if (!guilds.guiHandler.vaults.open(guild, player, vaultNumber)) {
throw ExpectationNotMet(Messages.VAULTS__MAXED)
}
}
}
44 changes: 28 additions & 16 deletions src/main/kotlin/me/glaremasters/guilds/guis/VaultGUI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,50 @@ class VaultGUI(private val guilds: Guilds, private val settingsManager: Settings
addItems(gui, guild, player)
addBackground(gui)

num = 0
return gui
}

/**
* Opens a specific guild vault, creating any missing cached vaults up to that number.
*
* @param guild the guild that owns the vault
* @param player the player opening the vault
* @param vaultNumber the one-based vault number
* @return true when the vault was valid and opened, otherwise false
*/
fun open(guild: Guild, player: Player, vaultNumber: Int): Boolean {
if (vaultNumber < 1 || !guildHandler.hasVaultUnlocked(vaultNumber, guild)) {
return false
}

val vaults = guildHandler.vaults[guild] ?: return false
while (vaults.size < vaultNumber) {
vaults.add(guildHandler.createNewVault(settingsManager))
}

player.openInventory(guildHandler.getGuildVault(guild, vaultNumber))
guildHandler.opened.add(player)
return true
}

/**
* Create the regular items that will be on the GUI
*
* @param pane the pane to be added to
* @param gui the GUI to add items to
* @param guild the guild of the player
*/
private fun addItems(gui: Gui, guild: Guild, player: Player) {
val max = guildHandler.getGuildTier(guild.tier.level)?.vaultAmount!!
for (i in 0 until max) {
val status = if (guildHandler.hasVaultUnlocked(i + 1, guild)) settingsManager.getProperty(VaultPickerSettings.PICKER_UNLOCKED) else settingsManager.getProperty(VaultPickerSettings.PICKER_LOCKED)
val vaultNumber = i + 1
val status = if (guildHandler.hasVaultUnlocked(vaultNumber, guild)) settingsManager.getProperty(VaultPickerSettings.PICKER_UNLOCKED) else settingsManager.getProperty(VaultPickerSettings.PICKER_LOCKED)

val lore = settingsManager.getProperty(VaultPickerSettings.PICKER_LORE)
val updated = mutableListOf<String>()

lore.forEach { line ->
updated.add(StringUtils.color(line
.replace("{number}", (num + 1).toString())
.replace("{number}", vaultNumber.toString())
.replace("{status}", status)
))
}
Expand All @@ -80,21 +103,10 @@ class VaultGUI(private val guilds: Guilds, private val settingsManager: Settings

item.setAction { event ->
event.isCancelled = true
try {
guildHandler.getGuildVault(guild, event.rawSlot + 1)
} catch (ex: IndexOutOfBoundsException) {
guildHandler.vaults[guild]?.add(guildHandler.createNewVault(settingsManager))
}
player.openInventory(guildHandler.getGuildVault(guild, event.rawSlot + 1))
guildHandler.opened.add(player)
open(guild, player, vaultNumber)
}

gui.addItem(item)
num++
}
}

companion object {
private var num = 0
}
}
Loading