This commit is contained in:
nulli0n 2023-01-29 17:43:22 +06:00
parent a419c9e147
commit 390f7d0149
12 changed files with 51 additions and 26 deletions

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -45,27 +45,27 @@
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId> <artifactId>NMS</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>V1_17_R1</artifactId> <artifactId>V1_17_R1</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>V1_18_R2</artifactId> <artifactId>V1_18_R2</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>V1_19_R1</artifactId> <artifactId>V1_19_R1</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>V1_19_R2</artifactId> <artifactId>V1_19_R2</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>fr.neatmonster</groupId> <groupId>fr.neatmonster</groupId>

View File

@ -420,6 +420,11 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme
return EnchantManager.isEnchantmentFullOfCharges(item, this); return EnchantManager.isEnchantmentFullOfCharges(item, this);
} }
@Override
public int getCharges(@NotNull ItemStack item) {
return EnchantManager.getEnchantmentCharges(item, this);
}
@Override @Override
public void consumeCharges(@NotNull ItemStack item) { public void consumeCharges(@NotNull ItemStack item) {
EnchantManager.consumeEnchantmentCharges(item, this); EnchantManager.consumeEnchantmentCharges(item, this);

View File

@ -70,6 +70,8 @@ public interface IEnchantment {
boolean isChargesFuel(@NotNull ItemStack item); boolean isChargesFuel(@NotNull ItemStack item);
int getCharges(@NotNull ItemStack item);
boolean isFullOfCharges(@NotNull ItemStack item); boolean isFullOfCharges(@NotNull ItemStack item);
boolean isOutOfCharges(@NotNull ItemStack item); boolean isOutOfCharges(@NotNull ItemStack item);

View File

@ -131,7 +131,11 @@ public class EnchantRegrowth extends ExcellentEnchant implements PassiveEnchant,
public void action() { public void action() {
for (LivingEntity entity : this.getEntities()) { for (LivingEntity entity : this.getEntities()) {
EnchantManager.getEquippedEnchants(entity, EnchantRegrowth.class).forEach((item, enchants) -> { 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);
}
});
}); });
} }
} }

View File

@ -19,6 +19,7 @@ import su.nightexpress.excellentenchants.ExcellentEnchantsAPI;
import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant;
import su.nightexpress.excellentenchants.enchantment.EnchantManager; import su.nightexpress.excellentenchants.enchantment.EnchantManager;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -56,7 +57,7 @@ public class EnchantAnvilListener extends AbstractListener<ExcellentEnchants> {
private boolean handleRename(@NotNull PrepareAnvilEvent e, private boolean handleRename(@NotNull PrepareAnvilEvent e,
@NotNull ItemStack first, @NotNull ItemStack second, @NotNull ItemStack result) { @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; if (result.getType() != first.getType()) return false;
ItemStack result2 = new ItemStack(result); ItemStack result2 = new ItemStack(result);
@ -71,16 +72,22 @@ public class EnchantAnvilListener extends AbstractListener<ExcellentEnchants> {
@NotNull ItemStack first, @NotNull ItemStack second, @NotNull ItemStack result) { @NotNull ItemStack first, @NotNull ItemStack second, @NotNull ItemStack result) {
if (second.getType().isAir()) return false; if (second.getType().isAir()) return false;
Set<ExcellentEnchant> chargeable = EnchantManager.getExcellentEnchantments(first).keySet().stream() Set<ExcellentEnchant> chargeables = EnchantManager.getExcellentEnchantments(first).keySet().stream()
.filter(en -> en.isChargesEnabled() && en.isChargesFuel(second) && !en.isFullOfCharges(first)) .filter(en -> en.isChargesEnabled() && en.isChargesFuel(second) && !en.isFullOfCharges(first))
.collect(Collectors.toSet()); .collect(Collectors.toSet());
if (chargeable.isEmpty()) return false; if (chargeables.isEmpty()) return false;
ItemStack result2 = new ItemStack(first); 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); 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; return true;
} }
@ -92,12 +99,14 @@ public class EnchantAnvilListener extends AbstractListener<ExcellentEnchants> {
ItemStack result2 = new ItemStack(result.getType().isAir() ? first : result); ItemStack result2 = new ItemStack(result.getType().isAir() ? first : result);
Map<ExcellentEnchant, Integer> enchantments = EnchantManager.getExcellentEnchantments(first); Map<ExcellentEnchant, Integer> enchantments = EnchantManager.getExcellentEnchantments(first);
Map<ExcellentEnchant, Integer> charges = new HashMap<>(enchantments.keySet().stream().collect(Collectors.toMap(k -> k, v -> v.getCharges(first))));
AtomicInteger repairCost = new AtomicInteger(e.getInventory().getRepairCost()); AtomicInteger repairCost = new AtomicInteger(e.getInventory().getRepairCost());
// Merge only if it's Item + Item, Item + Enchanted book or Enchanted Book + Enchanted Book // 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()) { if (second.getType() == Material.ENCHANTED_BOOK || second.getType() == first.getType()) {
EnchantManager.getExcellentEnchantments(second).forEach((enchant, level) -> { 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))); 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<ExcellentEnchants> {
enchantments.forEach((enchant, level) -> { enchantments.forEach((enchant, level) -> {
if (EnchantManager.addEnchantment(result2, enchant, level, false)) { if (EnchantManager.addEnchantment(result2, enchant, level, false)) {
repairCost.addAndGet(enchant.getAnvilMergeCost(level)); repairCost.addAndGet(enchant.getAnvilMergeCost(level));
EnchantManager.setEnchantmentCharges(result2, enchant, charges.getOrDefault(enchant, 0));
} }
}); });
@ -123,7 +133,10 @@ public class EnchantAnvilListener extends AbstractListener<ExcellentEnchants> {
if (e.getRawSlot() != 2) return; if (e.getRawSlot() != 2) return;
ItemStack item = e.getCurrentItem(); 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(); Player player = (Player) e.getWhoClicked();
if (player.getLevel() < inventory.getRepairCost()) return; if (player.getLevel() < inventory.getRepairCost()) return;
@ -137,7 +150,7 @@ public class EnchantAnvilListener extends AbstractListener<ExcellentEnchants> {
ItemStack second = inventory.getItem(1); ItemStack second = inventory.getItem(1);
if (second != null && !second.getType().isAir()) { if (second != null && !second.getType().isAir()) {
second.setAmount(second.getAmount() - 1); second.setAmount(second.getAmount() - count);
} }
inventory.setItem(0, null); inventory.setItem(0, null);
//inventory.setItem(1, null); //inventory.setItem(1, null);

View File

@ -84,9 +84,10 @@ public class ProtocolHook {
ItemMeta meta = copy.getItemMeta(); ItemMeta meta = copy.getItemMeta();
if (meta == null) return item; if (meta == null) return item;
List<String> lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
Map<ExcellentEnchant, Integer> enchants = EnchantManager.getExcellentEnchantments(item); Map<ExcellentEnchant, Integer> enchants = EnchantManager.getExcellentEnchantments(item);
if (enchants.isEmpty()) return item;
List<String> lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
enchants.keySet().forEach(enchant -> lore.removeIf(line -> line.contains(enchant.getDisplayName()))); enchants.keySet().forEach(enchant -> lore.removeIf(line -> line.contains(enchant.getDisplayName())));
if (isCreative) { if (isCreative) {
enchants.forEach((enchant, level) -> { enchants.forEach((enchant, level) -> {

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId> <artifactId>NMS</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId> <artifactId>NMS</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId> <artifactId>NMS</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId> <artifactId>NMS</artifactId>
<version>3.3.0.3</version> <version>3.3.0.4</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -7,7 +7,7 @@
<groupId>su.nightexpress.excellentenchants</groupId> <groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>ExcellentEnchants</artifactId> <artifactId>ExcellentEnchants</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>3.3.0.3</version> <version>3.3.0.4</version>
<modules> <modules>
<module>Core</module> <module>Core</module>
<module>NMS</module> <module>NMS</module>