Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/main/java/fr/openmc/core/features/city/City.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -786,7 +787,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) {
}

if (hasPermission(playerUUID, CityPermission.OWNER)) {
MessagesManager.sendMessage(sender, MessagesManager.Message.PLAYER_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(sender, MessagesManager.Message.CITY_IS_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas
}

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

Expand Down Expand Up @@ -65,7 +65,7 @@ void add(
}

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

Expand Down Expand Up @@ -97,7 +97,7 @@ void remove(
}

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

Expand All @@ -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, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), 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, MessagesManager.Message.TARGET_IN_OTHER_CITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}

for (CityPermission permission : CityPermission.values()) {
if (permission == CityPermission.OWNER) continue;
city.addPermission(player.getUniqueId(), permission);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
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 org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

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

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

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

if (city.hasPermission(playerToKick.getUniqueId(), CityPermission.OWNER)) {
MessagesManager.sendMessage(player, Component.text("Tu ne peux pas exclure le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return false;
}

if (city.getRankOfMember(player.getUniqueId()).getPriority() <= city.getRankOfMember(playerToKick.getUniqueId()).getPriority()) {
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_KICK.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return false;
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
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 org.bukkit.entity.Player;

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

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

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

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

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

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

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

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ private void handleChunkClaimClick(Player player, int chunkX, int chunkZ, boolea
}

if (!hasPermissionClaim) {
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}

Expand Down Expand Up @@ -363,7 +363,7 @@ private void handleChunkUnclaimClick(Player player, int chunkX, int chunkZ, bool
}

if (!hasPermissionClaim) {
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_CLAIM.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}

Expand Down
28 changes: 24 additions & 4 deletions src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -79,10 +82,12 @@ public List<ItemStack> 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(), MessagesManager.Message.CITY_CANNOT_ACCESS_PERMS.getMessage(), 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);
Expand Down Expand Up @@ -110,6 +115,21 @@ public Map<Integer, ItemBuilder> getButtons() {
itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page suivante")));
}).setNextPageButton());

if (edit) {
map.put(53, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> {
itemMeta.displayName(Component.text("Gérer toutes les permissions du membre"));
itemMeta.lore(List.of(
Component.text("§cClique-gauche pour tout retirer"),
Component.text("§aClique-droit pour tout ajouter")
));
}).setOnClick(inventoryClickEvent -> {
if (inventoryClickEvent.isLeftClick()) CityPermsCommands.removeAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID));
else if (inventoryClickEvent.isRightClick()) CityPermsCommands.addAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID));

new CityPermsMenu(getOwner(), memberUUID, true).open();
}));
}

return map;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public List<ItemStack> getItems() {
));
}).setOnClick(inventoryClickEvent -> {
if (!hasPermissionOwner) {
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_ISNT_OWNER.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}

Expand Down
18 changes: 18 additions & 0 deletions src/main/java/fr/openmc/core/features/city/models/DBCityRank.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,12 @@ public static void assignRank(Player player, String rankName, OfflinePlayer memb
}

if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) {
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);
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);
return;
}

if (!city.hasPermission(player.getUniqueId(), CityPermission.ASSIGN_RANKS)) {
MessagesManager.sendMessage(player, MessagesManager.Message.PLAYER_NO_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false);
MessagesManager.sendMessage(player, MessagesManager.Message.CITY_CANNOT_ACCESS_PERMS.getMessage(), Prefix.CITY, MessageType.ERROR, false);
return;
}
DBCityRank rank = city.getRankByName(rankName);
Expand All @@ -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);
}
Expand Down
Loading
Loading