9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-29 11:59:21 +00:00

internal rework of permissions and commands

This commit is contained in:
LoJoSho
2023-01-12 13:28:21 -06:00
parent 65257d8a3f
commit 734cde8aa1
3 changed files with 267 additions and 208 deletions

View File

@@ -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;
}

View File

@@ -28,14 +28,14 @@ public class CosmeticCommandTabComplete implements TabCompleter {
List<String> 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;
}
}