Skip to content

Commit 1db47be

Browse files
authored
Changements sur les grades (#1056)
* feat: add methods to manage all permissions for city ranks * feat: add commands to add and remove all permissions for city members * les ✨ points d'exclamation ✨ * feat: implement rank permission checks and improve rank management functionality * Combine remove/add all perms in 1 button * Right click verification * Migrate messages to MessagesManager * Update Messages * Remove hasPlayedBefore verif to show to member in assign menu
1 parent c373857 commit 1db47be

17 files changed

Lines changed: 270 additions & 68 deletions

src/main/java/fr/openmc/core/features/city/City.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.bukkit.entity.Player;
3434
import org.bukkit.inventory.ItemStack;
3535
import org.jetbrains.annotations.NotNull;
36+
import org.jetbrains.annotations.Nullable;
3637

3738
import java.util.*;
3839
import java.util.stream.Collectors;
@@ -741,7 +742,7 @@ public void updateRank(DBCityRank oldRank, DBCityRank newRank) {
741742
* @param member The UUID of the member to check.
742743
* @return The CityRank object representing the member's rank, or null if not found.
743744
*/
744-
public DBCityRank getRankOfMember(UUID member) {
745+
public @Nullable DBCityRank getRankOfMember(UUID member) {
745746
for (DBCityRank rank : cityRanks) {
746747
if (rank.getMembersSet().contains(member)) {
747748
return rank;
@@ -786,7 +787,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) {
786787
}
787788

788789
if (hasPermission(playerUUID, CityPermission.OWNER)) {
789-
MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
790+
MessagesManager.sendMessage(sender, MessagesManager.Message.CITY_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
790791
return;
791792
}
792793

src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas
3333
}
3434

3535
if (!city.getMembers().contains(player.getUniqueId())) {
36-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false);
36+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
3737
return;
3838
}
3939

@@ -65,7 +65,7 @@ void add(
6565
}
6666

6767
if (!city.getMembers().contains(player.getUniqueId())) {
68-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false);
68+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
6969
return;
7070
}
7171

@@ -97,7 +97,7 @@ void remove(
9797
}
9898

9999
if (!city.getMembers().contains(player.getUniqueId())) {
100-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false);
100+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
101101
return;
102102
}
103103

@@ -118,4 +118,52 @@ void get(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlaye
118118
if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return;
119119
new CityPermsMenu(sender, player.getUniqueId(), false).open();
120120
}
121+
122+
@Subcommand("removeall")
123+
@CommandPermission("omc.commands.city.perm.removeall")
124+
@Description("Retirer toutes les permissions d'un membre")
125+
public static void removeAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) {
126+
if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return;
127+
if (!CityPermsConditions.canModifyPerms(sender, null)) return;
128+
129+
City city = CityManager.getPlayerCity(sender.getUniqueId());
130+
131+
if (city == null) {
132+
MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
133+
return;
134+
}
135+
136+
if (!city.getMembers().contains(player.getUniqueId())) {
137+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
138+
return;
139+
}
140+
141+
for (CityPermission permission : CityPermission.values()) {
142+
if (permission == CityPermission.OWNER) continue;
143+
city.removePermission(player.getUniqueId(), permission);
144+
}
145+
}
146+
147+
@Subcommand("addall")
148+
@CommandPermission("omc.commands.city.perm.addall")
149+
@Description("Ajouter toutes les permissions à un membre")
150+
public static void addAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) {
151+
if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return;
152+
if (!CityPermsConditions.canModifyPerms(sender, null)) return;
153+
154+
City city = CityManager.getPlayerCity(sender.getUniqueId());
155+
if (city == null) {
156+
MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
157+
return;
158+
}
159+
if (!city.getMembers().contains(player.getUniqueId())) {
160+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
161+
return;
162+
}
163+
164+
for (CityPermission permission : CityPermission.values()) {
165+
if (permission == CityPermission.OWNER) continue;
166+
city.addPermission(player.getUniqueId(), permission);
167+
}
168+
}
121169
}

src/main/java/fr/openmc/core/features/city/conditions/CityKickCondition.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import fr.openmc.core.utils.messages.MessageType;
66
import fr.openmc.core.utils.messages.MessagesManager;
77
import fr.openmc.core.utils.messages.Prefix;
8-
import net.kyori.adventure.text.Component;
98
import org.bukkit.OfflinePlayer;
109
import org.bukkit.entity.Player;
1110

@@ -30,17 +29,22 @@ public static boolean canCityKickPlayer(City city, Player player, OfflinePlayer
3029
}
3130

3231
if (player.getUniqueId().equals(playerToKick.getUniqueId())) {
33-
MessagesManager.sendMessage(player, Component.text("Tu ne peux pas t'exclure toi même de la ville"), Prefix.CITY, MessageType.ERROR, false);
32+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK_HIMSELF.getMessage(), Prefix.CITY, MessageType.ERROR, false);
3433
return false;
3534
}
3635

3736
if (!(city.hasPermission(player.getUniqueId(), CityPermission.KICK))) {
38-
MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission d'exclure un membre"), Prefix.CITY, MessageType.ERROR, false);
37+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK.getMessage(), Prefix.CITY, MessageType.ERROR, false);
3938
return false;
4039
}
4140

4241
if (city.hasPermission(playerToKick.getUniqueId(), CityPermission.OWNER)) {
43-
MessagesManager.sendMessage(player, Component.text("Tu ne peux pas exclure le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false);
42+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK.getMessage(), Prefix.CITY, MessageType.ERROR, false);
43+
return false;
44+
}
45+
46+
if (city.getRankOfMember(player.getUniqueId()).getPriority() <= city.getRankOfMember(playerToKick.getUniqueId()).getPriority()) {
47+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK.getMessage(), Prefix.CITY, MessageType.ERROR, false);
4448
return false;
4549
}
4650
return true;

src/main/java/fr/openmc/core/features/city/conditions/CityPermsConditions.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import fr.openmc.core.utils.messages.MessageType;
77
import fr.openmc.core.utils.messages.MessagesManager;
88
import fr.openmc.core.utils.messages.Prefix;
9-
import net.kyori.adventure.text.Component;
109
import org.bukkit.entity.Player;
1110

1211
import java.util.Objects;
@@ -18,7 +17,7 @@ public static boolean canSeePerms(Player sender, UUID playerUUID) {
1817
City senderCity = CityManager.getPlayerCity(sender.getUniqueId());
1918

2019
if (senderCity == null) {
21-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'habite aucune ville"), Prefix.CITY, MessageType.ERROR, false);
20+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_NO_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
2221
return false;
2322
}
2423

@@ -28,17 +27,17 @@ public static boolean canSeePerms(Player sender, UUID playerUUID) {
2827
}
2928

3029
if (!Objects.equals(senderCity.getUniqueId(), city.getUniqueId())) {
31-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'habite pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false);
30+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
3231
return false;
3332
}
3433

3534
if (!city.getMembers().contains(playerUUID)) {
36-
MessagesManager.sendMessage(sender, Component.text("Ce joueur n'est pas dans ta ville"), Prefix.CITY, MessageType.ERROR, false);
35+
MessagesManager.sendMessage(sender, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
3736
return false;
3837
}
3938

4039
if (city.hasPermission(playerUUID, CityPermission.OWNER)) {
41-
MessagesManager.sendMessage(sender, Component.text("Le propriétaire a les pleins pouvoirs"), Prefix.CITY, MessageType.ERROR, false);
40+
MessagesManager.sendMessage(sender, MessagesManager.Message.CITY_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
4241
return false;
4342
}
4443

@@ -54,12 +53,12 @@ public static boolean canModifyPerms(Player sender, CityPermission permission) {
5453
}
5554

5655
if (!(city.hasPermission(sender.getUniqueId(), CityPermission.PERMS))) {
57-
MessagesManager.sendMessage(sender, Component.text("Tu n'as pas la permission de gérer les permissions"), Prefix.CITY, MessageType.ERROR, false);
56+
MessagesManager.sendMessage(sender, MessagesManager.Message.CITY_CANNOT_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false);
5857
return false;
5958
}
6059

6160
if (!city.hasPermission(sender.getUniqueId(), permission) && permission == CityPermission.PERMS) {
62-
MessagesManager.sendMessage(sender, Component.text("Seul le propriétaire peut modifier cette permission"), Prefix.CITY, MessageType.ERROR, false);
61+
MessagesManager.sendMessage(sender, MessagesManager.Message.CITY_ONLY_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
6362
return false;
6463
}
6564

src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ private void handleChunkClaimClick(Player player, int chunkX, int chunkZ, boolea
327327
}
328328

329329
if (!hasPermissionClaim) {
330-
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
330+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
331331
return;
332332
}
333333

@@ -363,7 +363,7 @@ private void handleChunkUnclaimClick(Player player, int chunkX, int chunkZ, bool
363363
}
364364

365365
if (!hasPermissionClaim) {
366-
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
366+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
367367
return;
368368
}
369369

src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import fr.openmc.core.features.city.commands.CityPermsCommands;
1212
import fr.openmc.core.items.CustomItemRegistry;
1313
import fr.openmc.core.utils.cache.CacheOfflinePlayer;
14+
import fr.openmc.core.utils.messages.MessageType;
15+
import fr.openmc.core.utils.messages.MessagesManager;
16+
import fr.openmc.core.utils.messages.Prefix;
1417
import net.kyori.adventure.text.Component;
1518
import net.kyori.adventure.text.format.TextDecoration;
1619
import org.bukkit.Material;
@@ -79,10 +82,12 @@ public List<ItemStack> getItems() {
7982
);
8083
itemMeta.lore(edit ? lore : List.of());
8184
}).setOnClick(inventoryClickEvent -> {
82-
if (!edit) return;
83-
CityPermsCommands.swap(player, CacheOfflinePlayer.getOfflinePlayer(memberUUID), permission);
84-
player.closeInventory();
85-
this.open();
85+
if (!edit)
86+
MessagesManager.sendMessage(getOwner(), MessagesManager.Message.CITY_CANNOT_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, true);
87+
else {
88+
CityPermsCommands.swap(player, CacheOfflinePlayer.getOfflinePlayer(memberUUID), permission);
89+
new CityPermsMenu(player, memberUUID, true).open();
90+
}
8691
}).hide(ItemUtils.getDataComponentType());
8792

8893
items.add(itemBuilder);
@@ -110,6 +115,21 @@ public Map<Integer, ItemBuilder> getButtons() {
110115
itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page suivante")));
111116
}).setNextPageButton());
112117

118+
if (edit) {
119+
map.put(53, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> {
120+
itemMeta.displayName(Component.text("Gérer toutes les permissions du membre"));
121+
itemMeta.lore(List.of(
122+
Component.text("§cClique-gauche pour tout retirer"),
123+
Component.text("§aClique-droit pour tout ajouter")
124+
));
125+
}).setOnClick(inventoryClickEvent -> {
126+
if (inventoryClickEvent.isLeftClick()) CityPermsCommands.removeAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID));
127+
else if (inventoryClickEvent.isRightClick()) CityPermsCommands.addAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID));
128+
129+
new CityPermsMenu(getOwner(), memberUUID, true).open();
130+
}));
131+
}
132+
113133
return map;
114134
}
115135

src/main/java/fr/openmc/core/features/city/menu/CityTransferMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public List<ItemStack> getItems() {
7070
));
7171
}).setOnClick(inventoryClickEvent -> {
7272
if (!hasPermissionOwner) {
73-
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
73+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_ISNT_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
7474
return;
7575
}
7676

src/main/java/fr/openmc/core/features/city/models/DBCityRank.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,24 @@ public void swapPermission(CityPermission permission) {
156156
}
157157
}
158158

159+
/**
160+
* Clears all permissions from this rank.
161+
*/
162+
public void clearPermissions() {
163+
permissionsSet.clear();
164+
}
165+
166+
/**
167+
* Adds all available permissions to this rank, except OWNER.
168+
*/
169+
public void addAllPermissions() {
170+
for (CityPermission permission : CityPermission.values()) {
171+
if (permission != CityPermission.OWNER) {
172+
permissionsSet.add(permission);
173+
}
174+
}
175+
}
176+
159177
/**
160178
* Adds a member to this rank.
161179
*

src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ public static void assignRank(Player player, String rankName, OfflinePlayer memb
170170
}
171171

172172
if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) {
173-
MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette Feature ! Veuillez Améliorer votre Ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + "!"), Prefix.CITY, MessageType.ERROR, false);
173+
MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " !"), Prefix.CITY, MessageType.ERROR, false);
174174
return;
175175
}
176176

177177
if (!city.hasPermission(player.getUniqueId(), CityPermission.ASSIGN_RANKS)) {
178-
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false);
178+
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false);
179179
return;
180180
}
181181
DBCityRank rank = city.getRankByName(rankName);
@@ -189,6 +189,9 @@ public static void assignRank(Player player, String rankName, OfflinePlayer memb
189189
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_RANKS_NOT_EXIST.getMessage(), Prefix.CITY, MessageType.ERROR, false);
190190
return;
191191
}
192+
if (!CityRankCondition.canModifyRankPermissions(city, player, rank.getPriority())) {
193+
return;
194+
}
192195

193196
city.changeRank(player, member.getUniqueId(), rank);
194197
}

0 commit comments

Comments
 (0)