Added the permission checks for max enchantments to apply.

New Permission: enchants.maxallowed.# of enchants they can apply
New Locale: enchants.maxallowed
This commit is contained in:
Kiran Hart 2020-03-21 01:30:13 -04:00 committed by Brianna
parent a40ddd325b
commit fc7ffefc2a
3 changed files with 30 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import com.songoda.epicenchants.utils.Tuple;
import com.songoda.epicenchants.utils.itemnbtapi.NBTItem;
import com.songoda.epicenchants.utils.single.GeneralUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
@ -37,6 +38,16 @@ public class BookListener extends ItemListener {
return;
}
// get total amount of enchantments on item
int currentEnchantmentTotal = instance.getEnchantUtils().getEnchants(toApply).size();
int maxAllowedApply = instance.getEnchantUtils().getMaximumEnchantsCanApply((Player) event.getWhoClicked());
// item is at max enchantments
if (currentEnchantmentTotal >= maxAllowedApply) {
instance.getLocale().getMessage("enchants.maxallowed").processPlaceholder("max_enchants", maxAllowedApply).sendPrefixedMessage(event.getWhoClicked());
return;
}
int level = cursor.getInteger("level");
int successRate = cursor.getInteger("success-rate");
int destroyRate = cursor.getInteger("destroy-rate");

View File

@ -11,11 +11,13 @@ import com.songoda.epicenchants.utils.itemnbtapi.NBTItem;
import com.songoda.epicenchants.utils.objects.ItemBuilder;
import com.songoda.epicenchants.utils.settings.Settings;
import com.songoda.epicenchants.utils.single.GeneralUtils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
@ -141,4 +143,20 @@ public class EnchantUtils {
output.removeLore(TextUtils.formatText(text));
return output.build();
}
public int getMaximumEnchantsCanApply(Player p) {
int max = 0;
if (p.isOp()) return 100; // in theory no single item will have 100 enchantments at a time.
for (PermissionAttachmentInfo effectivePermission : p.getEffectivePermissions()) {
if (!effectivePermission.getPermission().startsWith("epicenchants.maxapply.")) continue;
String node[] = effectivePermission.getPermission().split("\\.");
if (Methods.isInt(node[node.length - 1])) {
int num = Integer.parseInt(node[node.length - 1]);
if (num > max) max = num;
}
}
return max;
}
}

View File

@ -63,5 +63,6 @@ enchants:
alreadyapplied: '&cYou already have that enchant applied on this item.'
protected: '&7This book would have broken your item, luckily it was protected!'
success: '&7You have successfully applied &6{enchant}&r&7.'
maxallowed: '&cYou cannot apply more than &4{max_enchants} &cenchants!'
book:
discover: '&7You examine the &6{group_color}{group_name} &7Enchantment Book, and discover &6{enchant_format}&7!'