Skip to content
Draft
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
3 changes: 2 additions & 1 deletion 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
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
39 changes: 35 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(), 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);
Expand Down Expand Up @@ -110,6 +115,32 @@ public Map<Integer, ItemBuilder> 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;
}

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 @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -100,6 +101,12 @@ private Map<Integer, ItemBuilder> 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()) {
Expand Down Expand Up @@ -165,7 +172,8 @@ private Map<Integer, ItemBuilder> createRank() {
Map<Integer, ItemBuilder> 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<Component> lorePriority = new ArrayList<>(List.of(Component.text("§7Priorité actuelle : §d" + this.newRank.getPriority())));
if (canManageRanks) {
Expand Down Expand Up @@ -241,11 +249,8 @@ private Map<Integer, ItemBuilder> 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 -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -65,13 +66,22 @@ public List<ItemStack> 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();
}));
Expand Down
Loading
Loading