From 38af06c3d362988953a1f109d7084af81a777643 Mon Sep 17 00:00:00 2001 From: nulli0n Date: Wed, 12 Apr 2023 16:04:42 +0600 Subject: [PATCH] v3.3.3 --- .gitignore | 4 +- Core/pom.xml | 17 +++-- .../excellentenchants/ExcellentEnchants.java | 2 + .../api/enchantment/ExcellentEnchant.java | 15 ++-- .../api/enchantment/meta/Potioned.java | 9 --- .../command/BookCommand.java | 3 +- .../command/TierbookCommand.java | 3 +- .../excellentenchants/config/Config.java | 36 ++++++---- .../enchantment/EnchantManager.java | 64 ++++++----------- .../impl/armor/EnchantAquaman.java | 2 +- .../impl/armor/EnchantBunnyHop.java | 2 +- .../impl/armor/EnchantNightVision.java | 2 +- .../enchantment/impl/armor/EnchantSonic.java | 2 +- .../enchantment/impl/bow/EnchantEnderBow.java | 19 ++++- .../enchantment/impl/bow/EnchantGhast.java | 13 +++- .../impl/meta/ArrowImplementation.java | 4 +- .../impl/meta/PotionImplementation.java | 25 +++---- .../impl/tool/EnchantBlastMining.java | 5 +- .../impl/tool/EnchantDivineTouch.java | 4 +- .../enchantment/impl/tool/EnchantHaste.java | 2 +- .../impl/tool/EnchantReplanter.java | 21 ++++-- .../impl/tool/EnchantSilkChest.java | 11 +-- .../impl/tool/EnchantTelekinesis.java | 19 ++++- .../enchantment/impl/tool/EnchantTunnel.java | 3 +- .../impl/tool/EnchantVeinminer.java | 3 +- .../impl/weapon/EnchantNimble.java | 19 ++++- .../impl/weapon/EnchantThrifty.java | 4 +- .../listener/EnchantAnvilListener.java | 6 +- .../listener/EnchantGenericListener.java | 12 +--- .../menu/EnchantmentsListMenu.java | 11 +-- .../excellentenchants/tier/Tier.java | 4 +- NMS/pom.xml | 2 +- .../excellentenchants/nms/EnchantNMS.java | 48 +------------ V1_17_R1/pom.xml | 4 +- .../nms/v1_17_R1/CustomEffectInstance.java | 48 ------------- .../nms/v1_17_R1/V1_17_R1.java | 28 +++----- V1_18_R2/pom.xml | 4 +- .../nms/v1_18_R2/CustomEffectInstance.java | 48 ------------- .../nms/v1_18_R2/V1_18_R2.java | 28 +++----- V1_19_R1/pom.xml | 4 +- .../nms/v1_19_R1/CustomEffectInstance.java | 48 ------------- .../nms/v1_19_R1/V1_19_R1.java | 28 +++----- V1_19_R2/pom.xml | 4 +- .../nms/v1_19_R2/CustomEffectInstance.java | 50 ------------- .../nms/v1_19_R2/V1_19_R2.java | 28 +++----- V1_19_R3/pom.xml | 71 +++++++++++++++++++ .../nms/v1_19_R3/V1_19_R3.java | 68 ++++++++++++++++++ pom.xml | 5 +- 48 files changed, 389 insertions(+), 473 deletions(-) delete mode 100644 V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/CustomEffectInstance.java delete mode 100644 V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/CustomEffectInstance.java delete mode 100644 V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/CustomEffectInstance.java delete mode 100644 V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/CustomEffectInstance.java create mode 100644 V1_19_R3/pom.xml create mode 100644 V1_19_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R3/V1_19_R3.java diff --git a/.gitignore b/.gitignore index 3438c0f..e400327 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ /V1_19_R1/target/ /V1_19_R1/pom.xml.versionsBackup /V1_19_R2/target/ -/V1_19_R2/pom.xml.versionsBackup \ No newline at end of file +/V1_19_R2/pom.xml.versionsBackup +/V1_19_R3/target/ +/V1_19_R3/pom.xml.versionsBackup \ No newline at end of file diff --git a/Core/pom.xml b/Core/pom.xml index 0d3e595..a3238c8 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 @@ -55,27 +55,32 @@ su.nightexpress.excellentenchants NMS - 3.3.1 + 3.3.3 su.nightexpress.excellentenchants V1_17_R1 - 3.3.1 + 3.3.3 su.nightexpress.excellentenchants V1_18_R2 - 3.3.1 + 3.3.3 su.nightexpress.excellentenchants V1_19_R1 - 3.3.1 + 3.3.3 su.nightexpress.excellentenchants V1_19_R2 - 3.3.1 + 3.3.3 + + + su.nightexpress.excellentenchants + V1_19_R3 + 3.3.3 fr.neatmonster diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/ExcellentEnchants.java b/Core/src/main/java/su/nightexpress/excellentenchants/ExcellentEnchants.java index 139ff70..1e39860 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/ExcellentEnchants.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/ExcellentEnchants.java @@ -22,6 +22,7 @@ import su.nightexpress.excellentenchants.nms.v1_17_R1.V1_17_R1; import su.nightexpress.excellentenchants.nms.v1_18_R2.V1_18_R2; import su.nightexpress.excellentenchants.nms.v1_19_R1.V1_19_R1; import su.nightexpress.excellentenchants.nms.v1_19_R2.V1_19_R2; +import su.nightexpress.excellentenchants.nms.v1_19_R3.V1_19_R3; import su.nightexpress.excellentenchants.tier.TierManager; public class ExcellentEnchants extends NexPlugin { @@ -72,6 +73,7 @@ public class ExcellentEnchants extends NexPlugin { case V1_18_R2 -> new V1_18_R2(); case V1_19_R1 -> new V1_19_R1(); case V1_19_R2 -> new V1_19_R2(); + case V1_19_R3 -> new V1_19_R3(); }; return true; } 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 0b6f982..be97278 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 @@ -12,10 +12,7 @@ import su.nexmedia.engine.api.config.JOption; import su.nexmedia.engine.api.config.JYML; import su.nexmedia.engine.api.manager.IListener; import su.nexmedia.engine.lang.LangManager; -import su.nexmedia.engine.utils.ItemUtil; -import su.nexmedia.engine.utils.NumberUtil; -import su.nexmedia.engine.utils.Scaler; -import su.nexmedia.engine.utils.StringUtil; +import su.nexmedia.engine.utils.*; import su.nexmedia.engine.utils.random.Rnd; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.Placeholders; @@ -77,7 +74,8 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme this.cfg.reload(); this.displayName = JOption.create("Name", StringUtil.capitalizeFully(this.getId().replace("_", " ")), - "Enchantment display name. It will be shown in item lore.").read(cfg); + "Enchantment display name. It will be shown in item lore.") + .mapReader(Colorizer::apply).read(cfg); this.tier = plugin.getTierManager().getTierById(JOption.create("Tier", Placeholders.DEFAULT, "Enchantment tier. Must be a valid tier identifier from the 'tiers.yml'.").read(cfg)); @@ -88,7 +86,8 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme this.description = JOption.create("Description", new ArrayList<>(), "Enchantment description. It will be shown in item lore under enchantment name.", - "You can use 'Enchantment' placeholders: " + Placeholders.URL_PLACEHOLDERS).read(cfg); + "You can use 'Enchantment' placeholders: " + Placeholders.URL_PLACEHOLDERS) + .mapReader(Colorizer::apply).read(cfg); this.isTreasure = JOption.create("Is_Treasure", false, "Sets whether this enchantment is a treasure enchantment.", @@ -250,8 +249,8 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme if (!this.isChargesEnabled() || charges < 0) return this.getNameFormatted(level); int chargesMax = this.getChargesMax(level); - double percent = (double) charges / (double) chargesMax * 100D; - Map.Entry entry = Config.ENCHANTMENTS_CHARGES_FORMAT.get().floorEntry(percent); + int percent = (int) Math.ceil((double) charges / (double) chargesMax * 100D); + Map.Entry entry = Config.ENCHANTMENTS_CHARGES_FORMAT.get().floorEntry(percent); if (entry == null) return this.getNameFormatted(level); String format = entry.getValue().replace(Placeholders.GENERIC_AMOUNT, String.valueOf(charges)); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/meta/Potioned.java b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/meta/Potioned.java index ddc2c34..246074a 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/meta/Potioned.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/api/enchantment/meta/Potioned.java @@ -9,11 +9,6 @@ public interface Potioned { @NotNull Potioned getPotionImplementation(); - /*@NotNull - default UnaryOperator replacePlaceholders(int level) { - return this.getPotionImplementation().replacePlaceholders(level); - }*/ - default boolean isPermanent() { return this.getPotionImplementation().isPermanent(); } @@ -34,10 +29,6 @@ public interface Potioned { return this.getPotionImplementation().createEffect(level); } - default boolean hasEffect(@NotNull LivingEntity target) { - return this.getPotionImplementation().hasEffect(target); - } - default boolean addEffect(@NotNull LivingEntity target, int level) { return this.getPotionImplementation().addEffect(target, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java b/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java index 8733f39..8a218a7 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java @@ -9,6 +9,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.api.command.AbstractCommand; import su.nexmedia.engine.lang.LangManager; +import su.nexmedia.engine.utils.CollectionsUtil; import su.nexmedia.engine.utils.PlayerUtil; import su.nexmedia.engine.utils.StringUtil; import su.nexmedia.engine.utils.random.Rnd; @@ -49,7 +50,7 @@ public class BookCommand extends AbstractCommand { @NotNull public List getTab(@NotNull Player player, int arg, @NotNull String[] args) { if (arg == 1) { - return PlayerUtil.getPlayerNames(); + return CollectionsUtil.playerNames(player); } if (arg == 2) { return Arrays.stream(Enchantment.values()).map(e -> e.getKey().getKey()).toList(); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/command/TierbookCommand.java b/Core/src/main/java/su/nightexpress/excellentenchants/command/TierbookCommand.java index d5a3da9..f39631a 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/command/TierbookCommand.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/command/TierbookCommand.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.api.command.AbstractCommand; +import su.nexmedia.engine.utils.CollectionsUtil; import su.nexmedia.engine.utils.Placeholders; import su.nexmedia.engine.utils.PlayerUtil; import su.nexmedia.engine.utils.StringUtil; @@ -48,7 +49,7 @@ public class TierbookCommand extends AbstractCommand { @NotNull public List getTab(@NotNull Player player, int arg, @NotNull String[] args) { if (arg == 1) { - return PlayerUtil.getPlayerNames(); + return CollectionsUtil.playerNames(player); } if (arg == 2) { return plugin.getTierManager().getTierIds(); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/config/Config.java b/Core/src/main/java/su/nightexpress/excellentenchants/config/Config.java index 04c1e4d..0b75685 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/config/Config.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/config/Config.java @@ -21,23 +21,34 @@ public class Config { public static final JOption TASKS_ARROW_TRAIL_TICKS_INTERVAL = JOption.create("Tasks.Arrow_Trail.Tick_Interval", 1L, "Sets how often (in ticks) arrow trail particle effects will be spawned behind the arrow."); - public static final JOption TASKS_PASSIVE_POTION_EFFECTS_APPLY_INTERVAL = JOption.create("Tasks.Passive_Potion_Effects.Apply_Interval", 150L, - "Sets how often (in ticks) the plugin will apply permanent potion effects from enchanted items to an entity who wear them.", - "This setting does NOT refreshes currently active effects, but only attempts to add them if absent." + public static final JOption TASKS_PASSIVE_POTION_EFFECTS_APPLY_INTERVAL = JOption.create("Tasks.Passive_Potion_Effects.Apply_Interval", 100L, + "Sets how often (in ticks) the plugin will apply permanent potion effects from enchanted items to an entity who wear them." ); public static final JOption ENCHANTMENTS_CHARGES_ENABLED = JOption.create("Enchantments.Charges.Enabled", false, "Enables the enchantment Charges feature.", Placeholders.URL_WIKI + "Charges-System"); - public static final JOption> ENCHANTMENTS_CHARGES_FORMAT = new JOption>("Enchantments.Charges.Format", - (cfg, path, def) -> cfg.getSection(path).stream().collect(Collectors.toMap(k -> StringUtil.getDouble(k, 0), v -> Colorizer.apply(cfg.getString(path + "." + v, "")), (o,n) -> n, TreeMap::new)), + public static final JOption> ENCHANTMENTS_CHARGES_FORMAT = new JOption>("Enchantments.Charges.Format", + (cfg, path, def) -> { + TreeMap map = new TreeMap<>(); + for (String raw : cfg.getSection(path)) { + int percent = StringUtil.getInteger(raw, -1); + if (percent < 0) continue; + + String format = Colorizer.apply(cfg.getString(path + "." + raw, "")); + if (format.isEmpty()) continue; + + map.put(percent, format); + } + return map; + }, () -> { - TreeMap map = new TreeMap<>(); - map.put(0D, "#ff9a9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); - map.put(25D, "#ffc39a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); - map.put(50D, "#f6ff9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); - map.put(75D, "#bcff9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); + TreeMap map = new TreeMap<>(); + map.put(0, "#ff9a9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); + map.put(25, "#ffc39a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); + map.put(50, "#f6ff9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); + map.put(75, "#bcff9a(" + Placeholders.GENERIC_AMOUNT + "⚡)"); return map; }, "Enchantment charges format depends on amount of charges left (in percent).", @@ -76,12 +87,11 @@ public class Config { public static final JOption ENCHANTMENTS_DESCRIPTION_ENABLED = JOption.create("Enchantments.Description.Enabled", true, "When 'true', adds the enchantment description to item lore under enchantment names.", - "Note #1: You must have ProtocolLib installed for this feature to work (as well as for enchantments name display).", - "Note #2: Description is not shown while you're in Creative gamemode."); + "For Display-Mode = 2 description is not shown while you're in Creative gamemode."); public static final JOption ENCHANTMENTS_DESCRIPTION_FORMAT = JOption.create("Enchantments.Description.Format", "&8▸ " + Placeholders.GENERIC_DESCRIPTION, - "Sets the global enchantment description format."); + "Sets the global enchantment description format.").mapReader(Colorizer::apply); public static final JOption ENCHANTMENTS_ITEM_CUSTOM_MAX = JOption.create("Enchantments.Item.Max_Custom_Enchants", 3, "How many of custom enchantments the item can contain at the same time?"); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/EnchantManager.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/EnchantManager.java index b907e47..d72f33d 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/EnchantManager.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/EnchantManager.java @@ -10,14 +10,12 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.potion.PotionEffect; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import su.nexmedia.engine.api.manager.AbstractManager; +import su.nexmedia.engine.utils.CollectionsUtil; import su.nexmedia.engine.utils.EntityUtil; import su.nexmedia.engine.utils.ItemUtil; import su.nexmedia.engine.utils.PDCUtil; -import su.nexmedia.engine.utils.Pair; import su.nexmedia.engine.utils.random.Rnd; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.ExcellentEnchantsAPI; @@ -38,7 +36,6 @@ import su.nightexpress.excellentenchants.tier.Tier; import java.util.*; import java.util.function.Function; -import java.util.stream.Collectors; import java.util.stream.Stream; public class EnchantManager extends AbstractManager { @@ -217,6 +214,7 @@ public class EnchantManager extends AbstractManager { for (int index = 0; index < sizeHas && !lore.isEmpty(); index++) { lore.remove(0); } + //lore.removeIf(str -> enchants.keySet().stream().anyMatch(enchant -> str.contains(enchant.getDisplayName()))); if (!meta.hasItemFlag(ItemFlag.HIDE_ENCHANTS)) { if (Config.ENCHANTMENTS_DESCRIPTION_ENABLED.get()) { @@ -232,7 +230,9 @@ public class EnchantManager extends AbstractManager { else sizeReal = 0; meta.setLore(lore); - PDCUtil.set(meta, KEY_LORE_SIZE, sizeReal); + if (sizeReal > 0) { + PDCUtil.set(meta, KEY_LORE_SIZE, sizeReal); + } item.setItemMeta(meta); return true; } @@ -261,11 +261,11 @@ public class EnchantManager extends AbstractManager { } public static int getEnchantmentCharges(@NotNull ItemStack item, @NotNull ExcellentEnchant enchant) { - return enchant.isChargesEnabled() ? PDCUtil.getIntData(item, enchant.getChargesKey()) : -1; + return enchant.isChargesEnabled() ? PDCUtil.getInt(item, enchant.getChargesKey()).orElse(-0) : -1; } public static int getEnchantmentCharges(@NotNull ItemMeta meta, @NotNull ExcellentEnchant enchant) { - return enchant.isChargesEnabled() ? PDCUtil.getIntData(meta, enchant.getChargesKey()) : -1; + return enchant.isChargesEnabled() ? PDCUtil.getInt(meta, enchant.getChargesKey()).orElse(0) : -1; } public static boolean isEnchantmentOutOfCharges(@NotNull ItemStack item, @NotNull ExcellentEnchant enchant) { @@ -311,7 +311,7 @@ public class EnchantManager extends AbstractManager { int level = getEnchantmentLevel(item, enchant); int max = enchant.getChargesMax(level); - PDCUtil.setData(item, enchant.getChargesKey(), Math.max(0, Math.min(charges, max))); + PDCUtil.set(item, enchant.getChargesKey(), Math.max(0, Math.min(charges, max))); } public static int getExcellentEnchantmentsAmount(@NotNull ItemStack item) { @@ -330,44 +330,26 @@ public class EnchantManager extends AbstractManager { @NotNull private static Map getExcellentEnchantments(@NotNull Map enchants) { - return enchants.entrySet().stream() - .map(entry -> { - ExcellentEnchant enchant = EnchantRegister.get(entry.getKey().getKey()); - return enchant == null ? null : Pair.of(enchant, entry.getValue()); - }) - .filter(Objects::nonNull) - //.sorted(Comparator.comparing(p -> p.getFirst().getPriority(), Comparator.reverseOrder())) - .collect(Collectors.toMap(Pair::getFirst, Pair::getSecond, (old, nev) -> nev, LinkedHashMap::new)); + Map map = new HashMap<>(); + enchants.forEach((enchantment, level) -> { + ExcellentEnchant excellent = EnchantRegister.get(enchantment.getKey()); + if (excellent != null) { + map.put(excellent, level); + } + }); + return map; } - @SuppressWarnings("unchecked") @NotNull public static Map getExcellentEnchantments(@NotNull ItemStack item, @NotNull Class clazz) { - return EnchantManager.getEnchantments(item).entrySet().stream() - .map(entry -> { - ExcellentEnchant enchant = EnchantRegister.get(entry.getKey().getKey()); - if (enchant == null || !clazz.isAssignableFrom(enchant.getClass())) return null; - return Pair.of((T) enchant, entry.getValue()); - }) - .filter(Objects::nonNull) - .sorted(Comparator.comparing(p -> p.getFirst().getPriority(), Comparator.reverseOrder())) - .collect(Collectors.toMap(Pair::getFirst, Pair::getSecond, (old, nev) -> nev, LinkedHashMap::new)); - } + Map map = new HashMap<>(); + EnchantManager.getEnchantments(item).forEach((enchantment, level) -> { + ExcellentEnchant excellent = EnchantRegister.get(enchantment.getKey()); + if (excellent == null || !clazz.isAssignableFrom(excellent.getClass())) return; - @Nullable - public static ExcellentEnchant getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect effect) { - Enchantment enchantment = ExcellentEnchantsAPI.PLUGIN.getEnchantNMS().getEnchantmentByEffect(entity, effect); - if (enchantment instanceof ExcellentEnchant enchant) return enchant; - - return null; - } - - public static boolean isEnchantmentEffect(@NotNull LivingEntity entity, @NotNull PotionEffect effect) { - return getEnchantmentByEffect(entity, effect) != null; - } - - public static boolean hasEnchantmentEffect(@NotNull LivingEntity entity, @NotNull ExcellentEnchant enchant) { - return entity.getActivePotionEffects().stream().anyMatch(effect -> enchant.equals(getEnchantmentByEffect(entity, effect))); + map.put(clazz.cast(excellent), level); + }); + return CollectionsUtil.sort(map, Comparator.comparing(p -> p.getKey().getPriority(), Comparator.reverseOrder())); } @NotNull diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantAquaman.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantAquaman.java index 7739947..86edb87 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantAquaman.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantAquaman.java @@ -26,7 +26,7 @@ public class EnchantAquaman extends PotionEnchant implements PassiveEnchant { @Override public boolean onTrigger(@NotNull LivingEntity entity, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(entity) || this.hasEffect(entity)) return false; + if (!this.isAvailableToUse(entity)) return false; return this.addEffect(entity, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantBunnyHop.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantBunnyHop.java index 3733489..eaae375 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantBunnyHop.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantBunnyHop.java @@ -26,7 +26,7 @@ public class EnchantBunnyHop extends PotionEnchant implements PassiveEnchant { @Override public boolean onTrigger(@NotNull LivingEntity entity, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(entity) || this.hasEffect(entity)) return false; + if (!this.isAvailableToUse(entity)) return false; return this.addEffect(entity, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantNightVision.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantNightVision.java index e17a10b..ce0cc87 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantNightVision.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantNightVision.java @@ -26,7 +26,7 @@ public class EnchantNightVision extends PotionEnchant implements PassiveEnchant @Override public boolean onTrigger(@NotNull LivingEntity entity, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(entity) || this.hasEffect(entity)) return false; + if (!this.isAvailableToUse(entity)) return false; return this.addEffect(entity, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantSonic.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantSonic.java index d59dc39..24364db 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantSonic.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/EnchantSonic.java @@ -26,7 +26,7 @@ public class EnchantSonic extends PotionEnchant implements PassiveEnchant { @Override public boolean onTrigger(@NotNull LivingEntity entity, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(entity) || this.hasEffect(entity)) return false; + if (!this.isAvailableToUse(entity)) return false; return this.addEffect(entity, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantEnderBow.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantEnderBow.java index 8c266f5..32ac5a5 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantEnderBow.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantEnderBow.java @@ -11,17 +11,33 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; +import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced; import su.nightexpress.excellentenchants.api.enchantment.type.BowEnchant; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantPriority; +import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation; -public class EnchantEnderBow extends ExcellentEnchant implements BowEnchant { +public class EnchantEnderBow extends ExcellentEnchant implements BowEnchant, Chanced { public static final String ID = "ender_bow"; + private ChanceImplementation chanceImplementation; + public EnchantEnderBow(@NotNull ExcellentEnchants plugin) { super(plugin, ID, EnchantPriority.HIGHEST); } + @Override + public void loadConfig() { + super.loadConfig(); + this.chanceImplementation = ChanceImplementation.create(this); + } + + @NotNull + @Override + public ChanceImplementation getChanceImplementation() { + return chanceImplementation; + } + @Override @NotNull public EnchantmentTarget getItemTarget() { @@ -31,6 +47,7 @@ public class EnchantEnderBow extends ExcellentEnchant implements BowEnchant { @Override public boolean onShoot(@NotNull EntityShootBowEvent e, @NotNull LivingEntity shooter, @NotNull ItemStack bow, int level) { if (!this.isAvailableToUse(shooter)) return false; + if (!this.checkTriggerChance(level)) return false; if (!(e.getProjectile() instanceof Projectile projectile)) return false; EnderPearl pearl = shooter.launchProjectile(EnderPearl.class); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantGhast.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantGhast.java index 5e76735..f0f8367 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantGhast.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/EnchantGhast.java @@ -15,17 +15,20 @@ import su.nexmedia.engine.api.config.JOption; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.Placeholders; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; +import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced; import su.nightexpress.excellentenchants.api.enchantment.type.BowEnchant; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantPriority; import su.nightexpress.excellentenchants.enchantment.EnchantManager; import su.nightexpress.excellentenchants.enchantment.config.EnchantScaler; +import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation; -public class EnchantGhast extends ExcellentEnchant implements BowEnchant { +public class EnchantGhast extends ExcellentEnchant implements BowEnchant, Chanced { public static final String ID = "ghast"; private boolean fireSpread; private EnchantScaler yield; + private ChanceImplementation chanceImplementation; public EnchantGhast(@NotNull ExcellentEnchants plugin) { super(plugin, ID, EnchantPriority.HIGHEST); @@ -34,12 +37,19 @@ public class EnchantGhast extends ExcellentEnchant implements BowEnchant { @Override public void loadConfig() { super.loadConfig(); + this.chanceImplementation = ChanceImplementation.create(this); this.fireSpread = JOption.create("Settings.Fire_Spread", true, "When 'true' creates fire on nearby blocks.").read(cfg); this.yield = EnchantScaler.read(this, "Settings.Yield", "1.0 + " + Placeholders.ENCHANTMENT_LEVEL, "Fireball explosion size/radius. The more value = the bigger the explosion."); } + @NotNull + @Override + public ChanceImplementation getChanceImplementation() { + return chanceImplementation; + } + public boolean isFireSpread() { return fireSpread; } @@ -57,6 +67,7 @@ public class EnchantGhast extends ExcellentEnchant implements BowEnchant { @Override public boolean onShoot(@NotNull EntityShootBowEvent e, @NotNull LivingEntity shooter, @NotNull ItemStack bow, int level) { if (!this.isAvailableToUse(shooter)) return false; + if (!this.checkTriggerChance(level)) return false; if (!(e.getProjectile() instanceof Projectile projectile)) return false; Fireball fireball; diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/ArrowImplementation.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/ArrowImplementation.java index dee5ebe..944e9c9 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/ArrowImplementation.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/ArrowImplementation.java @@ -81,12 +81,12 @@ public final class ArrowImplementation implements Arrowed { @Override public void addData(@NotNull Projectile projectile) { - PDCUtil.setData(projectile, this.getProjectileKey(), this.enchant.getId()); + PDCUtil.set(projectile, this.getProjectileKey(), this.enchant.getId()); } @Override public boolean isOurProjectile(@NotNull Projectile projectile) { - String enchantId = PDCUtil.getStringData(projectile, this.getProjectileKey()); + String enchantId = PDCUtil.getString(projectile, this.getProjectileKey()).orElse(null); return this.enchant.getId().equalsIgnoreCase(enchantId); } } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/PotionImplementation.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/PotionImplementation.java index 2a4d287..84a9c03 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/PotionImplementation.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/meta/PotionImplementation.java @@ -5,11 +5,10 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.utils.Scaler; -import su.nightexpress.excellentenchants.ExcellentEnchantsAPI; import su.nightexpress.excellentenchants.Placeholders; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; import su.nightexpress.excellentenchants.api.enchantment.meta.Potioned; -import su.nightexpress.excellentenchants.enchantment.EnchantManager; +import su.nightexpress.excellentenchants.config.Config; import su.nightexpress.excellentenchants.enchantment.config.EnchantScaler; public final class PotionImplementation implements Potioned { @@ -18,14 +17,14 @@ public final class PotionImplementation implements Potioned { public static final String PLACEHOLDER_POTION_DURATION = "%enchantment_potion_duration%"; public static final String PLACEHOLDER_POTION_TYPE = "%enchantment_potion_type%"; - private final ExcellentEnchant enchant; + //private final ExcellentEnchant enchant; private final PotionEffectType effectType; private final Scaler duration; private final Scaler amplifier; private final boolean isPermanent; private PotionImplementation(@NotNull ExcellentEnchant enchant, @NotNull PotionEffectType effectType, boolean isPermanent) { - this.enchant = enchant; + //this.enchant = enchant; this.effectType = effectType; this.duration = EnchantScaler.read(enchant, "Settings.Potion_Effect.Duration", "5.0 * " + Placeholders.ENCHANTMENT_LEVEL, "Potion effect duration (in seconds). This setting is useless for 'permanent' effects."); @@ -55,6 +54,13 @@ public final class PotionImplementation implements Potioned { } public int getEffectDuration(int level) { + if (this.isPermanent()) { + int duration = Config.TASKS_PASSIVE_POTION_EFFECTS_APPLY_INTERVAL.get().intValue() + 30; + if (this.getEffectType().getName().equalsIgnoreCase(PotionEffectType.NIGHT_VISION.getName())) { + duration += 30 * 20; + } + return duration; + } return (int) (this.duration.getValue(level) * 20); } @@ -70,17 +76,8 @@ public final class PotionImplementation implements Potioned { return new PotionEffect(this.getEffectType(), duration, amplifier, false, false); } - public boolean hasEffect(@NotNull LivingEntity entity) { - return EnchantManager.hasEnchantmentEffect(entity, this.enchant); - } - public boolean addEffect(@NotNull LivingEntity target, int level) { - if (this.isPermanent()) { - ExcellentEnchantsAPI.PLUGIN.getEnchantNMS().addEnchantmentEffect(target, this.enchant, this.createEffect(level)); - } - else { - target.addPotionEffect(this.createEffect(level)); - } + target.addPotionEffect(this.createEffect(level)); return true; } } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantBlastMining.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantBlastMining.java index 80605a4..21ac6c2 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantBlastMining.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantBlastMining.java @@ -74,7 +74,7 @@ public class EnchantBlastMining extends ExcellentEnchant implements Chanced, Blo } private boolean isBlockHardEnough(@NotNull Block block, int level) { - float strength = plugin.getNMS().getBlockStrength(block); + float strength = block.getType().getHardness();//plugin.getNMS().getBlockStrength(block); return (strength >= this.getMinBlockStrength(level)); } @@ -136,7 +136,8 @@ public class EnchantBlastMining extends ExcellentEnchant implements Chanced, Blo // Break all 'exploded' blocks by a player, adding metadata to them to prevent trigger enchantment in a loop. blockList.forEach(block -> { block.setMetadata(META_EXPLOSION_MINED, new FixedMetadataValue(plugin, true)); - plugin.getNMS().breakBlock(player, block); + //plugin.getNMS().breakBlock(player, block); + player.breakBlock(block); block.removeMetadata(META_EXPLOSION_MINED, plugin); }); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantDivineTouch.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantDivineTouch.java index 5bbf247..68a184d 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantDivineTouch.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantDivineTouch.java @@ -18,6 +18,7 @@ import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.metadata.FixedMetadataValue; import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.api.config.JOption; +import su.nexmedia.engine.utils.Colorizer; import su.nexmedia.engine.utils.EffectUtil; import su.nexmedia.engine.utils.LocationUtil; import su.nightexpress.excellentenchants.ExcellentEnchants; @@ -49,7 +50,8 @@ public class EnchantDivineTouch extends ExcellentEnchant implements Chanced, Blo this.chanceImplementation = ChanceImplementation.create(this); this.spawnerName = JOption.create("Settings.Spawner_Item.Name", "&aMob Spawner &7(" + Placeholders.GENERIC_TYPE + ")", "Spawner item display name.", - "Placeholder '" + Placeholders.GENERIC_TYPE + "' for the mob type.").read(cfg); + "Placeholder '" + Placeholders.GENERIC_TYPE + "' for the mob type.") + .mapReader(Colorizer::apply).read(cfg); } @NotNull diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantHaste.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantHaste.java index 3009687..ec9b412 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantHaste.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantHaste.java @@ -26,7 +26,7 @@ public class EnchantHaste extends PotionEnchant implements PassiveEnchant { @Override public boolean onTrigger(@NotNull LivingEntity entity, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(entity) || this.hasEffect(entity)) return false; + if (!this.isAvailableToUse(entity)) return false; return this.addEffect(entity, level); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantReplanter.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantReplanter.java index d7d0656..c9dc4f9 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantReplanter.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantReplanter.java @@ -18,20 +18,24 @@ import su.nexmedia.engine.api.config.JOption; import su.nexmedia.engine.utils.MessageUtil; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; +import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced; import su.nightexpress.excellentenchants.api.enchantment.type.BlockBreakEnchant; import su.nightexpress.excellentenchants.api.enchantment.type.InteractEnchant; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantPriority; +import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation; import su.nightexpress.excellentenchants.enchantment.type.FitItemType; import java.util.Set; -public class EnchantReplanter extends ExcellentEnchant implements InteractEnchant, BlockBreakEnchant { +public class EnchantReplanter extends ExcellentEnchant implements Chanced, InteractEnchant, BlockBreakEnchant { public static final String ID = "replanter"; private boolean replantOnRightClick; private boolean replantOnPlantBreak; + private ChanceImplementation chanceImplementation; + private static final Set CROPS = Set.of( Material.WHEAT_SEEDS, Material.BEETROOT_SEEDS, Material.MELON_SEEDS, Material.PUMPKIN_SEEDS, @@ -44,12 +48,19 @@ public class EnchantReplanter extends ExcellentEnchant implements InteractEnchan @Override public void loadConfig() { super.loadConfig(); + this.chanceImplementation = ChanceImplementation.create(this); this.replantOnRightClick = JOption.create("Settings.Replant.On_Right_Click", true, "When 'true', player will be able to replant crops when right-clicking farmland blocks.").read(cfg); this.replantOnPlantBreak = JOption.create("Settings.Replant.On_Plant_Break", true, "When 'true', crops will be automatically replanted when player break plants with enchanted tool in hand.").read(cfg); } + @NotNull + @Override + public ChanceImplementation getChanceImplementation() { + return chanceImplementation; + } + public boolean isReplantOnPlantBreak() { return replantOnPlantBreak; } @@ -107,8 +118,9 @@ public class EnchantReplanter extends ExcellentEnchant implements InteractEnchan @Override public boolean onInteract(@NotNull PlayerInteractEvent e, @NotNull Player player, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(player)) return false; if (!this.isReplantOnRightClick()) return false; + if (!this.isAvailableToUse(player)) return false; + if (!this.checkTriggerChance(level)) return false; // Check for a event hand. We dont want to trigger it twice. if (e.getHand() != EquipmentSlot.HAND) return false; @@ -133,7 +145,7 @@ public class EnchantReplanter extends ExcellentEnchant implements InteractEnchan || seed != Material.NETHER_WART && blockGround.getType() == Material.FARMLAND) { if (this.takeSeeds(player, seed)) { MessageUtil.sound(player, seed == Material.NETHER_WART ? Sound.ITEM_NETHER_WART_PLANT : Sound.ITEM_CROP_PLANT); - plugin.getNMS().sendAttackPacket(player, 0); + plugin.getEnchantNMS().sendAttackPacket(player, 0); blockPlant.setType(this.fineSeedsToBlock(seed)); break; } @@ -144,8 +156,9 @@ public class EnchantReplanter extends ExcellentEnchant implements InteractEnchan @Override public boolean onBreak(@NotNull BlockBreakEvent e, @NotNull Player player, @NotNull ItemStack item, int level) { - if (!this.isAvailableToUse(player)) return false; if (!this.isReplantOnPlantBreak()) return false; + if (!this.isAvailableToUse(player)) return false; + if (!this.checkTriggerChance(level)) return false; Block blockPlant = e.getBlock(); //if (EnchantTelekinesis.isDropHandled(blockPlant)) return false; diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantSilkChest.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantSilkChest.java index 51cc897..de82e2f 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantSilkChest.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantSilkChest.java @@ -20,6 +20,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockStateMeta; import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.api.config.JOption; +import su.nexmedia.engine.utils.Colorizer; import su.nexmedia.engine.utils.ItemUtil; import su.nexmedia.engine.utils.PDCUtil; import su.nightexpress.excellentenchants.ExcellentEnchants; @@ -59,10 +60,10 @@ public class EnchantSilkChest extends ExcellentEnchant implements BlockDropEncha super.loadConfig(); this.chestName = JOption.create("Settings.Chest_Item.Name", "Chest &7(" + Placeholders.GENERIC_AMOUNT + " items)", "Chest item display name.", - "Use '" + Placeholders.GENERIC_AMOUNT + "' for items amount.").read(cfg); + "Use '" + Placeholders.GENERIC_AMOUNT + "' for items amount.").mapReader(Colorizer::apply).read(cfg); this.chestLore = JOption.create("Settings.Chest_Item.Lore", new ArrayList<>(), "Chest item lore.", - "Use '" + Placeholders.GENERIC_AMOUNT + "' for items amount.").read(cfg); + "Use '" + Placeholders.GENERIC_AMOUNT + "' for items amount.").mapReader(Colorizer::apply).read(cfg); } @Deprecated @@ -83,7 +84,7 @@ public class EnchantSilkChest extends ExcellentEnchant implements BlockDropEncha } public boolean isSilkChest(@NotNull ItemStack item) { - return PDCUtil.getBooleanData(item, this.keyChest) || PDCUtil.getStringData(item, this.getItemKey(0)) != null; + return PDCUtil.getBoolean(item, this.keyChest).orElse(false) || PDCUtil.getString(item, this.getItemKey(0)).orElse(null) != null; } @NotNull @@ -105,7 +106,7 @@ public class EnchantSilkChest extends ExcellentEnchant implements BlockDropEncha chestStack.setItemMeta(stateMeta); ItemUtil.replace(chestStack, str -> str.replace(Placeholders.GENERIC_AMOUNT, String.valueOf(amount))); - PDCUtil.setData(chestStack, this.keyChest, true); + PDCUtil.set(chestStack, this.keyChest, true); return chestStack; // Store and count chest items. @@ -172,7 +173,7 @@ public class EnchantSilkChest extends ExcellentEnchant implements BlockDropEncha Inventory inventory = chest.getBlockInventory(); for (int pos = 0; pos < inventory.getSize(); pos++) { - String data = PDCUtil.getStringData(item, this.getItemKey(pos)); + String data = PDCUtil.getString(item, this.getItemKey(pos)).orElse(null); if (data == null) continue; ItemStack itemInv = ItemUtil.fromBase64(data); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTelekinesis.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTelekinesis.java index 8c70c4f..67ee1fd 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTelekinesis.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTelekinesis.java @@ -9,23 +9,39 @@ import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.utils.PlayerUtil; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; +import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced; import su.nightexpress.excellentenchants.api.enchantment.type.BlockDropEnchant; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantDropContainer; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantPriority; +import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation; import su.nightexpress.excellentenchants.enchantment.type.FitItemType; import java.util.ArrayList; import java.util.List; import java.util.Objects; -public class EnchantTelekinesis extends ExcellentEnchant implements BlockDropEnchant { +public class EnchantTelekinesis extends ExcellentEnchant implements Chanced, BlockDropEnchant { public static final String ID = "telekinesis"; + private ChanceImplementation chanceImplementation; + public EnchantTelekinesis(@NotNull ExcellentEnchants plugin) { super(plugin, ID, EnchantPriority.LOWEST); } + @Override + public void loadConfig() { + super.loadConfig(); + this.chanceImplementation = ChanceImplementation.create(this); + } + + @NotNull + @Override + public ChanceImplementation getChanceImplementation() { + return chanceImplementation; + } + @Override @NotNull public FitItemType[] getFitItemTypes() { @@ -41,6 +57,7 @@ public class EnchantTelekinesis extends ExcellentEnchant implements BlockDropEnc @Override public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) { if (!this.isAvailableToUse(player)) return false; + if (!this.checkTriggerChance(level)) return false; List drops = new ArrayList<>(); drops.addAll(e.getItems().stream().map(Item::getItemStack).toList()); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTunnel.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTunnel.java index 0b027bb..6fb0a47 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTunnel.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantTunnel.java @@ -117,7 +117,8 @@ public class EnchantTunnel extends ExcellentEnchant implements BlockBreakEnchant // Add metadata to prevent enchantment triggering in a loop. blockAdd.setMetadata(META_BLOCK_TUNNEL, new FixedMetadataValue(plugin, true)); - plugin.getNMS().breakBlock(player, blockAdd); + //plugin.getNMS().breakBlock(player, blockAdd); + player.breakBlock(blockAdd); blockAdd.removeMetadata(META_BLOCK_TUNNEL, plugin); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantVeinminer.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantVeinminer.java index 4a817f0..8dbbf90 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantVeinminer.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/tool/EnchantVeinminer.java @@ -114,7 +114,8 @@ public class EnchantVeinminer extends ExcellentEnchant implements BlockBreakEnch EffectUtil.playEffect(LocationUtil.getCenter(ore.getLocation()), Particle.BLOCK_CRACK.name(), ore.getType().name(), 0.2, 0.2, 0.2, 0.1, 20); ore.setMetadata(META_BLOCK_VEINED, new FixedMetadataValue(plugin, true)); - plugin.getNMS().breakBlock(player, ore); + //plugin.getNMS().breakBlock(player, ore); + player.breakBlock(ore); ore.removeMetadata(META_BLOCK_VEINED, plugin); }); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantNimble.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantNimble.java index 44f226d..ffa26c6 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantNimble.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantNimble.java @@ -8,17 +8,33 @@ import org.jetbrains.annotations.NotNull; import su.nexmedia.engine.utils.PlayerUtil; import su.nightexpress.excellentenchants.ExcellentEnchants; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; +import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced; import su.nightexpress.excellentenchants.api.enchantment.type.DeathEnchant; import su.nightexpress.excellentenchants.api.enchantment.util.EnchantPriority; +import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation; -public class EnchantNimble extends ExcellentEnchant implements DeathEnchant { +public class EnchantNimble extends ExcellentEnchant implements Chanced, DeathEnchant { public static final String ID = "nimble"; + private ChanceImplementation chanceImplementation; + public EnchantNimble(@NotNull ExcellentEnchants plugin) { super(plugin, ID, EnchantPriority.LOWEST); } + @Override + public void loadConfig() { + super.loadConfig(); + this.chanceImplementation = ChanceImplementation.create(this); + } + + @NotNull + @Override + public ChanceImplementation getChanceImplementation() { + return chanceImplementation; + } + @NotNull @Override public EnchantmentTarget getItemTarget() { @@ -28,6 +44,7 @@ public class EnchantNimble extends ExcellentEnchant implements DeathEnchant { @Override public boolean onKill(@NotNull EntityDeathEvent e, @NotNull LivingEntity entity, @NotNull Player killer, int level) { if (!this.isAvailableToUse(entity)) return false; + if (!this.checkTriggerChance(level)) return false; e.getDrops().forEach(item -> PlayerUtil.addItem(killer, item)); e.getDrops().clear(); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantThrifty.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantThrifty.java index de746a0..12b2afd 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantThrifty.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/EnchantThrifty.java @@ -80,7 +80,7 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn if (!this.isAvailableToUse(entity)) return false; if (this.ignoredEntityTypes.contains(entity.getType())) return false; - if (PDCUtil.getBooleanData(entity, this.keyEntityIgnored)) return false; + if (PDCUtil.getBoolean(entity, this.keyEntityIgnored).orElse(false)) return false; if (!this.checkTriggerChance(level)) return false; Material material = Material.getMaterial(entity.getType().name() + "_SPAWN_EGG"); @@ -105,6 +105,6 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn public void onCreatureSpawn(CreatureSpawnEvent e) { if (!this.ignoredSpawnReasons.contains(e.getSpawnReason())) return; - PDCUtil.setData(e.getEntity(), this.keyEntityIgnored, true); + PDCUtil.set(e.getEntity(), this.keyEntityIgnored, true); } } 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 d35590d..a28e943 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 @@ -86,7 +86,7 @@ public class EnchantAnvilListener extends AbstractListener { count++; } - PDCUtil.setData(result2, RECHARGED, count); + PDCUtil.set(result2, RECHARGED, count); EnchantManager.updateEnchantmentsDisplay(result2); e.setResult(result2); this.plugin.runTask(c -> e.getInventory().setRepairCost(chargeables.size()), false); @@ -138,14 +138,14 @@ public class EnchantAnvilListener extends AbstractListener { ItemStack item = e.getCurrentItem(); if (item == null) return; - int count = PDCUtil.getIntData(item, RECHARGED); + int count = PDCUtil.getInt(item, RECHARGED).orElse(0); if (count == 0) return; Player player = (Player) e.getWhoClicked(); if (player.getLevel() < inventory.getRepairCost()) return; player.setLevel(player.getLevel() - inventory.getRepairCost()); - PDCUtil.removeData(item, RECHARGED); + PDCUtil.remove(item, RECHARGED); e.getView().setCursor(item); e.setCancelled(false); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantGenericListener.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantGenericListener.java index 07f13c5..47cc5a8 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantGenericListener.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/listener/EnchantGenericListener.java @@ -13,7 +13,6 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.world.LootGenerateEvent; import org.bukkit.inventory.*; import org.bukkit.inventory.meta.EnchantmentStorageMeta; @@ -36,16 +35,6 @@ public class EnchantGenericListener extends AbstractListener super(enchantManager.plugin()); } - @EventHandler(priority = EventPriority.MONITOR) - public void onEnchantPotionEffectQuit(PlayerQuitEvent e) { - Player player = e.getPlayer(); - - player.getActivePotionEffects().stream() - .filter(effect -> EnchantManager.isEnchantmentEffect(player, effect)).forEach(effect -> { - player.removePotionEffect(effect.getType()); - }); - } - // --------------------------------------------------------------- // Update enchantment lore after grindstone // --------------------------------------------------------------- @@ -190,6 +179,7 @@ public class EnchantGenericListener extends AbstractListener public void onEnchantPopulateSpawn(CreatureSpawnEvent e) { //if (Config.getObtainSettings(ObtainType.MOB_SPAWNING).isEmpty()) return; LivingEntity entity = e.getEntity(); + if (entity.getType() == EntityType.ARMOR_STAND) return; this.plugin.runTaskLater(task -> { EntityEquipment equipment = entity.getEquipment(); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/menu/EnchantmentsListMenu.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/menu/EnchantmentsListMenu.java index 2c390f3..adb8773 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/menu/EnchantmentsListMenu.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/menu/EnchantmentsListMenu.java @@ -13,6 +13,7 @@ import su.nexmedia.engine.api.menu.MenuClick; import su.nexmedia.engine.api.menu.MenuItem; import su.nexmedia.engine.api.menu.MenuItemType; import su.nexmedia.engine.lang.LangManager; +import su.nexmedia.engine.utils.Colorizer; import su.nexmedia.engine.utils.ItemUtil; import su.nexmedia.engine.utils.PDCUtil; import su.nexmedia.engine.utils.StringUtil; @@ -46,9 +47,9 @@ public class EnchantmentsListMenu extends AbstractMenuAuto(); this.enchantIcon = cfg.getItem("Enchantments.Icon"); - this.enchantLoreConflicts = StringUtil.color(cfg.getStringList("Enchantments.Lore.Conflicts")); - this.enchantLoreCharges = StringUtil.color(cfg.getStringList("Enchantments.Lore.Charges")); - this.enchantLoreObtaining = StringUtil.color(cfg.getStringList("Enchantments.Lore.Obtaining")); + this.enchantLoreConflicts = Colorizer.apply(cfg.getStringList("Enchantments.Lore.Conflicts")); + this.enchantLoreCharges = Colorizer.apply(cfg.getStringList("Enchantments.Lore.Charges")); + this.enchantLoreObtaining = Colorizer.apply(cfg.getStringList("Enchantments.Lore.Obtaining")); this.enchantSlots = cfg.getIntArray("Enchantments.Slots"); MenuClick click = (player, type, e) -> { @@ -100,12 +101,12 @@ public class EnchantmentsListMenu extends AbstractMenuAuto enchant.getMaxLevel()) levelHas = enchant.getStartLevel(); itemClick = this.getEnchantIcon(enchant, levelHas); - PDCUtil.setData(itemClick, this.keyLevel, levelHas); + PDCUtil.set(itemClick, this.keyLevel, levelHas); e.setCurrentItem(itemClick); }; diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java b/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java index 65c18bc..8110b07 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java @@ -5,7 +5,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import su.nexmedia.engine.api.manager.IPlaceholder; -import su.nexmedia.engine.utils.StringUtil; +import su.nexmedia.engine.utils.Colorizer; import su.nightexpress.excellentenchants.Placeholders; import su.nightexpress.excellentenchants.api.enchantment.ExcellentEnchant; import su.nightexpress.excellentenchants.enchantment.type.ObtainType; @@ -38,7 +38,7 @@ public class Tier implements IPlaceholder { @NotNull Map chance) { this.id = id.toLowerCase(); this.priority = priority; - this.name = StringUtil.color(name); + this.name = Colorizer.apply(name); this.color = color; this.chance = chance; this.enchants = new HashSet<>(); diff --git a/NMS/pom.xml b/NMS/pom.xml index a927bcd..f0cbe68 100644 --- a/NMS/pom.xml +++ b/NMS/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 diff --git a/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java b/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java index 01df19b..cadf840 100644 --- a/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java +++ b/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java @@ -1,60 +1,16 @@ package su.nightexpress.excellentenchants.nms; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.potion.PotionEffect; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import su.nexmedia.engine.utils.EntityUtil; -import su.nexmedia.engine.utils.ItemUtil; -import java.util.Map; import java.util.Set; public interface EnchantNMS { - int EFFECT_DURATION_MAX = 30 * 20; - int EFFECT_DURATION_MIN = 20 * 20; - - // TODO Move in 'API' module? - @Deprecated - static int getEnchantmentLevel(@NotNull ItemStack item, @NotNull Enchantment enchant) { - ItemMeta meta = item.getItemMeta(); - if (meta == null) return 0; - - return meta.getEnchantLevel(enchant); - } - - @NotNull - @Deprecated - static Map getEquipmentEnchanted(@NotNull LivingEntity entity) { - Map equipment = EntityUtil.getEquippedItems(entity); - equipment.entrySet().removeIf(entry -> { - ItemStack item = entry.getValue(); - EquipmentSlot slot = entry.getKey(); - if (item == null || item.getType().isAir() || item.getType() == Material.ENCHANTED_BOOK) return true; - if ((slot == EquipmentSlot.HAND || slot == EquipmentSlot.OFF_HAND) && ItemUtil.isArmor(item)) return true; - return !item.hasItemMeta(); - }); - return equipment; - } - - // TODO Move in 'API' module? - @Deprecated - static int getEquippedEnchantLevel(@NotNull LivingEntity entity, @NotNull Enchantment enchant) { - return getEquipmentEnchanted(entity).values().stream() - .map(item -> getEnchantmentLevel(item, enchant)).max(Integer::compareTo).orElse(0); - } - - void addEnchantmentEffect(@NotNull LivingEntity entity, @NotNull Enchantment enchant, @NotNull PotionEffect effect); - - @Nullable Enchantment getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect type); + void sendAttackPacket(@NotNull Player player, int id); @NotNull Set handleFlameWalker(@NotNull LivingEntity entity, @NotNull Location location, int level); } diff --git a/V1_17_R1/pom.xml b/V1_17_R1/pom.xml index f9cf26e..d2cac65 100644 --- a/V1_17_R1/pom.xml +++ b/V1_17_R1/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 @@ -26,7 +26,7 @@ su.nightexpress.excellentenchants NMS - 3.3.1 + 3.3.3 diff --git a/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/CustomEffectInstance.java b/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/CustomEffectInstance.java deleted file mode 100644 index 30d9e3c..0000000 --- a/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/CustomEffectInstance.java +++ /dev/null @@ -1,48 +0,0 @@ -package su.nightexpress.excellentenchants.nms.v1_17_R1; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import org.bukkit.enchantments.Enchantment; -import org.jetbrains.annotations.NotNull; -import su.nexmedia.engine.utils.Reflex; -import su.nightexpress.excellentenchants.nms.EnchantNMS; - -public class CustomEffectInstance extends MobEffectInstance { - - private final Enchantment enchantment; - - public CustomEffectInstance(MobEffect effect, int amplifier, @NotNull Enchantment enchantment) { - super(effect, EnchantNMS.EFFECT_DURATION_MAX, amplifier); - this.enchantment = enchantment; - } - - @NotNull - public Enchantment getEnchantment() { - return enchantment; - } - - @Override - public boolean update(MobEffectInstance effect) { - /*if (effect instanceof CustomEffectInstance custom) { - return false; - } - if (effect.getAmplifier() > this.getAmplifier()) { - - }*/ - return false; - } - - public boolean tick(LivingEntity entity, Runnable runnable) { - if (EnchantNMS.getEquippedEnchantLevel((org.bukkit.entity.LivingEntity) entity.getBukkitEntity(), this.getEnchantment()) <= 0) { - return false; - } - if (super.tick(entity, runnable)) { - if (this.getDuration() <= EnchantNMS.EFFECT_DURATION_MIN) { - Reflex.setFieldValue(this, "c", EnchantNMS.EFFECT_DURATION_MAX); - } - return true; - } - return false; - } -} diff --git a/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/V1_17_R1.java b/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/V1_17_R1.java index bc6ced2..9e5431d 100644 --- a/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/V1_17_R1.java +++ b/V1_17_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_17_R1/V1_17_R1.java @@ -1,9 +1,8 @@ package su.nightexpress.excellentenchants.nms.v1_17_R1; import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientboundAnimatePacket; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; @@ -13,13 +12,11 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; import org.bukkit.craftbukkit.v1_17_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.potion.PotionEffect; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import su.nightexpress.excellentenchants.nms.EnchantNMS; import java.util.HashSet; @@ -28,20 +25,11 @@ import java.util.Set; public class V1_17_R1 implements EnchantNMS { @Override - public void addEnchantmentEffect(@NotNull LivingEntity entity, @NotNull Enchantment enchant, @NotNull PotionEffect effect) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - entity1.addEffect(new CustomEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getAmplifier(), enchant), EntityPotionEffectEvent.Cause.PLUGIN); - } - - @Override - @Nullable - public Enchantment getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect type) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - MobEffectInstance handle = entity1.getEffect(MobEffect.byId(type.getType().getId())); - if (handle instanceof CustomEffectInstance instance) { - return instance.getEnchantment(); - } - return null; + public void sendAttackPacket(@NotNull Player player, int id) { + CraftPlayer craftPlayer = (CraftPlayer) player; + Entity entity = craftPlayer.getHandle(); + ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); + craftPlayer.getHandle().connection.send(packet); } @Override diff --git a/V1_18_R2/pom.xml b/V1_18_R2/pom.xml index 7b086b9..1edc824 100644 --- a/V1_18_R2/pom.xml +++ b/V1_18_R2/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 @@ -26,7 +26,7 @@ su.nightexpress.excellentenchants NMS - 3.3.1 + 3.3.3 diff --git a/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/CustomEffectInstance.java b/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/CustomEffectInstance.java deleted file mode 100644 index 3726d8c..0000000 --- a/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/CustomEffectInstance.java +++ /dev/null @@ -1,48 +0,0 @@ -package su.nightexpress.excellentenchants.nms.v1_18_R2; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import org.bukkit.enchantments.Enchantment; -import org.jetbrains.annotations.NotNull; -import su.nexmedia.engine.utils.Reflex; -import su.nightexpress.excellentenchants.nms.EnchantNMS; - -public class CustomEffectInstance extends MobEffectInstance { - - private final Enchantment enchantment; - - public CustomEffectInstance(MobEffect effect, int amplifier, @NotNull Enchantment enchantment) { - super(effect, EnchantNMS.EFFECT_DURATION_MAX, amplifier); - this.enchantment = enchantment; - } - - @NotNull - public Enchantment getEnchantment() { - return enchantment; - } - - @Override - public boolean update(MobEffectInstance effect) { - /*if (effect instanceof CustomEffectInstance custom) { - return false; - } - if (effect.getAmplifier() > this.getAmplifier()) { - - }*/ - return false; - } - - public boolean tick(LivingEntity entity, Runnable runnable) { - if (EnchantNMS.getEquippedEnchantLevel((org.bukkit.entity.LivingEntity) entity.getBukkitEntity(), this.getEnchantment()) <= 0) { - return false; - } - if (super.tick(entity, runnable)) { - if (this.getDuration() <= EnchantNMS.EFFECT_DURATION_MIN) { - Reflex.setFieldValue(this, "c", EnchantNMS.EFFECT_DURATION_MAX); - } - return true; - } - return false; - } -} diff --git a/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/V1_18_R2.java b/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/V1_18_R2.java index 15dc5af..2fdf6d3 100644 --- a/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/V1_18_R2.java +++ b/V1_18_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_18_R2/V1_18_R2.java @@ -1,9 +1,8 @@ package su.nightexpress.excellentenchants.nms.v1_18_R2; import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientboundAnimatePacket; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; @@ -13,13 +12,11 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.potion.PotionEffect; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import su.nightexpress.excellentenchants.nms.EnchantNMS; import java.util.HashSet; @@ -28,20 +25,11 @@ import java.util.Set; public class V1_18_R2 implements EnchantNMS { @Override - public void addEnchantmentEffect(@NotNull LivingEntity entity, @NotNull Enchantment enchant, @NotNull PotionEffect effect) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - entity1.addEffect(new CustomEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getAmplifier(), enchant), EntityPotionEffectEvent.Cause.PLUGIN); - } - - @Override - @Nullable - public Enchantment getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect type) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - MobEffectInstance handle = entity1.getEffect(MobEffect.byId(type.getType().getId())); - if (handle instanceof CustomEffectInstance instance) { - return instance.getEnchantment(); - } - return null; + public void sendAttackPacket(@NotNull Player player, int id) { + CraftPlayer craftPlayer = (CraftPlayer) player; + Entity entity = craftPlayer.getHandle(); + ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); + craftPlayer.getHandle().connection.send(packet); } @Override diff --git a/V1_19_R1/pom.xml b/V1_19_R1/pom.xml index 0e6a1b8..5f13bdd 100644 --- a/V1_19_R1/pom.xml +++ b/V1_19_R1/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 @@ -26,7 +26,7 @@ su.nightexpress.excellentenchants NMS - 3.3.1 + 3.3.3 diff --git a/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/CustomEffectInstance.java b/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/CustomEffectInstance.java deleted file mode 100644 index e1246e9..0000000 --- a/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/CustomEffectInstance.java +++ /dev/null @@ -1,48 +0,0 @@ -package su.nightexpress.excellentenchants.nms.v1_19_R1; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import org.bukkit.enchantments.Enchantment; -import org.jetbrains.annotations.NotNull; -import su.nexmedia.engine.utils.Reflex; -import su.nightexpress.excellentenchants.nms.EnchantNMS; - -public class CustomEffectInstance extends MobEffectInstance { - - private final Enchantment enchantment; - - public CustomEffectInstance(MobEffect effect, int amplifier, @NotNull Enchantment enchantment) { - super(effect, EnchantNMS.EFFECT_DURATION_MAX, amplifier); - this.enchantment = enchantment; - } - - @NotNull - public Enchantment getEnchantment() { - return enchantment; - } - - @Override - public boolean update(MobEffectInstance effect) { - /*if (effect instanceof CustomEffectInstance custom) { - return false; - } - if (effect.getAmplifier() > this.getAmplifier()) { - - }*/ - return false; - } - - public boolean tick(LivingEntity entity, Runnable runnable) { - if (EnchantNMS.getEquippedEnchantLevel((org.bukkit.entity.LivingEntity) entity.getBukkitEntity(), this.getEnchantment()) <= 0) { - return false; - } - if (super.tick(entity, runnable)) { - if (this.getDuration() <= EnchantNMS.EFFECT_DURATION_MIN) { - Reflex.setFieldValue(this, "c", EnchantNMS.EFFECT_DURATION_MAX); - } - return true; - } - return false; - } -} diff --git a/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/V1_19_R1.java b/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/V1_19_R1.java index 88e9977..bd5bbca 100644 --- a/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/V1_19_R1.java +++ b/V1_19_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R1/V1_19_R1.java @@ -1,9 +1,8 @@ package su.nightexpress.excellentenchants.nms.v1_19_R1; import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientboundAnimatePacket; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; @@ -13,13 +12,11 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.craftbukkit.v1_19_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.potion.PotionEffect; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import su.nightexpress.excellentenchants.nms.EnchantNMS; import java.util.HashSet; @@ -28,20 +25,11 @@ import java.util.Set; public class V1_19_R1 implements EnchantNMS { @Override - public void addEnchantmentEffect(@NotNull LivingEntity entity, @NotNull Enchantment enchant, @NotNull PotionEffect effect) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - entity1.addEffect(new CustomEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getAmplifier(), enchant), EntityPotionEffectEvent.Cause.PLUGIN); - } - - @Override - @Nullable - public Enchantment getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect type) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - MobEffectInstance handle = entity1.getEffect(MobEffect.byId(type.getType().getId())); - if (handle instanceof CustomEffectInstance instance) { - return instance.getEnchantment(); - } - return null; + public void sendAttackPacket(@NotNull Player player, int id) { + CraftPlayer craftPlayer = (CraftPlayer) player; + Entity entity = craftPlayer.getHandle(); + ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); + craftPlayer.getHandle().connection.send(packet); } @Override diff --git a/V1_19_R2/pom.xml b/V1_19_R2/pom.xml index da7821c..381ca0d 100644 --- a/V1_19_R2/pom.xml +++ b/V1_19_R2/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 3.3.1 + 3.3.3 4.0.0 @@ -26,7 +26,7 @@ su.nightexpress.excellentenchants NMS - 3.3.1 + 3.3.3 diff --git a/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/CustomEffectInstance.java b/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/CustomEffectInstance.java deleted file mode 100644 index 1506674..0000000 --- a/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/CustomEffectInstance.java +++ /dev/null @@ -1,50 +0,0 @@ -package su.nightexpress.excellentenchants.nms.v1_19_R2; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import org.bukkit.enchantments.Enchantment; -import org.jetbrains.annotations.NotNull; -import su.nexmedia.engine.utils.Reflex; -import su.nightexpress.excellentenchants.nms.EnchantNMS; - -public class CustomEffectInstance extends MobEffectInstance { - - private static final int MIN = 60 * 60 * 20; - - private final Enchantment enchantment; - - public CustomEffectInstance(MobEffect effect, int amplifier, @NotNull Enchantment enchantment) { - super(effect, EnchantNMS.EFFECT_DURATION_MAX, amplifier); - this.enchantment = enchantment; - } - - @NotNull - public Enchantment getEnchantment() { - return enchantment; - } - - @Override - public boolean update(MobEffectInstance effect) { - /*if (effect instanceof CustomEffectInstance custom) { - return false; - } - if (effect.getAmplifier() > this.getAmplifier()) { - - }*/ - return false; - } - - public boolean tick(LivingEntity entity, Runnable runnable) { - if (EnchantNMS.getEquippedEnchantLevel((org.bukkit.entity.LivingEntity) entity.getBukkitEntity(), this.getEnchantment()) <= 0) { - return false; - } - if (super.tick(entity, runnable)) { - if (this.getDuration() <= EnchantNMS.EFFECT_DURATION_MIN) { - Reflex.setFieldValue(this, "c", EnchantNMS.EFFECT_DURATION_MAX); - } - return true; - } - return false; - } -} diff --git a/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/V1_19_R2.java b/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/V1_19_R2.java index e5fdfdb..c8a1a95 100644 --- a/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/V1_19_R2.java +++ b/V1_19_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R2/V1_19_R2.java @@ -1,9 +1,8 @@ package su.nightexpress.excellentenchants.nms.v1_19_R2; import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientboundAnimatePacket; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; @@ -13,13 +12,11 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; import org.bukkit.craftbukkit.v1_19_R2.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityPotionEffectEvent; -import org.bukkit.potion.PotionEffect; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import su.nightexpress.excellentenchants.nms.EnchantNMS; import java.util.HashSet; @@ -28,20 +25,11 @@ import java.util.Set; public class V1_19_R2 implements EnchantNMS { @Override - public void addEnchantmentEffect(@NotNull LivingEntity entity, @NotNull Enchantment enchant, @NotNull PotionEffect effect) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - entity1.addEffect(new CustomEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getAmplifier(), enchant), EntityPotionEffectEvent.Cause.PLUGIN); - } - - @Override - @Nullable - public Enchantment getEnchantmentByEffect(@NotNull LivingEntity entity, @NotNull PotionEffect type) { - net.minecraft.world.entity.LivingEntity entity1 = ((CraftLivingEntity)entity).getHandle(); - MobEffectInstance handle = entity1.getEffect(MobEffect.byId(type.getType().getId())); - if (handle instanceof CustomEffectInstance instance) { - return instance.getEnchantment(); - } - return null; + public void sendAttackPacket(@NotNull Player player, int id) { + CraftPlayer craftPlayer = (CraftPlayer) player; + Entity entity = craftPlayer.getHandle(); + ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); + craftPlayer.getHandle().connection.send(packet); } @Override diff --git a/V1_19_R3/pom.xml b/V1_19_R3/pom.xml new file mode 100644 index 0000000..c268d67 --- /dev/null +++ b/V1_19_R3/pom.xml @@ -0,0 +1,71 @@ + + + + ExcellentEnchants + su.nightexpress.excellentenchants + 3.3.3 + + 4.0.0 + + V1_19_R3 + + + 16 + 16 + + + + + org.spigotmc + spigot + 1.19.4-R0.1-SNAPSHOT + remapped-mojang + + + su.nightexpress.excellentenchants + NMS + 3.3.3 + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.4 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:txt:maps-mojang + true + org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-mojang + true + remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:csrg:maps-spigot + org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-obf + + + + + + + + \ No newline at end of file diff --git a/V1_19_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R3/V1_19_R3.java b/V1_19_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R3/V1_19_R3.java new file mode 100644 index 0000000..4b4d3a5 --- /dev/null +++ b/V1_19_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_19_R3/V1_19_R3.java @@ -0,0 +1,68 @@ +package su.nightexpress.excellentenchants.nms.v1_19_R3; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientboundAnimatePacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import su.nightexpress.excellentenchants.nms.EnchantNMS; + +import java.util.HashSet; +import java.util.Set; + +public class V1_19_R3 implements EnchantNMS { + + @Override + public void sendAttackPacket(@NotNull Player player, int id) { + CraftPlayer craftPlayer = (CraftPlayer) player; + Entity entity = craftPlayer.getHandle(); + ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); + craftPlayer.getHandle().connection.send(packet); + } + + @Override + @NotNull + public Set handleFlameWalker(@NotNull LivingEntity bukkitEntity, @NotNull Location location, int level) { + Entity entity = ((CraftLivingEntity) bukkitEntity).getHandle(); + BlockPos pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + ServerLevel world = ((CraftWorld) bukkitEntity.getWorld()).getHandle(); + + int radius = Math.min(16, 2 + level); + BlockState bStone = Blocks.MAGMA_BLOCK.defaultBlockState(); + BlockPos.MutableBlockPos posAbove = new BlockPos.MutableBlockPos(); + + Set blocks = new HashSet<>(); + for (BlockPos posNear : BlockPos.betweenClosed(pos.offset(-radius, -1, -radius), pos.offset(radius, -1, radius))) { + if (!posNear.closerThan(entity.blockPosition(), radius)) continue; + + posAbove.set(posNear.getX(), posNear.getY() + 1, posNear.getZ()); + + BlockState bLavaAbove = world.getBlockState(posAbove); + BlockState bLava = world.getBlockState(posNear); + + if (!bLavaAbove.isAir()) continue; + if (!bLava.getBlock().equals(Blocks.LAVA)) continue; + if (bLava.getValue(LiquidBlock.LEVEL) != 0) continue; + if (!bStone.canSurvive(world, posNear)) continue; + if (!world.isUnobstructed(bStone, posNear, CollisionContext.empty())) continue; + if (!CraftEventFactory.handleBlockFormEvent(world, posNear, bStone, entity)) continue; + //world.scheduleTick(posNear, Blocks.STONE, Rnd.get(60, 120)); + + Location bukkitLoc = new Location(world.getWorld(), posNear.getX(), posNear.getY(), posNear.getZ()); + blocks.add(bukkitLoc.getBlock()); + } + return blocks; + } +} diff --git a/pom.xml b/pom.xml index 0a5669b..26401cb 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ su.nightexpress.excellentenchants ExcellentEnchants pom - 3.3.1 + 3.3.3 Core NMS @@ -15,6 +15,7 @@ V1_18_R2 V1_19_R1 V1_19_R2 + V1_19_R3 @@ -26,7 +27,7 @@ su.nexmedia NexEngine - 2.2.9 + 2.2.10