diff --git a/Core/pom.xml b/Core/pom.xml
index 11f6598..1aa7dea 100644
--- a/Core/pom.xml
+++ b/Core/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
@@ -45,27 +45,27 @@
su.nightexpress.excellentenchants
NMS
- 3.3.0.3
+ 3.3.0.4
su.nightexpress.excellentenchants
V1_17_R1
- 3.3.0.3
+ 3.3.0.4
su.nightexpress.excellentenchants
V1_18_R2
- 3.3.0.3
+ 3.3.0.4
su.nightexpress.excellentenchants
V1_19_R1
- 3.3.0.3
+ 3.3.0.4
su.nightexpress.excellentenchants
V1_19_R2
- 3.3.0.3
+ 3.3.0.4
fr.neatmonster
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/ExcellentEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/ExcellentEnchant.java
index 7d1b016..4070b41 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/ExcellentEnchant.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/ExcellentEnchant.java
@@ -420,6 +420,11 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme
return EnchantManager.isEnchantmentFullOfCharges(item, this);
}
+ @Override
+ public int getCharges(@NotNull ItemStack item) {
+ return EnchantManager.getEnchantmentCharges(item, this);
+ }
+
@Override
public void consumeCharges(@NotNull ItemStack item) {
EnchantManager.consumeEnchantmentCharges(item, this);
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/IEnchantment.java b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/IEnchantment.java
index 5fec1c7..962dd98 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/IEnchantment.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/IEnchantment.java
@@ -70,6 +70,8 @@ public interface IEnchantment {
boolean isChargesFuel(@NotNull ItemStack item);
+ int getCharges(@NotNull ItemStack item);
+
boolean isFullOfCharges(@NotNull ItemStack item);
boolean isOutOfCharges(@NotNull ItemStack item);
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantRegrowth.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantRegrowth.java
index c7b6773..95cebf0 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantRegrowth.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantRegrowth.java
@@ -131,7 +131,11 @@ public class EnchantRegrowth extends ExcellentEnchant implements PassiveEnchant,
public void action() {
for (LivingEntity entity : this.getEntities()) {
EnchantManager.getEquippedEnchants(entity, EnchantRegrowth.class).forEach((item, enchants) -> {
- enchants.forEach((enchant, level) -> enchant.onTrigger(entity, item, level));
+ enchants.forEach((enchant, level) -> {
+ if (enchant.onTrigger(entity, item, level)) {
+ enchant.consumeCharges(item);
+ }
+ });
});
}
}
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantAnvilListener.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantAnvilListener.java
index d302896..1e2e33a 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantAnvilListener.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantAnvilListener.java
@@ -19,6 +19,7 @@ import su.nightexpress.excellentenchants.ExcellentEnchantsAPI;
import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant;
import su.nightexpress.excellentenchants.enchantment.EnchantManager;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@@ -56,7 +57,7 @@ public class EnchantAnvilListener extends AbstractListener {
private boolean handleRename(@NotNull PrepareAnvilEvent e,
@NotNull ItemStack first, @NotNull ItemStack second, @NotNull ItemStack result) {
- if (!second.getType().isAir()) return false;
+ if (!second.getType().isAir() && (second.getType() == first.getType() || second.getType() == Material.ENCHANTED_BOOK)) return false;
if (result.getType() != first.getType()) return false;
ItemStack result2 = new ItemStack(result);
@@ -71,16 +72,22 @@ public class EnchantAnvilListener extends AbstractListener {
@NotNull ItemStack first, @NotNull ItemStack second, @NotNull ItemStack result) {
if (second.getType().isAir()) return false;
- Set chargeable = EnchantManager.getExcellentEnchantments(first).keySet().stream()
+ Set chargeables = EnchantManager.getExcellentEnchantments(first).keySet().stream()
.filter(en -> en.isChargesEnabled() && en.isChargesFuel(second) && !en.isFullOfCharges(first))
.collect(Collectors.toSet());
- if (chargeable.isEmpty()) return false;
+ if (chargeables.isEmpty()) return false;
ItemStack result2 = new ItemStack(first);
- chargeable.forEach(enchant -> EnchantManager.rechargeEnchantmentCharges(result2, enchant));
- PDCUtil.setData(result2, RECHARGED, true);
+
+ int count = 0;
+ while (count < second.getAmount() && !chargeables.stream().allMatch(en -> en.isFullOfCharges(result2))) {
+ chargeables.forEach(enchant -> EnchantManager.rechargeEnchantmentCharges(result2, enchant));
+ count++;
+ }
+
+ PDCUtil.setData(result2, RECHARGED, count);
e.setResult(result2);
- this.plugin.runTask(c -> e.getInventory().setRepairCost(chargeable.size()), false);
+ this.plugin.runTask(c -> e.getInventory().setRepairCost(chargeables.size()), false);
return true;
}
@@ -92,12 +99,14 @@ public class EnchantAnvilListener extends AbstractListener {
ItemStack result2 = new ItemStack(result.getType().isAir() ? first : result);
Map enchantments = EnchantManager.getExcellentEnchantments(first);
+ Map charges = new HashMap<>(enchantments.keySet().stream().collect(Collectors.toMap(k -> k, v -> v.getCharges(first))));
AtomicInteger repairCost = new AtomicInteger(e.getInventory().getRepairCost());
// Merge only if it's Item + Item, Item + Enchanted book or Enchanted Book + Enchanted Book
if (second.getType() == Material.ENCHANTED_BOOK || second.getType() == first.getType()) {
EnchantManager.getExcellentEnchantments(second).forEach((enchant, level) -> {
enchantments.merge(enchant, level, (oldLvl, newLvl) -> (oldLvl.equals(newLvl)) ? (Math.min(enchant.getMaxLevel(), oldLvl + 1)) : (Math.max(oldLvl, newLvl)));
+ charges.merge(enchant, enchant.getCharges(second), Integer::sum);
});
}
@@ -105,6 +114,7 @@ public class EnchantAnvilListener extends AbstractListener {
enchantments.forEach((enchant, level) -> {
if (EnchantManager.addEnchantment(result2, enchant, level, false)) {
repairCost.addAndGet(enchant.getAnvilMergeCost(level));
+ EnchantManager.setEnchantmentCharges(result2, enchant, charges.getOrDefault(enchant, 0));
}
});
@@ -123,7 +133,10 @@ public class EnchantAnvilListener extends AbstractListener {
if (e.getRawSlot() != 2) return;
ItemStack item = e.getCurrentItem();
- if (item == null || !PDCUtil.getBooleanData(item, RECHARGED)) return;
+ if (item == null) return;
+
+ int count = PDCUtil.getIntData(item, RECHARGED);
+ if (count == 0) return;
Player player = (Player) e.getWhoClicked();
if (player.getLevel() < inventory.getRepairCost()) return;
@@ -137,7 +150,7 @@ public class EnchantAnvilListener extends AbstractListener {
ItemStack second = inventory.getItem(1);
if (second != null && !second.getType().isAir()) {
- second.setAmount(second.getAmount() - 1);
+ second.setAmount(second.getAmount() - count);
}
inventory.setItem(0, null);
//inventory.setItem(1, null);
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java b/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java
index 5cd0ee7..600d044 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java
@@ -84,9 +84,10 @@ public class ProtocolHook {
ItemMeta meta = copy.getItemMeta();
if (meta == null) return item;
- List lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
Map enchants = EnchantManager.getExcellentEnchantments(item);
+ if (enchants.isEmpty()) return item;
+ List lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
enchants.keySet().forEach(enchant -> lore.removeIf(line -> line.contains(enchant.getDisplayName())));
if (isCreative) {
enchants.forEach((enchant, level) -> {
diff --git a/NMS/pom.xml b/NMS/pom.xml
index 53441d4..44321c5 100644
--- a/NMS/pom.xml
+++ b/NMS/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
diff --git a/V1_17_R1/pom.xml b/V1_17_R1/pom.xml
index f60befc..6399ebd 100644
--- a/V1_17_R1/pom.xml
+++ b/V1_17_R1/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
@@ -26,7 +26,7 @@
su.nightexpress.excellentenchants
NMS
- 3.3.0.3
+ 3.3.0.4
diff --git a/V1_18_R2/pom.xml b/V1_18_R2/pom.xml
index 1a202cc..3d0ad72 100644
--- a/V1_18_R2/pom.xml
+++ b/V1_18_R2/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
@@ -26,7 +26,7 @@
su.nightexpress.excellentenchants
NMS
- 3.3.0.3
+ 3.3.0.4
diff --git a/V1_19_R1/pom.xml b/V1_19_R1/pom.xml
index 9fa190a..7c2aa0c 100644
--- a/V1_19_R1/pom.xml
+++ b/V1_19_R1/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
@@ -26,7 +26,7 @@
su.nightexpress.excellentenchants
NMS
- 3.3.0.3
+ 3.3.0.4
diff --git a/V1_19_R2/pom.xml b/V1_19_R2/pom.xml
index 177f3e2..d34d5bb 100644
--- a/V1_19_R2/pom.xml
+++ b/V1_19_R2/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.3.0.3
+ 3.3.0.4
4.0.0
@@ -26,7 +26,7 @@
su.nightexpress.excellentenchants
NMS
- 3.3.0.3
+ 3.3.0.4
diff --git a/pom.xml b/pom.xml
index 39bd877..0c6d612 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
su.nightexpress.excellentenchants
ExcellentEnchants
pom
- 3.3.0.3
+ 3.3.0.4
Core
NMS