From fa0d52bc99c139167f2058aa835c2b807a8ff2f6 Mon Sep 17 00:00:00 2001 From: ThiagoROX <51332006+SrBedrock@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:55:44 -0300 Subject: [PATCH] Melhorias diversas de comandos (#15) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Resolvido problema com mensagem de erro ao usar /chaves de forma errada. - Resolvido problema ao tentar transferir chaves com valor total das chaves. - Resolvido problema com placeholders de vĂ¡rios comandos --- .../crazycrates/api/users/UserManager.java | 1 + .../crazycrates/common/CrazyCratesPlugin.java | 1 + .../common/config/ConfigManager.java | 1 + .../common/config/types/ConfigKeys.java | 2 + .../common/config/types/MessageKeys.java | 5 ++ .../crazycrates/api/enums/Messages.java | 3 +- .../crazycrates/api/objects/Crate.java | 1 - .../commands/relations/ArgumentRelations.java | 77 +++++++------------ .../commands/subs/BaseKeyCommand.java | 40 +++++----- .../commands/subs/CrateBaseCommand.java | 71 +++++++++++++---- 10 files changed, 116 insertions(+), 86 deletions(-) diff --git a/api/src/main/java/us/crazycrew/crazycrates/api/users/UserManager.java b/api/src/main/java/us/crazycrew/crazycrates/api/users/UserManager.java index 6246fedcb..2330a5754 100644 --- a/api/src/main/java/us/crazycrew/crazycrates/api/users/UserManager.java +++ b/api/src/main/java/us/crazycrew/crazycrates/api/users/UserManager.java @@ -2,6 +2,7 @@ import net.kyori.adventure.audience.Audience; import us.crazycrew.crazycrates.api.enums.types.KeyType; + import java.util.UUID; /** diff --git a/common/src/main/java/com/badbones69/crazycrates/common/CrazyCratesPlugin.java b/common/src/main/java/com/badbones69/crazycrates/common/CrazyCratesPlugin.java index 5326a9657..250d5d6cd 100644 --- a/common/src/main/java/com/badbones69/crazycrates/common/CrazyCratesPlugin.java +++ b/common/src/main/java/com/badbones69/crazycrates/common/CrazyCratesPlugin.java @@ -3,6 +3,7 @@ import com.badbones69.crazycrates.common.config.ConfigManager; import us.crazycrew.crazycrates.api.CrazyCratesService; import us.crazycrew.crazycrates.api.ICrazyCrates; + import java.io.File; public abstract class CrazyCratesPlugin implements ICrazyCrates { diff --git a/common/src/main/java/com/badbones69/crazycrates/common/config/ConfigManager.java b/common/src/main/java/com/badbones69/crazycrates/common/config/ConfigManager.java index 55473738f..a8d86d584 100644 --- a/common/src/main/java/com/badbones69/crazycrates/common/config/ConfigManager.java +++ b/common/src/main/java/com/badbones69/crazycrates/common/config/ConfigManager.java @@ -5,6 +5,7 @@ import ch.jalu.configme.resource.YamlFileResourceOptions; import com.badbones69.crazycrates.common.config.types.ConfigKeys; import com.badbones69.crazycrates.common.config.types.MessageKeys; + import java.io.File; public class ConfigManager { diff --git a/common/src/main/java/com/badbones69/crazycrates/common/config/types/ConfigKeys.java b/common/src/main/java/com/badbones69/crazycrates/common/config/types/ConfigKeys.java index 3e14d749a..2311a3fe4 100644 --- a/common/src/main/java/com/badbones69/crazycrates/common/config/types/ConfigKeys.java +++ b/common/src/main/java/com/badbones69/crazycrates/common/config/types/ConfigKeys.java @@ -4,7 +4,9 @@ import ch.jalu.configme.SettingsHolder; import ch.jalu.configme.configurationdata.CommentsConfiguration; import ch.jalu.configme.properties.Property; + import java.util.List; + import static ch.jalu.configme.properties.PropertyInitializer.newListProperty; import static ch.jalu.configme.properties.PropertyInitializer.newProperty; diff --git a/common/src/main/java/com/badbones69/crazycrates/common/config/types/MessageKeys.java b/common/src/main/java/com/badbones69/crazycrates/common/config/types/MessageKeys.java index ead2a95c2..0c23481db 100644 --- a/common/src/main/java/com/badbones69/crazycrates/common/config/types/MessageKeys.java +++ b/common/src/main/java/com/badbones69/crazycrates/common/config/types/MessageKeys.java @@ -4,7 +4,9 @@ import ch.jalu.configme.SettingsHolder; import ch.jalu.configme.configurationdata.CommentsConfiguration; import ch.jalu.configme.properties.Property; + import java.util.List; + import static ch.jalu.configme.properties.PropertyInitializer.newListProperty; import static ch.jalu.configme.properties.PropertyInitializer.newProperty; @@ -181,4 +183,7 @@ public void registerComments(CommentsConfiguration conf) { "", "&7You can find a list of permissions @ &ehttps://docs.crazycrew.us/crazycrates/info/commands/permissions" )); + + public static final Property cleared_player_keys = newProperty("Messages.Cleared-Player-Keys", "%prefix%&cYou have cleared &e%amount%x %key% &cfrom &6%player%&c."); + } \ No newline at end of file diff --git a/paper/src/main/java/com/badbones69/crazycrates/api/enums/Messages.java b/paper/src/main/java/com/badbones69/crazycrates/api/enums/Messages.java index ed878e100..0e730e8b0 100644 --- a/paper/src/main/java/com/badbones69/crazycrates/api/enums/Messages.java +++ b/paper/src/main/java/com/badbones69/crazycrates/api/enums/Messages.java @@ -75,7 +75,8 @@ public enum Messages { other_player_no_keys_header(MessageKeys.other_player_header, true), per_crate(MessageKeys.per_crate), help(MessageKeys.help, true), - admin_help(MessageKeys.admin_help, true); + admin_help(MessageKeys.admin_help, true), + cleared_player_keys(MessageKeys.cleared_player_keys); private Property property; diff --git a/paper/src/main/java/com/badbones69/crazycrates/api/objects/Crate.java b/paper/src/main/java/com/badbones69/crazycrates/api/objects/Crate.java index 11a3312da..0b9b55397 100644 --- a/paper/src/main/java/com/badbones69/crazycrates/api/objects/Crate.java +++ b/paper/src/main/java/com/badbones69/crazycrates/api/objects/Crate.java @@ -13,7 +13,6 @@ import com.badbones69.crazycrates.tasks.crates.effects.SoundEffect; import com.badbones69.crazycrates.tasks.crates.other.AbstractCrateManager; import com.badbones69.crazycrates.tasks.crates.other.CosmicCrateManager; -import de.tr7zw.changeme.nbtapi.NBTItem; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.SoundCategory; diff --git a/paper/src/main/java/com/badbones69/crazycrates/commands/relations/ArgumentRelations.java b/paper/src/main/java/com/badbones69/crazycrates/commands/relations/ArgumentRelations.java index 0ade27a0c..cda0dc9d1 100644 --- a/paper/src/main/java/com/badbones69/crazycrates/commands/relations/ArgumentRelations.java +++ b/paper/src/main/java/com/badbones69/crazycrates/commands/relations/ArgumentRelations.java @@ -3,7 +3,9 @@ import com.badbones69.crazycrates.api.enums.Messages; import com.badbones69.crazycrates.api.utils.MsgUtils; import com.badbones69.crazycrates.commands.MessageManager; +import dev.triumphteam.cmd.core.message.ContextualKey; import dev.triumphteam.cmd.core.message.MessageKey; +import dev.triumphteam.cmd.core.message.context.MessageContext; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -14,7 +16,6 @@ private String getContext(String subCommand, String commandOrder) { String correctUsage = null; switch (subCommand) { - case "transfer" -> correctUsage = commandOrder + " "; case "debug", "open", "set" -> correctUsage = commandOrder + ""; case "tp" -> correctUsage = commandOrder + ""; case "additem" -> correctUsage = commandOrder + " [tier]"; @@ -31,68 +32,48 @@ private String getContext(String subCommand, String commandOrder) { @Override public void build() { - getBukkitCommandManager().registerMessage(MessageKey.TOO_MANY_ARGUMENTS, (sender, context) -> { - String command = context.getCommand(); - String subCommand = context.getSubCommand(); - - String commandOrder = "/" + command + " " + subCommand + " "; - - String correctUsage = getCorrectUsage(command, subCommand, commandOrder); - - if (!correctUsage.isEmpty()) { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage).toString()); - } - - if (correctUsage != null) { - if (sender instanceof Player player) { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage, player)); - } else { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage)); - } - } - }); - - getBukkitCommandManager().registerMessage(MessageKey.NOT_ENOUGH_ARGUMENTS, (sender, context) -> { - String command = context.getCommand(); - String subCommand = context.getSubCommand(); + for (var messageKey : ContextualKey.getRegisteredKeys()) { + getBukkitCommandManager().registerMessage(messageKey, this::sendCorrectUsage); + } + getBukkitCommandManager().registerMessage(MessageKey.UNKNOWN_COMMAND, (sender, context) -> sendUnknownCommand(sender)); + } - String commandOrder = "/" + command + " " + subCommand + " "; + private void sendCorrectUsage(CommandSender sender, MessageContext context) { + String command = context.getCommand(); + String subCommand = context.getSubCommand(); - String correctUsage = getCorrectUsage(command, subCommand, commandOrder); + String commandOrder = "/" + command + " " + subCommand + " "; - if (!correctUsage.isEmpty()) { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage).toString()); - } + String correctUsage = getCorrectUsage(command, subCommand, commandOrder); - if (correctUsage != null) { - if (sender instanceof Player player) { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage, player)); - } else { - send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage)); - } - } - }); + if (sender instanceof Player player) { + this.send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage, player)); + } else { + this.send(sender, Messages.correct_usage.getMessage("%usage%", correctUsage)); + } + } - getBukkitCommandManager().registerMessage(MessageKey.UNKNOWN_COMMAND, (sender, context) -> { - if (sender instanceof Player player) { - send(sender, Messages.unknown_command.getMessage(player)); - } else { - send(sender, Messages.unknown_command.getMessage()); - } - }); + private void sendUnknownCommand(@NotNull CommandSender sender) { + if (sender instanceof Player player) { + this.send(sender, Messages.unknown_command.getMessage(player)); + } else { + this.send(sender, Messages.unknown_command.getMessage()); + } } private String getCorrectUsage(@NotNull String command, String subCommand, String commandOrder) { String correctUsage = ""; switch (command) { - case "crates" -> correctUsage = getContext(subCommand, commandOrder); + case "crates" -> { + return getContext(subCommand, commandOrder); + } case "chave" -> { if (subCommand.equals("ver")) { - correctUsage = commandOrder + " [jogador]"; + return commandOrder + "[jogador]"; } if (subCommand.equals("transferir")) { - correctUsage = commandOrder + " "; + return commandOrder + " "; } } } diff --git a/paper/src/main/java/com/badbones69/crazycrates/commands/subs/BaseKeyCommand.java b/paper/src/main/java/com/badbones69/crazycrates/commands/subs/BaseKeyCommand.java index 176746245..da0c10a21 100644 --- a/paper/src/main/java/com/badbones69/crazycrates/commands/subs/BaseKeyCommand.java +++ b/paper/src/main/java/com/badbones69/crazycrates/commands/subs/BaseKeyCommand.java @@ -15,10 +15,10 @@ import dev.triumphteam.cmd.core.annotation.Command; import dev.triumphteam.cmd.core.annotation.Default; import dev.triumphteam.cmd.core.annotation.Description; +import dev.triumphteam.cmd.core.annotation.Optional; import dev.triumphteam.cmd.core.annotation.SubCommand; import dev.triumphteam.cmd.core.annotation.Suggestion; import me.clip.placeholderapi.PlaceholderAPI; -import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -58,9 +58,14 @@ public void viewPersonal(@NotNull Player player) { @SubCommand("ver") @Permission("crazycrates.command.player.key.others") - public void viewOthers(CommandSender sender, @Suggestion("online-players") Player target) { - if (target == sender) { - viewPersonal(target); + public void viewOthers(CommandSender sender, @Optional @Suggestion("online-players") Player target) { + if (target == sender || target == null) { + if (!(sender instanceof Player player)) { + sender.sendMessage(Messages.must_be_a_player.getMessage()); + return; + } + + viewPersonal(player); return; } @@ -69,9 +74,9 @@ public void viewOthers(CommandSender sender, @Suggestion("online-players") Playe placeholders.put("%player%", target.getName()); placeholders.put("%crates_opened%", String.valueOf(this.userManager.getTotalCratesOpened(target.getUniqueId()))); - String header = Messages.other_player_no_keys_header.getMessage(placeholders, sender instanceof Player ? (Player) sender : null); + String header = Messages.other_player_no_keys_header.getMessage(placeholders, sender instanceof Player player ? player : null); - String otherPlayer = Messages.other_player_no_keys.getMessage("%player%", target.getName(), sender instanceof Player ? (Player) sender : null); + String otherPlayer = Messages.other_player_no_keys.getMessage("%player%", target.getName(), sender instanceof Player player ? player : null); getKeys(target, sender, header, otherPlayer); } @@ -84,21 +89,25 @@ public void onPlayerTransferKeys(Player sender, @Suggestion("crates") String cra // If the crate is menu or null. we return if (crate == null || crate.getCrateType() == CrateType.menu) { sender.sendMessage(Messages.not_a_crate.getMessage("%crate%", crateName, sender)); - return; } // If it's the same player, we return. if (player.getUniqueId().toString().equalsIgnoreCase(sender.getUniqueId().toString())) { sender.sendMessage(Messages.same_player.getMessage(sender)); - return; } - // If they don't have enough keys, we return. - if (this.userManager.getVirtualKeys(sender.getUniqueId(), crate.getName()) <= amount) { - sender.sendMessage(Messages.transfer_not_enough_keys.getMessage("%crate%", crate.getName(), sender)); + Map placeholders = new HashMap<>(); + placeholders.put("%crate%", crate.getName()); + placeholders.put("%key%", crate.getKeyName()); + placeholders.put("%amount%", String.valueOf(amount)); + placeholders.put("%player%", player.getName()); + + // If they don't have enough keys, we return. + if (this.userManager.getVirtualKeys(sender.getUniqueId(), crate.getName()) < amount) { + sender.sendMessage(Messages.transfer_not_enough_keys.getMessage(placeholders, sender)); return; } @@ -111,18 +120,11 @@ public void onPlayerTransferKeys(Player sender, @Suggestion("crates") String cra this.userManager.takeKeys(amount, sender.getUniqueId(), crate.getName(), KeyType.virtual_key, false); this.userManager.addKeys(amount, player.getUniqueId(), crate.getName(), KeyType.virtual_key); - Map placeholders = new HashMap<>(); - - placeholders.put("%crate%", crate.getName()); - placeholders.put("%key%", crate.getKeyName()); - placeholders.put("%amount%", String.valueOf(amount)); - placeholders.put("%player%", player.getName()); - sender.sendMessage(Messages.transfer_sent_keys.getMessage(placeholders, sender)); placeholders.put("%player%", sender.getName()); - player.sendMessage(Messages.transfer_received_keys.getMessage("%player%", sender.getName(), player)); + player.sendMessage(Messages.transfer_received_keys.getMessage(placeholders, player)); EventManager.logKeyEvent(player, sender, crate, KeyType.virtual_key, EventManager.KeyEventType.KEY_EVENT_RECEIVED, this.config.getProperty(ConfigKeys.log_to_file), this.config.getProperty(ConfigKeys.log_to_console)); } diff --git a/paper/src/main/java/com/badbones69/crazycrates/commands/subs/CrateBaseCommand.java b/paper/src/main/java/com/badbones69/crazycrates/commands/subs/CrateBaseCommand.java index f3b4ff545..c89d0bc33 100644 --- a/paper/src/main/java/com/badbones69/crazycrates/commands/subs/CrateBaseCommand.java +++ b/paper/src/main/java/com/badbones69/crazycrates/commands/subs/CrateBaseCommand.java @@ -278,7 +278,8 @@ public void onAdminList(CommandSender sender) { sender.sendMessage(MsgUtils.color("&e&lCrates:&f " + crates)); - if (!brokeCrates.isEmpty()) sender.sendMessage(MsgUtils.color("&6&lBroken Crates:&f " + brokeCrates.substring(0, brokeCrates.length() - 2))); + if (!brokeCrates.isEmpty()) + sender.sendMessage(MsgUtils.color("&6&lBroken Crates:&f " + brokeCrates.substring(0, brokeCrates.length() - 2))); sender.sendMessage(MsgUtils.color("&e&lAll Crate Locations:")); sender.sendMessage(MsgUtils.color("&c[ID]&8, &c[Crate]&8, &c[World]&8, &c[X]&8, &c[Y]&8, &c[Z]")); @@ -396,7 +397,7 @@ public void onAdminCratePreview(CommandSender sender, @Suggestion("crates") Stri } this.crazyHandler.getInventoryManager().addViewer(player); - this.crazyHandler.getInventoryManager().openNewCratePreview(player, crate,crate.getCrateType() == CrateType.cosmic || crate.getCrateType() == CrateType.casino); + this.crazyHandler.getInventoryManager().openNewCratePreview(player, crate, crate.getCrateType() == CrateType.cosmic || crate.getCrateType() == CrateType.casino); } @SubCommand("open-others") @@ -667,7 +668,8 @@ public void onAdminCrateMassOpen(Player player, @Suggestion("crates") String cra keysUsed++; } - if (crate.getCrateType() != CrateType.cosmic) this.userManager.addOpenedCrate(player.getUniqueId(), keysUsed, crate.getName()); + if (crate.getCrateType() != CrateType.cosmic) + this.userManager.addOpenedCrate(player.getUniqueId(), keysUsed, crate.getName()); if (!this.userManager.takeKeys(keysUsed, player.getUniqueId(), crate.getName(), type, false)) { MiscUtils.failedToTakeKey(player, crate); @@ -819,7 +821,8 @@ private void addKey(CommandSender sender, Player player, OfflinePlayer offlinePl sender.sendMessage(Messages.gave_a_player_keys.getMessage(placeholders)); } - if (!inventoryCheck || !fullMessage && !MiscUtils.isInventoryFull(player) && player.isOnline()) player.sendMessage(Messages.obtaining_keys.getMessage(placeholders, player)); + if (!inventoryCheck || !fullMessage && !MiscUtils.isInventoryFull(player) && player.isOnline()) + player.sendMessage(Messages.obtaining_keys.getMessage(placeholders, player)); EventManager.logKeyEvent(player, sender, crate, type, EventManager.KeyEventType.KEY_EVENT_GIVEN, this.config.getProperty(ConfigKeys.log_to_file), this.config.getProperty(ConfigKeys.log_to_console)); @@ -911,20 +914,27 @@ public void onAdminCrateTake(CommandSender sender, @Suggestion("key-types") Stri * @param amount the amount of keys. */ private void takeKey(CommandSender sender, @Nullable Player player, OfflinePlayer offlinePlayer, Crate crate, KeyType type, int amount) { + Map placeholders = new HashMap<>(); + + placeholders.put("%crate%", crate.getName()); + placeholders.put("%key%", crate.getKeyName()); + if (player != null) { + placeholders.put("%player%", player.getName()); + int totalKeys = this.userManager.getTotalKeys(player.getUniqueId(), crate.getName()); if (totalKeys < 1) { - if (this.plugin.isLogging()) - this.plugin.getLogger().warning("The player " + player.getName() + " does not have enough keys to take."); + this.plugin.debug(() -> "The player " + player.getName() + " does not have enough keys to take.", Level.WARNING); - if (sender instanceof Player human) { - human.sendMessage(Messages.cannot_take_keys.getMessage("%player%", player.getName(), human)); + placeholders.put("%amount%", String.valueOf(amount)); + if (sender instanceof Player human) { + human.sendMessage(Messages.cannot_take_keys.getMessage(placeholders, human)); return; } - sender.sendMessage(Messages.cannot_take_keys.getMessage("%player%", player.getName())); + sender.sendMessage(Messages.cannot_take_keys.getMessage(placeholders)); return; } @@ -938,15 +948,12 @@ private void takeKey(CommandSender sender, @Nullable Player player, OfflinePlaye this.userManager.takeKeys(amount, player.getUniqueId(), crate.getName(), type, false); - Map placeholders = new HashMap<>(); - placeholders.put("%amount%", String.valueOf(amount)); - placeholders.put("%player%", player.getName()); if (sender instanceof Player human) { - human.sendMessage(Messages.take_player_keys.getMessage("%player%", player.getName(), human)); + human.sendMessage(Messages.take_player_keys.getMessage(placeholders, human)); } else { - sender.sendMessage(Messages.take_player_keys.getMessage("%player%", player.getName())); + sender.sendMessage(Messages.take_player_keys.getMessage(placeholders)); } EventManager.logKeyEvent(player, sender, crate, type, EventManager.KeyEventType.KEY_EVENT_REMOVED, this.config.getProperty(ConfigKeys.log_to_file), this.config.getProperty(ConfigKeys.log_to_console)); @@ -954,10 +961,8 @@ private void takeKey(CommandSender sender, @Nullable Player player, OfflinePlaye return; } - Map placeholders = new HashMap<>(); - - placeholders.put("%amount%", String.valueOf(amount)); placeholders.put("%player%", offlinePlayer.getName()); + placeholders.put("%amount%", String.valueOf(amount)); if (sender instanceof Player human) { human.sendMessage(Messages.take_offline_player_keys.getMessage(placeholders, human)); @@ -968,6 +973,38 @@ private void takeKey(CommandSender sender, @Nullable Player player, OfflinePlaye this.userManager.takeOfflineKeys(offlinePlayer.getUniqueId(), crate.getName(), amount, type); } + @SubCommand("clear") + @Permission(value = "crazycrates.command.admin.clearkey", def = PermissionDefault.OP) + public void onClearKey(CommandSender sender, @Optional @Suggestion("online-players") Player player) { + if (player == null) { + if (sender instanceof Player human) { + clearKey(sender, human); + } else { + sender.sendMessage(Messages.must_be_a_player.getMessage()); + } + + return; + } + + clearKey(sender, player); + } + + private void clearKey(CommandSender sender, @NotNull Player player) { + Map placeholders = new HashMap<>(); + placeholders.put("%player%", player.getName()); + for (Crate crate : this.crateManager.getUsableCrates()) { + String crateName = crate.getName(); + int amount = this.userManager.getVirtualKeys(player.getUniqueId(), crateName); + if (amount > 0) { + this.userManager.takeKeys(amount, player.getUniqueId(), crateName, KeyType.virtual_key, false); + placeholders.put("%crate%", crateName); + placeholders.put("%key%", crate.getKeyName()); + placeholders.put("%amount%", String.valueOf(amount)); + sender.sendMessage(Messages.cleared_player_keys.getMessage(placeholders)); + } + } + } + @SubCommand("giveall") @Permission(value = "crazycrates.command.admin.giveall", def = PermissionDefault.OP) public void onAdminCrateGiveAllKeys(CommandSender sender, @Suggestion("key-types") @ArgName("key-type") String keyType, @Suggestion("crates") @ArgName("crate-name") String crateName, @Suggestion("numbers") int amount) {