summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/Material.java19
-rw-r--r--src/test/java/org/bukkit/MaterialTest.java20
2 files changed, 32 insertions, 7 deletions
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index 90a01e03..83f8eca1 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -2781,9 +2781,9 @@ public enum Material implements Keyed {
/**
* Attempts to match the Material with the given name.
* <p>
- * This is a match lookup; names will be converted to uppercase, then
- * stripped of special characters in an attempt to format it like the
- * enum.
+ * This is a match lookup; names will be stripped of the "minecraft:"
+ * namespace, converted to uppercase, then stripped of special characters in
+ * an attempt to format it like the enum.
*
* @param name Name of the material to get
* @return Material if found, or null
@@ -2795,9 +2795,9 @@ public enum Material implements Keyed {
/**
* Attempts to match the Material with the given name.
* <p>
- * This is a match lookup; names will be converted to uppercase, then
- * stripped of special characters in an attempt to format it like the
- * enum.
+ * This is a match lookup; names will be stripped of the "minecraft:"
+ * namespace, converted to uppercase, then stripped of special characters in
+ * an attempt to format it like the enum.
*
* @param name Name of the material to get
* @param legacyName whether this is a legacy name
@@ -2806,7 +2806,12 @@ public enum Material implements Keyed {
public static Material matchMaterial(final String name, boolean legacyName) {
Validate.notNull(name, "Name cannot be null");
- String filtered = name.toUpperCase(java.util.Locale.ENGLISH);
+ String filtered = name;
+ if (filtered.startsWith(NamespacedKey.MINECRAFT + ":")) {
+ filtered = filtered.substring((NamespacedKey.MINECRAFT + ":").length());
+ }
+
+ filtered = filtered.toUpperCase(java.util.Locale.ENGLISH);
filtered = filtered.replaceAll("\\s+", "_").replaceAll("\\W", "");
return getMaterial(filtered, legacyName);
diff --git a/src/test/java/org/bukkit/MaterialTest.java b/src/test/java/org/bukkit/MaterialTest.java
index 692bb920..66f4603a 100644
--- a/src/test/java/org/bukkit/MaterialTest.java
+++ b/src/test/java/org/bukkit/MaterialTest.java
@@ -44,6 +44,26 @@ public class MaterialTest {
}
@Test
+ public void matchMaterialByKey() {
+ for (Material material : Material.values()) {
+ if (material.isLegacy()) {
+ continue;
+ }
+ assertThat(Material.matchMaterial(material.getKey().toString()), is(material));
+ }
+ }
+
+ @Test
+ public void matchMaterialByWrongNamespace() {
+ for (Material material : Material.values()) {
+ if (material.isLegacy()) {
+ continue;
+ }
+ assertNull(Material.matchMaterial("bogus:" + material.getKey().getKey()));
+ }
+ }
+
+ @Test
public void matchMaterialByLowerCaseAndSpaces() {
for (Material material : Material.values()) {
String name = material.toString().replaceAll("_", " ").toLowerCase(java.util.Locale.ENGLISH);