From 5cfdf14198e8559e4743e329b1697dd7933b06ea Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 22 Apr 2024 14:31:52 +0500 Subject: [PATCH] v4.0.4 --- API/pom.xml | 2 +- Core/pom.xml | 44 +++++++-------- .../excellentenchants/Placeholders.java | 1 + .../impl/armor/StoppingForceEnchant.java | 2 +- .../impl/fishing/AutoReelEnchant.java | 14 ++++- .../impl/weapon/SurpriseEnchant.java | 10 ++++ .../impl/weapon/WisdomEnchant.java | 9 +-- .../listener/EnchantGenericListener.java | 43 +++++++++++--- .../registry/wrapper/DataGathers.java | 6 +- .../enchantment/util/EnchantUtils.java | 12 ++++ .../hook/impl/ProtocolHook.java | 3 +- NMS/pom.xml | 4 +- .../excellentenchants/nms/EnchantNMS.java | 3 +- V1_19_R3/pom.xml | 4 +- .../nms/v1_19_R3/V1_19_R3.java | 19 ++++++- V1_20_R1/pom.xml | 4 +- .../nms/v1_20_R1/V1_20_R1.java | 19 ++++++- V1_20_R2/pom.xml | 4 +- .../nms/v1_20_R2/V1_20_R2.java | 19 ++++++- V1_20_R3/pom.xml | 6 +- .../nms/v1_20_R3/V1_20_R3.java | 56 ++++++++++++++++++- pom.xml | 2 +- 22 files changed, 220 insertions(+), 66 deletions(-) diff --git a/API/pom.xml b/API/pom.xml index a6e08b6..e0e3de5 100644 --- a/API/pom.xml +++ b/API/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 diff --git a/Core/pom.xml b/Core/pom.xml index e1335b1..2271eac 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -46,12 +46,6 @@ spigot-api 1.20.4-R0.1-SNAPSHOT - - fr.neatmonster - nocheatplus - 3.16.1-SNAPSHOT - provided - io.lumine Mythic-Dist @@ -73,32 +67,32 @@ su.nightexpress.excellentenchants API - 4.0.3 + 4.0.4 su.nightexpress.excellentenchants NMS - 4.0.3 - - - su.nightexpress.excellentenchants - V1_19_R3 - 4.0.3 - - - su.nightexpress.excellentenchants - V1_20_R1 - 4.0.3 - - - su.nightexpress.excellentenchants - V1_20_R2 - 4.0.3 + 4.0.4 su.nightexpress.excellentenchants V1_20_R3 - 4.0.3 + 4.0.4 + + + su.nightexpress.excellentenchants + V1_20_R2 + 4.0.4 + + + su.nightexpress.excellentenchants + V1_20_R1 + 4.0.4 + + + su.nightexpress.excellentenchants + V1_19_R3 + 4.0.4 diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java b/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java index 92175d3..9bc322b 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java @@ -17,6 +17,7 @@ public class Placeholders extends su.nightexpress.nightcore.util.Placeholders { public static final String GENERIC_ITEM = "%item%"; public static final String GENERIC_LEVEL = "%level%"; public static final String GENERIC_AMOUNT = "%amount%"; + public static final String GENERIC_MODIFIER = "%modifier%"; public static final String GENERIC_DESCRIPTION = "%description%"; public static final String GENERIC_ENCHANT = "%enchant%"; public static final String GENERIC_RADIUS = "%radius%"; diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/StoppingForceEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/StoppingForceEnchant.java index d24148b..7107a3f 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/StoppingForceEnchant.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/armor/StoppingForceEnchant.java @@ -30,7 +30,7 @@ public class StoppingForceEnchant extends AbstractEnchantmentData implements Cha public StoppingForceEnchant(@NotNull EnchantsPlugin plugin, @NotNull File file) { super(plugin, file); - this.setDescription(ENCHANTMENT_CHANCE + "% chance to resist knockback in combat by " + GENERIC_AMOUNT + "%."); + this.setDescription(ENCHANTMENT_CHANCE + "% chance to get only " + GENERIC_AMOUNT + "% of knockback in combat."); this.setMaxLevel(3); this.setRarity(Rarity.UNCOMMON); } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/fishing/AutoReelEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/fishing/AutoReelEnchant.java index 570f761..0f956d7 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/fishing/AutoReelEnchant.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/fishing/AutoReelEnchant.java @@ -1,13 +1,17 @@ package su.nightexpress.excellentenchants.enchantment.impl.fishing; +import org.bukkit.Material; import org.bukkit.enchantments.EnchantmentTarget; +import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.EnchantsPlugin; import su.nightexpress.excellentenchants.api.enchantment.Rarity; import su.nightexpress.excellentenchants.api.enchantment.type.FishingEnchant; import su.nightexpress.excellentenchants.enchantment.data.AbstractEnchantmentData; +import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils; import su.nightexpress.nightcore.config.FileConfig; import java.io.File; @@ -38,11 +42,17 @@ public class AutoReelEnchant extends AbstractEnchantmentData implements FishingE public boolean onFishing(@NotNull PlayerFishEvent event, @NotNull ItemStack item, int level) { if (event.getState() != PlayerFishEvent.State.BITE) return false; + Player player = event.getPlayer(); + EquipmentSlot slot = EnchantUtils.getItemHand(player, Material.FISHING_ROD); + if (slot == null) return false; + + int id = slot == EquipmentSlot.HAND ? 0 : 3; + this.plugin.runTask(task -> { if (event.isCancelled()) return; - plugin.getEnchantNMS().sendAttackPacket(event.getPlayer(), 0); - plugin.getEnchantNMS().retrieveHook(event.getHook(), item); + plugin.getEnchantNMS().sendAttackPacket(event.getPlayer(), id); + plugin.getEnchantNMS().retrieveHook(event.getHook(), item, slot); }); return true; } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/SurpriseEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/SurpriseEnchant.java index bf9f531..f6e458f 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/SurpriseEnchant.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/SurpriseEnchant.java @@ -24,6 +24,7 @@ import su.nightexpress.excellentenchants.enchantment.data.ChanceSettingsImpl; import su.nightexpress.excellentenchants.enchantment.data.PotionSettingsImpl; import su.nightexpress.nightcore.config.FileConfig; import su.nightexpress.nightcore.util.BukkitThing; +import su.nightexpress.nightcore.util.Version; import su.nightexpress.nightcore.util.random.Rnd; import su.nightexpress.nightcore.util.wrapper.UniParticle; @@ -45,6 +46,15 @@ public class SurpriseEnchant extends AbstractEnchantmentData implements ChanceDa this.setRarity(Rarity.RARE); } + @Override + public boolean checkServerRequirements() { + if (Version.isBehind(Version.V1_20_R2)) { + this.error("Enchantment is available for 1.20.2+ only."); + return false; + } + return true; + } + @Override protected void loadAdditional(@NotNull FileConfig config) { this.chanceSettings = ChanceSettingsImpl.create(config, Modifier.add(3, 2, 1)); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/WisdomEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/WisdomEnchant.java index 7b704d6..4ca41ba 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/WisdomEnchant.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/weapon/WisdomEnchant.java @@ -27,7 +27,7 @@ public class WisdomEnchant extends AbstractEnchantmentData implements DeathEncha public WisdomEnchant(@NotNull EnchantsPlugin plugin, File file) { super(plugin, file); - this.setDescription("Increases XP dropped from mobs by " + GENERIC_AMOUNT + "%."); + this.setDescription("Mobs drops x" + GENERIC_MODIFIER + " more XP."); this.setMaxLevel(5); this.setRarity(Rarity.UNCOMMON); } @@ -39,6 +39,7 @@ public class WisdomEnchant extends AbstractEnchantmentData implements DeathEncha "Exp modifier value. The original exp amount will be multiplied on this value."); this.addPlaceholder(GENERIC_AMOUNT, level -> NumberUtil.format(this.getXPModifier(level) * 100D - 100D)); + this.addPlaceholder(GENERIC_MODIFIER, level -> NumberUtil.format(this.getXPModifier(level))); } public final double getXPModifier(int level) { @@ -53,10 +54,10 @@ public class WisdomEnchant extends AbstractEnchantmentData implements DeathEncha @Override public boolean onKill(@NotNull EntityDeathEvent event, @NotNull LivingEntity entity, @NotNull Player killer, ItemStack weapon, int level) { - double expModifier = this.getXPModifier(level); - double expFinal = Math.ceil((double) event.getDroppedExp() * expModifier); + double xpModifier = this.getXPModifier(level); + double xpFinal = Math.ceil((double) event.getDroppedExp() * xpModifier); - event.setDroppedExp((int) expFinal); + event.setDroppedExp((int) xpFinal); return true; } 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 75e8931..c0d691d 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 @@ -1,23 +1,23 @@ package su.nightexpress.excellentenchants.enchantment.listener; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; +import org.bukkit.block.Chest; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.enchantment.EnchantItemEvent; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntityPickupItemEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.*; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.world.LootGenerateEvent; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.EnchantsPlugin; import su.nightexpress.excellentenchants.api.enchantment.EnchantmentData; +import su.nightexpress.excellentenchants.config.Config; import su.nightexpress.excellentenchants.enchantment.EnchantManager; import su.nightexpress.excellentenchants.enchantment.registry.EnchantRegistry; import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils; @@ -107,4 +107,33 @@ public class EnchantGenericListener extends AbstractListener { inventory.setItem(0, result); }); } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEnchantDisplayUpdateVillagerAcquire(VillagerAcquireTradeEvent event) { + if (Config.isCustomDistribution()) return; + + MerchantRecipe origin = event.getRecipe(); + ItemStack result = origin.getResult(); + if (!EnchantUtils.isEnchantable(result)) return; + + EnchantUtils.updateDisplay(result); + + event.setRecipe(origin); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEnchantDisplayUpdateLoot(LootGenerateEvent event) { + if (Config.isCustomDistribution()) return; + + Entity entity = event.getEntity(); + InventoryHolder holder = event.getInventoryHolder(); + + if (entity instanceof Minecart || holder instanceof Chest) { + event.getLoot().forEach(item -> { + if (item != null && EnchantUtils.isEnchantable(item)) { + EnchantUtils.updateDisplay(item); + } + }); + } + } } diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/registry/wrapper/DataGathers.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/registry/wrapper/DataGathers.java index b73b27f..7458621 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/registry/wrapper/DataGathers.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/registry/wrapper/DataGathers.java @@ -1,5 +1,6 @@ package su.nightexpress.excellentenchants.enchantment.registry.wrapper; +import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -18,7 +19,6 @@ import su.nightexpress.excellentenchants.api.enchantment.data.ArrowData; import su.nightexpress.excellentenchants.api.enchantment.type.*; import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils; import su.nightexpress.excellentenchants.enchantment.util.EnchantedProjectile; -import su.nightexpress.nightcore.util.Version; import java.util.Collections; import java.util.HashMap; @@ -352,9 +352,7 @@ public class DataGathers { @NotNull @Override public EquipmentSlot[] getEnchantSlots(@NotNull PlayerFishEvent event) { - if (Version.isBehind(Version.V1_19_R3)) return new EquipmentSlot[] {EquipmentSlot.HAND}; - - return event.getHand() == null ? new EquipmentSlot[] {EquipmentSlot.HAND} : new EquipmentSlot[]{event.getHand()}; + return event.getHand() == null ? new EquipmentSlot[] {EnchantUtils.getItemHand(event.getPlayer(), Material.FISHING_ROD)} : new EquipmentSlot[]{event.getHand()}; } @Override diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/util/EnchantUtils.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/util/EnchantUtils.java index 593aaa4..d2b98ee 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/util/EnchantUtils.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/util/EnchantUtils.java @@ -207,6 +207,18 @@ public class EnchantUtils { return null; } + @Nullable + public static EquipmentSlot getItemHand(@NotNull Player player, @NotNull Material material) { + for (EquipmentSlot slot : new EquipmentSlot[]{EquipmentSlot.HAND, EquipmentSlot.OFF_HAND}) { + ItemStack itemStack = player.getInventory().getItem(slot); + if (itemStack != null && itemStack.getType() == material) { + return slot; + } + } + + return null; + } + @NotNull public static Map getEnchantments(@NotNull ItemStack item) { ItemMeta meta = item.getItemMeta(); diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java b/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java index 35368ed..c97db81 100644 --- a/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java +++ b/Core/src/main/java/su/nightexpress/excellentenchants/hook/impl/ProtocolHook.java @@ -16,6 +16,7 @@ import org.jetbrains.annotations.Nullable; import su.nightexpress.excellentenchants.EnchantsPlugin; import su.nightexpress.excellentenchants.api.enchantment.EnchantmentData; import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils; +import su.nightexpress.nightcore.util.text.NightMessage; import java.util.*; import java.util.stream.Collectors; @@ -105,7 +106,7 @@ public class ProtocolHook { } enchants.forEach((enchant, level) -> { int charges = enchant.getCharges(meta); - lore.add(0, enchant.getNameFormatted(level, charges)); + lore.add(0, NightMessage.asLegacy(enchant.getNameFormatted(level, charges))); }); meta.setLore(lore); diff --git a/NMS/pom.xml b/NMS/pom.xml index d82fcc8..41510d6 100644 --- a/NMS/pom.xml +++ b/NMS/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -33,7 +33,7 @@ su.nightexpress.excellentenchants API - 4.0.3 + 4.0.4 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 ab008dd..11b53bc 100644 --- a/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java +++ b/NMS/src/main/java/su/nightexpress/excellentenchants/nms/EnchantNMS.java @@ -8,6 +8,7 @@ import org.bukkit.entity.FishHook; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -26,7 +27,7 @@ public interface EnchantNMS { void sendAttackPacket(@NotNull Player player, int id); - void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item); + void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item, @NotNull EquipmentSlot slot); @NotNull Map> getEnchantLists(@NotNull Inventory inventory, @NotNull ItemStack bukkitItem); diff --git a/V1_19_R3/pom.xml b/V1_19_R3/pom.xml index c981629..0de5f65 100644 --- a/V1_19_R3/pom.xml +++ b/V1_19_R3/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -27,7 +27,7 @@ su.nightexpress.excellentenchants NMS - 4.0.3 + 4.0.4 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 index c9204c3..8fb4d47 100644 --- 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 @@ -8,6 +8,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.item.ItemEntity; @@ -39,6 +40,7 @@ import org.bukkit.entity.FishHook; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -127,10 +129,23 @@ public class V1_19_R3 implements EnchantNMS { } @Override - public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item) { + public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item, @NotNull EquipmentSlot slot) { CraftFishHook craftFishHook = (CraftFishHook) hook; FishingHook handle = craftFishHook.getHandle(); - handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.player.Player owner = handle.getPlayerOwner(); + if (owner == null) return; + + int result = handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.EquipmentSlot hand = slot == EquipmentSlot.HAND ? net.minecraft.world.entity.EquipmentSlot.MAINHAND : net.minecraft.world.entity.EquipmentSlot.OFFHAND; + + net.minecraft.world.item.ItemStack itemStack = owner.getItemBySlot(hand); + if (itemStack == null) return; + + itemStack.hurtAndBreak(result, handle.getPlayerOwner(), player -> { + player.broadcastBreakEvent(hand); + }); } @NotNull diff --git a/V1_20_R1/pom.xml b/V1_20_R1/pom.xml index 4ab11ca..ca1ebd5 100644 --- a/V1_20_R1/pom.xml +++ b/V1_20_R1/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -27,7 +27,7 @@ su.nightexpress.excellentenchants NMS - 4.0.3 + 4.0.4 diff --git a/V1_20_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R1/V1_20_R1.java b/V1_20_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R1/V1_20_R1.java index 4aef06c..309dff9 100644 --- a/V1_20_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R1/V1_20_R1.java +++ b/V1_20_R1/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R1/V1_20_R1.java @@ -9,6 +9,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.item.ItemEntity; @@ -40,6 +41,7 @@ import org.bukkit.entity.FishHook; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -128,10 +130,23 @@ public class V1_20_R1 implements EnchantNMS { } @Override - public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item) { + public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item, @NotNull EquipmentSlot slot) { CraftFishHook craftFishHook = (CraftFishHook) hook; FishingHook handle = craftFishHook.getHandle(); - handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.player.Player owner = handle.getPlayerOwner(); + if (owner == null) return; + + int result = handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.EquipmentSlot hand = slot == EquipmentSlot.HAND ? net.minecraft.world.entity.EquipmentSlot.MAINHAND : net.minecraft.world.entity.EquipmentSlot.OFFHAND; + + net.minecraft.world.item.ItemStack itemStack = owner.getItemBySlot(hand); + if (itemStack == null) return; + + itemStack.hurtAndBreak(result, handle.getPlayerOwner(), player -> { + player.broadcastBreakEvent(hand); + }); } @NotNull diff --git a/V1_20_R2/pom.xml b/V1_20_R2/pom.xml index 37ad6ae..cf06e6b 100644 --- a/V1_20_R2/pom.xml +++ b/V1_20_R2/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -27,7 +27,7 @@ su.nightexpress.excellentenchants NMS - 4.0.3 + 4.0.4 diff --git a/V1_20_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R2/V1_20_R2.java b/V1_20_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R2/V1_20_R2.java index ed6da59..91599f1 100644 --- a/V1_20_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R2/V1_20_R2.java +++ b/V1_20_R2/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R2/V1_20_R2.java @@ -9,6 +9,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.item.ItemEntity; @@ -40,6 +41,7 @@ import org.bukkit.entity.FishHook; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -127,10 +129,23 @@ public class V1_20_R2 implements EnchantNMS { } @Override - public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item) { + public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item, @NotNull EquipmentSlot slot) { CraftFishHook craftFishHook = (CraftFishHook) hook; FishingHook handle = craftFishHook.getHandle(); - handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.player.Player owner = handle.getPlayerOwner(); + if (owner == null) return; + + int result = handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.EquipmentSlot hand = slot == EquipmentSlot.HAND ? net.minecraft.world.entity.EquipmentSlot.MAINHAND : net.minecraft.world.entity.EquipmentSlot.OFFHAND; + + net.minecraft.world.item.ItemStack itemStack = owner.getItemBySlot(hand); + if (itemStack == null) return; + + itemStack.hurtAndBreak(result, handle.getPlayerOwner(), player -> { + player.broadcastBreakEvent(hand); + }); } @NotNull diff --git a/V1_20_R3/pom.xml b/V1_20_R3/pom.xml index 7c06d03..9ab9ec4 100644 --- a/V1_20_R3/pom.xml +++ b/V1_20_R3/pom.xml @@ -5,7 +5,7 @@ ExcellentEnchants su.nightexpress.excellentenchants - 4.0.3 + 4.0.4 4.0.0 @@ -27,12 +27,12 @@ su.nightexpress.excellentenchants API - 4.0.3 + 4.0.4 su.nightexpress.excellentenchants NMS - 4.0.3 + 4.0.4 diff --git a/V1_20_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R3/V1_20_R3.java b/V1_20_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R3/V1_20_R3.java index 62b5952..64a949a 100644 --- a/V1_20_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R3/V1_20_R3.java +++ b/V1_20_R3/src/main/java/su/nightexpress/excellentenchants/nms/v1_20_R3/V1_20_R3.java @@ -40,6 +40,7 @@ import org.bukkit.entity.FishHook; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -120,13 +121,64 @@ public class V1_20_R3 implements EnchantNMS { ServerPlayer entity = craftPlayer.getHandle(); ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id); craftPlayer.getHandle().connection.send(packet); + + player.spigot().sendMessage(); + } + + /*public ItemStack setItemLore(@NotNull ItemStack item, @NotNull List lore) { + lore.add("enchantment.level.5"); + + CraftItemStack craftItem = ensureCraftItemStack(item); + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(craftItem); + + CompoundTag tag = nmsItem.getTag() == null ? new CompoundTag() : nmsItem.getTag(); + if (!tag.contains(net.minecraft.world.item.ItemStack.TAG_DISPLAY)) { + tag.put(net.minecraft.world.item.ItemStack.TAG_DISPLAY, new CompoundTag()); + } + + CompoundTag displayTag = tag.getCompound(net.minecraft.world.item.ItemStack.TAG_DISPLAY); + ListTag loreTag = new ListTag(); + for (int index = 0; index < lore.size(); index++) { + String text = lore.get(index); + System.out.println("text = " + text); + String json = ComponentSerializer.toString(NightMessage.create(text).parseIfAbsent()); + System.out.println("json = " + json); + + Component component = CraftChatMessage.fromJSON(json); + System.out.println("component = " + component); + String fromComponent = CraftChatMessage.toJSON(component); + System.out.println("fromComponent = " + fromComponent); + + + loreTag.add(index, StringTag.valueOf(fromComponent)); + } + + displayTag.put(net.minecraft.world.item.ItemStack.TAG_LORE, loreTag); + return CraftItemStack.asBukkitCopy(nmsItem); + }*/ + + private CraftItemStack ensureCraftItemStack(ItemStack item) { + return item instanceof CraftItemStack craftItem ? craftItem : CraftItemStack.asCraftCopy(item); } @Override - public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item) { + public void retrieveHook(@NotNull FishHook hook, @NotNull ItemStack item, @NotNull EquipmentSlot slot) { CraftFishHook craftFishHook = (CraftFishHook) hook; FishingHook handle = craftFishHook.getHandle(); - handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.player.Player owner = handle.getPlayerOwner(); + if (owner == null) return; + + int result = handle.retrieve(CraftItemStack.asNMSCopy(item)); + + net.minecraft.world.entity.EquipmentSlot hand = slot == EquipmentSlot.HAND ? net.minecraft.world.entity.EquipmentSlot.MAINHAND : net.minecraft.world.entity.EquipmentSlot.OFFHAND; + + net.minecraft.world.item.ItemStack itemStack = owner.getItemBySlot(hand); + if (itemStack == null) return; + + itemStack.hurtAndBreak(result, handle.getPlayerOwner(), player -> { + player.broadcastBreakEvent(hand); + }); } /*@Override diff --git a/pom.xml b/pom.xml index be26e5a..a01a66d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ su.nightexpress.excellentenchants ExcellentEnchants pom - 4.0.3 + 4.0.4 Core NMS