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