diff --git a/build.gradle.kts b/build.gradle.kts index 033b4ad3..78c59609 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -130,7 +130,36 @@ bukkit { commands { register("cosmetic") { - description = "Base command" + description = "Base Cosmetic Command" + } + } + permissions { + register("hmccosmetics.cmd.default") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.apply") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.unapply") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.dye") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.wardrobe") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.menu") { + default = BukkitPluginDescription.Permission.Default.TRUE; + } + register("hmccosmetics.cmd.setlocation") { + default = BukkitPluginDescription.Permission.Default.OP; + } + register("hmccosmetics.cmd.dataclear") { + default = BukkitPluginDescription.Permission.Default.OP; + } + register("hmccosmetics.cmd.reload") { + default = BukkitPluginDescription.Permission.Default.OP; } } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java index 1968d05f..85c769ee 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java @@ -38,6 +38,11 @@ public class CosmeticCommand implements CommandExecutor { // Console return true; } + if (!sender.hasPermission("hmccosmetics.cmd.default")) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + CosmeticUser user = CosmeticUsers.getUser(((Player) sender).getUniqueId()); Menu menu = Menus.getMenu(Settings.getDefaultMenu()); @@ -54,225 +59,244 @@ public class CosmeticCommand implements CommandExecutor { menu.openMenu(user); return true; } - else if (args[0].equalsIgnoreCase("reload")) { - if (!sender.hasPermission("HMCCosmetics.reload") || !sender.isOp()) { - MessagesUtil.sendMessage(sender, "no-permission"); - return true; - } - HMCCosmeticsPlugin.setup(); - MessagesUtil.sendMessage(sender, "reloaded"); - return true; - } - else if (args[0].equalsIgnoreCase("apply")) { - Player player = null; - Cosmetic cosmetic; + Player player = sender instanceof Player ? (Player) sender : null; - if (sender instanceof Player) player = ((Player) sender).getPlayer(); - if (args.length >= 3) player = Bukkit.getPlayer(args[2]); - - if (args.length == 1) { - MessagesUtil.sendMessage(player, "not-enough-args"); - return true; - } - - cosmetic = Cosmetics.getCosmetic(args[1]); - - if (cosmetic == null) { - MessagesUtil.sendMessage(sender, "invalid-cosmetic"); - return true; - } - - if (player == null) { - MessagesUtil.sendMessage(sender, "invalid-player"); - return true; - } - - CosmeticUser user = CosmeticUsers.getUser(player); - - if (!user.canEquipCosmetic(cosmetic)) { - MessagesUtil.sendMessage(player, "no-cosmetic-permission"); - return true; - } - - TagResolver placeholders = - TagResolver.resolver(Placeholder.parsed("cosmetic", cosmetic.getId()), - TagResolver.resolver(Placeholder.parsed("player", player.getName())), - TagResolver.resolver(Placeholder.parsed("cosmeticslot", cosmetic.getSlot().name()))); - - MessagesUtil.sendMessage(player, "equip-cosmetic", placeholders); - - user.addPlayerCosmetic(cosmetic); - user.updateCosmetic(cosmetic.getSlot()); - return true; - } - else if (args[0].equalsIgnoreCase("unapply")) { - Player player = null; - CosmeticSlot cosmeticSlot = null; - - if (sender instanceof Player) player = ((Player) sender).getPlayer(); - if (args.length >= 3) player = Bukkit.getPlayer(args[2]); - - if (!EnumUtils.isValidEnum(CosmeticSlot.class, args[1].toUpperCase())) { - MessagesUtil.sendMessage(sender, "invalid-slot"); - return true; - } - cosmeticSlot = CosmeticSlot.valueOf(args[1].toUpperCase()); - - if (player == null) { - MessagesUtil.sendMessage(sender, "invalid-player"); - return true; - } - - CosmeticUser user = CosmeticUsers.getUser(player); - - if (user.getCosmetic(cosmeticSlot) == null) { - MessagesUtil.sendMessage(sender, "no-cosmetic-slot"); - return true; - } - - TagResolver placeholders = - TagResolver.resolver(Placeholder.parsed("cosmetic", user.getCosmetic(cosmeticSlot).getId()), - TagResolver.resolver(Placeholder.parsed("player", player.getName())), - TagResolver.resolver(Placeholder.parsed("cosmeticslot", cosmeticSlot.name()))); - - MessagesUtil.sendMessage(player, "unequip-cosmetic", placeholders); - - user.removeCosmeticSlot(cosmeticSlot); - user.updateCosmetic(cosmeticSlot); - return true; - } - else if (args[0].equalsIgnoreCase("wardrobe")) { - Player player = null; - - if (sender instanceof Player) player = ((Player) sender).getPlayer(); - if (args.length >= 2) player = Bukkit.getPlayer(args[1]); - - if (!player.hasPermission("HMCCosmetic.wardrobe")) { - MessagesUtil.sendMessage(sender, "no-permission"); - return true; - } - - if (player == null) { - MessagesUtil.sendMessage(sender, "invalid-player"); - return true; - } - - CosmeticUser user = CosmeticUsers.getUser(player); - - user.toggleWardrobe(); - return true; - } - // cosmetic menu exampleMenu playerName - else if (args[0].equalsIgnoreCase("menu")) { - if (args.length == 1) return true; - Menu menu = Menus.getMenu(args[1]); - Player player = null; - - if (sender instanceof Player) player = ((Player) sender).getPlayer(); - if (args.length >= 3) player = Bukkit.getPlayer(args[2]); - CosmeticUser user = CosmeticUsers.getUser(player); - - if (user == null) { - MessagesUtil.sendMessage(sender, "invalid-player"); - return true; - } - - if (menu == null) { - MessagesUtil.sendMessage(sender, "invalid-menu"); - return true; - } - - menu.openMenu(user); - return true; - } - - else if (args[0].equalsIgnoreCase("dataclear")) { - if (args.length == 1) return true; - OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]); - if (player == null) return true; - if (!sender.hasPermission("HMCCosmetic.dataclear") && !sender.isOp()) { - MessagesUtil.sendMessage(sender, "no-permission"); - return true; - } - Database.clearData(player.getUniqueId()); - sender.sendMessage("Cleared data for " + player.getName()); - return true; - } - - else if (args[0].equalsIgnoreCase("dye") && args.length >= 2) { - Player player = sender instanceof Player ? (Player) sender : null; - if (player == null) return true; - CosmeticUser user = CosmeticUsers.getUser(player); - if (user == null) return true; - if (!sender.hasPermission("HMCCosmetic.dye") && !sender.isOp()) { - MessagesUtil.sendMessage(sender, "no-permission"); - return true; - } - - CosmeticSlot slot = CosmeticSlot.valueOf(args[1]); - Cosmetic cosmetic = user.getCosmetic(slot); - - if (args.length >= 3) { - if (!args[2].contains("#") || args[2].isEmpty()) { - MessagesUtil.sendMessage(player, "invalid-color"); + String firstArgs = args[0].toLowerCase(); + switch (firstArgs) { + case ("reload") -> { + if (!sender.hasPermission("HMCCosmetics.cmd.reload") || !sender.isOp()) { + MessagesUtil.sendMessage(sender, "no-permission"); return true; } - Color color = ServerUtils.hex2Rgb(args[2]); - if (color == null) { - MessagesUtil.sendMessage(player, "invalid-color"); + HMCCosmeticsPlugin.setup(); + MessagesUtil.sendMessage(sender, "reloaded"); + return true; + } + case ("apply") -> { + if (!sender.hasPermission("hmccosmetics.cmd.apply")) { + MessagesUtil.sendMessage(sender, "no-permission"); return true; } - user.addPlayerCosmetic(cosmetic, color); // #FFFFFF - } else { - DyeMenu.openMenu(user, cosmetic); - } - } + Cosmetic cosmetic; - else if (args[0].equalsIgnoreCase("setlocation")) { + if (sender instanceof Player) player = ((Player) sender).getPlayer(); + if (args.length >= 3) player = Bukkit.getPlayer(args[2]); - Player player = sender instanceof Player ? (Player) sender : null; - if (player == null) return true; + if (args.length == 1) { + MessagesUtil.sendMessage(player, "not-enough-args"); + return true; + } - if (args.length < 2) { - MessagesUtil.sendMessage(player, "not-enough-args"); + cosmetic = Cosmetics.getCosmetic(args[1]); + + if (cosmetic == null) { + MessagesUtil.sendMessage(sender, "invalid-cosmetic"); + return true; + } + + if (player == null) { + MessagesUtil.sendMessage(sender, "invalid-player"); + return true; + } + + CosmeticUser user = CosmeticUsers.getUser(player); + + if (!user.canEquipCosmetic(cosmetic)) { + MessagesUtil.sendMessage(player, "no-cosmetic-permission"); + return true; + } + + TagResolver placeholders = + TagResolver.resolver(Placeholder.parsed("cosmetic", cosmetic.getId()), + TagResolver.resolver(Placeholder.parsed("player", player.getName())), + TagResolver.resolver(Placeholder.parsed("cosmeticslot", cosmetic.getSlot().name()))); + + MessagesUtil.sendMessage(player, "equip-cosmetic", placeholders); + + user.addPlayerCosmetic(cosmetic); + user.updateCosmetic(cosmetic.getSlot()); return true; } + case ("unapply") -> { + if (!sender.hasPermission("hmccosmetics.cmd.unapply")) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + if (args.length == 1) { + MessagesUtil.sendMessage(player, "not-enough-args"); + return true; + } - if (args[1].equalsIgnoreCase("wardrobelocation")) { - WardrobeSettings.setWardrobeLocation(player.getLocation()); - MessagesUtil.sendMessage(player, "set-wardrobe-location"); + CosmeticSlot cosmeticSlot = null; + + if (sender instanceof Player) player = ((Player) sender).getPlayer(); + if (args.length >= 3) player = Bukkit.getPlayer(args[2]); + + if (!EnumUtils.isValidEnum(CosmeticSlot.class, args[1].toUpperCase())) { + MessagesUtil.sendMessage(sender, "invalid-slot"); + return true; + } + cosmeticSlot = CosmeticSlot.valueOf(args[1].toUpperCase()); + + if (player == null) { + MessagesUtil.sendMessage(sender, "invalid-player"); + return true; + } + + CosmeticUser user = CosmeticUsers.getUser(player); + + if (user.getCosmetic(cosmeticSlot) == null) { + MessagesUtil.sendMessage(sender, "no-cosmetic-slot"); + return true; + } + + TagResolver placeholders = + TagResolver.resolver(Placeholder.parsed("cosmetic", user.getCosmetic(cosmeticSlot).getId()), + TagResolver.resolver(Placeholder.parsed("player", player.getName())), + TagResolver.resolver(Placeholder.parsed("cosmeticslot", cosmeticSlot.name()))); + + MessagesUtil.sendMessage(player, "unequip-cosmetic", placeholders); + + user.removeCosmeticSlot(cosmeticSlot); + user.updateCosmetic(cosmeticSlot); return true; } + case ("wardrobe") -> { + if (sender instanceof Player) player = ((Player) sender).getPlayer(); + if (args.length >= 2) player = Bukkit.getPlayer(args[1]); - if (args[1].equalsIgnoreCase("viewerlocation")) { - WardrobeSettings.setViewerLocation(player.getLocation()); - MessagesUtil.sendMessage(player, "set-wardrobe-viewing"); + if (!sender.hasPermission("hmccosmetics.cmd.wardrobe")) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + + if (player == null) { + MessagesUtil.sendMessage(sender, "invalid-player"); + return true; + } + + CosmeticUser user = CosmeticUsers.getUser(player); + + user.toggleWardrobe(); return true; } + // cosmetic menu exampleMenu playerName + case ("menu") -> { + if (args.length == 1) return true; + if (!sender.hasPermission("hmccosmetics.cmd.menu")) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + Menu menu = Menus.getMenu(args[1]); - if (args[1].equalsIgnoreCase("leavelocation")) { - WardrobeSettings.setLeaveLocation(player.getLocation()); - MessagesUtil.sendMessage(player, "set-wardrobe-leaving"); + if (sender instanceof Player) player = ((Player) sender).getPlayer(); + if (args.length >= 3) player = Bukkit.getPlayer(args[2]); + CosmeticUser user = CosmeticUsers.getUser(player); + + if (user == null) { + MessagesUtil.sendMessage(sender, "invalid-player"); + return true; + } + + if (menu == null) { + MessagesUtil.sendMessage(sender, "invalid-menu"); + return true; + } + + menu.openMenu(user); return true; } - } - - else if (args[0].equalsIgnoreCase("dump") && args.length == 1) { - Player player = sender instanceof Player ? (Player) sender : null; - if (player == null) return true; - CosmeticUser user = CosmeticUsers.getUser(player); - if (user == null) return true; - if (!sender.hasPermission("HMCCosmetic.dump") && !sender.isOp()) { - MessagesUtil.sendMessage(sender, "no-permission"); + case ("dataclear") -> { + if (args.length == 1) return true; + OfflinePlayer selectedPlayer = Bukkit.getOfflinePlayer(args[1]); + if (selectedPlayer == null) return true; + if (!sender.hasPermission("hmccosmetics.cmd.dataclear") && !sender.isOp()) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + Database.clearData(selectedPlayer.getUniqueId()); + sender.sendMessage("Cleared data for " + selectedPlayer.getName()); return true; } - player.sendMessage("Passengers -> " + player.getPassengers()); - if (user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { - player.sendMessage("Backpack Location -> " + user.getBackpackEntity().getLocation()); + case ("dye") -> { + if (player == null) return true; + CosmeticUser user = CosmeticUsers.getUser(player); + if (user == null) return true; + if (!sender.hasPermission("hmccosmetics.cmd.dye") && !sender.isOp()) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + + if (args.length == 1) { + MessagesUtil.sendMessage(player, "not-enough-args"); + return true; + } + + CosmeticSlot slot = CosmeticSlot.valueOf(args[1]); + Cosmetic cosmetic = user.getCosmetic(slot); + + if (args.length >= 3) { + if (!args[2].contains("#") || args[2].isEmpty()) { + MessagesUtil.sendMessage(player, "invalid-color"); + return true; + } + Color color = ServerUtils.hex2Rgb(args[2]); + if (color == null) { + MessagesUtil.sendMessage(player, "invalid-color"); + return true; + } + user.addPlayerCosmetic(cosmetic, color); // #FFFFFF + } else { + DyeMenu.openMenu(user, cosmetic); + } + } + case ("setlocation") -> { + if (!sender.hasPermission("hmccosmetics.cmd.setlocation")) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + + if (player == null) return true; + + if (args.length < 2) { + MessagesUtil.sendMessage(player, "not-enough-args"); + return true; + } + + if (args[1].equalsIgnoreCase("wardrobelocation")) { + WardrobeSettings.setWardrobeLocation(player.getLocation()); + MessagesUtil.sendMessage(player, "set-wardrobe-location"); + return true; + } + + if (args[1].equalsIgnoreCase("viewerlocation")) { + WardrobeSettings.setViewerLocation(player.getLocation()); + MessagesUtil.sendMessage(player, "set-wardrobe-viewing"); + return true; + } + + if (args[1].equalsIgnoreCase("leavelocation")) { + WardrobeSettings.setLeaveLocation(player.getLocation()); + MessagesUtil.sendMessage(player, "set-wardrobe-leaving"); + return true; + } + } + case ("dump") -> { + if (player == null) return true; + CosmeticUser user = CosmeticUsers.getUser(player); + if (user == null) return true; + if (!sender.hasPermission("HMCCosmetic.cmd.dump") && !sender.isOp()) { + MessagesUtil.sendMessage(sender, "no-permission"); + return true; + } + player.sendMessage("Passengers -> " + player.getPassengers()); + if (user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) { + player.sendMessage("Backpack Location -> " + user.getBackpackEntity().getLocation()); + } + player.sendMessage("Cosmetics -> " + user.getCosmetic()); + player.sendMessage("EntityId -> " + player.getEntityId()); + return true; } - player.sendMessage("Cosmetics -> " + user.getCosmetic()); - player.sendMessage("EntityId -> " + player.getEntityId()); - return true; } return true; } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java index a20a63dd..315220b5 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java @@ -28,14 +28,14 @@ public class CosmeticCommandTabComplete implements TabCompleter { List finalCompletitons = new ArrayList<>(); if (args.length == 1) { - completions.add("apply"); - completions.add("wardrobe"); - completions.add("unapply"); - completions.add("menu"); - completions.add("reload"); - completions.add("dataclear"); - completions.add("dye"); - completions.add("setlocation"); + if (hasPermission(sender, "hmccosmetics.cmd.apply")) completions.add("apply"); + if (hasPermission(sender, "hmccosmetics.cmd.unapply")) completions.add("unapply"); + if (hasPermission(sender, "hmccosmetics.cmd.menu")) completions.add("menu"); + if (hasPermission(sender, "hmccosmetics.cmd.reload")) completions.add("reload"); + if (hasPermission(sender, "hmccosmetics.cmd.wardrobe")) completions.add("wardrobe"); + if (hasPermission(sender, "hmccosmetics.cmd.dataclear")) completions.add("dataclear"); + if (hasPermission(sender, "hmccosmetics.cmd.dye")) completions.add("dye"); + if (hasPermission(sender, "hmccosmetics.cmd.setlocation")) completions.add("setlocation"); StringUtil.copyPartialMatches(args[0], completions, finalCompletitons); } @@ -50,8 +50,8 @@ public class CosmeticCommandTabComplete implements TabCompleter { completions.addAll(applyCommandComplete(user, args)); } case "unapply" -> { - for (CosmeticSlot slot : CosmeticSlot.values()) { - completions.add(slot.toString().toUpperCase()); + for (Cosmetic cosmetic : user.getCosmetic()) { + completions.add(cosmetic.getSlot().toString().toUpperCase()); } } case "menu" -> { @@ -115,4 +115,10 @@ public class CosmeticCommandTabComplete implements TabCompleter { } return completitions; } + + private boolean hasPermission(CommandSender sender, String permission) { + if (sender.isOp()) return true; + if (sender.hasPermission(permission)) return true; + return false; + } }