diff --git a/Core/pom.xml b/Core/pom.xml
index 59c391b..994ce0c 100644
--- a/Core/pom.xml
+++ b/Core/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.5.0
+ 3.5.1
4.0.0
@@ -21,40 +21,25 @@
md_5-releases
https://repo.md-5.net/content/repositories/releases/
-
- sk89q-repo
- https://maven.enginehub.org/repo/
-
- false
-
-
dmulloy2-repo
https://repo.dmulloy2.net/repository/public/
-
- false
-
+
placeholderapi
https://repo.extendedclip.com/content/repositories/placeholderapi/
-
- false
-
+
lumine-repo
https://mvn.lumine.io/repository/maven-public/
-
- false
-
+
lumine-snapshot
http://mvn.lumine.io/repository/maven-snapshots/
-
- false
-
+
@@ -79,7 +64,8 @@
com.comphenix.protocol
ProtocolLib
- 5.0.0-SNAPSHOT
+ 5.0.0
+ provided
me.clip
@@ -95,27 +81,27 @@
su.nightexpress.excellentenchants
NMS
- 3.5.0
+ 3.5.1
su.nightexpress.excellentenchants
V1_17_R1
- 3.5.0
+ 3.5.1
su.nightexpress.excellentenchants
V1_18_R2
- 3.5.0
+ 3.5.1
su.nightexpress.excellentenchants
V1_19_R3
- 3.5.0
+ 3.5.1
su.nightexpress.excellentenchants
V1_20_R1
- 3.5.0
+ 3.5.1
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java b/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java
index 2c6a306..12bc277 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/Placeholders.java
@@ -36,8 +36,13 @@ public class Placeholders extends su.nexmedia.engine.utils.Placeholders {
public static final String ENCHANTMENT_CHARGES_RECHARGE_AMOUNT = "%enchantment_charges_recharge_amount%";
public static final String ENCHANTMENT_CHARGES_FUEL_ITEM = "%enchantment_charges_fuel_item%";
- public static final String TIER_ID = "%tier_id%";
- public static final String TIER_NAME = "%tier_name%";
+ public static final String TIER_ID = "%tier_id%";
+ public static final String TIER_NAME = "%tier_name%";
+ public static final String TIER_OBTAIN_CHANCE_ENCHANTING = "%tier_obtain_chance_enchanting%";
+ public static final String TIER_OBTAIN_CHANCE_VILLAGER = "%tier_obtain_chance_villager%";
+ public static final String TIER_OBTAIN_CHANCE_LOOT_GENERATION = "%tier_obtain_chance_loot_generation%";
+ public static final String TIER_OBTAIN_CHANCE_FISHING = "%tier_obtain_chance_fishing%";
+ public static final String TIER_OBTAIN_CHANCE_MOB_SPAWNING = "%tier_obtain_chance_mob_spawning%";
}
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 6afe3e3..ba28383 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/command/BookCommand.java
@@ -9,7 +9,6 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import su.nexmedia.engine.api.command.AbstractCommand;
import su.nexmedia.engine.api.command.CommandResult;
-import su.nexmedia.engine.lang.LangManager;
import su.nexmedia.engine.utils.CollectionsUtil;
import su.nexmedia.engine.utils.PlayerUtil;
import su.nexmedia.engine.utils.random.Rnd;
@@ -75,7 +74,7 @@ public class BookCommand extends AbstractCommand {
PlayerUtil.addItem(player, item);
plugin.getMessage(Lang.COMMAND_BOOK_DONE)
- .replace(Placeholders.GENERIC_ENCHANT, LangManager.getEnchantment(enchantment))
+ .replace(Placeholders.GENERIC_ENCHANT, EnchantUtils.getLocalized(enchantment))
.replace(Placeholders.forPlayer(player))
.send(sender);
}
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/ExcellentEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/ExcellentEnchant.java
index 91d14ba..49020fc 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/ExcellentEnchant.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/ExcellentEnchant.java
@@ -91,6 +91,7 @@ public abstract class ExcellentEnchant extends Enchantment implements IEnchantme
map.add(Placeholders.ENCHANTMENT_POTION_DURATION, () -> NumberUtil.format(potioned.getEffectDuration(level) / 20D));
map.add(Placeholders.ENCHANTMENT_POTION_TYPE, () -> LangManager.getPotionType(potioned.getEffectType()));
}
+ map.add(this.getTier().getPlaceholders());
this.placeholdersMap.put(level, map);
}
diff --git a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/FlareEnchant.java b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/FlareEnchant.java
index 2ca511c..0394371 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/FlareEnchant.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/bow/FlareEnchant.java
@@ -10,10 +10,11 @@ import org.bukkit.entity.Arrow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
-import org.bukkit.event.block.BlockCanBuildEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
+import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import su.nexmedia.engine.api.particle.SimpleParticle;
@@ -89,9 +90,9 @@ public class FlareEnchant extends ExcellentEnchant implements Chanced, Arrowed,
if (!relative.getType().isAir()) return false;
if (projectile.getShooter() instanceof Player player) {
- BlockCanBuildEvent event = new BlockCanBuildEvent(relative, player, Material.TORCH.createBlockData(), true);
+ BlockPlaceEvent event = new BlockPlaceEvent(relative, relative.getState(), block, new ItemStack(Material.TORCH), player,true, EquipmentSlot.HAND);
plugin.getPluginManager().callEvent(event);
- if (!event.isBuildable()) return false;
+ if (event.isCancelled() || !event.canBuild()) return false;
}
if (face == BlockFace.UP) {
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 77aeea2..8e61b11 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
@@ -1,7 +1,6 @@
package su.nightexpress.excellentenchants.enchantment.menu;
import org.bukkit.NamespacedKey;
-import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
@@ -13,7 +12,6 @@ import su.nexmedia.engine.api.menu.click.ItemClick;
import su.nexmedia.engine.api.menu.impl.ConfigMenu;
import su.nexmedia.engine.api.menu.impl.MenuOptions;
import su.nexmedia.engine.api.menu.impl.MenuViewer;
-import su.nexmedia.engine.lang.LangManager;
import su.nexmedia.engine.utils.Colorizer;
import su.nexmedia.engine.utils.ItemUtil;
import su.nexmedia.engine.utils.PDCUtil;
@@ -22,6 +20,7 @@ import su.nightexpress.excellentenchants.ExcellentEnchants;
import su.nightexpress.excellentenchants.Placeholders;
import su.nightexpress.excellentenchants.enchantment.EnchantRegistry;
import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
+import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils;
import java.util.*;
import java.util.function.Predicate;
@@ -84,7 +83,7 @@ public class EnchantmentsListMenu extends ConfigMenu implemen
public List getObjects(@NotNull Player player) {
return new ArrayList<>(EnchantRegistry.getRegistered().stream()
.filter(Predicate.not(enchant -> enchant.getDefaults().isHiddenFromList()))
- .sorted(Comparator.comparing(ExcellentEnchant::getName)).toList());
+ .sorted(Comparator.comparing(e -> Colorizer.strip(e.getDisplayName()))).toList());
}
@Override
@@ -125,8 +124,7 @@ public class EnchantmentsListMenu extends ConfigMenu implemen
if (lore == null) lore = new ArrayList<>();
List conflicts = enchant.getConflicts().isEmpty() ? Collections.emptyList() : new ArrayList<>(this.enchantLoreConflicts);
- List conflictNames = enchant.getConflicts().stream().map(key -> Enchantment.getByKey(NamespacedKey.minecraft(key)))
- .filter(Objects::nonNull).map(LangManager::getEnchantment).toList();
+ List conflictNames = enchant.getConflicts().stream().map(EnchantUtils::getLocalized).toList();
conflicts = StringUtil.replace(conflicts, Placeholders.ENCHANTMENT_NAME, true, conflictNames);
List charges = enchant.isChargesEnabled() ? new ArrayList<>(this.enchantLoreCharges) : Collections.emptyList();
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 9f679e5..b02ef07 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
@@ -13,6 +13,7 @@ import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import su.nexmedia.engine.lang.LangManager;
import su.nexmedia.engine.utils.CollectionsUtil;
import su.nexmedia.engine.utils.EntityUtil;
import su.nexmedia.engine.utils.ItemUtil;
@@ -44,6 +45,20 @@ public class EnchantUtils {
return NamespacedKey.minecraft(id.toLowerCase());
}
+ @NotNull
+ public static String getLocalized(@NotNull String keyRaw) {
+ Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(keyRaw));
+ return enchantment == null ? "null" : getLocalized(enchantment);
+ }
+
+ @NotNull
+ public static String getLocalized(@NotNull Enchantment enchantment) {
+ if (enchantment instanceof ExcellentEnchant excellentEnchant) {
+ return excellentEnchant.getDisplayName();
+ }
+ return LangManager.getEnchantment(enchantment);
+ }
+
public static boolean isEnchantable(@NotNull ItemStack item) {
if (item.getType().isAir()) return false;
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 ca21aa4..49a9cdd 100644
--- a/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java
+++ b/Core/src/main/java/su/nightexpress/excellentenchants/tier/Tier.java
@@ -5,6 +5,7 @@ import org.jetbrains.annotations.NotNull;
import su.nexmedia.engine.api.placeholder.Placeholder;
import su.nexmedia.engine.api.placeholder.PlaceholderMap;
import su.nexmedia.engine.utils.Colorizer;
+import su.nexmedia.engine.utils.NumberUtil;
import su.nightexpress.excellentenchants.Placeholders;
import su.nightexpress.excellentenchants.enchantment.type.ObtainType;
@@ -29,6 +30,11 @@ public class Tier implements Placeholder {
this.placeholderMap = new PlaceholderMap()
.add(Placeholders.TIER_ID, this::getId)
.add(Placeholders.TIER_NAME, this::getName)
+ .add(Placeholders.TIER_OBTAIN_CHANCE_ENCHANTING, () -> NumberUtil.format(this.getChance(ObtainType.ENCHANTING)))
+ .add(Placeholders.TIER_OBTAIN_CHANCE_VILLAGER, () -> NumberUtil.format(this.getChance(ObtainType.VILLAGER)))
+ .add(Placeholders.TIER_OBTAIN_CHANCE_LOOT_GENERATION, () -> NumberUtil.format(this.getChance(ObtainType.LOOT_GENERATION)))
+ .add(Placeholders.TIER_OBTAIN_CHANCE_FISHING, () -> NumberUtil.format(this.getChance(ObtainType.FISHING)))
+ .add(Placeholders.TIER_OBTAIN_CHANCE_MOB_SPAWNING, () -> NumberUtil.format(this.getChance(ObtainType.MOB_SPAWNING)))
;
}
diff --git a/NMS/pom.xml b/NMS/pom.xml
index fdadd60..8ae3187 100644
--- a/NMS/pom.xml
+++ b/NMS/pom.xml
@@ -5,7 +5,7 @@
ExcellentEnchants
su.nightexpress.excellentenchants
- 3.5.0
+ 3.5.1
4.0.0
@@ -27,7 +27,7 @@
org.spigotmc
spigot-api
- 1.18.1-R0.1-SNAPSHOT
+ 1.20.1-R0.1-SNAPSHOT