From 29944aee18faf9e46d6b93d58a7ec8480fa03828 Mon Sep 17 00:00:00 2001 From: UltraFaceguy Date: Fri, 8 May 2020 02:46:46 -0400 Subject: [PATCH 1/3] Adding simulate command to allow GUIs to act as if a player executed deposit/withdraw/vault commands --- .../admin/simulate/CommandAdminSimulate.kt | 170 ++++++++++++++++++ src/main/resources/languages/en-US.yml | 3 + 2 files changed, 173 insertions(+) create mode 100644 src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt new file mode 100644 index 000000000..6503a80b9 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt @@ -0,0 +1,170 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.glaremasters.guilds.commands.admin.bank + +import ch.jalu.configme.SettingsManager +import co.aikar.commands.BaseCommand +import co.aikar.commands.CommandIssuer +import co.aikar.commands.annotation.CommandAlias +import co.aikar.commands.annotation.CommandCompletion +import co.aikar.commands.annotation.CommandPermission +import co.aikar.commands.annotation.Dependency +import co.aikar.commands.annotation.Description +import co.aikar.commands.annotation.Subcommand +import co.aikar.commands.annotation.Syntax +import co.aikar.commands.annotation.Values +import co.aikar.commands.bukkit.contexts.OnlinePlayer +import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.api.events.GuildDepositMoneyEvent +import me.glaremasters.guilds.api.events.GuildWithdrawMoneyEvent +import me.glaremasters.guilds.guild.GuildHandler +import me.glaremasters.guilds.guild.GuildRolePerm +import me.glaremasters.guilds.messages.Messages +import me.glaremasters.guilds.utils.Constants +import me.glaremasters.guilds.utils.EconomyUtils +import net.milkbowl.vault.economy.Economy +import org.bukkit.Bukkit + +@CommandAlias("%guilds") +internal class CommandAdminSimulate : BaseCommand() { + @Dependency lateinit var guilds: Guilds + @Dependency lateinit var guildHandler: GuildHandler + @Dependency lateinit var settingsManager: SettingsManager + @Dependency lateinit var economy: Economy + + @Subcommand("admin simulate bank deposit") + @Description("{@@descriptions.admin-simulate-bank-deposit}") + @CommandPermission(Constants.ADMIN_PERM) + @Syntax(" ") + @CommandCompletion("@online") + fun deposit(issuer: CommandIssuer, @Values("@online") onlinePlayer: OnlinePlayer, amount: Double) { + + val player = onlinePlayer.player + val guild = guildHandler.getGuild(player) + + if (guild == null) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__PLAYER_NOT_IN_GUILD) + return + } + + val balance = guild.balance + val total = amount + balance + val tier = guild.tier + + if (!guild.getMember(player.uniqueId).role.hasPerm(GuildRolePerm.DEPOSIT_MONEY)) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__ROLE_NO_PERMISSION) + return + } + + if (amount < 0) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__NOT_ENOUGH_MONEY) + return + } + + if (!EconomyUtils.hasEnough(currentCommandManager, economy, player, amount)) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__NOT_ENOUGH_MONEY) + return + } + + if (total > tier.maxBankBalance) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.BANK__OVER_MAX) + return + } + + val event = GuildDepositMoneyEvent(player, guild, amount) + Bukkit.getPluginManager().callEvent(event) + + if (event.isCancelled) { + return + } + + economy.withdrawPlayer(player.player, amount) + guild.balance = total + guild.sendMessage(currentCommandManager, Messages.BANK__DEPOSIT_SUCCESS, "{player}", player.name, + "{amount}", EconomyUtils.format(amount), "{total}", EconomyUtils.format(guild.balance)) + } + + @Subcommand("admin simulate bank withdraw") + @Description("{@@descriptions.admin-simulate-bank-withdraw}") + @CommandPermission(Constants.ADMIN_PERM) + @Syntax(" ") + @CommandCompletion("@online") + fun withdraw(issuer: CommandIssuer, @Values("@online") onlinePlayer: OnlinePlayer, amount: Double) { + + val player = onlinePlayer.player + val guild = guildHandler.getGuild(player) + + if (guild == null) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__PLAYER_NOT_IN_GUILD) + return + } + + if (!guild.getMember(player.uniqueId).role.hasPerm(GuildRolePerm.WITHDRAW_MONEY)) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__ROLE_NO_PERMISSION) + return + } + + val bal = guild.balance + + if (amount < 0) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__NOT_ENOUGH_MONEY) + return + } + + if (bal < amount) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.BANK__NOT_ENOUGH_BANK) + return + } + + val event = GuildWithdrawMoneyEvent(player, guild, amount) + Bukkit.getPluginManager().callEvent(event) + + if (event.isCancelled) { + return + } + + guild.balance = bal - amount + economy.depositPlayer(player, amount) + guild.sendMessage(currentCommandManager, Messages.BANK__WITHDRAWAL_SUCCESS, "{player}", player.name, + "{amount}", EconomyUtils.format(amount), "{total}", EconomyUtils.format(guild.balance)) + } + + @Subcommand("admin simulate vault") + @Description("{@@descriptions.admin-simulate-vault}") + @CommandPermission(Constants.ADMIN_PERM) + @CommandCompletion("@online") + @Syntax("") + fun vault(issuer: CommandIssuer, @Values("@online") onlinePlayer: OnlinePlayer) { + + val player = onlinePlayer.player + val guild = guildHandler.getGuild(player) + + if (guild == null) { + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__PLAYER_NOT_IN_GUILD) + return + } + guilds.guiHandler.vaults.get(guild, player).open(player) + } +} \ No newline at end of file diff --git a/src/main/resources/languages/en-US.yml b/src/main/resources/languages/en-US.yml index 3b0225647..80624d779 100644 --- a/src/main/resources/languages/en-US.yml +++ b/src/main/resources/languages/en-US.yml @@ -25,6 +25,9 @@ descriptions: admin-unclaim: "Admin command to unclaim a guild's land" admin-upgrade: "Admin command to upgrade a Guild's tier" admin-vault: "Admin command to view a guild's vault" + admin-simulate-vault: "Admin command to trigger player opening their guild vault" + admin-simulate-bank-deposit: "Admin command to trigger player depositing to their guild bank" + admin-simulate-bank-withdraw: "Admin command to trigger player withdrawing from their guild bank" ally-accept: "Accept an ally invite from another guild" ally-add: "Add a Guild as an ally" ally-decline: "Decline an ally invite from another Guild" From 137794626d40e869a05de37aaef605448b0cb62a Mon Sep 17 00:00:00 2001 From: UltraFaceguy Date: Fri, 8 May 2020 11:52:06 -0400 Subject: [PATCH 2/3] Adding guild upgrade to the simulate command --- .../admin/simulate/CommandAdminSimulate.kt | 61 +++++++++++++++++++ src/main/resources/languages/en-US.yml | 1 + 2 files changed, 62 insertions(+) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt index 6503a80b9..e3024c42e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt @@ -37,14 +37,20 @@ import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import co.aikar.commands.bukkit.contexts.OnlinePlayer import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.actions.ActionHandler +import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildDepositMoneyEvent import me.glaremasters.guilds.api.events.GuildWithdrawMoneyEvent +import me.glaremasters.guilds.configuration.sections.PluginSettings +import me.glaremasters.guilds.configuration.sections.TierSettings +import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.guild.GuildRolePerm import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants import me.glaremasters.guilds.utils.EconomyUtils import net.milkbowl.vault.economy.Economy +import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit @CommandAlias("%guilds") @@ -52,6 +58,8 @@ internal class CommandAdminSimulate : BaseCommand() { @Dependency lateinit var guilds: Guilds @Dependency lateinit var guildHandler: GuildHandler @Dependency lateinit var settingsManager: SettingsManager + @Dependency lateinit var actionHandler: ActionHandler + @Dependency lateinit var permission: Permission @Dependency lateinit var economy: Economy @Subcommand("admin simulate bank deposit") @@ -167,4 +175,57 @@ internal class CommandAdminSimulate : BaseCommand() { } guilds.guiHandler.vaults.get(guild, player).open(player) } + + @Subcommand("admin simulate upgrade") + @Description("{@@descriptions.admin-simulate-upgrade}") + @CommandPermission(Constants.ADMIN_PERM) + @CommandCompletion("@online") + @Syntax("") + fun upgrade(issuer: CommandIssuer, @Values("@online") onlinePlayer: OnlinePlayer) { + + val player = onlinePlayer.player + val guild = guildHandler.getGuild(player) + + if (guildHandler.isMaxTier(guild)) { + throw ExpectationNotMet(Messages.UPGRADE__TIER_MAX) + } + + val tier = guildHandler.getGuildTier(guild.tier.level + 1) + val bal = guild.balance + val cost = tier.cost + val async = settingsManager.getProperty(PluginSettings.RUN_VAULT_ASYNC) + + if (guildHandler.memberCheck(guild)) { + throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MEMBERS, "{amount}", guild.tier.membersToRankup.toString()) + } + + if (!EconomyUtils.hasEnough(bal, cost)) { + throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + } + + currentCommandIssuer.sendInfo(Messages.UPGRADE__MONEY_WARNING, "{amount}", EconomyUtils.format(cost)) + actionHandler.addAction(player, object : ConfirmAction { + override fun accept() { + if (!EconomyUtils.hasEnough(bal, cost)) { + throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + } + + guild.balance = bal - cost + + if (!guilds.settingsHandler.tierConf.getProperty(TierSettings.CARRY_OVER)) { + guildHandler.removePermsFromAll(permission, guild, async) + } + + guildHandler.upgradeTier(guild) + guildHandler.addPermsToAll(permission, guild, async) + currentCommandIssuer.sendInfo(Messages.UPGRADE__SUCCESS) + actionHandler.removeAction(player) + } + + override fun decline() { + currentCommandIssuer.sendInfo(Messages.UPGRADE__CANCEL) + actionHandler.removeAction(player) + } + }) + } } \ No newline at end of file diff --git a/src/main/resources/languages/en-US.yml b/src/main/resources/languages/en-US.yml index 80624d779..4085ff254 100644 --- a/src/main/resources/languages/en-US.yml +++ b/src/main/resources/languages/en-US.yml @@ -28,6 +28,7 @@ descriptions: admin-simulate-vault: "Admin command to trigger player opening their guild vault" admin-simulate-bank-deposit: "Admin command to trigger player depositing to their guild bank" admin-simulate-bank-withdraw: "Admin command to trigger player withdrawing from their guild bank" + admin-simulate-upgrade: "Admin command to trigger player upgrading their guild" ally-accept: "Accept an ally invite from another guild" ally-add: "Add a Guild as an ally" ally-decline: "Decline an ally invite from another Guild" From d383fb4e43840fb80ee58b90aba9d7c8440f3baa Mon Sep 17 00:00:00 2001 From: UltraFaceguy Date: Fri, 8 May 2020 11:55:48 -0400 Subject: [PATCH 3/3] Making feedback messages actually get sent to the correct user --- .../admin/simulate/CommandAdminSimulate.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt index e3024c42e..87e767bc7 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/simulate/CommandAdminSimulate.kt @@ -196,18 +196,22 @@ internal class CommandAdminSimulate : BaseCommand() { val async = settingsManager.getProperty(PluginSettings.RUN_VAULT_ASYNC) if (guildHandler.memberCheck(guild)) { - throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MEMBERS, "{amount}", guild.tier.membersToRankup.toString()) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.ERROR__PLAYER_NOT_IN_GUILD, "{amount}", guild.tier.membersToRankup.toString()) + return } if (!EconomyUtils.hasEnough(bal, cost)) { - throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + return } - currentCommandIssuer.sendInfo(Messages.UPGRADE__MONEY_WARNING, "{amount}", EconomyUtils.format(cost)) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.UPGRADE__MONEY_WARNING, + "{amount}", EconomyUtils.format(cost)) actionHandler.addAction(player, object : ConfirmAction { override fun accept() { if (!EconomyUtils.hasEnough(bal, cost)) { - throw ExpectationNotMet(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.UPGRADE__NOT_ENOUGH_MONEY, "{needed}", EconomyUtils.format(cost - bal)) + return } guild.balance = bal - cost @@ -218,12 +222,12 @@ internal class CommandAdminSimulate : BaseCommand() { guildHandler.upgradeTier(guild) guildHandler.addPermsToAll(permission, guild, async) - currentCommandIssuer.sendInfo(Messages.UPGRADE__SUCCESS) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.UPGRADE__SUCCESS) actionHandler.removeAction(player) } override fun decline() { - currentCommandIssuer.sendInfo(Messages.UPGRADE__CANCEL) + guilds.commandManager.getCommandIssuer(player).sendInfo(Messages.UPGRADE__CANCEL) actionHandler.removeAction(player) } })