Ver código fonte

fix luck of the sea being applied for super break and other abilities Fixes #5026

nossr50 11 meses atrás
pai
commit
e32bde3c32
3 arquivos alterados com 31 adições e 17 exclusões
  1. 3 0
      Changelog.txt
  2. 1 1
      pom.xml
  3. 27 16
      src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java

+ 3 - 0
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

+ 1 - 1
pom.xml

@@ -2,7 +2,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.gmail.nossr50.mcMMO</groupId>
     <artifactId>mcMMO</artifactId>
-    <version>2.2.013</version>
+    <version>2.2.014-SNAPSHOT</version>
     <name>mcMMO</name>
     <url>https://github.com/mcMMO-Dev/mcMMO</url>
     <scm>

+ 27 - 16
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) {