diff --git a/src/main/java/fr/openmc/core/features/city/City.java b/src/main/java/fr/openmc/core/features/city/City.java index 2499422a4..8b26b2e68 100644 --- a/src/main/java/fr/openmc/core/features/city/City.java +++ b/src/main/java/fr/openmc/core/features/city/City.java @@ -33,6 +33,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.stream.Collectors; @@ -741,7 +742,7 @@ public void updateRank(DBCityRank oldRank, DBCityRank newRank) { * @param member The UUID of the member to check. * @return The CityRank object representing the member's rank, or null if not found. */ - public DBCityRank getRankOfMember(UUID member) { + public @Nullable DBCityRank getRankOfMember(UUID member) { for (DBCityRank rank : cityRanks) { if (rank.getMembersSet().contains(member)) { return rank; diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java index 97029ecd4..19445c10c 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java @@ -118,4 +118,52 @@ void get(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlaye if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; new CityPermsMenu(sender, player.getUniqueId(), false).open(); } + + @Subcommand("removeall") + @CommandPermission("omc.commands.city.perm.removeall") + @Description("Retirer toutes les permissions d'un membre") + public static void removeAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) { + if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; + if (!CityPermsConditions.canModifyPerms(sender, null)) return; + + City city = CityManager.getPlayerCity(sender.getUniqueId()); + + if (city == null) { + MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + + if (!city.getMembers().contains(player.getUniqueId())) { + MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false); + return; + } + + for (CityPermission permission : CityPermission.values()) { + if (permission == CityPermission.OWNER) continue; + city.removePermission(player.getUniqueId(), permission); + } + } + + @Subcommand("addall") + @CommandPermission("omc.commands.city.perm.addall") + @Description("Ajouter toutes les permissions à un membre") + public static void addAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) { + if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; + if (!CityPermsConditions.canModifyPerms(sender, null)) return; + + City city = CityManager.getPlayerCity(sender.getUniqueId()); + if (city == null) { + MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (!city.getMembers().contains(player.getUniqueId())) { + MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false); + return; + } + + for (CityPermission permission : CityPermission.values()) { + if (permission == CityPermission.OWNER) continue; + city.addPermission(player.getUniqueId(), permission); + } + } } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityKickCondition.java b/src/main/java/fr/openmc/core/features/city/conditions/CityKickCondition.java index 544190f50..29eeb72f9 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityKickCondition.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityKickCondition.java @@ -43,6 +43,11 @@ public static boolean canCityKickPlayer(City city, Player player, OfflinePlayer MessagesManager.sendMessage(player, Component.text("Tu ne peux pas exclure le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false); return false; } + + if (city.getRankOfMember(player.getUniqueId()).getPriority() <= city.getRankOfMember(playerToKick.getUniqueId()).getPriority()) { + MessagesManager.sendMessage(player, Component.text("Tu ne peux pas exclure un membre ayant un grade supérieur ou égal au tien"), Prefix.CITY, MessageType.ERROR, false); + return false; + } return true; } } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java index 869c8fb15..1ddb7898f 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java @@ -11,6 +11,9 @@ import fr.openmc.core.features.city.commands.CityPermsCommands; import fr.openmc.core.items.CustomItemRegistry; import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.MessagesManager; +import fr.openmc.core.utils.messages.Prefix; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; @@ -79,10 +82,12 @@ public List getItems() { ); itemMeta.lore(edit ? lore : List.of()); }).setOnClick(inventoryClickEvent -> { - if (!edit) return; - CityPermsCommands.swap(player, CacheOfflinePlayer.getOfflinePlayer(memberUUID), permission); - player.closeInventory(); - this.open(); + if (!edit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions des membres"), Prefix.CITY, MessageType.ERROR, true); + else { + CityPermsCommands.swap(player, CacheOfflinePlayer.getOfflinePlayer(memberUUID), permission); + new CityPermsMenu(player, memberUUID, true).open(); + } }).hide(ItemUtils.getDataComponentType()); items.add(itemBuilder); @@ -110,6 +115,32 @@ public Map getButtons() { itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page suivante"))); }).setNextPageButton()); + if (edit) { + map.put(52, new ItemBuilder(this, Material.RED_DYE, itemMeta -> { + itemMeta.displayName(Component.text("§cTout retirer")); + itemMeta.lore(List.of(Component.text("§7Cliquez pour retirer toutes les permissions du membre"))); + }).setOnClick(inventoryClickEvent -> { + if (!edit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions des membres"), Prefix.CITY, MessageType.ERROR, true); + else { + CityPermsCommands.removeAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); + new CityPermsMenu(getOwner(), memberUUID, true).open(); + } + })); + + map.put(53, new ItemBuilder(this, Material.LIME_DYE, itemMeta -> { + itemMeta.displayName(Component.text("§aTout ajouter")); + itemMeta.lore(List.of(Component.text("§7Cliquez pour ajouter toutes les permissions au membre"))); + }).setOnClick(inventoryClickEvent -> { + if (!edit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions des membres"), Prefix.CITY, MessageType.ERROR, true); + else { + CityPermsCommands.addAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); + new CityPermsMenu(getOwner(), memberUUID, true).open(); + } + })); + } + return map; } diff --git a/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java b/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java index 225ef42d0..a77ecca71 100644 --- a/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java +++ b/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java @@ -156,6 +156,24 @@ public void swapPermission(CityPermission permission) { } } + /** + * Clears all permissions from this rank. + */ + public void clearPermissions() { + permissionsSet.clear(); + } + + /** + * Adds all available permissions to this rank, except OWNER. + */ + public void addAllPermissions() { + for (CityPermission permission : CityPermission.values()) { + if (permission != CityPermission.OWNER) { + permissionsSet.add(permission); + } + } + } + /** * Adds a member to this rank. * diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java index 858c440c1..de8fda260 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java @@ -189,6 +189,9 @@ public static void assignRank(Player player, String rankName, OfflinePlayer memb MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); return; } + if (!CityRankCondition.canModifyRankPermissions(city, player, rank.getPriority())) { + return; + } city.changeRank(player, member.getUniqueId(), rank); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java index 6107c0532..f905c8838 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java @@ -56,10 +56,6 @@ public void edit( MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false); return; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_RANKS)) { - MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); - return; - } DBCityRank rank = city.getRankByName(rankName); if (rank == null) { MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); @@ -89,10 +85,67 @@ public static void swapPermission(Player player, DBCityRank rank, CityPermission MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); return; } + if (!CityRankCondition.canModifyRankPermissions(city, player, rank.getPriority())) { + return; + } rank.swapPermission(permission); } + /** + * Add all permissions to a rank. + * + * @param player The player who is adding the permissions. + * @param rank The rank to add the permissions to. + */ + public static void addAllPermissions(Player player, DBCityRank rank) { + City city = CityManager.getPlayerCity(player.getUniqueId()); + if (city == null) { + MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (rank == null) { + MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (!CityRankCondition.canModifyRankPermissions(city, player, rank.getPriority())) { + return; + } + + rank.addAllPermissions(); + } + + /** + * Remove all permissions from a rank. + * + * @param player The player who is removing the permissions. + * @param rank The rank to remove the permissions from. + */ + public static void removeAllPermissions(Player player, DBCityRank rank) { + City city = CityManager.getPlayerCity(player.getUniqueId()); + if (city == null) { + MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (rank == null) { + MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } + if (!CityRankCondition.canModifyRankPermissions(city, player, rank.getPriority())) { + return; + } + + rank.clearPermissions(); + } + @Subcommand("assign") @CommandPermission("omc.commands.city.rank.assign") public void assign(Player player, @Optional @Named("rank") @SuggestWith(CityRanksAutoComplete.class) String rankName, @Optional @Named("player") @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer target) { diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java index a267edc57..8dc52a3de 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java @@ -74,6 +74,9 @@ public static boolean canRenameRank(City city, Player player, String oldRankName MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); return false; } + if (!canModifyRankPermissions(city, player, rank.getPriority())) { + return false; + } if (city.getRanks().size() >= RankLimitRewards.getRankLimit(city.getLevel())) { MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_MAX.getMessage(), Prefix.CITY, MessageType.ERROR, false); return false; @@ -98,6 +101,7 @@ public static boolean canDeleteRank(City city, Player player, String rankName) { MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); return false; } + DBCityRank rank = city.getRankByName(rankName); if (rank == null) { MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false); @@ -109,6 +113,16 @@ public static boolean canDeleteRank(City city, Player player, String rankName) { return false; } + return canModifyRankPermissions(city, player, rank.getPriority()); + } + + public static boolean canModifyRankPermissions(City city, Player player, int rankPriority) { + if (city.getRankOfMember(player.getUniqueId()) == null) return true; + + if (city.getRankOfMember(player.getUniqueId()).getPriority() >= rankPriority) { + MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_CANNOT_MODIFY_HIGHER.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return false; + } return true; } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java index 78fb66970..7fa3d9eb3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java @@ -8,6 +8,7 @@ import fr.openmc.core.features.city.models.DBCityRank; import fr.openmc.core.features.city.sub.milestone.rewards.RankLimitRewards; import fr.openmc.core.features.city.sub.rank.CityRankAction; +import fr.openmc.core.features.city.sub.rank.CityRankCondition; import fr.openmc.core.features.city.sub.rank.CityRankManager; import fr.openmc.core.items.CustomItemRegistry; import fr.openmc.core.utils.ItemUtils; @@ -100,6 +101,12 @@ private Map createRank() { Component.text("§7Priorité actuelle : §d" + this.newRank.getPriority()) )); }).setOnClick(inventoryClickEvent -> { + if (!canManageRanks) return; + + if (!CityRankCondition.canModifyRankPermissions(city, getOwner(), newRank.getPriority())) { + return; + } + if (inventoryClickEvent.isLeftClick()) { new CityRankDetailsMenu(getOwner(), city, newRank.withPriority((newRank.getPriority() + 1) % 18)).open(); } else if (inventoryClickEvent.isRightClick()) { @@ -165,7 +172,8 @@ private Map createRank() { Map map = new HashMap<>(); Player player = getOwner(); - boolean canManageRanks = city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_RANKS); + boolean canManageRanks = city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_RANKS) + && CityRankCondition.canModifyRankPermissions(city, player, oldRank.getPriority()); List lorePriority = new ArrayList<>(List.of(Component.text("§7Priorité actuelle : §d" + this.newRank.getPriority()))); if (canManageRanks) { @@ -241,11 +249,8 @@ private Map createRank() { itemMeta.displayName(Component.text("§bLes permissions du grade")); itemMeta.lore(lorePerm); }).setOnClick(inventoryClickEvent -> { - if (!canManageRanks) { - MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions"), Prefix.CITY, MessageType.ERROR, false); - return; - } - new CityRankPermsMenu(getOwner(), oldRank, newRank, true, 0).open(); + if (!canManageRanks) new CityRankPermsMenu(getOwner(), oldRank, newRank, false, 0).open(); + else new CityRankPermsMenu(getOwner(), oldRank, newRank, true, 0).open(); })); map.put(18, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:refuse_btn").getBest(), itemMeta -> { diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java index 40b68a966..3b27a6659 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java @@ -6,6 +6,7 @@ import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityPermission; +import fr.openmc.core.features.city.sub.rank.CityRankCondition; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.messages.MessageType; @@ -65,13 +66,22 @@ public List getItems() { itemMeta.displayName(Component.text(player.getName() != null ? player.getName() : "§c§oJoueur inconnu").decoration(TextDecoration.ITALIC, false)); itemMeta.lore(lore); }).setOnClick(event -> { - if (city.hasPermission(player.getUniqueId(), CityPermission.OWNER)) return; + if (city.hasPermission(player.getUniqueId(), CityPermission.OWNER)) { + MessagesManager.sendMessage(getOwner(), MessagesManager.Message.PLAYER_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false); + return; + } if (!city.hasPermission(getOwner().getUniqueId(), CityPermission.ASSIGN_RANKS)) { MessagesManager.sendMessage(getOwner(), MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false); getOwner().closeInventory(); return; } + + if (city.getRankOfMember(player.getUniqueId()) != null) { + if (!CityRankCondition.canModifyRankPermissions(city, getOwner(), city.getRankOfMember(player.getUniqueId()).getPriority())) { + return; + } + } new CityRankAssignMenu(getOwner(), uuid, city).open(); })); diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java index 9267c815c..4b2f108ea 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java @@ -59,12 +59,6 @@ public CityRankPermsMenu(Player owner, DBCityRank oldRank, DBCityRank newRank, b public List getItems() { List items = new ArrayList<>(); - if (!this.canEdit) { - MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions"), Prefix.CITY, MessageType.ERROR, false); - getOwner().closeInventory(); - return null; - } - for (CityPermission permission : CityPermission.values()) { if (permission == CityPermission.OWNER) continue; @@ -78,8 +72,12 @@ public List getItems() { ); itemMeta.lore(lore); }).setOnClick(inventoryClickEvent -> { - CityRankCommands.swapPermission(getOwner(), newRank, permission); - new CityRankPermsMenu(getOwner(), oldRank, newRank, true, page).open(); + if (!canEdit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier ce grade"), Prefix.CITY, MessageType.ERROR, true); + else { + CityRankCommands.swapPermission(getOwner(), newRank, permission); + new CityRankPermsMenu(getOwner(), oldRank, newRank, true, page).open(); + } }).hide(ItemUtils.getDataComponentType()); items.add(itemBuilder); @@ -110,6 +108,32 @@ public Map getButtons() { }).setOnClick(inventoryClickEvent -> new CityRankPermsMenu(getOwner(), oldRank, newRank, canEdit, page + 1).open())); } + if (canEdit) { + map.put(52, new ItemBuilder(this, Material.RED_DYE, itemMeta -> { + itemMeta.displayName(Component.text("§cTout retirer")); + itemMeta.lore(List.of(Component.text("§7Cliquez pour retirer toutes les permissions du membre"))); + }).setOnClick(inventoryClickEvent -> { + if (!canEdit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions des grades"), Prefix.CITY, MessageType.ERROR, true); + else { + CityRankCommands.removeAllPermissions(getOwner(), newRank); + new CityRankPermsMenu(getOwner(), oldRank, newRank, true, page).open(); + } + })); + + map.put(53, new ItemBuilder(this, Material.LIME_DYE, itemMeta -> { + itemMeta.displayName(Component.text("§aTout ajouter")); + itemMeta.lore(List.of(Component.text("§7Cliquez pour ajouter toutes les permissions au membre"))); + }).setOnClick(inventoryClickEvent -> { + if (!canEdit) + MessagesManager.sendMessage(getOwner(), Component.text("§cVous n'avez pas la permission de modifier les permissions des grades"), Prefix.CITY, MessageType.ERROR, true); + else { + CityRankCommands.addAllPermissions(getOwner(), newRank); + new CityRankPermsMenu(getOwner(), oldRank, newRank, true, page).open(); + } + })); + } + return map; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java index deb7743cb..bc29546b6 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java @@ -8,6 +8,7 @@ import fr.openmc.core.features.city.menu.main.CityMenu; import fr.openmc.core.features.city.models.DBCityRank; import fr.openmc.core.features.city.sub.rank.CityRankAction; +import fr.openmc.core.features.city.sub.rank.CityRankCondition; import fr.openmc.core.items.CustomItemRegistry; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; @@ -71,7 +72,7 @@ public void onClose(InventoryCloseEvent event) { Component.text("§7Priorité : §d" + priority).decoration(TextDecoration.ITALIC, false), Component.text("§7Permissions : §b" + rank.getPermissionsSet().size()).decoration(TextDecoration.ITALIC, false), Component.empty(), - Component.text(canManageRanks ? "§e§lCLIQUEZ POUR MODIFIER LE ROLE" : "§e§lCLIQUEZ POUR S'Y INFORMER") + Component.text(canManageRanks && CityRankCondition.canModifyRankPermissions(city, getOwner(), priority) ? "§e§lCLIQUEZ POUR MODIFIER LE ROLE" : "§e§lCLIQUEZ POUR S'Y INFORMER") )); } ).setOnClick(inventoryClickEvent -> new CityRankDetailsMenu(player, city, rank).open()) diff --git a/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java b/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java index 54b9e5f7f..b5c7f7c5b 100644 --- a/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java @@ -159,6 +159,7 @@ public enum Message { CITY_RANKS_MAX(Component.text("Le nombre maximum de grades a été atteint, tu ne peux pas en ajouter d'autres.")), CITY_RANKS_ALREADY_EXIST(Component.text("Ce grade existe déjà.")), CITY_RANKS_CANNOT_DELETE(Component.text("Tu ne peux pas supprimer le grade de propriétaire.")), + CITY_RANKS_CANNOT_MODIFY_HIGHER(Component.text("Tu ne peux pas modifier un grade supérieur ou égal au tien.")), CITY_NOT_FOUND(Component.text("La ville n'existe pas")),