diff --git a/Changelog.txt b/Changelog.txt
index ed9b31f68..93bd05e84 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,3 +1,6 @@
+Version 2.2.014
+ Fixed a bug where Luck Of The Sea was being applied for Super Breaker (and other abilities)
+
Version 2.2.013
Added Breeze to experience.yml
Added Bogged to experience.yml
diff --git a/pom.xml b/pom.xml
index 463e67573..85f2e8065 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.gmail.nossr50.mcMMO
mcMMO
- 2.2.013
+ 2.2.014-SNAPSHOT
mcMMO
https://github.com/mcMMO-Dev/mcMMO
diff --git a/src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java b/src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java
index f4be9209c..0b948dd96 100644
--- a/src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java
+++ b/src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java
@@ -1,8 +1,13 @@
package com.gmail.nossr50.util;
import com.gmail.nossr50.mcMMO;
+import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.enchantments.Enchantment;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Locale;
public class EnchantmentMapper {
private final mcMMO pluginRef;
@@ -20,12 +25,18 @@ public class EnchantmentMapper {
this.featherFalling = initFeatherFalling();
this.luckOfTheSea = initLuckOfTheSea();
}
+
+ private static @Nullable Enchantment mockSpigotMatch(@NotNull String input) {
+ // Replicates match() behaviour for older versions lacking this API
+ final String filtered = input.toLowerCase(Locale.ROOT).replaceAll("\\s+", "_");
+ final NamespacedKey namespacedKey = NamespacedKey.fromString(filtered);
+ return (namespacedKey != null) ? Registry.ENCHANTMENT.get(namespacedKey) : null;
+ }
private Enchantment initLuckOfTheSea() {
- // TODO: Make use of match if present
-// if (Registry.ENCHANTMENT.match("luck_of_the_sea") != null) {
-// return Registry.ENCHANTMENT.match("luck_of_the_sea");
-// }
+ if (mockSpigotMatch("luck_of_the_sea") != null) {
+ return mockSpigotMatch("luck_of_the_sea");
+ }
// Look for the enchantment by name
for (Enchantment enchantment : Registry.ENCHANTMENT) {
@@ -43,9 +54,9 @@ public class EnchantmentMapper {
}
private Enchantment initFeatherFalling() {
-// if (Registry.ENCHANTMENT.match("feather_falling") != null) {
-// return Registry.ENCHANTMENT.match("feather_falling");
-// }
+ if (mockSpigotMatch("feather_falling") != null) {
+ return mockSpigotMatch("feather_falling");
+ }
// Look for the enchantment by name
for (Enchantment enchantment : Registry.ENCHANTMENT) {
@@ -63,9 +74,9 @@ public class EnchantmentMapper {
}
private Enchantment initInfinity() {
-// if (Registry.ENCHANTMENT.match("infinity") != null) {
-// return Registry.ENCHANTMENT.match("infinity");
-// }
+ if (mockSpigotMatch("infinity") != null) {
+ return mockSpigotMatch("infinity");
+ }
// Look for the enchantment by name
for (Enchantment enchantment : Registry.ENCHANTMENT) {
@@ -83,9 +94,9 @@ public class EnchantmentMapper {
}
private Enchantment initEfficiency() {
-// if (Registry.ENCHANTMENT.match("efficiency") != null) {
-// return Registry.ENCHANTMENT.match("efficiency");
-// }
+ if (mockSpigotMatch("efficiency") != null) {
+ return mockSpigotMatch("efficiency");
+ }
// Look for the enchantment by name
for (Enchantment enchantment : Registry.ENCHANTMENT) {
@@ -103,9 +114,9 @@ public class EnchantmentMapper {
}
private Enchantment initUnbreaking() {
-// if (Registry.ENCHANTMENT.match("unbreaking") != null) {
-// return Registry.ENCHANTMENT.match("unbreaking");
-// }
+ if (mockSpigotMatch("unbreaking") != null) {
+ return mockSpigotMatch("unbreaking");
+ }
// Look for the enchantment by name
for (Enchantment enchantment : Registry.ENCHANTMENT) {